8.2.1 RTU模式运行举例:
8.2.1.1 命令码:03H(0000 0011),读取N个字(Word)(最多可以连续读取16个字)
例如:从机地址为01H的变频器,内存启始地址为0004,读取连续2个字,则该帧的结构描述如下:
RTU主机命令信息 | RTU从机回应信息 | ||
START | T1-T2-T3-T4 | START | T1-T2-T3-T4 |
ADDR | 01H | ADDR | 01H |
CMD | 03H | CMD | 03H |
启始地址高位 | 00H | 字节个数 | 04H |
启始地址低位 | 04H | 数据地址0004H高位 | 13H |
数据个数高位 | 00H | 数据地址0004H低位 | 88H |
数据个数低位 | 02H | 数据地址0005H高位 | 00H |
CRC CHK 低位 | 85H | 数据地址0005H低位 | 00H |
CRC CHK 高位 | CAH | CRC CHK 低位 | 7EH |
END | T1-T2-T3-T4 | CRC CHK 高位 | 9DH |
END | T1-T2-T3-T4 |
8.2.1.2 命令码:06H(0000 0110),写一个字(Word)
例如:将5000(1388H)写到从机地址02H变频器的0004H地址处。则该帧的结构描述如下:
RTU主机命令信息 | RTU从机回应信息 | ||
START | T1-T2-T3-T4 | START | T1-T2-T3-T4 |
ADDR | 02H | ADDR | 02H |
CMD | 06H | CMD | 06H |
写数据地址高位 | 00H | 写数据地址高位 | 00H |
写数据地址低位 | 04H | 写数据地址低位 | 04H |
数据内容高位 | 13H | 数据内容高位 | 13H |
数据内容低位 | 88H | 数据内容低位 | 88H |
CRC CHK 低位 | C5H | CRC CHK 低位 | C5H |
CRC CHK 高位 | 6EH | CRC CHK 高位 | 6EH |
END | T1-T2-T3-T4 | END | T1-T2-T3-T4 |
8.2.1.3 命令码:08H(0000 1000),诊断功能
子功能码的意义:
子功能码 | 说明 |
0000 | 返回询问讯息数据 |
例如:对驱动器地址01H做回路侦测询问讯息字串内容与回应讯息字串内容相同,其格式如下所示:
RTU主机命令信息 | RTU从机回应信息 | ||
START | T1-T2-T3-T4 | START | T1-T2-T3-T4 |
ADDR | 01H | ADDR | 01H |
CMD | 08H | CMD | 08H |
子功能码高位 | 00H | 子功能码高位 | 00H |
子功能码低位 | 00H | 子功能码低位 | 00H |
数据内容高位 | 12H | 数据内容高位 | 12H |
数据内容低位 | ABH | 数据内容低位 | ABH |
CRC CHK 低位 | ADH | CRC CHK 低位 | ADH |
CRC CHK 高位 | 14H | CRC CHK 高位 | 14H |
END | T1-T2-T3-T4 | END | T1-T2-T3-T4 |
8.2.2 通讯帧错误校验方式
帧的错误校验方式主要包括两个部分的校验,即字节的位校验(奇/偶校验)和帧的整个数据校验(CRC校验或LRC校验)。
8.2.2.1 字节位校验
用户可以根据需要选择不同的位校验方式,也可以选择无校验,这将影响每个字节的校验位设置。
偶校验的含义:在数据传输前附加一位偶校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为偶数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。
奇校验的含义:在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。
例如,需要传输"11001110",数据中含5个"1",如果用偶校验,其偶校验位为"1",如果用奇校验,其奇校验位为"0",传输数据时,奇偶校验位经过计算放在帧的校验位的位置,接收设备也要进行奇偶校验,如果发现接受的数据的奇偶性与预置的不一致,就认为通讯发生了错误。
8.2.2.2 CRC校验方式---CRC(Cyclical Redundancy Check)
使用RTU帧格式,帧包括了基于CRC方法计算的帧错误检测域。CRC域检测了整个帧的内容。CRC域是两个字节,包含16位的二进制值。它由传输设备计算后加入到帧中。接收设备重新计算收到帧的CRC,并与接收到的CRC域中的值比较,如果两个CRC值不相等,则说明传输有错误。
CRC是先存入0xFFFF,然后调用一个过程将帧中连续的6个以上字节与当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相异或(XOR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值相异或,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相异或。最终寄存器中的值,是帧中所有的字节都执行之后的CRC值。
CRC的这种计算方法,采用的是国际标准的CRC校验法则,用户在编辑CRC算法时,可以参考相关标准的CRC算法,编写出真正符合要求的CRC计算程序。
现在提供一个CRC计算的简单函数给用户参考(用C语言编程):
unsigned int crc_cal_value(unsigned char *data_value,unsigned char data_length)
{
int i;
unsigned int crc_value=0xffff;
while(data_length--)
{
crc_value^=*data_value++;
for(i=0;i<8;i++)
{
if(crc_value&0x0001)
crc_value=(crc_value>>1)^0xa001;
else
crc_value=crc_value>>1;
}
}
return(crc_value);
}
在阶梯逻辑中,CKSM根据帧内容计算CRC值,采用查表法计算,这种方法程序简单,运算速度快,但程序所占用ROM空间较大,对程序空间有要求的场合,请谨慎使用。
8.2.3 通信数据地址的定义
该部分是通信数据的地址定义,用于控制变频器的运行、获取变频器状态信息及变频器相关功能参数设定等。
(1)功能码参数地址表示规则
功能码地址占两个字节,高位在前,低位在后。高字节为功能码点号前的组号,低字节为功能码点号后的数字,但都要转换为十六进制。如P05.06,功能码点号前的组号为05,则参数地址高位为05,功能码点号后的数字为06,额参数地址低位为06,用十六进制表示该功能码地址为0506H。再比如功能码为P10.01的参数地址为0A01。
高、低字节的范围分别为:高位字节——00~ffH;低位字节——00~ffH。
注意:
P29组:为厂家设定参数,既不可读取该组参数,也不可更改该组参数;有些参数在变频器处于运行状态时,不可更改;有些参数不论变频器处于何种状态,均不可更改;更改功能码参数,还要注意参数的设定范围,单位,及相关说明。
另外,由于EEPROM频繁被存储,会减少EEPROM的使用寿命,对于用户而言,有些功能码在通讯的模式下,无需存储,只需更改片内RAM中的值就可以满足使用要求。要实现该功能,只要把对应的功能码地址最高位由0变成1就可以实现。如:功能码P0.07不存储到EEPROM中,只修改RAM中的值,可将地址设置为8007;该地址只能用作写片内RAM时使用,不能用做读的功能,如做读为无效地址。
(2)其他功能的地址说明:
表 8.1 Goodrive1000系列逆变单元MODBUS功能地址表
功能说明 | 地址定义 | 数据意义说明 | R/W特性 |
通讯控制命令 | 2000H | 0001H:正转运行 | W |
0002H:反转运行 | |||
0003H:正转点动 | |||
0004H:反转点动 | |||
0005H:停机 | |||
0006H:自由停机(紧急停机) | |||
0007H:故障复位 | |||
0008H:点动停止 | |||
0009H:预励磁 | |||
通讯设定值地址 | 2001H | 通讯设定频率(0~Fmax(单位:0.01Hz)) | W |
2002H | PID给定,范围(0~1000,1000对应100.0%) | ||
2003H | PID反馈,范围(0~1000,1000对应100.0%) | W | |
2004H | 转矩设定值(-3000~3000,1000对应100.0%电机额定电流) | W | |
2005H | 正转上限频率设定值(0~Fmax(单位:0.01Hz)) | W | |
2006H | 反转上限频率设定值(0~Fmax(单位:0.01Hz)) | W | |
2007H | 电动转矩上限转矩(0~3000,1000对应100.0%变频器电机电流) | W | |
2008H | 制动转矩上限转矩(0~3000,1000对应100.0%电机额定电流) | W | |
2009H | 特殊控制命令字: Bit0~1:=00:电机1 =01:电机2 =10:电机3 =11:电机4 Bit2:=1 转矩控制禁止 =0:转矩控制禁止无效 | W | |
200AH | 虚拟输入端子命令,范围:0x000~0x1FF | W | |
200BH | 虚拟输出端子命令,范围:0x00~0x0F | W | |
200CH | 电压设定值(V/F分离专用) (0~1000,1000对应100.0%电机额定电压) | W | |
200DH | AO 输出设定值1(-1000~1000,1000对应100.0%) | W | |
200EH | AO 输出设定值2(-1000~1000,1000对应100.0%) | W | |
变频器状态字1 | 2100H | 0001H:正转运行中 | R |
0002H:反转运行中 | |||
0003H:变频器停机中 | |||
0004H:变频器故障中 | |||
0005H:变频器POFF状态 | |||
变频器状态字2 | 2101H | Bit0: =0:运行准备维就绪 =1:运行准备就绪 Bi1~2:=00:电机1 =01:电机2 =10:电机3 =11:电机4 Bit3: =0:异步机 =1:同步机 Bit4:=0:未过载预报警 =1:过载预报警 Bit5:=0:电机未激磁 =1:电机激磁中 | R |
变频器故障代码 | 2102H | 见故障类型说明 | R |
变频器识别代码 | 2103H | GD1000-----0x0113 | R |
厂家条形码1 | 6000H | 范围:0000~FFFF | W |
厂家条形码2 | 6001H | 范围:0000~FFFF | W |
厂家条形码3 | 6002H | 范围:0000~FFFF | W |
厂家条形码4 | 6003H | 范围:0000~FFFF | W |
厂家条形码5 | 6004H | 范围:0000~FFFF | W |
厂家条形码6 | 6005H | 范围:0000~FFFF | W |
从变频器中读取参数全部为16进制表示,数值都为:实际值*10K,其中K为该参数小数点后的位数。
8.2.4 错误消息的回应
当从设备回应时,它使用功能代码域与故障地址来指示是正常回应(无误)还是有某种错误发生(称作异议回应)。对正常回应,从设备回应相应的功能代码和数据地址或子功能码。对异议回应,从设备返回一等同于正常代码的代码,但最首的位置为逻辑1。
例如:一主设备发往从设备的消息要求读一组变频器功能码地址数据,将产生如下功能代码:
0 0 0 0 0 0 1 1 (十六进制03H)
对正常回应,从设备回应同样的功能码。对异议回应,它返回:
1 0 0 0 0 0 1 1 (十六进制83H)
除功能代码因异议错误作了修改外,从设备将回应一字节异常码,这定义了产生异常的原因。
主设备应用程序得到异议的回应后,典型的处理过程是重发消息,或者针对相应的故障进行命令更改。
表8.2 错误代码的含义
代码 | 名称 | 含义 |
01H | 非法命令 | 当从上位机接收到的命令码是不允许的操作,这也许是因为功能码仅仅适用于新设备,而在此设备中没有实现;同时,也可能从机在错误状态中处理这种请求。 |
02H | 非法数据地址 | 对变频器来说,上位机的请求数据地址是不允许的地址;特别是,寄存器地址和传输的字节数组合是无效的。 |
03H | 非法数据值 | 当接收到的数据域中包含的是不允许的值。这个值指示了组合请求中剩余结构上的错误。注意:它决不意味着寄存器中被提交存储的数据项有一个应用程序期望之外的值。 |
04H | 操作失败 | 参数写操作中对该参数设置为无效设置,例如功能输入端子不能重复设置等。 |
05H | 密码错误 | 密码效验地址写入的密码与P7.00用户设置的密码不同 |
06H | 数据帧错误 | 当上位机发送的帧信息中,数据帧的长度不正确或,RTU格式CRC校验位与下位机的校验计算数不同时。 |
07H | 参数为只读 | 上位机写操作中更改的参数为只读参数 |
08H | 参数运行中不可改 | 上位机写操作中更改的参数为运行中不可更改的参数 |
09H | 密码保护 | 上位机进行读或写时,当设置了用户密码,又没有进行密码锁定开锁,将报系统被锁定。 |