HLPA+Modbus标准通讯协议格式
注:BYTECOUNT=2*NUM
错误时变频器返回数据格式:
“:”ADDRESS0X8301or02or030r04LRC0X0D0X0A
如:要读变频器功能码CD000中的设定值(假如为30.00HZ)(CD160=CD161=1
CD162=0)
应发送数据:“:”FC0D0A(16进制),转为ASCII码格式为
3A3D0A(ASCII)
变频器返回数据:“:”0103020BB8370D0A(16进制),转为ASCII码格式
为:
3A3DDA
返回的数据位为“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)
应发送数据:“:”F40D0A(16进制),转为ASCII格式
为:
3A36340D0A(ASCII)
变频器返回数据:“:”010402016A8E0D0A(16进制),转为ASCII码格式
为
3A3D0A(ASCII)
返回的数据位为“016A”(16进制)转换为10进制为“362”表示温度为36.2
05写单个线圈状态
上位机发送数据格式:
“:“ADDRESS05ADDRHADDRLDATAHDATALLRC0X0D
0X0A
注:ADDR:0----0XFFFFDATA:0X0000or0XFF00(16进制数)
正确时变频器返回数据格式:
“:“ADDRESS05ADDRHADDRLDATAHDATALLRC0X0D
0X0A
错误时变频器返回数据格式:
“:”ADDRESS0X8501or02or030r04LRC0X0D0X0A
06写单个保持寄存器值
上位机发送数据格式:
“:“ADDRESS06ADDRHADDRLDATAHDATALLRC0X0D
0X0A
注:ADDR:0----0XFFFF
正确时变频器返回数据格式:
“:“ADDRESS06ADDRHADDRLDATAHDATALLRC0X0D
0X0A
错误时变频器返回数据:
“:”ADDRESS0X8601or02or030r04LRC0X0D0X0A
如:要对变频器功能码CD000写入30.00(CD160=CD161=1CD162=0),
应发送数据:“:”010600000BB8360D0A(16进制),转为ASCII格
式为
3A33360D0A(ASCII)
变频器返回数据:“:”010600000BB8360D0A(16进制),转为ASCII
格式为
3A33360D0A(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),
应发送数据:“:”010FLRC0D0A(16进制),转为ASCII
格式为3A343830303032LRC0D
0A(ASCII)
“0002”即00000010;即线圈0x49置为1,给变频器发正转命令。
变频器返回数据:“:”010F00480008LRC0D0A(16进制),转为ASCII
格式为3A343830303038LRC0D0A(ASCII)
10写多个保持寄存器
上位机发送数据格式
“:“ADDRESS0x10ADDRHADDRLNUMHNUML
BYTECOUNTDATAH1DATAL1DATA2HDATA2L-------DATANH
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)
应发送数据:“:”040BB8044CD60D0A(16进制),转为ASCII
格式:
3A3D0A
(ASCII)
变频器返回数据:“:“45440D0A(16进制),转为ASCII格
式为:
3A343534340D0A(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–错误‘GF’
000C过压R0–无效1–错误‘OU’
000D保险丝熔断R0–无效1–错误‘FB’
000E低压R0–无效1–错误‘Lu’
000F变频器过热R0–无效1–错误‘OH’
0010变频器过载R0–无效1–错误‘OL’
0011马达过载R0–无效1–错误‘OA’
0012马达过转矩R0–无效1–错误‘OT’
0013接触器坏掉R0–无效1–错误‘LU’
0014制动管坏R0–无效1–错误‘BT’
0015CPU故障R0–无效1–错误‘FE’
0016存贮器坏掉R0–无效1–错误‘BE’
0017总故障指示R0–无效1–错误‘KE’
0018变频器过载R0–无效1–报警‘OL’
0019马达过载R0–无效1–报警‘OA’
001A马达过转矩R0–无效1–报警‘OT’
001B温度偏高R0–无效1–报警‘OH’
001C急停R0–无效1–报警‘ES’
001E4-20MA断线R0–无效1–报警‘20’
001F参数设置错误R0–无效1–报警‘PR’
0020外部开关量输入FBR0—无效1-有效
0021外部开关量输入MCSR0—无效1-有效
0022外部开关量输入FORR0—无效1-有效
0023外部开关量输入REVR0—无效1-有效
0024外部开关量输入SPLR0—无效1-有效
0025外部开关量输入SPMR0—无效1-有效
0026外部开关量输入SPHR0—无效1-有效
0027外部开关量输入RSTR0—无效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
说明
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侦误值。
功能码数据同HOLIP标准协议中ASCII格式中的功能码
•校验码CRC算法同HOLIP普通协议中RTU格式中的CRC算法
04读取输入寄存器
如:要读变频器温度显示值(假如温度为36.2)(CD160=CD161=1CD162=3)
应发送数据:CRC(16进制)
变频器返回数据:010402016ACRC(16进制)
返回的数据位为“016A”(16进制)转换为10进制为“362”表示温度为36.2
05写单个线圈状态
如:要使变频器的正转无效,反转有效(CD160=CD161=1CD162=3)
应发送数据:FF00CRC(16进制)
变频器返回数据:FF00CRC(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)
应发送数据:010F02CRC(16进制)
变频器返回数据:010F00480008CRC(16进制)
“0002”即00000010;即线圈0x49置为1,给变频器发正转命令。
10写多个保持寄存器
如要同时对CD000写入30.00,对CD001写入110.0,(CD160=CD161=1
CD162=3)
应发送数据:040BB8044CCRC(16进制)
变频器返回数据:45CRC(16进制)
发送的要写入16进制数据“0BB8”和“044C”转换为10进制数分别为3000和
1100表示对CD000和CD001写入的数据分别为30.00和110.0
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
Startbit
01234567
Stop
bit
8—Databits字元串
10—bits字元框
2)8E1ForASCIICD162=1
Start
bit
0123456
7Even
parity
Stop
bit
8—Databits字元串
11—bits字元框
3)8O1ForASCIICD162=2
Start
bit
01234567
Odd
parity
Stop
bit
8—Databits字元串
11—bits字元框
4)8N1ForRTuCD162=3
Startbit
01234567
Stop
bit
8—Databits字元串
11—bits字元框
5)8E1ForRTuCD162=4
Start
bit
0
1234567
Even
parity
Stop
bit
8—Databits字元串
11—bits字元框
6)8O1ForRTUCD163=5
Start
bit
0123456
7Odd
parity
Stop
bit
8—Databits字元串
11—bits字元框
3:通讯资料格式
3.1ASCII模式
通讯资料格式
STX
“:”
(3AH)
ADDRFUNCLENDATE
(n-1)
…DATA
0
LRC
END
CR(0DH)
LF(0AH)
1)STX:启始单元“:”(3AH)
2)ADDR通讯位置8-bit位置包含了2个ASCII码
00:广播方式为MODBUS
01—250相应变频器地址
3)FUNC:功能码8-bit位置包含了2个ASCII码
01:FUNCREAD读取功能码数据
02:FUNCWRIT功能码设定
03:控制命令
04:控制状态读取
05:变频器串口频率设定
06:保留
07:保留
08:回路检测
a.读取功能码数据(01)
发送格式:ADDR01LENData
ADDR=0时,无返回数据
ADDR≠0且符合变频器地址时有响应
当返回为正常时,格式如下:
ADDR01LENData
如返回为一个字时LEN=3一个字节时LEN=2
当无此功能或无效时返回为:
ADDR81H01
例如:读取CD000的参数
发送:3A3030LRC0D0A
“3030”即00。代表CD000.
接收:3A3LRC0D0A
说明:CD000=01388H=5000,即50Hz.
b.功能码设定(02)
发送格式:ADDR02LENData
ADDR=0作广播用,可以设定,但无应答
ADDR≠0时可以设定同时有回应讯号
当返回为正常时,格式如下:
ADDR02LENData
当设定不正确时,或无此功能,返回参数为:
ADDR82H01
例如:将CD000参数值改为60.00Hz
发送:3A36440D0A
“3030”即00。代表CD000.”31373730”即1770(Hex),转换为十进制数为6000。
接收:3A36440D0A
c.控制命令(03)
发送格式:ADDR0301CNTR
ADDR=0为广播,无返回响应
ADDR≠0时有响应,返回
CNTR
76543210
jogrjogfjogr/fstopRevforRun
当设定正确时,返回当前控制状态格式:ADDR0301CNST
CNST
76543210
跟踪启动
制
动
r/f
jogin
g
Runingr/fjogRun
检测不正确时ADDR83H01CNST
例如:通讯控制变频器运行时即CD033=2时
发运行命令
发送:3A3031LRC0D0A
“3031”即01,01为数据,代表运行命令。
接收:3A3039LRC0D0A
“3039”即09,09为数据,代表变频器处于运行状态。
注意:因通讯实时性,变频器返回状态滞后性,所以发命令之后返回的数据不
能正确反应变频器当前状态。
d:读取状态值(04)
格式:ADDR0401CFG
ADDR=0时无返回ADDR≠0时有返回
CFG=0—8时返回单个状态
0:SetF1:OutF2:OutA3:RoTT4:DCV
5:ACV6:Cont7:Tmp8:Error和CNST
例1:读取设定频率
发送:3A3030LRC0D0A
返回:3A31333838LRC0D0A
其中“31333838”即1388,1388为数据,13为高位,88为低位。
例2:读取错误代码和当前变频器状态
发送:3A3038LRC0D0A
返回:3A3LRC0D0A
其中“3030”即00。00为数据,代表无故障。
“3039”即09。09为数据,代表当前变频器为运行状态。
e:变频器串口频率设定(05)
格式:ADDR0502Data
ADDR=0时无返回ADDR≠0时有返回
例变频器频率设定为50.00Hz
发送:3A31333838LRC0D0A
返回:3A31333838LRC0D0A
其中“31333838”即1388,1388为数据,13为高位,88为低位。(通过串
口设定频率时,须先将CD034设为2。)
4)LEN:资料长度指D
(n-1)…D
(0)
的长度,长度设定:1个Word时LEN=3,1个Byte
时或<1byte时LEN=2
5)DATA:(Datacharactars)资料内容,2n个ASCII组合成n个bytes,最多有50个
ASCII。
6)LRC:侦误值
ASCII模式,采用LRC(LongitudinalRedundancyCheck)侦误值。LRC侦误值乃是将
ADDR至最后一个资料内容加总。得到结果以256为单位,超出部分去除(如结果为128H
则取28H)然后计算二次反补后得到结果即为LRC侦误值。
7)例如:对01变频器写入30.00Hz(写入CD000)
STXADDRFUNCLENDATALRCEND
“:”“0”“1”“0”“2”“0”“3”“0”“0”“0”“B”“B”“8”“3”“7”“CR”“LF”
3AH30H31H30H32H30H33H30H30H30H42H42H38H33H37H0DH0AH
LRC值计算:
01H+02H+03H+00H+0BH+B8H=C9H
C9H二次反补为37H
所以传送数据内容为:
3AH30H31H30H32H30H33H30H30H30H42H42H38H33H37H
0DH0AH
3.2RTU模式
静音ADDRFUNCLEND(n-1)~D(0)CRC静音
>50ms>50ms
1)静音:表示50ms时间以上无串口中断
2)ADDR:通讯位置8-bit位置
3)FUNC:命令码8-bit命令,具体内容参见3.1章节中命令码中的详细说明
4)LEN:资料长度指D(n-1)~D(0)的长度
5)DATA:资料内容n×8-bit资料
6)CRC:侦误值
RTU模式采用CRC(cyclicalRedundancyCheck)侦误值。CRC侦误值以下列步骤计算。
1:载入一个内容为FFFFH的16-bit暂存器(称CRC暂存器)。
2:将命令讯息第一个位元组与CRC16-bitCRC暂存器的低次位元组进行ExclasiveOR
运算,并将结果存回CRC暂存器。
3:将CRC暂存器内容右移1bit,最左bit填入0,检查CRC暂存器最低位元的值。
4:若CRC暂存器最低位元为0,则重复步骤3;否则将CRC暂存器与A001H进行
ExclusiveOR运算。
5:重复3及4,直到CRC暂存器的内容右移8bits,此时,该位元组已完全处理。
6:对命令讯息下一个位元组重复步骤2与5直到所有位元组皆完成处理,CRC暂存器
的最后内容即是CRC值。当在命令讯息中传送CRC值时,低位元组须与高位元组交换顺序,
即低位元组将先被传送。
7:范例:
a.读取功能码数据(01)
发送格式:ADDR01LENData
ADDR=0时,无返回数据
ADDR≠0且符合变频器地址时有响应
当返回为正常时,格式如下:
ADDR01LENData
如返回为一个字时LEN=3一个字节时LEN=2
当无此功能或无效时返回为:
ADDR81H01
例如:读取CD000的参数
发送:01010100CRC
00为数据。代表CD000.
接收:CRC
说明:CD000=01388H=5000,即50Hz.
b.功能码设定(02)
发送格式:ADDR02LENData
ADDR=0作广播用,可以设定,但无应答
ADDR≠0时可以设定同时有回应讯号
当返回为正常时,格式如下:
ADDR02LENData
当设定不正确时,或无此功能,返回参数为:
ADDR82H01
例如:将CD000参数值改为60.00Hz
发送:CRC
00为数据。代表CD000.1770(Hex),转换为十进制数为6000。
接收:CRC
c.控制命令(03)
发送格式:ADDR0301CNTR
ADDR=0为广播,无返回响应
ADDR≠0时有响应,返回
CNTR
76543210
jogrjogfjogr/fstopRevforRun
当设定正确时,返回当前控制状态格式:ADDR0301CNST
CNST
76543210
跟踪启动制动r/fjogingRuningr/fjogRun
检测不正确时ADDR83H01CNST
例如:通讯控制变频器运行时即CD033=2时
发运行命令
发送:01030101CRC
01为数据,代表运行命令。
接收:01030109CRC
09为数据,代表变频器处于运行状态。
注意:因通讯实时性,变频器返回状态滞后性,所以发命令之后返回的数据不
能正确反应变频器当前状态。
d:读取状态值(04)
格式:ADDR0401CFG
ADDR=0时无返回ADDR≠0时有返回
CFG=0—8时返回单个状态
0:SetF1:OutF2:OutA3:RoTT4:DCV
5:ACV6:Cont7:Tmp8:Error和CNST
例1:读取设定频率
发送:01040300CRC
返回:CRC
其中1388为数据,13为高位,88为低位。
例2:读取错误代码和当前变频器状态
发送:01040308CRC
返回:CRC
其中00为数据,代表无故障。
09为数据,代表当前变频器为运行状态。
e:变频器串口频率设定(05)
格式:ADDR0502Data
ADDR=0时无返回ADDR≠0时有返回
例变频器频率设定为50.00Hz
发送:CRC
返回:CRC
其中1388为数据,13为高位,88为低位。(通过串口设定频率时,须先将CD034
设为2。)
8:范例2:
下列以C语言产生CRC值。此函数需要两个参数
Unsignedchardata←指讯息缓冲区的指标
Unsignedcharlength←讯息缓冲区中的位元组数目
此函数将传回unsignedinteger型态之CRC值
unsignedintcrc_chk(unsignedchardataunsignedcharlength){
intj;
unsignedintreg_crc=0xffff;
while(length——){
reg_crc^=*data++;
for(j=0;j<8;j++={
if(reg_crc&0x01){/*LSB(b0)=1*/
reg_crc=(reg_crc>>1)^0xa001;
}el{
reg-crc=reg_crc>>1;
}
}
}
returnrge_crc;
}
本文发布于:2023-03-02 16:24:02,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1677745442109478.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:通讯格式.doc
本文 PDF 下载地址:通讯格式.pdf
留言与评论(共有 0 条评论) |