命令码03H表示主机向变频器读取数据,要读取多少个数据由命令中“数据个数”而定,最多可以读取16个数据。读取的参数地址必须是连续的。每个数据占用的字节长度为2字节,也即一个字(word)。以下命令格式均以16进制表示(数字后跟一个“H”表示16进制数字),一个16进制占用一个字节。
该命令的作用是读取变频器的参数及工作状态等。
例如:从地址为01H的变频器,从数据地址为0004H开始,读取连续的2个数据内容(也就是读取数据地址为0004H和0005H的内容),则该帧的结构描述如下:
RTU主机命令信息(主机发送给变频器的命令):
START | T1-T2-T3-T4(3.5个字节的传输时间) |
ADDR(地址) | 01H |
CMD(命令码) | 03H |
起始地址高位 | 00H |
起始地址低位 | 04H |
数据个数高位 | 00H |
数据个数低位 | 02H |
CRC低位 | 85H |
CRC高位 | CAH |
END | T1-T2-T3-T4(3.5个字节的传输时间) |
START和END中T1-T2-T3-T4(3.5个字节的传输时间)是指让RS485最少保持3.5个字节的传输时间为空闲。这使两条信息之间有一定的空闲时间,来区分两条信息,保证不会让设备误将两条信息当作一条信息。
ADDR为01H表示该命令信息是向地址为01H的变频器发送的信息,ADDR占用一个字节;
CMD为03H表示该命令信息是向变频器读取数据,CMD占用一个字节;
“起始地址”表示从该地址开始读取数据。“起始地址”占两个字节,高位在前低位在后。
“数据个数”表示读取的数据的个数,单位为字。“起始地址”为0004H,“数据个数”为0002H,表示读取0004H和0005H这两个地址的数据。
CRC检验占两个字节,低位在前,高位在后。
RTU从机回应信息(变频器发送给主机的信息):
START | T1-T2-T3-T4(3.5个字节的传输时间) |
ADDR | 01H |
CMD | 03H |
字节个数 | 04H |
地址0004H数据高位 | 13H |
地址0004H数据低位 | 88H |
地址0005H数据高位 | 00H |
地址0005H数据低位 | 00H |
CRC低位 | 7EH |
CRC高位 | 9DH |
END | T1-T2-T3-T4(3.5个字节的传输时间) |
回应信息的含义为:
ADDR为01H表示该信息是由地址为01H的变频器发送过来的信息,ADDR占用一个字节;
CMD为03H表示该信息是变频器响应主机读取命令(03H)而发给主机的信息,CMD占用一个字节;
“字节个数”表示从该字节开始(不包含)到CRC字节为止(不包含)的所有字节数。这里为04表示从“字节个数”到“CRC低位”之间有4个字节的数据,也即“地址0004H数据高位”、“地址0004H数据低位”、“地址0005H数据高位”、“地址0005H数据低位”这四个字节;
一个数据所存储的数据为两个字节,高位在前,低位在后。从信息中可以看出数据地址为0004H中的数据为1388H,数据地址为0005H中的数据为0000H。
CRC检验占两个字节,低位在前,高位在后。
该命令表示主机向变频器写数据,一条命令只能写一个数据,不能写多个数据。它的作用是改变变频器的参数及工作方式等。
例如:将5000(1388H)写到从机地址02H变频器的0004H地址处。则该帧的结构描述如下:
RTU主机命令信息(主机发送给变频器的命令)
START | T1-T2-T3-T4(3.5个字节的传输时间) |
ADDR | 02H |
CMD | 06H |
写数据地址高位 | 00H |
写数据地址低位 | 04H |
数据内容高位 | 13H |
数据内容低位 | 88H |
CRC低位 | C5H |
CRC高位 | 6EH |
END | T1-T2-T3-T4(3.5个字节的传输时间) |
RTU从机回应信息(变频器发送给主机的信息)
START | T1-T2-T3-T4(3.5个字节的传输时间) |
ADDR | 02H |
CMD | 06H |
写数据地址高位 | 00H |
写数据地址低位 | 04H |
数据内容高位 | 13H |
数据内容低位 | 88H |
CRC低位 | C5H |
CRC高位 | 6EH |
END | T1-T2-T3-T4(3.5个字节的传输时间) |
注:在11.2节和11.3节主要介绍命令的格式,具体的用法将在11.8节以举例说明。
子功能码的意义:
子功能码 | 说明 |
0000 | 返回询问讯息数据 |
例如:对驱动器地址01H做回路侦测询问讯息字串内容与回应讯息字串内容相同,其格式如下:
RTU主机命令信息
START | T1-T2-T3-T4(3.5个字节的传输时间) |
ADDR | 01H |
CMD | 08H |
子功能码高位 | 00H |
子功能码低位 | 00H |
数据内容高位 | 12H |
数据内容低位 | ABH |
CRC CHK 低位 | ADH |
CRC CHK 高位 | 14H |
END | T1-T2-T3-T4(3.5个字节的传输时间) |
RTU从机回应信息
START | T1-T2-T3-T4(3.5个字节的传输时间) |
ADDR | 01H |
CMD | 08H |
子功能码高位 | 00H |
子功能码低位 | 00H |
数据内容高位 | 12H |
数据内容低位 | ABH |
CRC CHK 低位 | ADH |
CRC CHK 高位 | 14H |
END | T1-T2-T3-T4(3.5个字节的传输时间) |
命令码10H表示主机向变频器写数据,要写多少个数据由命令“数据个数”而定,最多可以连写16个数据。
例如:将5000(1388H)写到从机地址02H变频器的0004H、50(0032H)写到从机地址02H变频器的0005H地址处。则该帧的结构描述如下:
RTU主机命令信息(主机发送给变频器的命令)
START | T1-T2-T3-T4(3.5个字节的传输时间) |
ADDR | 02H |
CMD | 10H |
写数据地址高位 | 00H |
写数据地址低位 | 04H |
数据个数高位 | 00H |
数据个数低位 | 02H |
字节数 | 04H |
数据0004H内容高位 | 13H |
数据0004H内容低位 | 88H |
数据0005H内容高位 | 00H |
数据0005H内容低位 | 32H |
CRC低位 | C5H |
CRC高位 | 6EH |
END | T1-T2-T3-T4(3.5个字节的传输时间) |
RTU从机回应信息(变频器发送给主机的信息)
START | T1-T2-T3-T4(3.5个字节的传输时间) |
ADDR | 02H |
CMD | 10H |
写数据地址高位 | 00H |
写数据地址低位 | 04H |
数据个数高位 | 00H |
数据个数低位 | 02H |
CRC低位 | C5H |
CRC高位 | 6EH |
END | T1-T2-T3-T4(3.5个字节的传输时间) |
该部分是通讯数据的地址定义,用于控制变频器的运行、获取变频器状态信息及变频器相关功能参数设定等。
11.4.5.1功能码地址表示规则
功能码地址占两个字节,高位在前,低位在后。高、低字节的范围分别为:高位字节—00~ffH;低位字节—00~ffH。高字节为功能码点号前的组号,低字节为功能码点号后的数字,但都要转换成十六进制。如P05.06,功能码点号前的组号为05,则参数地址高位为05,功能码点号后的数字为06,则参数地址低位为06,用十六进制表示该功能码地址为0506H。再比如功能码为P10.01的参数地址为0A01H。
注意:P29组:为厂家设定参数,既不可读取该组参数,也不可更改该组参数;有些参数在变频器处于运行状态时,不可更改;有些参数不论变频器处于何种状态,均不可更改;更改功能码参数,还要注意参数的设定范围、单位及相关说明。
另外,由于EEPROM频繁被存储,会减少EEPROM的使用寿命。对于用户而言,有些功能码在通讯的模式下,无需存储,只需更改片内RAM中的值就可以满足使用要求。要实现该功能,只要把对应的功能码地址最高位由0变成1就可以实现。如:功能码P00.07不存储到EEPROM中,只修改RAM中的值,可将地址设置为8007H。该地址只能用作写片内RAM时使用,不能用做读的功能,如做读为无效地址。
11.4.5.2 Modbus其他功能的地址说明
主机除了可以对变频器的参数进行操作之外,还可以控制变频器,比如运行、停机等,还可以监视变频器的工作状态。
下表为其他功能的参数表:
功能说明 | 地址定义 | 数据意义说明 | R/W特性 | |
通讯控制命令 | 2000H | 0001H:正转运行 | R/W | |
0002H:反转运行 | ||||
0003H:正转点动 | ||||
0004H:反转点动 | ||||
0005H:停机 | ||||
0006H:自由停机(紧急停机) | ||||
0007H:故障复位 | ||||
0008H:点动停止 | ||||
通讯设定值地址 | 2001H | 通讯设定频率(0~Fmax(单位:0.01Hz)) | R/W | |
2002H | PID给定,范围(0~1000,1000对应100.0%) | |||
2003H | PID反馈,范围(0~1000,1000对应100.0%) | R/W | ||
2004H | 转矩设定值(-3000~3000,1000对应100.0%电机额定电流) | R/W | ||
2005H | 正转上限频率设定值(0~Fmax(单位:0.01Hz)) | R/W | ||
2006H | 反转上限频率设定值(0~Fmax(单位:0.01Hz)) | R/W | ||
2007H | 电动转矩上限转矩(0~3000,1000对应100.0%变频器电机电流) | R/W | ||
2008H | 制动转矩上限转矩(0~3000,1000对应100.0%电机额定电流) | R/W | ||
2009H | 特殊控制命令字: Bit0~1:=00:电机1 =01:电机2 =10:电机3 =11:电机4 Bit2:=1 转矩控制 =0:速度控制 Bit3:=1 用电量清零 =0:用电量不清零 Bit4:=1 预励磁 =0:预励磁禁止 Bit5:=1 直流制动 =0:直流制动禁止 | R/W | ||
200AH | 虚拟输入端子命令,范围:0x000~0x1FF | R/W | ||
200BH | 虚拟输出端子命令,范围:0x00~0x0F | R/W | ||
200CH | 电压设定值(V/F分离专用) (0~1000,1000对应100.0%电机额定电压) | R/W | ||
200DH | AO 输出设定值1(-1000~1000,1000对应100.0%) | R/W | ||
200EH | AO 输出设定值2(-1000~1000,1000对应100.0%) | R/W | ||
变频器状态字1 | 2100H | 0001H:正转运行中 | R | |
0002H:反转运行中 | ||||
0003H:变频器停机中 | ||||
0004H:变频器故障中 | ||||
0005H:变频器POFF状态 | ||||
0006H:变频器预励磁状态 | ||||
变频器状态字2 | 2101H | Bit0: =0:运行准备未就绪 =1:运行准备就绪 Bi1~2:=00:电机1 =01:电机2 =10:电机3 =11:电机4 Bit3: =0:异步机 =1:同步机 Bit4:=0:未过载预报警 =1:过载预报警 Bit5~ Bit6:=00:键盘控制 =01:端子控制 =10:通讯控制 | R | |
变频器故障代码 | 2102H | 见故障类型说明 | R | |
变频器识别代码 | 2103H | GD300-----0x010a | R | |
运行频率 | 3000H | 0~Fmax(单位:0.01Hz) | 兼容CHF100A,CHV100通讯地址 | R |
设定频率 | 3001H | 0~Fmax(单位:0.01Hz) | R | |
母线电压 | 3002H | 0.0~2000.0V(单位:0.1V) | R | |
输出电压 | 3003H | 0~1200V(单位:1V) | R | |
输出电流 | 3004H | 0.0~3000.0A(单位:0.1A) | R | |
运行转速 | 3005H | 0~65535(单位:1RPM) | R | |
输出功率 | 3006H | -300.0~300.0%(单位:0.1%) | R | |
输出转矩 | 3007H | -250.0~250.0%(单位:0.1%) | R | |
闭环设定 | 3008H | -100.0~100.0%(单位:0.1%) | R | |
闭环反馈 | 3009H | -100.0~100.0%(单位:0.1%) | R | |
输入IO状态 | 300AH | 000~1FF | R | |
输出IO状态 | 300BH | 000~1FF | R | |
模拟量输入1 | 300CH | 0.00~10.00V(单位:0.01V) | R | |
模拟量输入2 | 300DH | 0.00~10.00V(单位:0.01V) | R | |
模拟量输入3 | 300EH | -10.00~10.00V(单位:0.01V) | R | |
模拟量输入4 | 300FH | R | ||
读高速脉冲1输入 | 3010H | 0.00~50.00kHz(单位:0.01Hz) | R | |
读高速脉冲2输入 | 3011H | R | ||
读多段速当前段数 | 3012H | 0~15 | R | |
外部长度值 | 3013H | 0~65535 | R | |
外部计数值 | 3014H | 0~65535 | R | |
转矩设定值 | 3015H | -300.0~300.0%(单位:0.1%) | R | |
变频器识别代码 | 3016H | R | ||
故障代码 | 5000H | R |
R/W特性表示该功能是读/写特性,比如“通讯控制命令”为写特性,用写命令(06H)对变频器进行控制。R特性只能读不能写,W特性只能写不能读。
注意:利用上表对变频器进行操作时,有些参数必须使能才能起作用。比如用运行和停机操作,必须将“运行指令通道”(P00.01)设为“通讯运行指令通道”,同时还要将“通讯运行指令通道选择”(P00.02)设为“Modbus通讯通道”;再比如对“PID给定”操作时,要将“PID给定源选择”(P09.00)设为“Modbus通讯设定”。
设备代码的编码规则表(对应变频器识别代码2103H)
代码高8位 | 表示意义 | 代码低8位 | 表示意义 |
01 | GD | 0x08 | GD35矢量变频器 |
0x09 | GD35-H1矢量变频器 | ||
0x0a | GD300矢量变频器 | ||
0x0b | GD100简易型矢量变频器 | ||
0x0c | GD200通用变频器 | ||
0x0d | GD10迷你型变频器 |
在实际的运用中,通讯数据是用十六进制表示的,而16进制无法表示小数点。比如50.12Hz,这用十六进制无法表示,我们可以将50.12放大100倍变为整数(5012),这样就可以用十六进制的1394H(即十进制的5012)表示50.12了。
将一个非整数乘以一个倍数得到一个整数,这个倍数称为现场总线比例值。
现场总线比例值是以功能参数表里“设定范围”或者“缺省值”里的数值的小数点为参考依据的。如果小数点后有n位小数(例如n=1),则现场总线比例值m为10的n次方(m=10)。以下图为例:
“设定范围”或者“缺省值”有一位小数,则现场总线比例值为10。如果上位机收到的数值为50,则变频器的“休眠恢复延时时间”为5.0(5.0=50÷10)。
如果用Modbus通讯控制休眠恢复延时时间为5.0s。首先将5.0按比例放大10倍变成整数50,也即32H。然后发送写指令:
变频器在收到该指令之后,按照现场总线比例值约定将50变成5.0,再将休眠恢复延时时间设置为5.0s。
再比如,上位机在发完读“休眠恢复延时时间”参数指令之后,主机收到变频器的回应信息如下:
因为参数数据为0032H,也即50,将50按比例约定除以10变成5.0。这时主机就知道休眠恢复延时时间为5.0s。
在通讯控制中难免会有操作错误,比如有些参数只能读不能写,结果发送了一条写指令,这时变频器将会发回一条错误消息回应信息。
错误消息回应是变频器发给主机的,它的代码和含义如下表:
代码 | 名称 | 含义 |
01H | 非法命令 | 当从上位机接收到的命令码是不允许的操作,这也许是因为功能码仅仅适用于新设备,而在此设备中没有实现;同时,也可能从机在错误状态中处理这种请求。 |
02H | 非法数据 地址 | 对变频器来说,上位机的请求数据地址是不允许的地址;特别是,寄存器地址和传输的字节数组合是无效的。 |
03H | 非法数据值 | 当接收到的数据域中包含的是不允许的值。这个值指示了组合请求中剩余结构上的错误。注意:它决不意味着寄存器中被提交存储的数据项有一个应用程序期望之外的值。 |
04H | 操作失败 | 参数写操作中对该参数设置为无效设置,例如功能输入端子不能重复设置等。 |
05H | 密码错误 | 密码效验地址写入的密码与P7.00用户设置的密码不同 |
06H | 数据帧错误 | 当上位机发送的帧信息中,数据帧的长度不正确或,RTU格式CRC校验位与下位机的校验计算数不同时。 |
07H | 参数为只读 | 上位机写操作中更改的参数为只读参数 |
08H | 参数运行中不可改 | 上位机写操作中更改的参数为运行中不可更改的参数 |
09H | 密码保护 | 上位机进行读或写时,当设置了用户密码,又没有进行密码锁定开锁,将报系统被锁定。 |
当从设备回应时,它使用功能代码域与故障地址来指示是正常回应(无误)还是有某种错误发生(称作异议回应)。对正常回应,从设备回应相应的功能代码和数据地址或子功能码。对异议回应,从设备返回一等同于正常代码的代码,但最首的位置为逻辑1。
例如:一主设备发往从设备的消息要求读一组变频器功能码地址数据,将产生如下功能代码:
0 0 0 0 0 0 1 1 (十六进制03H)
对正常回应,从设备回应同样的功能码。对异议回应,它返回:
1 0 0 0 0 0 1 1 (十六进制83H)
除功能代码因异议错误作了修改外,从设备将回应一字节异常码,这定义了产生异常的原因。主设备应用程序得到异议的回应后,典型的处理过程是重发消息,或者针对相应的故障进行命令更改。
比如,将地址为01H的变频器的“运行指令通道”(P00.01,参数地址为0001H)设为03,指令如下:
但是“运行指令通道”的设定范围只为0~2,设置为3就超出了范围,这时变频器将会返回错误消息回应信息。回应信息如下:
异常回应码86H(由06H最高位置“1”而成)表示为写指令(06H)的异常回应;错误代码04H,从上表中可以看出,它的名称为“操作失败”,含义是“参数写操作中对该参数设置为无效设置”。
读写指令格式参见11.4.1和11.4.2节。
11.4.8.1读指令03H举例
例1:读取地址为01H的变频器的状态字1。从“其他功能的参数表”中可知,变频器状态字1的参数地址为2100H。
给变频器发送的读命令:
假设回应信息如下:
变频器返回的数据内容为0003H,从表中可知变频器处于停机中。
例2:通过指令查看地址为03H的变频器的“当前故障类型”到“前5次故障类型”,对应的功能码为P07.27~P07.32,对应的参数地址为071BH~0720H(从071BH起连续6个)。
给变频器发送的命令为:
假设回应信息如下:
从返回的数据来看,所有的故障类型都是0023H,也就是十进制的35,含义为失调故障(STo)。
11.4.8.2写指令06H举例
例1:将地址为03H的变频器正转运行。参见“其他功能的参数表”,“通讯控制命令”的地址为2000H,正转运行为0001。见下图。
主机发送的命令为:
如果操作成功,返回的回应信息如下(和主机发送的命令一样):
例2:将地址为03H的变频器的“最大输出频率”设为100Hz。
由小数点位数来看,“最大输出频率”(P00.03)现场总线比例值为100。将100Hz乘上比例值100得10000,对应的十六进制为2710H。
主机发送的命令为:
如果操作成功,返回的回应信息如下(和主机发送的命令一样):
注意:上述指令中加空格只是便于说明,在实际运用中不要在指令中加空格。
11.4.8.3连写指令10H举例
例1:将地址为01H的变频器正转运行10Hz。参见“其他功能的参数表”,“通讯控制命令”的地址为2000H,正转运行为0001。“通讯设定频率”的地址为2001H,10Hz对应的十六进制为03E8H。见下图。
功能说明 | 地址定义 | 数据意义说明 | R/W特性 |
通讯控制命令 | 2000H | 0001H:正转运行 | R/W |
0002H:反转运行 | |||
0003H:正转点动 | |||
0004H:反转点动 | |||
0005H:停机 | |||
0006H:自由停机(紧急停机) | |||
0007H:故障复位 | |||
0008H:点动停止 | |||
通讯设定值地址 | 2001H | 通讯设定频率(0~Fmax(单位:0.01Hz)) | R/W |
2002H | PID给定,范围(0~1000,1000对应100.0%) |
具体操作为设置P00.01为2,P00.06为8。
主机发送的命令为:
如果操作成功,返回的回应信息如下:
例2:将地址为01H的变频器的“加速时间”设为10s,减速时间设为20s。
P00.11 | 加速时间1 | P00.11和P00.12的设定范围:0.0~3600.0s | 机型确定 | ○ |
P00.12 | 减速时间1 | 机型确定 | ○ |
P00.11对应的参数地址为000B,加速时间10s对应的十六进制为0064H,减速时间20s对应的十六进制为00C8H
主机发送的命令为:
如果操作成功,返回的回应信息如下:
注意:上述指令中加空格只是便于说明,在实际运用中不要在指令中加空格。
11.4.8.4 Modbus通讯调试举例
主机为PC机,用RS232-RS485转换器进行信号转换,转换器所使用PC的串口为COM1(RS232端口)。上位机调试软件为串口调试助手,该软件可以在网上搜索下载,下载时尽量找带自动加CRC校验功能的。下图为所使用的串口调试助手的界面。
首先将“串口”选择COM1。波特率要与P14.01设置一致。数据位、校验位、停止位一定要与P14.02中设置的一致。因为使用的是RTU模式,所以选择十六进制的“HEX”。要软件自动加上CRC,一定要选上,并且选择CRC16(ModbusRTU),起始字节为1。一旦使能了自动加CRC校验,在填指令时就不要再填CRC了,否则会重复而导致指令错误。
调试指令为将地址为03H的变频器正转运行(11.4.7.2例1),即指令:
注意事项:
变频器地址(P14.00)一定设为03;
将“运行指令通道”(P00.01)设为“通讯运行指令通道”,同时还要将“通讯运行指令通道选择”(P00.02)设为“Modbus通讯通道”。
点击发送,如果线路和设置都正确,会收到变频器发过来的回应信息。