发布于 2010-11-10 09:11:03
25楼
很久没上网了。没正式上网,有几个月没摸PLC了。。。。
看到前面的内容,我就有猜到可能是因为程序处理方式上的问题。我之前有写过串口通讯,虽然不是Modbus,当时琢磨了很长时间,最后完成的时候,程序却并不是很长。
串口通讯总线上的设备会有“掉线”,如某个仪表掉电、坏了、线松了等等,个人认为这是必须考虑的情况。从通讯的性能上说,倾向于使用信号标识进行判断,但是从“掉线”来说,这样显然不完善。所以我当时做的就是正常情况下使用标识位,同时做延时判断,注意延时判断时间要合适。
而对于出现延时问题的仪表,我的处理是直接过去了,去和下一个仪表通讯了,而不进行重发。因为我觉得没重发的必要。理由是:1。还有其他的仪表在等着通讯呢;2。下一个循环过来,自然会再次尝试通讯;3。重发的处理太麻烦,需要判断,需要重发,还需要限制次数,总不能无限制的去努力和一块可能都没上电的仪表通讯吧。我当时的做法的结果是,在所有仪表通讯正常的情况下,一个轮巡下来的时间不算很长,但是如果其中有某块表掉线,就要靠延时判断,导致通讯时间直接延长了。
其实我做的也不完善,还有些功能我有想了,但是没做到的。比如:如果某块表掉线,在上位画面中应该有所显示,否则上位画面显示的是最后一次的正常数据,不对仪表应该的数据很熟悉的话是发现不了问题的;这点后来倒是处理了一下,但是方式不是非常好,至少不是我自己十分满意的。还有就是,应该做一个屏蔽功能,就是把长时间掉线的仪表通讯屏蔽掉,以节约总线通讯时间,这点当时也没有做到。
没有个性的签名就别签了。