MODBUS协议说明文档
- 格式:doc
- 大小:102.50 KB
- 文档页数:8
MODBUS通讯协议说明1、概述Modbus 协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
本文档通信协议说明详细地描述了MODBUS设备的输入和输出命令、信息和数据,以便第三方使用和开发。
1.1通信协议的作用使信息和数据在上位机(主站)和MODBUS设备之间有效地传递,允许访问MODBUS设备的所有测量数据。
MODBUS设备可以实时采集现场各种数据值,具备一个RS485通讯口,能满足MODBUS监控系统的要求。
MODBUS设备通信协议采用MODBUS RTU协议,本协议规定了应用系统中主机与MODBUS 设备之间,在应用层的通信协议,它在应用系统中所处的位置如下图所示:本协议所处的位置从机:1.2 物理接口:连接上位机的主通信口,采用标准串行RS485通讯口,使用压接底座。
信息传输方式为异步方式,主要配置参数,一般默认:起始位1位,数据位8位,停止位1位,无校验,数据传输缺省速率为9600b/s2、MODBU通信协议详述2.1 协议基本规则以下规则确定在回路控制器和其他串行通信回路中设备的通信规则。
1)所有回路通信应遵照主/从方式。
在这种方式下,信息和数据在单个主站和从站(监控设备)之间传递。
2)主站将初始化和控制所有在通信回路上传递的信息。
3)无论如何都不能从一个从站开始通信。
4)所有环路上的通信都以“打包”方式发生。
一个包裹就是一个简单的字符串(每个字符串8位),一个包裹中最多可含255个字节。
组成这个包裹的字节构成标准异步串行数据,并按8位数据位,1位停止位,无校验位的方式传递。
串行数据流由类似于RS232C 中使用的设备产生。
5)所有回路上的传送均分为两种打包方式:A) 主/从传送B) 从/主传送6)若主站或任何从站接收到含有未知命令的包裹,则该包裹将被忽略,且接收站不予响应。
标准MODBUS协议说明书一.我公司现有产品中需要和组态软件进行通信的有二种产品:①总线探头②控制器主机。
三种产品分别使用了二种不格式的MODBUS协议。
但是其都符合MODBUS的通信格式:1.1接口标准:接口标准:TIA/EIA-485硬件连接:2线模式(非4线模式)1.2通讯格式:传输方式是指一个数据帧内一系列独立的数据结构以及用于传输数据的有限规则,下面定义了与MODBUS 协议RTU方式相兼容的传输方式。
每个字节的位:•1个起始位•8个数据位(低有效位在前)•无奇偶校验位•1个停止位错误检测(Error checking):CRC(循环冗余校验)1.3通讯速率:9600bps。
1.4通讯方式:主从方式。
1.5 要求通信波特率可以从9600 4800 1200 600中任意选择。
二.总线探头通信格式说明2.1主机发送格式地址编码功能码寄存器地址数据个数CRC高位CRC低位Address Function AddrH AddrL NumH NumL CRCH CRCL 2.2从机应答格式地址编码功能码字节数数据CRC高位CRC低位CRCH CRCL Address Function byte Data0H,Data0L………………………………………………………. DataNH,DataNL2. 3 格式说明实例假设总线探头地址为01 探头采用值为1组态软件发送数据:01 03 00 65 00 01 CRCL CRCH探头返回数据:01 03 02 00 01 CRCL CRCH3.协议使用说明:3.1关于设置:○1仪器地址设置由按键在菜单设置完成,设置范围1到247,一般默认为1。
.具体操作详见具体仪器使用说明书。
○2传输波特率设置由按键在菜单设置完成,设置范围600、1200、2400、4800、9600、一般默认为9600。
具体操作详见相关仪器使用说明书。
modbus通信协议书甲方(以下简称甲方):地址:法定代表人:乙方(以下简称乙方):地址:法定代表人:鉴于甲方需要在其自动化控制系统中采用Modbus通信协议进行数据交换,乙方拥有提供Modbus通信解决方案的专业能力,双方本着平等互利的原则,经友好协商,就Modbus通信协议的实施达成如下协议:第一条定义1.1 Modbus通信协议:指由Modicon公司(现为施耐德电气的一部分)开发的用于工业自动化领域的通信协议,包括Modbus RTU、Modbus ASCII和Modbus TCP/IP等。
第二条协议内容2.1 乙方将根据甲方的需求,提供符合Modbus通信协议标准的设备和技术支持。
2.2 甲方应按照乙方提供的技术规范和操作手册,正确使用Modbus通信协议进行数据交换。
2.3 双方应共同遵守Modbus通信协议的相关标准和规定,确保数据交换的准确性和安全性。
第三条技术支持与服务3.1 乙方负责提供Modbus通信协议的技术支持,包括但不限于设备调试、故障排除和技术咨询。
3.2 甲方在遇到技术问题时,应首先联系乙方寻求帮助。
乙方应在接到请求后及时响应并提供解决方案。
第四条保密条款4.1 双方应对在合作过程中知悉的商业秘密和技术秘密予以保密,未经对方书面同意,不得向第三方披露。
第五条知识产权5.1 乙方提供的Modbus通信协议解决方案及相关技术文档的知识产权归乙方所有,甲方应尊重乙方的知识产权。
第六条违约责任6.1 如一方违反本协议的任何条款,应承担违约责任,并赔偿对方因此遭受的损失。
第七条协议的变更和解除7.1 本协议的任何变更和补充,应由双方协商一致,并以书面形式确定。
7.2 如一方严重违约,另一方有权解除本协议,并要求违约方承担相应的违约责任。
第八条争议解决8.1 本协议在履行过程中如发生争议,双方应首先通过友好协商解决;协商不成时,任何一方可向甲方所在地人民法院提起诉讼。
第九条其他9.1 本协议自双方授权代表签字盖章之日起生效。
MODBUS协议说明文档MODBUS协议主要分为两种模式:RTU(远程终端单元)和ASCII(美国标准代码交换)。
在RTU模式下,数据以二进制形式传输,而在ASCII模式下,数据以ASCII码的形式传输。
两种模式各有优势,可以根据实际需求选择合适的模式。
MODBUS协议定义了一种简单的通信格式,包括请求帧和响应帧。
请求帧中包含设备地址、功能码、数据字段等信息,而响应帧中包含设备地址、功能码、数据字段以及错误码等信息。
通过这种方式,可以实现设备之间的数据通信。
MODBUS协议支持多种功能码,例如读取线圈状态、读取输入状态、读取保持寄存器、写单个寄存器等。
这些功能码可以满足不同的应用需求。
通过使用这些功能码,可以对设备进行读取和写入操作,实现数据的采集和控制。
MODBUS协议还定义了一种称为CRC(循环冗余校验)的错误校验机制,用于检测数据传输过程中的错误。
发送方在发送数据时计算CRC值,并在数据末尾添加该校验值。
接收方收到数据后也计算CRC值,并将计算结果与接收数据的CRC值进行比对,以确定数据是否传输正确。
1.简单易用:MODBUS协议的通信格式简单,容易实现,可以在不同的平台上进行交互。
2.高效可靠:MODBUS协议使用CRC校验机制来确保数据传输的可靠性,减少传输错误的概率。
3.灵活性强:MODBUS协议支持多种功能码,适用于不同的应用场景,扩展性强。
4.兼容性好:MODBUS协议可以与各种设备进行通信,包括传感器、执行器、PLC等。
总结而言,MODBUS协议是一种简单、可靠且易于实现的通信协议,广泛应用于工业控制领域。
通过使用MODBUS协议,可以实现设备之间的数据通信、数据采集和控制,提高自动化系统的效率和可靠性。
ModBus通讯协议分为RTU协议和ASCII协议,我公司的多种仪表都采用ModBus RTU通讯协议,如:YD2000智能电力监测仪、巡检表、数显表、光柱数显表等。
下面就ModBus RTU协议简要介绍如下:一、通讯协议(一)、通讯传送方式:通讯传送分为独立的信息头,和发送的编码数据。
以下的通讯传送方式定义也与MODBUS RTU 通讯规约相兼容:初始结构 = ≥4字节的时间地址码 = 1 字节功能码 = 1 字节数据区 = N 字节错误校检 = 16位CRC码结束结构= ≥4字节的时间地址码:地址码为通讯传送的第一个字节。
这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。
并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开始。
主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。
功能码:通讯传送的第二个字节。
ModBus通讯规约定义功能号为1到127。
本仪表只利用其中的一部分功能码。
作为主机请求发送,通过功能码告诉从机执行什么动作。
作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。
如果从机发送的功能码的最高位为1(比如功能码大与此同时127),则表明从机没有响应操作或发送出错。
数据区:数据区是根据不同的功能码而不同。
数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。
CRC码:二字节的错误检测码。
(二)、通讯规约:当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。
返送的信息中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。
如果出错就不发送任何信息。
1.信息帧结构地址码:地址码是信息帧的第一字节(8位),从0到255。
这个字节表明由用户设置地址的从机将接收由主机发送来的信息。
每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送。
Modbus通讯协议图片:图片:图片:Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。
此协议支持传统的RS-232、RS-422、RS-485和以太网设备。
许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。
Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。
此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。
标准的Modicon控制器使用RS232C实现串行的Modbus。
Modbus的ASCII、RTU 协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave 方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。
Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。
另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。
因此,Modbus协议的可靠性较好。
下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。
第二章:Modbus 通信协议说明Modbus 通信协议基本上是遵循Master and Slave 的通信步骤,有一方扮演Master 角色采取主动询问方式,送出Query Message 给Slave 方,然后由Slave 方依据接到的Query Message 内容准备Response Message 回传给Master 。
即使目前硬件通信已经可以达到双方互相主动通信的能力,但是于Modbus 通信协议的规定,必须一方为Master ,另一方为Slave 不能互换角色。
一般使用上,监控系统(HMI)都为Master ,PLC 、电表、仪表等都为Slave ,HMI 系统一直Polling Slave 的各种relay and register 最新数值,然后做显示及各种逻辑计算及控制调整等处理。
1 共享的通信协议1.1 Query and Response Cycle图(2-1):Master / Slave and Query / Response CycleDevice Address :表示该设备的编号,于同一个串行式网络上此为唯一的号码。
于TCP/IP 上可以使用IP Address 区分之,所以该Device Address 保留此字段可以使用或不使用。
Function Code :表示要求Slave 处理各种不同资料或程序的Command ,以不同的Function Number 来区分之。
Eight-Bit Data Bytes :依据Function Code 而有不同的详细资料定义,Slave 设备依据此两字段资料,做各种处理。
Error Check :当通信传送资料时,因考虑信号可能会受外界干扰,所以必须加上Error Check Code ,使得message 接收方可以就接到的资料再计算一次Code ,如果正确则做正常处理,不正确则不做处理。
于串行式通信规定有CRC and LRC 等两种方式。
MODBUS协议说明1.说明阅读本说明时请参阅操作手册。
本仪表采用MODBUS RTU格式,波特率可选,数据格式为n,8,1。
本协议规定仪表的地址为1-247,不支持广播。
仪表所有的数据都保存在单个字节(8位)或字(16位)中,用户可根据情况灵活处理。
协议中所有参数均为16进制数,除累积流量为BCD码格式,其余为整数和浮点数,浮点数为IEEE754格式。
寄存器地址下列表中的属性指数据的读写属性,R-只读;W-写;R/W-既可读,也可写入。
各指令的格式及示例见下面的说明。
错误响应错误响应错误响应2.记录信息表3.历史记录信息表4.计量参数表5.说明1.数据格式:本仪表用到的数据格式有SINGLE,BCD码格式及无符号整数Uint。
●单精度浮点数SINGLE格式为IEEE754,数据由低到高。
●BCD码格式有两种:○1BCD表示编号编码,数据低→高,如出厂日期22/05/2009○2BCD表示固定小数点的,数据低→高,如31232.768表示如下:小数点默认为第9位数的后面。
●无符号整数Uint为0-65536。
2.历史记录数据的读取因为存储数据量很大,历史数据的下载采用活动窗口模式,分为两部分:一是指针,指向所需下载的数据段,二是数据区,指针所指的数据放在此区域。
读取数据流程如下:读历史记录流程●周期历史记录的说明周期记录数据是根据用户设定的时间周期TTIME(5~60分钟)定期记录的上面25个字节数据为一个数据记录条,指针区里放的是数据记录条数,周期历史记录里可以放有从0~8499共8500条记录。
●日记录的说明上面25个字节数据为一个数据记录条,指针区里放的是数据记录条数,日记录里可以放有从0~1094共1095条记录。
●月记录的说明上面25个字节数据为一个数据记录条,指针区里放的是数据记录条数,月记录里可以放有从0~59共60条记录。
对上述历史记录区数据的读取按上面的流程进行,具体的过程参考下面的示例,下面描述的是周期记录读取,其他两个记录的读取与此相似。
modbus协议协议名称: Modbus协议一、引言Modbus协议是一种通信协议,被广泛应用于工业自动化领域。
本协议旨在定义Modbus通信协议的标准格式,以实现设备之间的数据交换和通信。
二、范围本协议适用于使用Modbus协议进行通信的设备和系统。
三、术语和定义1. Modbus协议:一种通信协议,用于设备之间的数据交换和通信。
2. 主站:使用Modbus协议进行数据读写操作的设备或系统。
3. 从站:响应主站请求的设备或系统。
4. 寄存器:存储从站数据的内存单元。
四、协议格式1. Modbus RTU格式Modbus RTU是一种二进制格式,其数据帧包括起始位、从站地址、功能码、数据、CRC校验等字段。
具体格式如下:起始位从站地址功能码数据 CRC校验1字节 1字节 1字节可变 2字节2. Modbus ASCII格式Modbus ASCII是一种基于ASCII码的格式,其数据帧包括起始符、从站地址、功能码、数据、LRC校验等字段。
具体格式如下:起始符从站地址功能码数据 LRC校验终止符':' 2字节 2字节可变 2字节 CR LF3. Modbus TCP格式Modbus TCP是一种基于TCP/IP协议的格式,其数据帧包括事务标识符、协议标识符、数据长度、从站地址、功能码、数据等字段。
具体格式如下:事务标识符协议标识符数据长度从站地址功能码数据2字节 2字节 2字节 1字节 1字节可变五、功能码1. 读取线圈状态(功能码01)主站向从站发送读取线圈状态的请求,从站回复包含线圈状态的数据。
2. 读取输入状态(功能码02)主站向从站发送读取输入状态的请求,从站回复包含输入状态的数据。
3. 读取保持寄存器(功能码03)主站向从站发送读取保持寄存器的请求,从站回复包含保持寄存器数据的响应。
4. 读取输入寄存器(功能码04)主站向从站发送读取输入寄存器的请求,从站回复包含输入寄存器数据的响应。
智能三相电参数数据综合采集模块MODBUS通讯协议说明目录一、Modbus通讯规约简介二、Modbus-ASCII通讯协议说明三、Modbus-RTU通讯协议说明四、Modbus协议的功能码与所对应的数据表五、数据计算六、Modbus通讯规约介绍(一)MODBUS通讯规约简介(二)MODBUS的两种传输方式(三)Modbus消息帧(四)MODBUS通讯错误检测方法一、Modbus通讯规约简介支持的通讯规约有4种:(ASCII码)研华ADAM兼容通讯协议、十六进制LC-02协议、MODBUS-ASCII、MODBUS-RTU。
“MODBUS通讯协议说明”描述了串行口通讯的读、写命令格式及内部信息数据的定义,数据计算,以便第三方开发使用。
MODBUS通讯规约是与Modicon系统相兼容的Modbus通讯规约。
二、MODBUS-ASCII通讯协议说明1、2、MODBUS-ASCII协议中的通讯波特率:1200,2400,4800,9600,19200BPS。
3、4、MODBUS-ASCII协议格式:上位机发送::单元地址功能码起始地址读取点数LRC校验CR LF下位机响应::单元地址功能码字节数数据LRC校验CR LF命令格式:呼叫:AA FF SSSS NNNN LL <CR><LF>应答:AA FF XX HHHH..... LL<CR><LF>其中::为起始符AA 模块地址FF 功能号SSSS 起始通道NNNN 通道数XX 数据字节长度HHHH 数据字节LL 校验和<CR> 回车<LF> 换行5、功能码03:读保持寄存器,读测量数据数据起始地址:00~1E数据长度:1~0C ,超出范围无效;数据起始地址+数据长度不大于1F,超过范围命令无效。
说明:读取的是16位数据,高位在前,低位在后。
数据定义:见功能码与数据对照表1。
例1、读测量数据:命令: : 01 03 00 00 00 02 LRC <CR><LF> 17字节ADDR 功能开始地址寄存器个数 LRC校验响应: : 01 03 04 64 05 01 01 LRC <CR><LF> 19字节ADDR 功能数据字节长度 U0 I0 UBB IBB LRC校验6、功能码06:预臵单寄存器,设臵通讯地址、波特率、电压、电流变比数据起始地址: 0000或0001数据长度: 01 ,不等于01命令无效。
(完整版)MODBUS协议(功能码及报文解析)(可编辑修改word版)MODBUS 协议Modbus 是一种串行通信协议,是Modicon 于 1979 年,为使用可编程逻辑控制器(PLC)而发表的。
事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。
Mod bus 比其他通信协议使用的更广泛的主要原因有:公开发表并且无版税要求相对容易的工业网络部署对供应商来说,修改移动原生的位或字节没有很多限制Modbus 允许多个设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。
在数据采集与监视控制系统(SCADA)中,Modbus 通常用来连接监控计算机和 rem ote terminal unit (RTU)。
Modbus 协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。
大多数 Modbus 设备通信通过串口EIA-485 物理层进行[1]。
对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。
Modbus RTU 是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII 是一种人类可读的,冗长的表示方式。
这两个变种都使用串行通讯(serial communication)方式。
RTU 格式后续的命令/数据带有循环冗余校验的校验和,而ASCII 格式采用纵向冗余校验的校验和。
被配置为 RTU 变种的节点不会和设置为 ASCII 变种的节点通信,反之亦然。
对于通过TCP/IP(例如以太网)的连接,存在多个 Modbus/TCP 变种,这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。
Modbus 有一个扩展版本 Modbus Plus(Modbus+或者 MB+),不过此协定是Modicon 专有的,和 Modbus 不同。
它需要一个专门的协处理器来处理类似HDLC 的高速令牌旋转。
Modbus通信协议格式一、Modbus 协议简介1、查询—回应周期(1)查询查询消息中的功能代码告之被选中的从设备要执行何种功能。
数据段包含了从设备要执行功能的任何附加信息。
例如功能代码03是要求从设备读保持寄存器并返回它们的内容。
数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。
错误检测域为从设备提供了一种验证消息内容是否正确的方法。
(2)回应如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。
数据段包括了从设备收集的数据:象寄存器值或状态。
如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
错误检测域允许主设备确认消息内容是否可用。
二、RTU传输方式RTU模式当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。
这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统8位二进制,十六进制数0...9,A...F消息中的每个8位域都是一个两个十六进制字符组成每个字节的位1个起始位8个数据位,最小的有效位先发送1个奇偶校验位,无校验则无1个停止位(有校验时),2个Bit(无校验时)错误检测域CRC(循环冗长检测)三、Modbus消息帧两种传输模式中(ASCII或RTU),传输设备以将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信息已完成。
部分的消息也能侦测到并且错误能设置为返回结果。
RTU帧使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。
在网络波特率下多样的字符时间,这是最容易实现的(如下图的T1-T2-T3-T4所示)。
传输的第一个域是设备地址。
可以使用的传输字符是十六进制的0...9,A...F。
MODBUS通讯协议说明
1、概述
Modbus 协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
本文档通信协议说明详细地描述了MODBUS设备的输入和输出命令、信息和数据,以便第三方使用和开发。
1.1通信协议的作用
使信息和数据在上位机(主站)和MODBUS设备之间有效地传递,允许访问MODBUS设备的所有测量数据。
MODBUS设备可以实时采集现场各种数据值,具备一个RS485通讯口,能满足MODBUS监控系统的要求。
MODBUS设备通信协议采用MODBUS RTU协议,本协议规定了应用系统中主机与MODBUS 设备之间,在应用层的通信协议,它在应用系统中所处的位置如下图所示:
本协议所处的位置
从机:
1.2 物理接口:
连接上位机的主通信口,采用标准串行RS485通讯口,使用压接底座。
信息传输方式为异步方式,主要配置参数,一般默认:起始位1位,数据位8位,停止位1位,无校验,数据传输缺省速率为9600b/s
2、MODBU通信协议详述
2.1 协议基本规则
以下规则确定在回路控制器和其他串行通信回路中设备的通信规则。
1)所有回路通信应遵照主/从方式。
在这种方式下,信息和数据在单个主站和从站(监控设备)之间传递。
2)主站将初始化和控制所有在通信回路上传递的信息。
3)无论如何都不能从一个从站开始通信。
4)所有环路上的通信都以“打包”方式发生。
一个包裹就是一个简单的字符串(每个字符串8位),一个包裹中最多可含255个字节。
组成这个包裹的字节构成标准异步串行数据,并按8位数据位,1位停止位,无校验位的方式传递。
串行数据流由类似于RS232C中使用的设备产生。
5)所有回路上的传送均分为两种打包方式:
A) 主/从传送
B) 从/主传送
6)若主站或任何从站接收到含有未知命令的包裹,则该包裹将被忽略,且接收站不予响应。
2.2 ModBus的传输方式
在ModBus系统中有2种传输模式可选择。
这2种传输模式与从机PC通信的能力是同等的。
选择时应视所用ModBus主机而定,每个ModBus系统只能使用一种模式,不允许2种模式混用。
一种模式是ASCII(美国信息交换码),另一种模式是RTU(远程终端设备)这两种模式的定义见下面
ASCII可打印字符便于故障检测,而且对于用高级语言(如Fortan)编程的主计算机及主PC很适宜。
RTU则适用于机器语言编程的计算机和PC主机。
用RTU模式传输的数据是8位二进制字符。
如欲转换为ASCII模式,则每个RTU字符首先应分为高位和低位两部分,这两部分各含4位,然后转换成十六进制等量值。
用以构成报文的ASCII字符都是十六进制字符。
ASCII模式使用的字符虽是RTU模式的两倍,但ASCII 数据的译玛和处理更为容易一些,此外,用RTU模式时报文字符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。
2.3 Modbus的数据校验方式
CRC-16(循环冗余错误校验)
CRC-16错误校验程序如下:报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位(MSB)首选发送。
报文先与X↑16相乘(左移16位),然后看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示为二进制数 11000000000000101。
整数商位忽略不记,16位余数加入该报文(MSB先发送),成为2个CRC校验字节。
余数中的1全部初始化,以免所有的零成为一条报文被接收。
经上述处理而含有CRC字节的报文,若无错误,到接收设备后再被同一多项式(X↑16+X↑15+X↑2+1)除,会得到一个零余数(接收设备核验这个CRC字节,并将其与被传送的CRC比较)。
全部运算以2为模(无进位)。
习惯于成串发送数据的设备会首选送出字符的最右位(LSB-最低有效位)。
而在生成CRC 情况下,发送首位应是被除数的最高有效位MSB。
由于在运算中不用进位,为便于操作起见,计算CRC时设MSB在最右位。
生成多项式的位序也必须反过来,以保持一致。
多项式的MSB略去不记,因其只对商有影响而不影响余数。
生成CRC-16校验字节的步骤如下:
a)装如一个16位寄存器,所有数位均为1。
b)该16位寄存器的高位字节与开始8位字节进行“异或”运算。
运算结果放入这个16
位寄存器。
c)把这个16寄存器向右移一位。
d)若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进
行“异或”运算;若向右移出的数位是0,则返回③。
e)5重复3和4,直至移出8位。
f)6另外8位与该十六位寄存器进行“异或”运算。
g)7重复3~6,直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。
h)8这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。
另外,在某些非ModBus通信协议中也经常使用CRC16作为校验手段,而且产生了一些CRC16的变种,他们是使用CRC16多项式X↑16+ X↑15+X↑2+1,单首次装入的16位寄存器为0000;使用CRC16的反序X↑16+X↑14+X↑1+1,首次装入寄存器值为0000或 FFFFH。
LRC(纵向冗余错误校验)
LRC错误校验用于ASCII模式。
这个错误校验是一个8位二进制数,可作为2个ASCII 十六进制字节传送。
把十六进制字符转换成二进制,加上无循环进位的二进制字符和二进制补码结果生成LRC错误校验(参见图)。
这个LRC在接收设备进行核验,并与被传送的LRC 进行比较,冒号(:)、回车符号(CR)、换行字符(LF)和置入的其他任何非ASCII十六进制字符在运算时忽略不计。
LRC生成范例--读取02号从机的前8个线圈
3、传输格式
(1)命令报文格式
读数据:
(2)功能码说明
下表ModBus
各功能码对应的数据类型。
(3)、异常应答返回
非法功能:
非法数据地址:
注意:每一个数据用两个字节整数表示,高位在前,低位在后
如:带符号整数范围 -32768---32767
上传数据需除十,如湿度上传16进制 &H0311,对应十进制00785,表示78.5%
上传数据需除十,如温度上传16进制 &H00FFH,对应十进制00255,表示25.5℃
上传数据需除十,如温度上传16进制 &H8064,高位为1,表示负数,对应的数高位取反,表示-10.0℃
5、网络采样定时
MODBUS设备中,上位机读取数据每次间隔时间不小于500ms,推荐值1s。
6、命令举例:
MODBUS设备的地址为1,读所有数据为:
下发命令:(CRC校验低位在前)
01 04 00 00 00 02 71 CB (读从数据起始地址为0000H开始的2个模拟量)
SMARTTH MODBUS设备返回命令如下:
01 04 04,温度H,温度L,湿度H,湿度L,CRCL,CRCH。
地址为2时:(CRC校验低位在前)
上位机发送: 02 04 00 00 00 02 71 F8(读从数据起始地址为0000H开始的2个模拟量)下位机返回: 02 04 04,温度H,温度L,湿度H,湿度L,CRCL,CRCH。
串口设置:异步通讯,起始位1位,数据位8位,无校验,停止位1位。
数据传输速率缺省为:9600b/s
自动下发命令时间间隔:100ms---10s可选,默认1s
Windows窗口参考以前的程序增加必要的选择项,其他不变。
7、串口调试截图
读取设备信息
写入设备信息。