现有一项目,采用315-2pndp 冗余。2个cpu,dp口做与et200m的通讯。pn口上wincc。外挂342-5做冗余线路。做的是dp冗余。。
et200m中挂cp341做modbus主站通讯。
冗余数据区采用mb20-mb99共80个。冗余db区用db11-db20共10个。。。
数据冗余成功。et200m中挂的ai、di模块、do模块均可切换。冗余当前状态位采用db5.dbx9.1表示。
modbus我原打算发送的fb8、fb7放在ob1中。fb8的发送db等命令采用非冗余db块。fb8的使能采用db5.dbx9.1使能。也就是说,只能当前主机发送modbus查询命令。备机不能发送。
主机备机中的fb7实时接收。数据保存到冗余db中。由于冗余。备机写的数据也会被主机覆盖掉。
每次切换,当前主机从新开始进行轮询。一共轮询14组数据。我是利用fb8的done发送完成标志来使一个mw加一。,然后复位发送指令。fb7的接收完成ndr置位时再置位发送指令进行轮询。
现在问题来了。。
我还没编程到接收这块儿。。。
只用fb8时。发现。当fb8的发送指令置位时,cp341发送出了一组查询命令。远端的modbus slave也返回了(我是用串口调试助手监控)。。但是fb8的done针脚,也就是发送完成输出针脚没法置位。
后来我又试了下fb7,收到数据后(数据接收区有数据),ndr也不置位。。。。。
因为done和ndr只在1个周期内有效。所以我把这两个命令分别放在fb8和fb7的后面。。。。
但是郁闷了。。
我曾经把备机拆除,不用冗余,同样的程序,通讯就正常了。。所以不知道乍回事。。。
在此请问下坛子里的兄弟<此处内容被屏蔽><此处内容被屏蔽>们,有碰到过不置位情况的么?
或者说有啥好的建议。。。