找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
你这个是OB1中的temp6?
如果是,这个值是系统自定义,存放的是上一次扫描周期时间的,单位mS,显示10说明cpu上一个周期时间为10mS。
如果是自定义的,在使用前必须先赋值后使用的原则,不然这个值可能是一个随机值(无效值)
看了你的图片,程序有一些凌乱,BEU下面的call fc101是一个无效调用,因为BEU指令是无条件返回指令,下面的网络段将均无效。
临时变量可以在组织快OB、功能FC和功能块FB中使用,当块执行时它们被用来临时存储数据,一旦块执行结束,堆栈的地址将被重新分配用于其它程序块使用,此地址上的数据不会被清零,直到被其他程序块赋予新值。
需要遵循“先赋值,再使用”的原则。
因此,有常见的几种情况导致程序运行不正常:
1. 某个块程序运行时好时坏,其中某个数值或多个数值偶尔不正常
此问题在于,一定遵循“先赋值,再使用”。否则,TEMP的数值在每个扫描周期开始未有明确的赋值,此地址的数值将是随机的。
2. 多个块使用TEMP,单独使用任意一个都正常,无法一起正常使用
此问题在于,TEMP未能先赋值,再使用;程序块1的TEMP中的数值并没有清零,而是CPU运行机制调用此地址使用或直接分配给程序块2使用,导致这个TEMP地址并不为0,因此程序混乱。
由于内存运行机制并不公开,因此,这一分配过程看起来是随机的。这可能导致,程序多次运行情况下正常,运行一段时间后出现问题。
只要遵循“先赋值,再使用”的原则,就可避免。
3. TEMP无法实现自锁
此问题在于,TEMP数值无法像M点或Q点一样保持上一个周期的数值;TEMP需要在每个扫描周期有一个明确的赋值,即先赋值(写),再使用(读写)
解决方式,FB可使用STAT静态变量;FC可使用M区或全局DB地址。
总结,在使用临时变量TEMP时:
1.不能先使用,再赋值
2.不适用于自锁线圈
3.不适用于上升,下降沿
http://www.ad.siemens.com.cn/productportal/Prods/published/Prog/Prog_2.3/Prog_2.3.html
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!