Modbus讯协议格式.docx
《Modbus讯协议格式.docx》由会员分享,可在线阅读,更多相关《Modbus讯协议格式.docx(31页珍藏版)》请在冰豆网上搜索。
![Modbus讯协议格式.docx](https://file1.bdocx.com/fileroot1/2023-1/31/c718d198-b52e-4417-ac39-a33bebcbd95b/c718d198-b52e-4417-ac39-a33bebcbd95b1.gif)
Modbus讯协议格式
Modbus讯协议格式
?
-----------------------Page1-----------------------
HLPA+Modbus标准通讯协议格式
ASCII格式
通信资料格式
STXEND
“:
”ADDRESSFUNCDataHDataLLRCCR(0DH)
LF(0AH)
(3AH)
1)STX:
启始单元“:
”(3AH)
2)ADDR通讯位置8-bit位置包含了2个ASCII码
00:
广播方式为MODBUS
01-250:
相应变频器地址
3)FUNC:
命令码8-bit命令
01读线圈
上位机发送数据格式:
“:
”ADDRESS01ADDRHADDRLNUMHNUMLLRC0X0D
0X0A
注:
ADDR:
00000---FFFF;NUM:
0001-----0020(16进制数)(NUM为要读
的线圈的数量)
正确时变频器返回数据格式:
“:
”ADDRESS01BYTECOUNTDATA1DATA2DATA3DATAN
LRC0X0D0X0A
注:
BYTECOUNT=NUM/8或BYTECOUNT=NUM/8+1(取整或取整加一)
错误时变频器返回数据格式:
“:
”ADDRESS0X8101or02or03or04LRC0X0D0X0A
如:
要检测变频器运行方向(假如变频器反转运行)(CD160=CD161=1,CD162=0)
应发送数据:
“:
”010100050001F90D0A(16进制),转
为ASCII码
格式为:
3A30313031303030353030303146390D0A(ASCII码)
变频器返回数据:
“:
”01010101FC0D0A(16进制),转为ASCII
码
格式为:
3A303130313031303146430D0A(ASCII)
返回的数据位为“01”(16进制)化为2进制数为“00000001”末位表示运行状
态为“1”表示变频器正在反转运行(如是正转或停止状态则为“0”详见线圈
说明)
03读保持寄存器
上位机发送数据格式:
“:
”ADDRESS03ADDRHADDRLNUMHNUMLLRC0X0D
0X0A
注:
ADDR:
0---0XFFFF;NUM:
0001---0004(NUM为要读的保持寄存器的数量)
正确时变频器返回数据格式:
“:
“ADDRESS03BYTECOUNTDATA1DATA2DATA3DATAN
LRC0D0A
-----------------------Pag
e2-----------------------
注:
BYTECOUNT=2*NUM
错误时变频器返回数据格式:
“:
”ADDRESS0X8301or02or030r04LRC0X0D0X0A
如:
要读变频器功能码CD000中的设定值(假如为30.00HZ)(CD160=CD161=1
CD162=0)
应发送数据:
“:
”0300000001FC0D0A(16进制),转为ASCII码格式为
3A3033303030303030303146430D0A(ASCII)
变频器返回数据:
“:
”0103020BB8370D0A(16进制),转为ASCII码格式
为:
3A3031303330323042423833370DDA
返回的数据位为“0BB8”(16进制)转换为10进制数为3000表示CD000设置值为
30.00
04读取输入寄存器
上位机发送数据格式:
“:
“ADDRESS04ADDRHADDRLNUMHNUMLLRC0X0D
0X0A
注:
ADDR:
0----0XFFFF;NUM:
0001----0004(NUM为要读的输入寄存器的数量)
正确时变频器返回数据格式:
“:
“ADDRESS04BYTECOUNTDATAH1DATAL1----DATAHN
DATALN
注:
BYTECOUNT=NUM*2
错误时变频器返回数据格式:
“:
“ADDRESS0X8401or02or03or04LRC0X0D0X0A
如:
要读变频器温度显示值(假如温度为36.2)(CD160=CD161=1CD162=0)
应发送数据:
“:
”010400060001F40D0A(16进制),转为ASCII格式
为:
3A30313034303030363030303146340D0A(ASCII)
变频器返回数据:
“:
”010402016A
8E0D0A(16进制),转为ASCII码格式
为
3A3031303430323031364138450D0A(ASCII)
返回的数据位为“016A”(16进制)转换为10进制为“362”表示温度为36.2
05写单个线圈状态
上位机发送数据格式:
“:
“ADDRESS05ADDRHADDRLDATAHDATALLRC0X0D
0X0A
注:
ADDR:
0----0XFFFFDATA:
0X0000or0XFF00(16进制数)
正确时变频器返回数据格式:
“:
“ADDRESS05ADDRHADDRLDATAHDATALLRC0X0D
0X0A
错误时变频器返回数据格式:
“:
”A
DDRESS0X8501or02or030r04LRC0X0D0X0A
-----------------------Page3-----------------------
06写单个保持寄存器值
上位机发送数据格式:
“:
“ADDRESS06ADDRHADDRLDATAHDATALLRC0X0D
0X0A
注:
ADDR:
0----0XFFFF
正确时变频器返回数据格式:
“:
“ADDRESS06ADDRHADDRLDATAHDATALLRC0X0D
0X0A
错误时变频器返回数据:
“:
”ADDRESS0X8601or02or030r04LRC0X0D0X0A
如:
要对变频器功能码CD000写入30.00(CD160=CD161=1CD162=0),
应发送数据:
“:
”010600000BB8360D0A(16进制),转为ASCII格
式为
3A30313036303030303042423833360D0A(ASCII)
变频器返回数据:
“:
”010600000BB8360D0A(16进制),转为ASCII
格式为
3A30313036303030303042423833360D0A(ASCII)
返回的数据位为“0BB8”(16进制)转换为10进制为“3000”表示CD000设置值
为30.00
0F写多个线圈状态
上位机发送数据格式
“:
“ADDRESS0FADDRHADDRLNUMHNUMLCOUNT
DATAH1DATAL1DATA2HDATA2L-------DATANHDATANLLRC
0X0D0X0A
注:
ADDR:
0--------0XFFFF;NUM:
1-------1968/0X7B0;COUNT:
NUM/8或
NUM/8+1(NUM为要写的线圈的数量)
正确时变频器返回数据格式:
“:
“ADDRESS0FADDRHADDRLNUMHNUMLLRC0X0D
0X0A
错误时变频器返回数据格式:
“:
”ADDRESS0X8F01or02or030r04LRC0X0D0X0A
如:
要使变频器正转(CD160=CD161=1CD162=0),
应发送数据:
“:
”010F004800080102LRC0D0A(16进制),转为ASCII
格式为3A303130463030343830303038303130303032LRC0D
0A(ASCII)
“0002”即00000010;即线圈0x49置为1,给变频器发正转命令。
变频器返回数据:
“:
”010F00480008LRC0D0A(16进制),转为ASCII
格式为3A303130463030343830303038LRC0D0A(ASCII)
10写多个保持寄存器
上位机发送数据格式
“:
“ADDRESS0x10ADDRHADDRLNUMHNUML
BYTECOUNTDATAH1DATAL1DATA2HDATA2L-------DATANH
-----------------------Page4-----------------------
DATANLLRC0X0D0X0A
注:
ADDR:
0------0XFFFF;NUM:
0-125(NUM为要写的保持寄存器的数量)
正确时变频器返回数据格式
“:
“ADDRESS0x10ADDRHADDRLNUMHNUMLLRC0X0D
0X0A
COUNT=NUM*2
错误时变频器返回数据格式:
“:
”ADDRESS0X9001or02or030r04LRC0X0D0X0A
如要同时对CD000写入30.00,对CD001写入110.0,(CD160=CD161=1
CD162=0)
应发送数据:
“:
”011000000002040BB8044CD60D0A(16进制),转为ASCII
格式:
3A3031313030303030303030323034304242383034344344360D0A
(ASCII)
变频器返回数据:
“:
“01100000000245440D0A(16进制),转为ASCII格
式为:
3A303131303030303030303032343534340D0A(ASCII)
发送的要写入16进制数据“0BB8”和“044C”转换为10进制数分别为3000和
1100表示对CD000和CD001写入的数据分别为30.00和110.0
通信错误代码说明:
01非法的功能码
02非法数据地址
03非法数据值
04设备失败
功能码说明
线圈功能码说明
线圈地址名称R/W说明
0000保留R
0001保留R
0002保留R
0003运行R0–停止1–运行
0004点动R0–无效1–点动
0005正/反转R0–正转1–反转
0006制动R0–无效1–制动P02-00=0
0007频率跟踪R0–无效1–频率跟踪P02–00=1
0008IGBT短路R0–无效1–错误‘OC’
0009CT检测过流highR0–无效1–错误‘Oc’
000ACT检测过流lowR0–无效1–错误“oc”
000B对地短路R0–
1-有效
0028-002F状态输出MLTIOUT1R0—无效1-有效
0030-0037状态输出MLTIOUT2R0—无效1-有效
0038-003F状态输出MLTIOUT3R0—无效1-有效
0040-0047状态输出MLTIOUT4R0—无效1-有效
0048RUNW0—无效1-有效
0049FORW0—无效1-有效
004AREVW0—无效1-有效
004BSTOPW0—无效1-有效
004CF/RW0—无效1-有效
004DJOGW0—无效1-有效
004EJOGFW0—无效1-有效
004FJOGRW0—无效1-有效
保持寄存器功能码说明
功能码地址与键盘的功能码参数数值显示一样
输入寄存器功能码地址说明
输入寄存器地址名称R/W说明
-----------------------Page6-----------------------
0000输出频率R
0001设定频率R
0002输出电流R
0003输出转速R
0004直流电压R
0005交流电压R
0006温度R
0007计数器R
0008反馈值R
0009目标值R
000A当前运行时间R
000B总运行时间
4)DATA:
资料内容n×8-bit资料
5)LRC:
侦误值
ASCII模式,采用LRC(LongitudinalRedundancyCheck)侦误值。
LRC侦误值乃是将ADDR至最后一个资料内容加总。
得到结果以256单位,超
出部分去除(如结果为11128H则取1128H)然后计算二次反补后得到结果即为
LRC侦误值。
RTU模式
静音ADDRFUNCDATAHDATALCRCHCRCL静音
>
>50ms
50ms
功能码数据同HOLIP标准协议中ASCII格式中的功能码
·校验码CRC算法同HOLIP普通协议中RTU格式中的CRC算法
范例:
01读线圈
如:
要检测变频器运行方向(假如变频器反转运行)(CD160=CD161=1,CD162=3)
应发送数据:
010100050001CRC(16进制),
变频器返回数据:
01010101CRC(16进制)
返回的数据位为“01”(16进制)化为2进制数为“00000001”末位表示运行状
态为“1”表示变频器正在反转运行(如是正转或停止状态则为“0”祥见线圈
说明)
03读保持寄存器
如:
要读变频器功能码CD000中的设定值(假如为30.00HZ)(CD160=CD161=1
CD162=3)
应发送数据:
0300000001CRC(16进制)
变频器返回数据:
0103020BB8CRC(16进制)
返回的数据位为“0BB8”(16进制)转换为10进制数为3000表示CD000设置值
为30.00
-----------------------Page7-----------------------
04读取输入寄存器
如:
要读变频器温度显示值(假如温度为36.2)(CD160=CD161=1CD162=3)
应发送数据:
010400060001CRC(16进制)
变频器返回数据:
010402016ACRC(16进制)
返回的数据位为“016A”(16进制)转换为10进制为“362”表示温度为36.2
05写单个线圈状态
如:
要使变频器的正转无效,反转有效(CD160=CD161=1CD162=3)
应发送数据:
010500490000FF00CRC(16进制)
变频器返回数据:
010500490000FF00CRC(16进制)
“0000”代表无效;“FF00”代表有效
06写单个保持寄存器值
如:
要对变频器功能码CD000写入30.00(CD160=CD161=1CD162=3),
应发送数据:
010600000BB8360D0A(16进制)
变频器返回数据:
010600000BB8360D0A(16进制)
返回的数据位为“0BB8”
(16进制)转换为10进制为“3000”表示CD000
设置值为30.00
0F写多个线圈状态
如:
要使变频器的正转无效(CD160=CD161=1CD162=3)
应发送数据:
010F00480008010002CRC(16进制)
变频器返回数据:
010F00480008CRC(16进制)
“0002”即00000010;即线圈0x49置为1,给变频器发正转命令。
10写多个保持寄存器
如要同时对CD000写入30.00,对CD001写入110.0,(CD160=CD161=1
CD162=3)
应发送数据:
011000000002040BB8044CCRC(16进制)
变频器返回数据:
01100000000245CRC(16进制)
发送的要写入16进制数据“0BB8”和“044C”转换为10进制数分别为3000和
1100表示对CD000和CD001写入的数据分别为30.00和110.0
-----------------------Page8-----------------------
HLP–A.C+海利MODBUS通讯规约
在使用RS485通讯界面时,每一台变频器必须设定其通讯位置,电脑便根据每一台变
频器个别位置实施控制。
1:
本通讯协议有二种方式:
1)RTU方式(RemoteTerminalUnit)模式
2)ASCII方式(AmericanStandardCodeforinformationinterchange)模式编码意义
RTU模式:
每个8-bit资料由两个4-bit十六进位字元组成,如:
64H
ASCII模式:
每个8-bit资料由两个ASCII字元组成,如:
一个1-bit资料64H(十六进位)以ASCII
“64”表示,包含6(36H)和4(34H)
字元符号01234567
ASCII码30H31H32H33H34H35H36H37H
字元符号89ABCDEF
ASCII码38H39H41H42H43H44H45H46H
2:
通讯资料方式
1)8N1ForASCIICD162=0
StartbitStop
01234567
bit
8—Databits字元串
10—bits字元框
2)8E1ForASCIICD162=1
Start01234567EvenStop
bitparitybit
8—Databits字元串
11—bits字元框
3)8O1ForASCIICD162=2
Start01234567OddStop
bitparitybit
8—Databits字元串
11—bits字元框
4)8N1ForRTuCD162=3
StartbitStop
01234567
bit
8—Databits字元串
-----------------------Page9-----------------------
11—bits字元框
5)8E1ForRTuCD162=4
Start01234567EvenStop
bitparitybit
8—Databits字元串
11—bits字元框
6)8O1ForRTUCD163=5
Start01234567OddStop
bitparitybit
8—Databits字元串
11—bits字元框
3:
通讯资料格式
3.1ASCII模式
通讯资料格式
STX
END
“:
”ADDRFUNCLENDATE…DATALRCCR(0DH)
(n-1)0
(3AH)LF(0AH)
1)STX:
启始单元“:
”(3AH)
2)ADDR通讯位置8-bit位置包含了2个ASCII码
00:
广播方式为MODBUS
01—250相应变频器地址
3)FUNC:
功能码8-bit