首页 新闻 会员 周边 捐助

谁做过modbus tcp服务器客户端通信

0
悬赏园豆:10 [已解决问题] 解决于 2014-03-06 12:03

谁做过能不能发个代码看看,研究下,最近看资料看的有点迷糊

yiguohao_qust@sina.cn,谢谢了

问题补充:

没有人做过吗

零度storm的主页 零度storm | 初学一级 | 园豆:167
提问于:2014-02-11 13:51
< >
分享
最佳答案
0

Modbus协议你搞明白协议格式就行了啊,几个命令字里面重点是位读位写,字读字写,其他的都很少用到。

唯一容易纠结的就是所谓的modbus寄存器,每一个字寄存器是16位的,做从站的话需要注意,位寄存器空间和字寄存器空间是否公用,就是第一个字寄存器的第一位就是位寄存器的第一位,第二个字寄存器的第一位就是位寄存器的第17位。这个根据你的实际要求来。

主站查询的时候可以将多个寄存器一个命令一次读出,只要总长度不超过协议允许长度就行,当然从站得支持相应的长度。并且可以多读一些不需要的数据来保证以最少的命令读出所需的数据,例如需要获取字寄存器1~10,20~40,可以直接发一条获取寄存器1~40的命令,然后解析的时候将其中11~19这几个寄存器数据抛弃。这样两次交互变为一次。

做主站的话就是主动对连接的从站进行查询获取数据,注意一下同一端口下的多从站需要轮询通讯就好,另外就是超时、重连等控制了,纯粹的TCP服务通讯问题

做从站就是响应查询就行了。

收获园豆:10
hailants | 小虾三级 |园豆:750 | 2014-02-13 15:18

另外,做协议的话,只需要注重两个,一是协议格式,而是交互规则,剩下的就是怎么用语言去实现了。C也好,C#也好,JAVA也好,仅仅是语言的区别,

例如C里面可以用指针去做数据读的操作,C#里面则没有的指针,你只能通过数组下标来搞定,JAVA中则无法直接获取某位的值。

hailants | 园豆:750 (小虾三级) | 2014-02-13 15:23
其他回答(1)
1

找个对应的开源客户端,c#的话建议用NModbus这个,很简单的。有相应的例子。

洋芋,阿喜欢! | 园豆:202 (菜鸟二级) | 2014-02-11 17:27

是linux下的,C语言实现,网上我已经翻了个底朝天了,基本上没有

支持(0) 反对(0) 零度storm | 园豆:167 (初学一级) | 2014-02-11 18:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册