技术论坛

 【分享】踩到了自己埋的地雷

返回主题列表
作者 主题
Automann
至圣

经验值:18299
发帖数:6168
精华帖:137
楼主    2016-06-03 13:32:31
主题:【分享】踩到了自己埋的地雷 精华帖 

最近上课的时候,用我事先做好的项目来演示博途中S7-300和精简面板的仿真,然后演示这个项目编程和组态的过程。PLC仿真的时候出了问题,Time数据类型的预设时间值(MD8)在正、负24天之间不停的无规则的跳动。用交叉引用功能检查,只是在OB100中给它设置过初始值T#10S,别的地方没有改写它。程序很简单,没有使用间接寻址。到底是什么原因导致MD8的值变化,一时查不出来了。

半夜突然想起我在演示过程中,演示了将MB8组态为时钟存储器字节的方法。MB8是MD8的最高位字节,将它组态为时钟存储器字节后,它的各位不断周期性变化,导致MD8的大幅度变化,罪魁祸首就是它,我踩到自己埋的地雷了。

编程的时候最忌讳的是同一地址两用或多用。如果某个地址的值出现无规则的莫名其妙的变化,多半是同一地址两用造成的。检查方法如下:

1)用交叉引用功能检查该地址在PLC程序中和HMI中哪些地方被改写,是否同一地址两用。

2)如果程序中使用了间接寻址,需要检查该变量是否被间接寻址改写。

3)该变量是否因为通信被改写。

4)如果是M区,注意该地址或其中的一部分是否被设置为时钟存储器字节或S7-1200/S7-1500的系统存储器字节。


追求完美
伊默
至圣

经验值:19238
发帖数:4259
精华帖:118
2楼    2016-06-03 13:59:11
精华帖  主题:回复:【分享】踩到了自己埋的地雷



不过我更极端些,我现在编程根本就不用M区, 所有的变量都是用DB,要么全局DB,要么背景DB,即使是这种1200/1500用M区对应的系统存储字,我也不会。 需要的那种标志位我都自己编个程序,还是用DB变量来表达。  另外,也从不使用S7定时器和计数器,全部用IEC定时器和计数器... ...

I can do it
万泉河
至圣

经验值:29190
发帖数:10900
精华帖:131
12楼    2016-06-06 14:19:45
精华帖  主题:回复:【分享】踩到了自己埋的地雷

不极端。 

我们现在都这么干。 

听说过模块化编程吗?


模块化编程的主要标志就是不用T,C,M。


现在每次做完项目以后,都审视一下这个项目中用了多少个T,C,M。每多一个,就多一分不满与自责。 

有的时候封装的不彻底, 偷个懒, 用TCM来实现了。 总结的时候想想,偷懒也就偷懒了,暂时放过自己。




微信公众号:PLC标准化编程,ZHO6371995
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。