关于以太网抄表通讯问题求助
目前有个客户通过以太网模式来远抄热表和阀门的数据,这个网络的布置是这样的:电脑-(以太网)->集中器-(无线)->集中器->热表或阀门,原先这公司测试的时候通讯效果蛮好,基本上数据都能抄回来,但是现在在现场却发现阀门的数据经常抄不回来,但是热表的数据基本上都能抄到,而且反应速度蛮好。现在的问题:
1、热表跟阀门以太网接口的处理是一样的,只是一个返回的数据长些,一个短些,我实在是想不出什么原因导致这个结果?(客户说线路没问题)
2、我程序里现在是按抄表列表一个个顺序下来先发后收数据,我知道这种模式不一定好,但是因为第一次做网络抄表,而且现场有1000多的表,用线程怕控制不好。如果换作线程处理接收,发送仍然顺序操作,那么这个接收什么时候结束?因为我收到的数据还要保存计算分摊,不可能一直处于接收状态;
[解决办法]
我不知道你的通讯协议是什么,但大致设备有两种工作方式:
主动发送:设备会主动向指定的地址,端口发送数据包。
被动发送:电脑主机向设备地址、端口发送一个要求,设备会向电脑主机发送数据包。
一般设备需要电脑主机发送一个确认给设备。
主动工作过程:
设备有了新数据,不停地向指定的地址发送数据,直到收到主机发来的确认回执。
被动发送的工作过程是:
1、电脑主机向设备发送一个请求。
2、设备向电脑发送数据(如果一定时间内没有收到回执,再发一次,不同的设备设置不一样)
3、电脑向设备发送已收到的回执。
4、设备不再向主机发送数据,并做相关处理。
接收来的数据,一般都有硬件地址标志(大部分还有结束位),根据地址标志性质将数据分析后放入指定的数据库就可以了。
一般设备应用前,厂家会给你设计好通讯协议的。仔细研究一下吧。
[解决办法]
1、现场的情况远比测试环境复杂,网络通道、防火墙都有可能引起问题
2、多线程是必须的,因为很多时候你先抄表可能后回数据,没法保证先发先收。对于一个集中器下多块表,可以分开集中器来抄,先抄这个集中器的再抄下一个集中器的,不要同时抄一个集中器的,这样可以提高抄表的速度。
[解决办法]
抄表行业我从2011做到2005,你说的这种情况有可能是硬件程序写得太差了,运行一段时间硬件程序出问题了,你可以测试一下,如果给硬件断电能抄表就是硬件程序出问题了。还有你这个这么多硬件是得采用多线程,要不然会很慢,不过抄表行业到是不要求数据快慢,我们监控行业数据到中心要求5S。所以我们都是采用多线程,欢迎QQ聊聊:81034291
[解决办法]
是不是得加个解析放在里面?你管它返回多少个字节,只要对返回的数据解析成功了,我就认为已经收全进行相应操作。我觉得楼主的应该还是解析没做好。
用线程操作读表会更合理些,你用秒表,那你能保证几秒钟数据就抄读上来了?并且还浪费时间,有时还有可能出现抄表不成功的情况。定义一个线程,里面可以有2个事件处理:一个是专门负责发送数据,一个专门负责接收数据,类似的可以在网上下载个CSerialPort类看看。
[解决办法]
自己定义协议,采用异步模式
[解决办法]