C_编程实现Modbus通信协议.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C_编程实现Modbus通信协议

C#编程实现Modbus通信协议崔晶,徐晓光,倪康,夏雯娟(安徽工程大学电气工程学院,安徽芜湖241000)摘要:运用C#编程语言开发了Modbus通信系统,实现温湿度采集。系统下位机采用具有Modbus通信功能的温湿度检测模块,多个模块通过RS485总线连接,并通过RS232-RS485转换器将通信总线连接到PC机串口。系统以Modbus协议访问每个温湿度模块,实现了多点温湿度采集。关键词:C#;SerialPort;Modbus;温湿度中图分类号:TP274文献标志码:A文章编号:2095-7726(2014)08-0030-04引言C#是一种安全、稳定、简单、高效及面向对象的编程语言,它解决了C/C++语言内存泄露和缓冲区溢出等问题,具有很好的错误处理能力。C#语言是在VisualStudio.NET平台下进行代码演练。.NET是一种全新的编程环境,主要负责运行代码,确保代码的安全性和准确性,同时负责管理内存、线程调度等核心服务[1]。运用C#编程容易实现Modbus协议的串行通信,并具有更好的安全性。目前,温湿度检测系统不断趋于规模化及远程化,基于C#编程的Modbus通信系统实现的温湿度采集,可在RS-485总线上进行远距离多点温湿度检测。此研究内容在环境监测、工业数据采集等方面具有一定的实用价值。1Modbus协议1.1Modbus协议简介Modbus协议是应用于PLC或其他控制器上的一种通用语言。通过此协议,控制器与控制器、控制器通过网络(如以太网)与其他设备之间可以实现串行通信。该协议已经成为通用工业标准[2],运用Modbus协议,不同厂商的控制设备可以互连成工业网络,实现集中监控。文中Modbus通信协议采用的是RTU模式,当控制器设置为在Modbus网络上以RTU(远程终端单元)模式通信时,消息中每8位包含两个十六进制字符。在相同的波特率下,这种方法比ASCII方式传送的数据量大。代码系统是由8位二进制数或2位十六进制数(0~F)组成,在传输过程中,数据共包含1个起始位、8个数据位、1个奇偶校验位(如无校验则无此位)和停止位。当有校验位时停止位占用1位,无校验位时停止位占用2位。1.2CRC校验消息中包括了一个基于CRC(循环冗余检测)[2]方法的错误检测域,检测整个消息的内容。CRC码包含2个字节,即16位二进制数[2]。在CRC校验前,将16位寄存器全部预置为1。在进行校验时,除8位数据位外,起始位、停止位和奇偶校验位都不参与计算。在计算CRC时,先将8位数据和寄存器中存储的数据相异或,得到的数据向低位移一位,然后把最高位补为0,再对最低位检查[2]。如最低位为1,则把寄存器中的内容与预置数相异或;若最低位为0,则不进行异或运算。重复8次,即进行8次移位。接着,下一个8位数据再和此时寄存器中的内容相异或,这个过程也重复8次。全部信息处理完以后,寄存器中所存储的内容即为CRC码。这个CRC码将以低字节先加入、高字节后加入的顺序[2],跟随在数据之后,由发送设备发送。2C#的SerialPort类微软自推出VisualStudio2005开发工具开始,其.NETFramework类库中就包含了SerialPort类,实现了串口通信的绝大部分功能。采用SerialPort类实现上位机与温湿度变送器之间的串口通信,通过0收稿日期:2014-02-12作者简介:崔晶(1988-),女,山西长治人。硕士生,研究方向:数据融合与信息检测。·31·崔晶,徐晓光,倪康,夏雯娟:C#编程实现Modbus通信协议改变SerialPort类的方法和属性,可实现串口的打开和关闭,并实现对串口的波特率等属性的设置[3]。SerialPort类的属性及方法见表1。表1SerialPort的常用属性及方法在进行通信前,需确定主、从机的波特率(波特率不同会致使通信不成功)。该变送器PCB上的两位拨码开关即是波特率设置开关,通过开关状态的设置可实现波特率的设置。本通信系统设置波特率为9600bps,拨码开关都设置为OFF。温湿度变送器的Modbus通信参数如表2所示。表2温湿度变送器的Modbus通信参数名称说明获取或设置串行波特率获取或设置每个字节的标准数据位长度获取或设置奇偶校验检查协议获取或设置每个字节的标准停止位数获取或设置通信端口,包括但不限于所有可用的COM端口获取一个值,该值指示SerialPort对象的打开或关闭状态关闭端口的连接,将IsOpen属性设置为False,并释放内部Stream对象打开一个新的串行端口连接从SerialPort输入缓冲区中读取从SerialPort输入缓冲区中同步读取一个字节已重载,将数据写入串行端口输出缓冲区丢弃来自串行驱动程序的接收缓冲区的数据丢弃来自串行驱动程序的传输缓冲区的数据Baud

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档