我现在正进行一个项目,主站为CPU315 2PN/DP,下面挂了17个ET200S子站,通过PROFINET连接。网络结构为总线型,即主站接1#子站,
1#子站网口接2#子站,依次到17#子站。
由于子站以开关量信号采集为主,担心子站掉站引起信号丢失产生大量的错误事件,希望实现当某个ET200S从站出故障,在其输入的过程映像被清成“0”以前保存,
同时不影响其他正常子站的数据刷新。
参考《西门子 S7-300 PLC 从入门到精通的50个经典问题及解答》,进行的方法如下:
1. 对应每个子站建一个FC程序块,分别把每个从站的所有输入在OB1中循环地传送到一个DB块中;
2. 如果从站丢失,则OB86中断启动。在OB86中做处理,每个子站故障对应一个标志位,通过该标志位中断相应的FC程序块;
在这里参考《使用OB8x诊断SIMATIC PLC》做移位处理,得到每个子站故障的标志位
3. 当从站返回总线后,将标志位复位。
经测试发现,单独一个子站故障的时候,可以做到数据保持。但是由于IO设备串联在一起,中间一个站掉站往往导致后面的站一起丢失,这种情况下就会导致
部分子站数据时不时的无法保存。例如会出现拔掉倒数第四个站的网线,最后三个站数据保持,而倒数第四个站无法保持的情况。
我个人推断是由于多个IO子站一起掉站时,产生了多次OB86中断,且这几个中断谁第一个到达不规律。在这几个中断间隙OB1依旧在执行,将清零的过程映像数据传送到了DB块中。
首先想到的办法是通过改变网络拓扑结构,改善这个问题,毕竟保存数据只是为防止出现大量的虚假事件,属于治标。完善网络结构,杜绝这种问题出现,才是治本。
但由于线路已铺设完毕,交换机也没有这么多空余口,采用了环网的方式来尝试。
但完成环网设置后,测试发现随机断掉一根网线后,网络确实会恢复,但BF灯会闪烁一下,随机消失。在OB86中进行进入事件计数测试,果不其然,和总线方式一样,1#子站处中断即计数
17,即17个子站全部中断后恢复,同样所有的输入点均清零后恢复。
至此,还是需要解决多子站同时故障如何保存数据。
想请教各位前辈我的思路和测试过程有没误区,或者有更好的办法,谢谢!
最佳答案
竟然楼主,可以允许系统在ET200S掉站的情况下 保持数据,那么可以在降输入点COPY到DB里的时候做个延迟了,比如每个OB1开始,检查从站是否正常,启动定时器之类的,如果100MS后仍然正常,则允许COPY输入点到DB中,完成后复位定时器。
提问者对于答案的评价:
做延迟处理确实可以解决,谢谢了。只是感觉不延迟处理应该也不会出问题的。
专家置评
已阅,最佳答案正确。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc229456.html