| 作者 | 主题 |
|---|---|
|
Automann 至圣 经验值:18299 发帖数:6168 精华帖:137 |
楼主
主题:【分享】踩到了自己埋的地雷
最近上课的时候,用我事先做好的项目来演示博途中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楼
主题:回复:【分享】踩到了自己埋的地雷不过我更极端些,我现在编程根本就不用M区, 所有的变量都是用DB,要么全局DB,要么背景DB,即使是这种1200/1500用M区对应的系统存储字,我也不会。 需要的那种标志位我都自己编个程序,还是用DB变量来表达。 另外,也从不使用S7定时器和计数器,全部用IEC定时器和计数器... ...
I can do it
|
|
万泉河 至圣 经验值:29190 发帖数:10900 精华帖:131 |
12楼
主题:回复:【分享】踩到了自己埋的地雷不极端。 我们现在都这么干。 听说过模块化编程吗? 模块化编程的主要标志就是不用T,C,M。 现在每次做完项目以后,都审视一下这个项目中用了多少个T,C,M。每多一个,就多一分不满与自责。 有的时候封装的不彻底, 偷个懒, 用TCM来实现了。 总结的时候想想,偷懒也就偷懒了,暂时放过自己。
微信公众号:PLC标准化编程,ZHO6371995
|