TwinCat ST编程报错求助:TON/TOF相关语法错误排查
Hey there, let’s work through these two TwinCAT ST programming issues—they’re totally fixable once you spot the root causes!
Error 1: (TRUE AND TON_01.Q) is not a valid assignment target
This happens because in Structured Text, the left side of an assignment (:=) must be a writable variable (like an output, memory bit, or data block variable). Expressions like TRUE AND TON_01.Q are just calculated boolean values—they’re read-only, so you can’t assign something to them.
What you might have written (wrong):
// Trying to assign to an expression—this won't work (TRUE AND TON_01.Q) := MyOutputVar;
The fix:
If you want to set a variable based on that expression, flip it around (assign the expression’s result to your writable variable):
// Correct: Assign the expression result to a valid variable MyOutputVar := TRUE AND TON_01.Q;
Or if you need to conditionally set a variable, use an IF block instead:
IF (TRUE AND TON_01.Q) THEN MyOutputVar := TRUE; END_IF;
Error 2: Q is not an input of TOF
TOF (Time-Delayed Off) function blocks have strict input/output pin definitions. Q is an output pin (it tells you when the timer is active), not an input. The input you use to trigger the timer is IN.
What you might have written (wrong):
// Trying to use Q as an input—this misuses the FB's pins TOF_01(Q := MyTriggerSignal);
The fix:
Use the correct IN input pin for your trigger, and route the Q output to your variable if needed:
// Correct TOF usage: map trigger to IN, output to your variable TOF_01( IN := MyTriggerSignal, PT := T#3S, // Set your desired delay time here Q := MyTOFOutputVar );
Just double-check that you’re referencing the right pins for TON/TOF blocks—TwinCAT’s built-in FB documentation (accessible via the IDE) has clear diagrams if you need a quick refresh!
内容的提问来源于stack exchange,提问作者dieterkohlen

