300 软冗余 modbus通讯 点击:609 | 回复:1



西玛仪表028-6650595713808018567

    
  • 精华:0帖
  • 求助:2帖
  • 帖子:54帖 | 1652回
  • 年度积分:0
  • 历史总积分:2355
  • 注册:2006年4月18日
发表于:2013-05-13 12:34:28
楼主

现有一项目,采用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的后面。。。。

 

但是郁闷了。。

 

 

我曾经把备机拆除,不用冗余,同样的程序,通讯就正常了。。所以不知道乍回事。。。

 

在此请问下坛子里的兄弟<此处内容被屏蔽><此处内容被屏蔽>们,有碰到过不置位情况的么?  

 

或者说有啥好的建议。。。




西玛仪表028-6650595713808018567

  • 精华:0帖
  • 求助:2帖
  • 帖子:54帖 | 1652回
  • 年度积分:0
  • 历史总积分:2355
  • 注册:2006年4月18日
发表于:2013-05-14 01:36:25
1楼

诶。自己解决了。

总结下就是,驱动要最新。程序最干净。fb输入输出最好都是非冗余区。


热门招聘
相关主题

官方公众号

智造工程师