Wrong ST code generation
Issue #31
new
Beremiz generates wrong ST code for ladder diagram with parallel outputs that rely on the inputs. Example:
out mem out
-----[ / ]-----[ / ]------------+------( S )------ |
---|
mem |
------( S )------ |
For this case, the generated ST code is:
PROGRAM My_Program VAR Mem AT %QX99.0 : BOOL; Out AT %QX0.0 : BOOL; END_VAR
IF NOT(Mem) AND NOT(Out) THEN Out := TRUE; (set) END_IF; IF NOT(Mem) AND NOT(Out) THEN Mem := TRUE; (set) END_IF; END_PROGRAM
This generates a wrong behavior, since the second IF statement will not be triggered. The correct ST code would be to have both coils set on the same IF statement
Comments (1)
-
reporter - Log in to comment
More information here: https://openplc.discussion.community/post/coils-are-not-being-activated-9290623?trail=15#9
I don't know much about PLCOpen Editor internal compiler, and I think that if I try to mess with it I have bigger chances of braking it more than fixing the problem. So, my idea is to fix this with an extra parser. After the code is generated, the parser will be called and will then scan the entire code looking for duplicate IF statements. Then it will concatenate all the statements inside each duplicate IF inside a single one, fixing the problem. I know it is not the most elegant solution, but it is what I can do now.