发表于 2020-10-14 18:19:32
|
显示全部楼层
|阅读模式
来自:119.122.114.171
您正在浏览的页面需要登录,为了提高您的阅读体验,请在右上角登录您的账号!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
近期做个项目,程序执行结果和预想的不同,主要是沿指令不按预想的去执行。因此单独把沿指令单独拿出来做个测
试,项目用的是这样:
IF"Tag_2" THEN
"R_TRIG_DB"(CLK := "Tag_2",
=>"Tag_3");
IF"Tag_3"THEN
"Tag_4":=TRUE ;
END_IF;
END_IF;
后改为∶
"R_TRIG_DB"(CLK := "Tag_2",
=>"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中使用沿指令要保证每个周期都会扫描的该指令,在判断语句,或其它包围指令中使用沿指令要格外小心。
来源:西门子工业技术论坛
|
|