关于以太网抄表通讯问题求助

icegirl914 2011-11-23 01:22:01
目前有个客户通过以太网模式来远抄热表和阀门的数据,这个网络的布置是这样的:电脑-(以太网)->集中器-(无线)->集中器->热表或阀门,原先这公司测试的时候通讯效果蛮好,基本上数据都能抄回来,但是现在在现场却发现阀门的数据经常抄不回来,但是热表的数据基本上都能抄到,而且反应速度蛮好。现在的问题:

1、热表跟阀门以太网接口的处理是一样的,只是一个返回的数据长些,一个短些,我实在是想不出什么原因导致这个结果?(客户说线路没问题)
2、我程序里现在是按抄表列表一个个顺序下来先发后收数据,我知道这种模式不一定好,但是因为第一次做网络抄表,而且现场有1000多的表,用线程怕控制不好。如果换作线程处理接收,发送仍然顺序操作,那么这个接收什么时候结束?因为我收到的数据还要保存计算分摊,不可能一直处于接收状态;
...全文
266 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fang 2013-03-18
  • 打赏
  • 举报
回复
引用 楼主 icegirl914 的回复:
目前有个客户通过以太网模式来远抄热表和阀门的数据,这个网络的布置是这样的:电脑-(以太网)->集中器-(无线)->集中器->热表或阀门,原先这公司测试的时候通讯效果蛮好,基本上数据都能抄回来,但是现在在现场却发现阀门的数据经常抄不回来,但是热表的数据基本上都能抄到,而且反应速度蛮好。现在的问题: 1、热表跟阀门以太网接口的处理是一样的,只是一个返回的数据长些,一个短些,我实在是想不出什么原因……
你这种情况你不想用线程就用异步通讯,发完了不管,只等收就行。
那城 2013-03-13
  • 打赏
  • 举报
回复
自己定义协议,采用异步模式
sxqinge 2013-01-28
  • 打赏
  • 举报
回复
是不是得加个解析放在里面?你管它返回多少个字节,只要对返回的数据解析成功了,我就认为已经收全进行相应操作。我觉得楼主的应该还是解析没做好。 用线程操作读表会更合理些,你用秒表,那你能保证几秒钟数据就抄读上来了?并且还浪费时间,有时还有可能出现抄表不成功的情况。定义一个线程,里面可以有2个事件处理:一个是专门负责发送数据,一个专门负责接收数据,类似的可以在网上下载个CSerialPort类看看。
icegirl914 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liangqingzhi 的回复:]
1、现场的情况远比测试环境复杂,网络通道、防火墙都有可能引起问题

2、多线程是必须的,因为很多时候你先抄表可能后回数据,没法保证先发先收。对于一个集中器下多块表,可以分开集中器来抄,先抄这个集中器的再抄下一个集中器的,不要同时抄一个集中器的,这样可以提高抄表的速度。
[/Quote]

1、恩,这点我很同意。
2、目前的组网中到电脑的就一台主集中器,这台集中器后面还连多个的子集中器,这之间现在是通过无线方式连接的,大表跟阀门都是接在子集中器上的,对我后台系统来说,现在还不用分集中器,但是现在还有个问题很容易引起广播风暴,应该是无线那块引起的吧,这个问题做集中器开发的人说是解决不了的。每次引起广播风暴,返回的都是同一条数据,很多条,导致我的抄表界面出现一大堆的返回地址不对。
icegirl914 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jzy2203058 的回复:]
抄表行业我从2011做到2005,你说的这种情况有可能是硬件程序写得太差了,运行一段时间硬件程序出问题了,你可以测试一下,如果给硬件断电能抄表就是硬件程序出问题了。还有你这个这么多硬件是得采用多线程,要不然会很慢,不过抄表行业到是不要求数据快慢,我们监控行业数据到中心要求5S。所以我们都是采用多线程,欢迎QQ聊聊:81034291
[/Quote]

你好,我想问下你说的多线程是那方面的,收?发?还是每个表的收发都用一个线程来处理?不好意思,抄表系统因为时间要求不强,所以我基本没用多线程,所以不太明白。
硬件有问题对方也知道,因为还有时候会死机,当然这是他的问题,我只是希望我自己的能做到最好,原先的抄表其实一天也抄表不了几次,这个系统有点特别,现场暂时只有1000零点的阀门+大表,但是时间有要求:每个1个小时内要把数据抄回、保存、分摊、分摊结果下发。
icegirl914 2011-11-25
  • 打赏
  • 举报
回复
关于这个大表数据能正常返回,但是阀门数据抄不回,做集中器的那个人也跟我讨论了,他说大表返回的数据有60来个字节,但是阀门返回最长的也就30个字节,而他以太网模块缓冲是80个字节,因为阀门数据短,有可能是2、3组在一起返回,他的建议也是让我把接收做成拼包形式,用一个缓冲和线程专门来处理。这个建议我也在考虑中,我是知道我的程序原先那样处理不太好。
jzy2203058 2011-11-23
  • 打赏
  • 举报
回复
抄表行业我从2011做到2005,你说的这种情况有可能是硬件程序写得太差了,运行一段时间硬件程序出问题了,你可以测试一下,如果给硬件断电能抄表就是硬件程序出问题了。还有你这个这么多硬件是得采用多线程,要不然会很慢,不过抄表行业到是不要求数据快慢,我们监控行业数据到中心要求5S。所以我们都是采用多线程,欢迎QQ聊聊:81034291
老之 2011-11-23
  • 打赏
  • 举报
回复
1、现场的情况远比测试环境复杂,网络通道、防火墙都有可能引起问题

2、多线程是必须的,因为很多时候你先抄表可能后回数据,没法保证先发先收。对于一个集中器下多块表,可以分开集中器来抄,先抄这个集中器的再抄下一个集中器的,不要同时抄一个集中器的,这样可以提高抄表的速度。
babydog01 2011-11-23
  • 打赏
  • 举报
回复
我不知道你的通讯协议是什么,但大致设备有两种工作方式:
主动发送:设备会主动向指定的地址,端口发送数据包。
被动发送:电脑主机向设备地址、端口发送一个要求,设备会向电脑主机发送数据包。
一般设备需要电脑主机发送一个确认给设备。
主动工作过程:
设备有了新数据,不停地向指定的地址发送数据,直到收到主机发来的确认回执。

被动发送的工作过程是:
1、电脑主机向设备发送一个请求。
2、设备向电脑发送数据(如果一定时间内没有收到回执,再发一次,不同的设备设置不一样)
3、电脑向设备发送已收到的回执。
4、设备不再向主机发送数据,并做相关处理。

接收来的数据,一般都有硬件地址标志(大部分还有结束位),根据地址标志性质将数据分析后放入指定的数据库就可以了。

一般设备应用前,厂家会给你设计好通讯协议的。仔细研究一下吧。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧