- 280
- 0
- 约1.22万字
- 约 10页
- 2020-01-22 发布于天津
- 举报
C#使用TCP/IP与ModBus进行通讯
1. ModBus的 Client/Server模型2. 数据包格式及MBAP header (MODBUS Application Protocol header)3. 大小端转换4. 事务标识和缓冲清理5. 示例代码
1. ModBus的 Client/Server模型
?
??? Client与Server之间有两种通讯方式:一种是TCP/IP,另一种是通过串口(Serial Port),本文重点介绍第一种通讯方式。第二种方式留了接口,暂时还没有实现。
?
2. 数据包格式及MBAP header (MODBUS Application Protocol header)
??? 2.1 数据包格式
??? 数据交换过程中,数据包的格式由三部分组成:协议头 + 功能码 + 数据(请求或接受的数据)。??? 这里主要用到下列两个功能码(十进制):??? 3: 读取寄存器中的值(Read Multiple Register)??? 16: 往寄存器中写值(Write Multiple Register)
?
?? 2.2 MBAP header
???
??? 协议头具体包括下列4个字段:(1) Transaction Identifier:事务ID标识,Client每发送一个Request数据包的时候,需要带上该标识;当Server响应该请求的时候,会把该标识复制到Response中;这样客户端就可以进行容错判断,防止数据包发串了。(2) Protocal Identifier:协议标识,ModBus协议中,该值为0;(3) Length:整个数据包中,从当个前这个字节之后开始计算,后续数据量的大小(按byte计算)。(4) Unit Identifier:-_-
?
3. 大小端转换
??? ModBus使用Big-Endian表示地址和数据项。因此在发送或者接受数据的过程中,需要对数据进行转换。
3.1 判断大小端
??? 对于整数1,在两种机器上有两种不同的标示方式,如上图所示;因此,我们可以用操作符来取其地址,再转换成指向byte的指针(byte*),最后再取该指针的值;若得到的byte值为1,则为Little-Endian,否则为Big-Endian。
1: unsafe
2: {
3: int tester = 1;
4: bool littleEndian = (*(byte*)(tester)) == (byte)1;
5: }
3.2 整数/浮点数转换成Byte数组
??? .Net提供了现成的API,可以BitConverter.GetBytes(value)和BitConverter.ToXXOO(Byte[] data)来进行转换。下面的代码对该转换进行了封装,加入了Little-Endian转Big-Endian的处理(以int为例):
1: public class ValueHelper //Big-Endian可以直接转换
2: {
3: public virtual Byte[] GetBytes(int value)
4: {
5: return BitConverter.GetBytes(value);
6: }
7: public virtual int GetInt(byte[] data)
8: {
9: return BitConverter.ToInt32(data, 0);
10: }
11: }
12:?
13: internal class LittleEndianValueHelper : ValueHelper //Little-Endian,转换时需要做翻转处理。
14: {
15: public override Byte[] GetBytes(int value)
16: {
17: return this.Reverse(BitConverter.GetBytes(value));
18: }
19: public virtual int GetInt(byte[] data)
20: {
21: return BitConverter.ToInt32(this.Reve
您可能关注的文档
- 《-绿化安全技术交底》.doc
- 《04183概率论与数理统计(经管类)(有答案)》.doc
- 《07564自考唐宋词研究练习》.doc
- 《11751自考企业成本管理会计-考试超全复习》.doc
- 《112040207企业发展状况的数学建模与分析》.doc
- 《20000m3d城市污水处理厂综合设计(含11个CAD作图图纸)--优秀毕业设计》.doc
- 《2002年上半年销售工作总结-集团销售部》.doc
- 《2000国家大地坐标系》.ppt
- 《2003北大认知心理学笔记》.doc
- 《2004年注册安全工程师考试《安全生产管理知识》真题及标准答桉》.doc
- 《GB/T 46962-2026印刷技术 安全印刷过程管理》.pdf
- 中国国家标准 GB/T 46962-2026印刷技术 安全印刷过程管理.pdf
- GB/T 46962-2026印刷技术 安全印刷过程管理.pdf
- 中国国家标准 GB/T 32580.5-2026轨道交通 地面装置 高压交流开关设备及互感器 第5部分:27.5 kV和2×27.5 kV金属封闭开关设备和控制设备.pdf
- 《GB/T 32580.5-2026轨道交通 地面装置 高压交流开关设备及互感器 第5部分:27.5 kV和2×27.5 kV金属封闭开关设备和控制设备》.pdf
- GB/T 33248-2026印刷技术 胶印橡皮布.pdf
- GB/T 18282.6-2026医疗产品灭菌 化学指示物 第6部分:用于小型蒸汽灭菌器性能测试的二类指示物和过程挑战装置.pdf
- 中国国家标准 GB/T 18282.6-2026医疗产品灭菌 化学指示物 第6部分:用于小型蒸汽灭菌器性能测试的二类指示物和过程挑战装置.pdf
- 中国国家标准 GB/T 31308.1-2026行政、商业和行业中的数据元、过程和文档 长效签名 第1部分:CMS高级电子签名(CAdES)规范.pdf
- GB/T 31308.1-2026行政、商业和行业中的数据元、过程和文档 长效签名 第1部分:CMS高级电子签名(CAdES)规范.pdf
原创力文档

文档评论(0)