




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于Borland C+ Builder的Modbus通讯协议技术交流一、理论基础1.Modbus协议1.1Modbus协议简介Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(Interface for Distributed Automation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。在我国,Modbus已经成为国家标准GB/T19582-2008。据
2、不完全统计:截止到2007年,Modbus的节点安装数量已经超过了1000万个 。Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地
3、址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 1.2Modbus的几个特点(1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。 (2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。 (3)Modbus的帧格式简单
4、、紧凑,通俗易懂。用户使用容易,厂商开发简单。 1.3在Modbus网络上转输标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem组网。控制器通信使用主从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)
5、地址、功能代码、所有要发送的数据、一错误检测域。 从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 1.4查询回应周期(1)查询:查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。(2)回应:如果从设备产生一正常的回应,
6、在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。 1.5两种串行传输模式 控制器可使用ASCII 或RTU 通讯模式,在标准Modbus 上通讯。在配置每台控制器时,用户须选择通讯模式以及串行口的通讯参数。(波特率,奇偶校验等),在Modbus 总线上的所有设备应具有相同的通讯模式和串行通讯参数。 选择ASCII 或RTU 模式用于标准的Modbus 总线,它定义了总线上串行传输信息区的“位”的含义,决
7、定信息打包及译码方法。(本次交流仅限于RTU模式)RTU 模式: 控制器以RTU 模式在Modbus 总线上进行通讯时,信息中的每8 位字节分成2 个4 位16 进制的字符,该模式的主要优点是在相同波特率下其传输的字符的密度高于ASCII 模式,每个信息必须连续传输。 RTU 模式中每个字节的格式: 编码系统:8 位二进制,十六进制0-9,A-F 数据位: 1位起始位 8 位数据,低位先送 奇/偶校验时1 位;无奇偶校验时0 位。 带校验时1 位停止位;无校验时2 位停止位 错误校验区:循环冗余校验(CRC) 。1.6ModBus信息帧无论是ASCII 模式还是RTU 模式,Modbus 信息
8、以帧的方式传输,每帧有确定的起始点和结束点,使接收设备在信息的起点开始读地址,并确定要寻址的设备 (广播时对全部设备),以及信息传输的结束时间。可检测部分信息,错误可作为一种结果设定。. 地址设置 信息地址包括2个字符(ASCII)或1个8 位字符(RTU),有效的从机设备地址范围0-247,(十进制),各从机设备的寻址范围为1-247。主机把从机地址放入信息帧的地址区,并向从机寻址。从机响应时, 把自己的地址放入响应信息的地址区,让主机识别已作出响应的从机地址。地址0 位于广播地址,所有从机均能识别。当Modbus 协议用于高级网络时,则不允许广播或其他方式替代。 . 功能码设置 信息帧功能
9、代码包括字符(ASCII)或8 位(RTU)。有效码范围1-225(十进制),其中有些代码适用全部型号的Modicon 控制器,而有些代码仅适用于某些型号的控制器。当主机向从句发送信息时,功能代码向从机说明应执行的动作。如读一组离散式线圈或输入信号的ON/OFF 状态,读一组寄存器的数据,读从机的诊断状态,写线圈(或寄存器),允许下载、记录、确认从机内的程序等。当从机响应主机时,功能代码可说明从机正常响应或出现错误(即不正常响应),正常响应时,从句简单返回原始功能代码;不正常回应时,从机返回与原始代码相等效的一个码,并把最高有效位设定为“1”。 .数据区的内容 数据区有2个16进制的数据位,数
10、据范围为00-FF(16进制),根据网络串行传输的方式,数据区可由一对ASCII 字符组成或由一个RTU 字符组成。主机向从机设备发送的信息数据中包含了从机执行主机功能代码中规定的请求动作,如离散量寄存器地址,处理对象的数目,以及实际的数据字节数等。 .信息帧错误校验 标准Modbus 总线,有两类错误检查方法(LRC和CRC),错误检查区的内容按使用的错误检查方法填写。使用RTU 方式时,错误校验码为一个16 位的值,2 个8 位字节。错误校验值是对信息内容执行CRC 校验结果。CRC 校验信息帧是最后的一个数据,得到的校验码先送低位字节,后送高位字节,所以CRC 码的高位字节是最后被传送的
11、信息。.串行传送信息 在标准的Modbus 上传送的信息中,每个字符或字节,按由左向右的次序传送, 最低有效位:(LSB)最高有效位:(MSB) .RTU 帧 RTU 模式中,信息开始至少需要有3.5 个字符的静止时间,依据使用的波特率,很容易计算这个静止的时间(如下图中的T1-T2-T3-T4)。接着,第一个区的数据为设备地址。各个区允许发送的字符均为16 进制的0-9,A-F。网络上的设备连续监测网络上的信息,包括静止时间。当接收第一个地址数据时,每台设备立即对它解码,以判定是否是自己的地址。发送完最后一个字符号后,也有一个3.5 个字符的静止时间,然后才能发送一个新的信息。整个信息必须连
12、续发送。如果在发送帧信息期间,出现大于1.5 个字符的静止时间时,则接收设备刷新不完整的信息,并假设下一个地址数据。 同样一个信息后,立即发送的一个新信息,(若无3.5 个字符的静止时间)这将会产生一个错误,是因为合并信息的CRC 校验码无效而产生的错误。2.Borland C+ Builder开发环境简介Borland C+ Builder是Inprise(Borland)公司推出的基于C+语言的快速应用程序开发(rapid application development,RAD)工具。C+ Builder充分利用已经发展成熟的Deliphi的可视化组件库(visual component
13、library,VCL),吸收Borland C+ 优秀编译器的诸多优点,结合先进的基于组件的程序设计技术,已成为一个非常成熟的可视化应用程序开发工具,可以快速、高效地开发出基于Windows环境的各类程序,尤其是数据库和网络方面,C+ Builder更是一个十分理想的软件开发平台。C+Builder6.0加入了许多新功能,包括用于创建Web服务应用程序的新一代Web开发技术WebSnap,以及可用于实现不同平台上的应用程序互操作性的SOAP/WebService技术。利用它可以实现最小的代码开发量编写出高效率的32位Windows应用程序和Internet应用程序。一般用户的应用程序是由应用
14、程序界面和数据处理两部分组成,如在Windows应用程序中单击窗体的菜单或按钮(用户界面)来执行某一命令或完成某一操作(数据处理)。这种基于窗体的应用程序运用C+Builder这样的可视化开发工具后,用户界面的设计过程就如同“搭积木”一般,只需要根据需要在窗体上放置各种组件(“积木块”),并根据需要改变它们的位置或者外观,程序员不必编写大量的代码来实现界面功能,因而可以把主要精力集中在关键代码的设计上。Windows平台下常用的可视化开发工具(编程环境)有Inprise(Borland)公司的Delphi、C+ Builder,Microsoft公司的Visual Basic等。Inprise
15、(Borland)公司还提供与Delphi相似的Linux下的可视化开发工具Kylix,它也是Linux平台下市场占有率最高的RAD工具。通过这些工具,程序员可以直观地使用图形化工具来创建Windows应用程序。C+ Builder 6的集成开发环境(IDE)使程序员可以利用一组窗体、菜单和其他组件,并使用可视化的方式(WYSISWYGwhat you see is what you get,所见即所得)来设计应用程序的界面,将代码和事件与界面中的某一元素建立联系,并对整个应用程序进行调试。3.本文所做的工作说明在本文中,基于Borland C+ Builder6.0开发环境,结合加拿大FIS
16、O公司的Nortech II光纤测温设备的Modbus通讯技术协议,编写了Modbus功能码中0x03(Read Holding Registers)读取6个通道(也即6个温度传感器)的浮点型温度数据的可视化上位机软件,用第三方显示控件显示出来,并在表格中同步显示。由于没有相应的设备供测试,又根据Nortech II光纤测温设备的Modbus通讯技术协议编写了从机设备模拟应用程序。从机设备和上位机软件通过计算机串口进行通讯,传输RTU格式的Modbus协议数据帧。限于篇幅,本文只给出了上位机软件中的主要部分代码以及重复代码中的单段代码。二、程序代码Nortech II光纤测温设备的Modbus
17、通讯技术协议中数据格式和温度数据地址说明:数据格式描述由上表可以看出,浮点型数据是由2个16位(也即4个8位)的十六进制整型数据根据IEEE754标准来表示的。设备寄存器映射由上表可以看出设备寄存器地址为6676的寄存器中包含着需要读出的通道1至通道6的浮点型温度数据,而每个通道的温度数据是由2个16位的十六进制整型数据来表示。为解析这些温度数据,在认真研究IEEE754标准后编写了一个转换函数来实现32位整型数据到浮点型数据的转换计算。1、上位机软件中串口接收数据处理代码:void _fastcall TForm1:MSComm1Comm(TObject *Sender) int ByteN
18、um, DataLen; AnsiString str, Msg; OleVariant RxBuff; unsigned int crcData; if(MSComm1-CommEvent=comEvReceive) Sleep(200); if(MSComm1-InBufferCount) RxBuff=MSComm1-Input; ByteNum=RxBuff.ArrayHighBound(1); for(int i=0;iByteNum+1;i+) buffi=RxBuff.GetElement(i); str= str+IntToHex(buffi,2)+ ; Msg = RecvI
19、tems-Add(Msg); for(int i=0;iCells0row_count1 = myDataTime.CurrentDate(); StringGrid1-Cells1row_count1 = myDataTime.CurrentTime(); StringGrid1-Cells2row_count1 = HexToFloat(RecvBuff3,RecvBuff4,RecvBuff5,RecvBuff6); iThermometer1-Position = HexToFloat(RecvBuff3,RecvBuff4,RecvBuff5,RecvBuff6); StringGr
20、id1-Cells3row_count1 = HexToFloat(RecvBuff7,RecvBuff8,RecvBuff9,RecvBuff10); iThermometer2-Position = HexToFloat(RecvBuff7,RecvBuff8,RecvBuff9,RecvBuff10); StringGrid1-Cells4row_count1 = HexToFloat(RecvBuff11,RecvBuff12,RecvBuff13,RecvBuff14); iThermometer3-Position = HexToFloat(RecvBuff11,RecvBuff1
21、2,RecvBuff13,RecvBuff14); StringGrid1-Cells5row_count1 = HexToFloat(RecvBuff15,RecvBuff16,RecvBuff17,RecvBuff18); iThermometer4-Position = HexToFloat(RecvBuff15,RecvBuff16,RecvBuff17,RecvBuff18); StringGrid1-Cells6row_count1 = HexToFloat(RecvBuff19,RecvBuff20,RecvBuff21,RecvBuff22); iThermometer5-Po
22、sition = HexToFloat(RecvBuff19,RecvBuff20,RecvBuff21,RecvBuff22); StringGrid1-Cells7row_count1 = HexToFloat(RecvBuff23,RecvBuff24,RecvBuff25,RecvBuff26); iThermometer6-Position = HexToFloat(RecvBuff23,RecvBuff24,RecvBuff25,RecvBuff26); crcData = CRC(RecvBuff,DataLen); RecvBuffDataLen = crcData8; Rec
23、vBuffDataLen+1= crcData&0xff; row_count1+; break; default: break; if(buffDataLen=RecvBuffDataLen)&(buffDataLen+1=RecvBuffDataLen+1) AnsiString Msg = 接收数据成功!; /Memo1-Lines-Add(Msg); ListBox1-Items-Add(Msg); else AnsiString Msg = 接收数据失败!; /Memo1-Lines-Add(Msg); ListBox1-Items-Add(Msg); 2、上位机软件中定时发送查询指令代码:void _fastcall TForm1:Timer2Timer(TObject *Sender) unsigned int crcData; AnsiString str, Msg; if(MSComm1-PortOpen!=true) Application-Message
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 皂角树特色种植项目可行性研究报告
- 年产550吨灭火器充装剂项目可行性研究报告
- 医疗器械信息咨询公司合同付款管理办法
- 防新型传销知识培训课件
- 2026届高考地理第一轮复习课件:课时23 水循环
- 精细化工行业工艺流程研究
- 浙江省金华2025年九年级上学期数学月考试题附答案
- 百校结百村结对共建协议书8篇
- 拍卖买卖合同模板6篇
- 建筑企业办公室主任合同书7篇
- 江苏省建筑与装饰工程计价定额(2014)电子表格版
- 《绿色建材》课件
- 零基础预算培训课件
- 可摘义齿修复工艺技术
- DB15-T 2241-2021 数据中心绿色分级评估规范
- 吐鲁番地区鄯善县区域环境概况自然及社会环境概况
- 国家中长期科技发展规划纲要2021-2035
- 提升员工质量意识员工培训
- 产品报价单货物报价表(通用版)
- 诊断学·发绀-心悸-胸痛-腹痛
- 计算机专业英语第4版PPT完整全套教学课件
评论
0/150
提交评论