Modbus协议你搞明白协议格式就行了啊,几个命令字里面重点是位读位写,字读字写,其他的都很少用到。
唯一容易纠结的就是所谓的modbus寄存器,每一个字寄存器是16位的,做从站的话需要注意,位寄存器空间和字寄存器空间是否公用,就是第一个字寄存器的第一位就是位寄存器的第一位,第二个字寄存器的第一位就是位寄存器的第17位。这个根据你的实际要求来。
主站查询的时候可以将多个寄存器一个命令一次读出,只要总长度不超过协议允许长度就行,当然从站得支持相应的长度。并且可以多读一些不需要的数据来保证以最少的命令读出所需的数据,例如需要获取字寄存器1~10,20~40,可以直接发一条获取寄存器1~40的命令,然后解析的时候将其中11~19这几个寄存器数据抛弃。这样两次交互变为一次。
做主站的话就是主动对连接的从站进行查询获取数据,注意一下同一端口下的多从站需要轮询通讯就好,另外就是超时、重连等控制了,纯粹的TCP服务通讯问题
做从站就是响应查询就行了。
另外,做协议的话,只需要注重两个,一是协议格式,而是交互规则,剩下的就是怎么用语言去实现了。C也好,C#也好,JAVA也好,仅仅是语言的区别,
例如C里面可以用指针去做数据读的操作,C#里面则没有的指针,你只能通过数组下标来搞定,JAVA中则无法直接获取某位的值。
找个对应的开源客户端,c#的话建议用NModbus这个,很简单的。有相应的例子。
是linux下的,C语言实现,网上我已经翻了个底朝天了,基本上没有