1、modbus协议MODBUS 规约中文说明书 MODBUS规约MODBUS规约是MODICOM公司开发的一个为很多厂商支持的开放规约Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在Modbus网络上通信时,此协议决定
2、了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。标准的Modbus口是使用RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem组网。控制器通信使用主从技术,即仅设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据做出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程
3、控制器。主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、错误检测域。从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和错误检测域。如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将建立错误消息并把它作为回应发送出去。在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发
4、生的传输进程。在消息位,Modbus协议仍提供了主从原则,尽管网络通信方法是“对等”。如果控制器发送消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到消息,它将建立一从设备回应格式并返回给发送的控制器。.主设备查询查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。.从设备回应如果从设备产生正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的
5、回应。数据段包括了从设备收集的数据:像寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。每个MODBUS帧都包括地址域 功能域 数据域 错误检测域 RTU方式地址功能代码数据数量数据1.数据nCRC高字节CRC低字节地址域 功能域 数据域 错误检测域帧定界 :MODBUS RTU方式下,每两个字符之间发送或者接收的时间间隔不能超过1.5倍 字符传输时间。如果两个字符时间间隔超过了3.5倍的字符传输时间,规约就认为一帧数据已经接收,新的一帧数据传输开始。 ASCII方式ASCII模式:地址功
6、能代码数据数量数据1.数据nLRC高字节LRC低字节回车换行地址域 功能域 数据域 错误检测域帧定界:“:”帧起始 “CR LF” 帧结束 ASCII方式用两个ASCII字符表示一个8位数据,比如16进制的3A用字符“3”和字符“A”表示。 MODBUS TCPMODBUS TCP模式下,由于模块的地址由IP地址确定,所以不再有地址域内容,考虑到TCP网络是可靠的数据传输网络,故不再有校验数据。但是考虑到在IP网上数据到达的顺序可能与我们预期的数据不一致,故增加了一个数据序号,考虑到在MODBUS TCP协议上承载MODBUS协议,还在头部数据中增加了一个地址域。 MODBUS TCP / M
7、ODBUS 桥STC-511 可以用于MODBUS TCP 到MODBUS 的桥设备使用,作为MODBUS桥设备时,需要在地址域上加上地址,另外对应的串口需要设置为MODBUS主设备。由于存在两个串口设备,地址域的最高位 MSB=1 则访问串口2, MSB=0 则访问串口1。地址域广播地址是把低7位全部置为1,在发送到MODBUS总线时,地址修改为0。 地址域为0 表示不访问MODBUS 串口设备。 支持命令我们目前所支持的功能码非常有限,主要包括:01 READ COIL STATUS02 READ INPUT STATUS03 READ HOLDING REGISTERS04 READ I
8、NPUT REGISTERS05 FORCE SINGLE COIL06 PRESET SINGLE REGISTER 15 FORCE MULTIPLE COILS16 FORCE MULTIPLE REGISTERS20 READ FILE RECORD21 WRITE FILE RECORD 24 READ FIFO QUEUE 读继电器状态功能码: 01数据起始地址:0000100008数据长度:不大于08 (因为只有8个输出继电器) 说明:读取输出继电器的状态。数据说明: 地址描述说明00001第1个输出继电器1吸合 0断开00002第2个输出继电器1吸合 0断开00003第3个输出
9、继电器1吸合 0断开00004第4个输出继电器1吸合 0断开00005第5个输出继电器1吸合 0断开00006第6个输出继电器1吸合 0断开00007第7个输出继电器1吸合 0断开00008第8个输出继电器1吸合 0断开00009第9个输出继电器(虚拟)1吸合 0断开00010第10个输出继电器(虚拟)1吸合 0断开00011第11个输出继电器(虚拟)1吸合 0断开00012第12个输出继电器(虚拟)1吸合 0断开00013第13个输出继电器(虚拟)1吸合 0断开00014第14个输出继电器(虚拟)1吸合 0断开00015第15个输出继电器(虚拟)1吸合 0断开00016第16个输出继电器(虚
10、拟)1吸合 0断开MODBUS 请求功能码1 BYTE0X01起始地址2 BYTE0X0000 TO 0XFFFF读取数量2 BYTE1 TO 2000(0X7D0)MODBUS 响应功能码1 BYTE0X01字节计数1 BYTEN线圈状态n BYTEn =N or N+1N =读取数量/8 如果余数不为0 则N=N+1错误 响应功能码1 BYTE0X01+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例请求响应域名称数据(hex)域名称数据(hex)功能码01功能码01起始地址高(字节)00字节计数03起始地址低(字节)1327(h)20状态CD读取数量高(
11、字节)0035(h)28状态6B读取数量低(字节)1338(h)36状态05 读开关量输入功能码: 02数据起始地址:1000011000016 数据长度:不大于16 (因为只有16路输入)说明: 读取输入开关量的状态。 输入的量改变状态需要经过0.1S滤波抗干扰后才会变化。如果用户想知道改变的时刻,需要读取系统的FIFO中的SOE事件记录或者读取文件中的SOE记录。 输入量的每次改变都会累积到该路对应的32位计数器上,对于计数,输入的最高频率可以是1KHz。数据说明:地址描述说明100001第1路开关量状态0 没有通电 1接通电源100002第2路开关量状态0 没有通电 1接通电源10000
12、3第3路开关量状态0 没有通电 1接通电源100004第4路开关量状态0 没有通电 1接通电源100005第5路开关量状态0 没有通电 1接通电源100006第6路开关量状态0 没有通电 1接通电源100007第7路开关量状态0 没有通电 1接通电源100008第8路开关量状态0 没有通电 1接通电源100009第9路开关量状态0 没有通电 1接通电源100010第10路开关量状态0 没有通电 1接通电源100011第11路开关量状态0 没有通电 1接通电源100012第12路开关量状态0 没有通电 1接通电源100013第13路开关量状态0 没有通电 1接通电源100014第14路开关量状态
13、0 没有通电 1接通电源100015第15路开关量状态0 没有通电 1接通电源100016第16路开关量状态0 没有通电 1接通电源MODBUS 请求功能码1 BYTE0X02起始地址2 BYTE0X0000 TO 0XFFFF读取数量2 BYTE1 TO 2000(0X7D0)MODBUS 响应功能码1 BYTE0X02字节计数1 BYTEN输入状态n BYTEn =N or N+1N =读取数量/8 如果余数不为0 则N=N+1错误 响应功能码1 BYTE0X02+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例请求响应域名称数据(hex)域名称数据(he
14、x)功能码02功能码02起始地址高(字节)00字节计数03起始地址低(字节)C4204(h)197状态AC读取数量高(字节)00212(h)205状态DB读取数量低(字节)16218(h)213状态35 读保持寄存器功能码: 03数据起始地址:400001400128数据长度:不大于125 (因为通信缓冲区的限制)说明: 读取保持寄存器的值。 读取的是16位整数或者无符合整数。 地址描述说明400001当日时间 系统当日毫秒时钟低16位 400002当日时间系统当日毫秒时钟高16位400003当日时间系统日期低16位400004当日时间系统日期高16位400005第1路开关量脉冲计数低16位计
15、数400006第1路开关量脉冲计数高16位计数400007第2路开关量脉冲计数低16位计数400008第2路开关量脉冲计数高16位计数400009第3路开关量脉冲计数低16位计数400010第3路开关量脉冲计数高16位计数400011第4路开关量脉冲计数低16位计数400012第4路开关量脉冲计数高16位计数400013第5路开关量脉冲计数低16位计数400014第5路开关量脉冲计数高16位计数400015第6路开关量脉冲计数低16位计数400016第6路开关量脉冲计数高16位计数400017第7路开关量脉冲计数低16位计数400018第7路开关量脉冲计数高16位计数400019第8路开关量脉
16、冲计数低16位计数400020第8路开关量脉冲计数高16位计数400021第9路开关量脉冲计数低16位计数400022第9路开关量脉冲计数高16位计数400023第10路开关量脉冲计数低16位计数400024第10路开关量脉冲计数高16位计数400025第11路开关量脉冲计数低16位计数400026第11路开关量脉冲计数高16位计数400027第12路开关量脉冲计数低16位计数400028第12路开关量脉冲计数高16位计数400029第13路开关量脉冲计数低16位计数400030第13路开关量脉冲计数高16位计数400031第14路开关量脉冲计数低16位计数400032第14路开关量脉冲计数高
17、16位计数400033第15路开关量脉冲计数低16位计数400034第15路开关量脉冲计数高16位计数400035第16路开关量脉冲计数低16位计数400036第16路开关量脉冲计数高16位计数400037直流量1系数第1路直流系数,系统调校400038直流量2系数第2路直流系数,系统调校400039直流量3系数第3路直流系数,系统调校400040直流量4系数第4路直流系数,系统调校400041直流量5系数第5路直流系数,系统调校400042直流量6系数第6路直流系数,系统调校400043直流量7系数第7路直流系数,系统调校400044直流量8系数第8路直流系数,系统调校400045模拟量1输
18、出第1路直流模拟量输出10000 对应满量程(10V 或20mA)400046模拟量1输出第1路直流模拟量输出10000 对应满量程(10V 或20mA)400047模拟量1输出系数系统调校400048模拟量2输出系数系统调校400049模拟量1输出偏移量400050模拟量2输出偏移量400051闸门时间0.05s为单位,用于各路频率测量40060脉冲输出1的脉冲宽度单位1ms 0 表示不输出40061脉冲输出2的脉冲宽度单位1ms 0 表示不输出40063脉冲输出1的周期单位1ms 0 表示单次脉冲输出40064脉冲输出2的周期单位1ms 0 表示单次脉冲输出保留40071第1路模拟量定值报
19、警输出继电器设置最高位(BIT15)表示该功能投入,BIT14 表示继电器动作性质0 表示报警后一直吸合1 表示报警后吸合设置时间后释放低6位为动作继电器编号,0 表示第1路,40072第1路模拟量定值报警设置模拟量的值40073第2路模拟量定值报警输出继电器设置同 4007140074第2路模拟量定值报警设置模拟量的值40075第3路模拟量定值报警输出继电器设置同 4007140076第3路模拟量定值报警设置模拟量的值40077第4路模拟量定值报警输出继电器设置同 4007140078第4路模拟量定值报警设置模拟量的值40079第5路模拟量定值报警输出继电器设置同 4007140080第5路
20、模拟量定值报警设置模拟量的值40081第6路模拟量定值报警输出继电器设置同 4007140082第6路模拟量定值报警设置模拟量的值40083第7路模拟量定值报警输出继电器设置同 4007140084第7路模拟量定值报警设置模拟量的值40085第8路模拟量定值报警输出继电器设置同 4007140086第8路模拟量定值报警设置模拟量的值400101MODBUS 地址400102IP地址高16位400103IP地址低16位400104网关地址高16位400105网关地址低16位400106子网掩码高16位400107子网掩码低16位400108MAC地址高16位400109MAC地址中16位4001
21、10MAC地址低16位400117继电器设置最低位对应第1路继电器输出某位1,对应的继电器在得到吸合命令后,吸合400118设置时间后释放,也就是点动功能400118继电器释放时间单位 0.05s400119串口1设置0XQWST 400120串口2设置0XQWST400121串口1延时设置单位1ms400122串口2延时设置单位1ms400123系统时间年(高字节) 月 压缩BCD码400124系统时间日(高字节)小时 压缩BCD码400125系统时间分(高字节)秒 压缩BCD码400126系统时间毫秒(最大999毫秒)0XQWST 的含义Q 为二进制最高4位,W为次高4位,S位次低4位,T
22、为最低4位Q 为串口的奇偶设置,Q=0X1 为N 8 1 Q=0XD 为E 8 1 Q=0XE为 O 8 1S 为主从设备设置, S=0 该串口为从设备, S=1该串口为主设备,用于MODBUS TCP / MODBUS 桥设备。T 为串口波特率设置,T波特率T波特率096001300260031200424005480069600719200838400957600A57600B57600C9600D9600E9600F9600关于系统时间的说明:当日毫秒时钟是指从当日0:00开始计时的以毫秒为单位的一个32位数,其最大计数为86,400,000。系统日期是指从2000年1月1日开始的天数,
23、系统中保留了2000年2099年的日期,对应2100年以后的日期,系统不能保证正确。系统时间还有3个保持寄存器,保存年、月、日、时、分、秒,是系统实时钟芯片的时钟,与系统的时间和日期是相互关联的,设置一个,则会同时也设置另外一个而不用外界干预。MODBUS 请求功能码1 BYTE0X03起始地址2 BYTE0X0000 TO 0XFFFF读取数量2 BYTE1 TO 125(0X7D)MODBUS 响应功能码1 BYTE0X03字节计数1 BYTEN*2输入状态N*2 BYTE 错误 响应功能码1 BYTE0X03+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4
24、举例请求响应域名称数据(hex)域名称数据(hex)功能码03功能码03起始地址高(字节)00字节计数06起始地址低(字节)6B寄存器高(108)02读取数量高(字节)00寄存器低(108)2B读取数量低(字节)03寄存器高(109)00 寄存器低(109)00寄存器高(110)00寄存器低(110)64 读输入寄存器功能码: 04数据起始地址:30001-30024数据长度:不大于12 说明: 读取输入数据。 读出值为16位整数地址描述说明300001第1路直流模拟量5000 满量程(5V或者20ma)300002第2路直流模拟量5000 满量程(5V或者20ma)300003第3路直流模拟
25、量5000 满量程(5V或者20ma)300004第4路直流模拟量5000 满量程(5V或者20ma)300005第5路直流模拟量5000 满量程(5V或者20ma)300006第6路直流模拟量5000 满量程(5V或者20ma)300007第7路直流模拟量5000 满量程(5V或者20ma)300008第8路直流模拟量5000 满量程(5V或者20ma)300009第1路开关量信号频率闸门时间内的计数值300010第2路开关量信号频率闸门时间内的计数值300011第3路开关量信号频率闸门时间内的计数值300012第4路开关量信号频率闸门时间内的计数值300013第5路开关量信号频率闸门时间内
26、的计数值300014第6路开关量信号频率闸门时间内的计数值300015第7路开关量信号频率闸门时间内的计数值300016第8路开关量信号频率闸门时间内的计数值300017第9路开关量信号频率闸门时间内的计数值300018第10路开关量信号频率闸门时间内的计数值300019第11路开关量信号频率闸门时间内的计数值300020第12路开关量信号频率闸门时间内的计数值300021第13路开关量信号频率闸门时间内的计数值300022第14路开关量信号频率闸门时间内的计数值300023第15路开关量信号频率闸门时间内的计数值300024第16路开关量信号频率闸门时间内的计数值MODBUS 请求功能码1 BYTE0X04起始地址2 BYTE0X0000 TO 0XFFFF读取数量2 BYTE1 TO 125(0X7D)MODBUS 响应功能码1 BYTE0X04字节计数1 BYTEN*2输入状态N*2 BYTE 错误 响应功能码1 BYTE0X04+ 0X80错误代码1 BYTE0x1 or 0x2 or 0x3 or 0x4举例请求响应域名称数据(hex)域名称数据(hex)功能码04功能码04起始地址高(字节)00
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1