作者 | 主题 |
---|---|
sangshunyang 侠圣 经验值:4092 发帖数:565 精华帖:4 |
楼主 2020-09-15 12:16:26
主题:S7-1200 SCL 沿指令陷阱 近期做个项目,程序执行结果和预想的不同,主要是沿指令不按预想的去执行。因此单独把沿指令单独拿出来做个测试,项目用的是这样: IF "Tag_2" THEN "R_TRIG_DB"(CLK := "Tag_2", Q => "Tag_3"); IF "Tag_3" THEN "Tag_4":=TRUE ; END_IF; END_IF; 后改为 : "R_TRIG_DB"(CLK := "Tag_2", Q => "Tag_3"); IF "Tag_2" THEN IF "Tag_3" THEN "Tag_4":=TRUE ; END_IF; END_IF; 程序的本意是:"Tag_2" 接通的上升沿先做初始化处理,而后再处理其它逻辑,其它逻辑需要多个处理周期。实际上只有“Tag_2"第一次接通时逻辑处理结果正确。后把沿指令提到判断条件前,即判断语句的外面,程序运行正常。 原因分析:沿指令内部保存 CLK端信号的位,在执行该指令时改变。在IF语句中使用时, CLK 信号仅在第一次运行时与沿指令内部保存位不同。以后沿指令内部保存位与 CLK 信号都相同,所以沿指令就不会触发。 总结: 在SCL中使用 沿指令要保证每个周期都会扫描的该指令,在判断语句,或其它包围指令中使用沿指令要格外小心。 |