网站大量收购闲置独家精品文档,联系QQ:2885784924

C#使用TCPIP与ModBus进行通讯.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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) 数据包格式 数据交换过程中,数据包的格式由三部分组成:协议头 + 功能码 + 数据 ( 请 求或接受的数据 ) 。 这里主要用到下列两个功能码(十进制): 3: 读取寄存器中的值( Read Multiple Register ) 16: 往寄存器中写值( Write Multiple Register ) 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 表示地址和数据项。因此在发送或者接受数据的过程 中,需要对数据进行转换。 判断大小端 对于整数 1,在两种机器上有两种不同的标示方式,如上图所示;因此,我们 可以用 操作符来取其地址,再转换成指向 byte 的指针 (byte*) ,最后再取该指 针的值;若得到的 byte 值为 1,则为 Little-Endian ,否则为 Big-Endian 。 1: unsafe 2: { 3: int tester = 1; 4: bool littleEndian = (*( byte *)(tester)) == ( byte )1; 5: } 整数 / 浮点数转换成 Byte 数组 .Net 提供了现成的 API ,可以 (value) 和(Byte[] data) 来进行转换。下面的代 码对该转换进行了封装,加入了 Little-Endian 转 Big-Endian 的处理(以 int 为例): 1: public class ValueHelper 事务标识和缓冲处理 Transaction Identifier 上面节中提到, Client 每发送一个 Request 数据包的时候,需要带上一个标 识;当 Server 响应该请求的时候,会把该标识复制到 Response 中,返回给 Client 。这样 Client 就可以用来判断数据包有没有发串。在程序中,可以可以 用一个变量及记录该标识: 1:

您可能关注的文档

文档评论(0)

虾虾教育 + 关注
官方认证
内容提供者

有问题请私信!谢谢啦 资料均为网络收集与整理,收费仅为整理费用,如有侵权,请私信,立马删除

版权声明书
用户编号:8012026075000021
认证主体重庆皮皮猪科技有限公司
IP属地重庆
统一社会信用代码/组织机构代码
91500113MA61PRPQ02

1亿VIP精品文档

相关文档