故事是这样的。。。
为了偷懒,我做了个限制参数设定范围的子程序。总共涉及3个局部变量,上限、下限(这俩是IN型)、地址(这个是IN/OUT型)
因为都是实数类型,所以LD0/LD4/LD8三个双字地址被占用。
很简单的子程序,无非就是地址大于上限,将上限写入地址。地址小于下限,将下限写入地址。当发生任何强制写入的时候,都将激活一个超限位。
然后,我的设定项有点多。。。大概有个二十多条吧(貌似这也不算多吧。。。)
然后就在一个网络中,把这个子程序调用了二十多遍。。。用SM0.0来导入,然后很二的把那个公共超限开关导出到Q0.4上。
开CPU,正发愣的工夫,就听见我的二手PLC跟打铃似的,嗷嗷的!然后手忙脚乱把CPU关了。心疼半天把那个超限放到一个M位上,然后把最前面的SM0.0换成I0.3,先跑跑程序看看排除其他的问题。等其他的问题都搞定了,回过头来再强制I0.3闭合,然后实时监测子程序的进出数据。很快就发现不对劲了,因为我的设定项都在数据块里做过定义了,绝对没有任何一条超出上下限范围的。而且在开始的时候这些数据还是很正常的,但跑了大概有两三秒之后,所有的设定项都逐渐变成了不是上限就是下限。。。而且有的是这个设定值成了另一个设定值的上限或者下限之类的。。。到所有设定项都沦陷时,我才发现我连开机都没开,系统还在待机状态下。。。
这算是打摆子打疯了么?我那个子程序编的确实有点像打摆子。。。
然后一怒之下,把那个上下限子程序删了,然后把所有的计算内容都放到主程序里面来摆桌面上,一个临时地址都不用,我看T娘D谁还犯毛病!还是用SM0.0做导游,然后并上N条通路,后来一个网络都放不下了,分两个网络才放完。。。
开CPU,一次性通过。。。在TD里试验了一下超限设置,发现还不错,一旦确认了超限值,立马写成最大值或者最小值。
感想:
1、以后临时变量能不用就不用吧,出于井绳心理,真心不大敢了。。。反正V区地址多得是,老子以后都用全局地址,看你还跟我来劲?
2、TD组态怎么那么占地方?我不过搞了二十多个设定和显示项,数据块就5K多个字节了,就跟写小说似的。。。我有那么啰嗦么?另外,这数据块都存在哪里啊?是EEPROM么?那不是要跟我的掉电保持和程序块争地方?