您正在浏览的页面需要登录,为了提高您的阅读体验,请在右上角登录您的账号!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Modbus通讯协议格式
[size=9.0000pt]
[size=9.0000pt](一) [size=9.0000pt]通讯协议两种方式
[size=9.0000pt]RTU模式:每个 8bit资料由两个 4bit十六进制字元组成,如: 64H (十六进制)。
[size=9.0000pt]ASCII模式:每个 8bit资料由两个ASCII字元组成,如:64H(十六进制)以 ASCII 码表示, 包含6(36H)和4(34H)。
[size=9.0000pt]
[size=9.0000pt]通讯方式
|
[size=9.0000pt]起始位
|
[size=9.0000pt]数据格式
|
[size=9.0000pt]校验
|
[size=9.0000pt]结束位
|
[size=9.0000pt]RTU方式
|
[size=9.0000pt]静音
|
[size=9.0000pt]ADDR
|
[size=9.0000pt]CMD
|
[size=9.0000pt]LEN
|
[size=9.0000pt]D(n-1)~D(0)
|
[size=9.0000pt]CRC
|
[size=9.0000pt]静音
|
[size=9.0000pt]ASCII方式
|
[size=9.0000pt]STX
|
[size=9.0000pt]ADDR
|
[size=9.0000pt]CMD
|
[size=9.0000pt]LEN
|
[size=9.0000pt]D(n-1)~D(0)
|
[size=9.0000pt]LRC
|
[size=9.0000pt]END
|
[size=9.0000pt]
[size=9.0000pt]1. [size=9.0000pt]起始位
[size=9.0000pt]◆静音:表示50ms时间以上无串口中断
[size=9.0000pt]◆STX:起始位“:”(3AH[size=9.0000pt])
[size=9.0000pt]2. [size=9.0000pt]数据格式
[size=9.0000pt]◆ADDR: 通讯位置(8bit)
[size=9.0000pt]00:MODBUS广播方式
[size=9.0000pt]01~250:变频器地址
[size=9.0000pt]【注】ADDR=00时,无返回数据;
[size=9.0000pt]ADDR≠00且与变频器地址一致时有响应。
[size=9.0000pt]◆CMD:命令码(8bit)
[size=9.0000pt]01:读取功能码数据
[size=9.0000pt]02:更改功能码
[size=9.0000pt]03:写命令控制变频器状态
[size=9.0000pt]04:读取当前变频器状态
[size=9.0000pt]05:串口设定频率
[size=9.0000pt]◆LEN:资料长度,指D(n-1)~D(0)的长度,长度设定:每8bit为单位长度。
[size=9.0000pt]◆DATA:资料内容,D(n-1)~D(0)[size=10.5000pt]。
[size=9.0000pt]3. [size=9.0000pt]校验位
[size=9.0000pt]◆CRC:侦误值
[size=9.0000pt]RTU模式,采用CRC(cyclical Redundancy Check)侦误值。下列以C语言产生CRC值,此函数需要两个参数:
[size=9.0000pt]unsigned char data[size=9.0000pt]←[size=9.0000pt]指信息缓冲区的指标
[size=9.0000pt]unsigned char length[size=9.0000pt]←[size=9.0000pt]指信息缓冲区的位元组数目
[size=9.0000pt]此函数将传回unsigned integer型态之CRC值。
[size=9.0000pt]unsigned int crc_chk(unsigned char data,unsigned char [size=9.0000pt]length[size=9.0000pt])
[size=9.0000pt]{
[size=9.0000pt]int j;
[size=9.0000pt]unsigned int reg_crc=0xffff;
[size=9.0000pt]while(length--)
[size=9.0000pt]{
[size=9.0000pt]reg_crc^=*data++;
[size=9.0000pt]for(j=0;j<8;j++)
[size=9.0000pt]{
[size=9.0000pt]if(reg_crc&0x01)
[size=9.0000pt]reg_crc=(reg_crc>>1)^0xa001;
[size=9.0000pt]else
[size=9.0000pt]reg_crc=reg_crc>>1;
[size=9.0000pt]}
[size=9.0000pt]}
[size=9.0000pt]return reg_crc;
[size=9.0000pt]}
[size=9.0000pt]◆LRC:侦误值
[size=9.0000pt]ASCII模式,采用LRC(Longitudinal Redundancy Check)侦误值。LRC侦误值乃是将ADDR至最后一个数据内容加总。得到结果以256单位,超出部分去除然后计算二次反补后得到结果即为LRC侦误值,如:更改功能码P003为30.00Hz
[size=9.0000pt]
[size=9.0000pt]STX
|
[size=9.0000pt]ADDR
|
[size=9.0000pt]CMD
|
[size=9.0000pt]LEN
|
[size=9.0000pt]DATA
|
[size=9.0000pt]LRC
|
[size=9.0000pt]END
|
[size=9.0000pt]:
|
[size=9.0000pt]01
|
[size=9.0000pt]02
|
[size=9.0000pt]03
|
[size=9.0000pt]03 0B B8
|
[size=9.0000pt]34
|
[size=9.0000pt]CR LF
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 32H
|
[size=9.0000pt]30H 33H
|
[size=9.0000pt]30H 33H 30H 42H 42H 38H
|
[size=9.0000pt]33H 34H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]DATA数据说明:
[size=9.0000pt]“03”为功能参数P003,主频率,设置范围0.00~400.00Hz;
[size=9.0000pt]“0B B8”为设置参数值3000(既30.00Hz)的十六进制数值。
[size=9.0000pt]LRC值计算:01H + 03H + 03H + 03H + 0BH + B8H = CDH
[size=9.0000pt]CDH二次反补为33H,所以传送数据内容为:
[size=9.0000pt]3AH 30H 31H 30H 32H 30H 33H 30H 33H 30H 42H 42H 38H 33H 34H 0DH 0AH
[size=9.0000pt]4. [size=9.0000pt]结束位
[size=9.0000pt]RTU方式以静音(>50ms)结束,ASCII方式以[size=9.0000pt]CR(0DH)LF(0AH)[size=9.0000pt]结束[size=9.0000pt]。
[size=9.0000pt]【注】通讯中的数据类型:由于在通讯中,传输的数据为十六进制整数。对于功能码的参数值而言,最小单位可由功能一览表中参数的小数点位置看出,如P003的最小单位为0.01Hz。因此依据Modbus协议,通讯传输3000就代表30.00Hz。
[size=9.0000pt]
[size=9.0000pt](二) [size=9.0000pt]功能实例说明
[size=9.0000pt]1. [size=9.0000pt]01读取功能码数据
[size=9.0000pt]【例】读取主频率(功能码P003),参数值为30.00Hz(十六进制为0B B8)
[size=9.0000pt][发送] 01 01 01 03
[size=9.0000pt][接收] 01 01 03 03 0B B8
[size=9.0000pt]具体格式如下表所述:
[size=9.0000pt]
[size=9.0000pt]通讯
[size=9.0000pt]方式
|
[size=9.0000pt]起始位
|
[size=9.0000pt]数据格式
|
[size=9.0000pt]校验位
|
[size=9.0000pt]结束
|
[size=9.0000pt]ADDR
|
[size=9.0000pt]CMD
|
[size=9.0000pt]LEN
|
[size=9.0000pt]DATA
|
[size=9.0000pt]RTU
[size=9.0000pt]方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]01
|
[size=9.0000pt]01
|
[size=9.0000pt]01
|
[size=9.0000pt]03
|
[size=9.0000pt]11 89
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]接收
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]01
|
[size=9.0000pt]01
|
[size=9.0000pt]03
|
[size=9.0000pt]03 0B B8
|
[size=9.0000pt]CB 0C
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]ASCII
[size=9.0000pt]方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 33H
|
[size=9.0000pt]46H 41H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]接收
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 33H
|
[size=9.0000pt]30H 33H 30H
[size=9.0000pt]41H 41H 38H
|
[size=9.0000pt]33H 35H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]
[size=9.0000pt]2. [size=9.0000pt]02更改功能码
[size=9.0000pt]【例】更改主频率(功能码P003)的参数值为30Hz(十六进制为0B B8)
[size=9.0000pt][发送] 01 02 03 03 0B B8
[size=9.0000pt][接收] 01 02 03 03 0B B8
[size=9.0000pt]【注】当功能码参数最大值转为通讯中的数据类型时,若数值小于FFH,则发送的参数值只占用功能码后的高位,低位置00。正确接收数据时,只返回高位数值。如[size=9.0000pt]更改功能码P044的参数值为02时,由于P044的最大值为32(20H),小于FFH,所以:
[size=9.0000pt] [发送] 01 02 03 2C 02 00
[size=9.0000pt][接收] 01 02 03 2C 02
[size=9.0000pt]具体格式如下表所述:
[size=9.0000pt]
[size=9.0000pt]通讯
[size=9.0000pt]方式
|
[size=9.0000pt]起始位
|
[size=9.0000pt]数据格式
|
[size=9.0000pt]校验位
|
[size=9.0000pt]结束
|
[size=9.0000pt]ADDR
|
[size=9.0000pt]CMD
|
[size=9.0000pt]LEN
|
[size=9.0000pt]DATA
|
[size=9.0000pt]RTU
[size=9.0000pt]方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]01
|
[size=9.0000pt]02
|
[size=9.0000pt]03
|
[size=9.0000pt]03 0B B8
|
[size=9.0000pt]8F 0C
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]接收
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]01
|
[size=9.0000pt]02
|
[size=9.0000pt]03
|
[size=9.0000pt]03 0B B8
|
[size=9.0000pt]8F 0C
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]ASCII
[size=9.0000pt]方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 32H
|
[size=9.0000pt]30H 33H
|
[size=9.0000pt]30H 33H 30H
[size=9.0000pt]41H 41H 38H
|
[size=9.0000pt]33H 34H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]接收
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 32H
|
[size=9.0000pt]30H 33H
|
[size=9.0000pt]30H 33H 30H
[size=9.0000pt]41H 41H 38H
|
[size=9.0000pt]33H 34H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]
[size=9.0000pt]3. [size=9.0000pt]03写命令控制变频器状态
[size=9.0000pt]【例】写命令控制变频器状态,实现变频器的运行功能
[size=9.0000pt][发送] :01 03 01 01
[size=9.0000pt]【注】命令表:
[size=9.0000pt]
[size=9.0000pt]功 能
|
[size=9.0000pt]运 行
|
[size=9.0000pt]正 转
|
[size=9.0000pt]停 止
|
[size=9.0000pt]反 转
|
[size=9.0000pt]参 数
|
[size=9.0000pt]01H
|
[size=9.0000pt]02H
|
[size=9.0000pt]08H
|
[size=9.0000pt]14H
|
[size=9.0000pt]
[size=9.0000pt]具体格式如下表所述:[size=9.0000pt]
[size=9.0000pt]
[size=9.0000pt]通讯
[size=9.0000pt]方式
|
[size=9.0000pt]起始位
|
[size=9.0000pt]数据格式
|
[size=9.0000pt]校验位
|
[size=9.0000pt]结束
|
[size=9.0000pt]ADDR
|
[size=9.0000pt]CMD
|
[size=9.0000pt]LEN
|
[size=9.0000pt]DATA
|
[size=9.0000pt]RTU方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]01
|
[size=9.0000pt]03
|
[size=9.0000pt]01
|
[size=9.0000pt]01
|
[size=9.0000pt]31 88
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]ASCII方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 33H
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]46H 41H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]
[size=9.0000pt]4. [size=9.0000pt]04读取当前变频器状态
[size=9.0000pt]【例】读取变频器的当前设定频率,参数值为30Hz(十六进制为0B B8)
[size=9.0000pt][发送] 01 04 01 00
[size=9.0000pt][接收] 01 04 03 00 0B B8
[size=9.0000pt]【注】DATA=0~7时,返回单个状态值,变频器状态数据如下:
[size=9.0000pt]00:当前设定频率 01:当前输出频率
[size=9.0000pt]02:当前输出电流 03:当前马达转速
[size=9.0000pt]04:当前直流电压 05:当前输出电压
[size=9.0000pt]06:当前计数器 07:当前变频器温度
[size=9.0000pt]具体格式如下表所述:
[size=9.0000pt]
[size=9.0000pt]通讯
[size=9.0000pt]方式
|
[size=9.0000pt]起始位
|
[size=9.0000pt]数据格式
|
[size=9.0000pt]校验位
|
[size=9.0000pt]结束
|
[size=9.0000pt]ADDR
|
[size=9.0000pt]CMD
|
[size=9.0000pt]LEN
|
[size=9.0000pt]DATA
|
[size=9.0000pt]RTU
[size=9.0000pt]方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]01
|
[size=9.0000pt]04
|
[size=9.0000pt]01
|
[size=9.0000pt]00
|
[size=9.0000pt]41 89
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]接收
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]01
|
[size=9.0000pt]04
|
[size=9.0000pt]03
|
[size=9.0000pt]00 0B B8
|
[size=9.0000pt]F7 0C
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]ASCII
[size=9.0000pt]方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 34H
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 30H
|
[size=9.0000pt]46H 41H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]接收
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 34H
|
[size=9.0000pt]30H 33H
|
[size=9.0000pt]30H 30H 30H
[size=9.0000pt]41H 41H 38H
|
[size=9.0000pt]33H 35H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]
[size=9.0000pt]5. [size=9.0000pt]05串口设定频率
[size=9.0000pt]【例】设定频率30.00Hz
[size=9.0000pt][发送] 01 05 02 0B B8
[size=9.0000pt][接收] 01 05 02 0B B8 [size=9.0000pt]
[size=9.0000pt]
[size=9.0000pt]通讯
[size=9.0000pt]方式
|
[size=9.0000pt]起始位
|
[size=9.0000pt]数据格式
|
[size=9.0000pt]校验位
|
[size=9.0000pt]结束
|
[size=9.0000pt]ADDR
|
[size=9.0000pt]CMD
|
[size=9.0000pt]LEN
|
[size=9.0000pt]DATA
|
[size=9.0000pt]RTU
[size=9.0000pt]方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]01
|
[size=9.0000pt]05
|
[size=9.0000pt]02
|
[size=9.0000pt]0B B8
|
[size=9.0000pt]BF 8E
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]接收
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]01
|
[size=9.0000pt]05
|
[size=9.0000pt]02
|
[size=9.0000pt]0B B8
|
[size=9.0000pt]BF 8E
|
[size=9.0000pt]>50ms
|
[size=9.0000pt]ASCII
[size=9.0000pt]方式
|
[size=9.0000pt]发送
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 35H
|
[size=9.0000pt]30H 32H
|
[size=9.0000pt]30H 41H
[size=9.0000pt]41H 38H
|
[size=9.0000pt]33H 35H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]接收
|
[size=9.0000pt]3AH
|
[size=9.0000pt]30H 31H
|
[size=9.0000pt]30H 35H
|
[size=9.0000pt]30H 32H
|
[size=9.0000pt]30H 41H
[size=9.0000pt]41H 38H
|
[size=9.0000pt]33H 35H
|
[size=9.0000pt]0DH 0AH
|
[size=9.0000pt]
[size=9.0000pt]【注】ASCII码对照表
[size=9.0000pt]
[size=9.0000pt]字元符号
|
[size=9.0000pt]0
|
[size=9.0000pt]1
|
[size=9.0000pt]2
|
[size=9.0000pt]3
|
[size=9.0000pt]4
|
[size=9.0000pt]5
|
[size=9.0000pt]6
|
[size=9.0000pt]7
|
[size=9.0000pt]ASCII码
|
[size=9.0000pt]30H
|
[size=9.0000pt]31H
|
[size=9.0000pt]32H
|
[size=9.0000pt]33H
|
[size=9.0000pt]34H
|
[size=9.0000pt]35H
|
[size=9.0000pt]36H
|
[size=9.0000pt]37H
|
[size=9.0000pt]
[size=9.0000pt]字元符号
|
[size=9.0000pt]8
|
[size=9.0000pt]9
|
[size=9.0000pt]A
|
[size=9.0000pt]B
|
[size=9.0000pt]C
|
[size=9.0000pt]D
|
[size=9.0000pt]E
|
[size=9.0000pt]F
|
[size=9.0000pt]ASCII码
|
[size=9.0000pt]38H
|
[size=9.0000pt]39H
|
[size=9.0000pt]41H
|
[size=9.0000pt]42H
|
[size=9.0000pt]43H
|
[size=9.0000pt]44H
|
[size=9.0000pt]45H
|
[size=9.0000pt]46H
|
[size=10.5000pt]
[size=10.5000pt]
[size=10.5000pt]
[size=10.5000pt]使用手册
[size=10.5000pt]
[size=10.5000pt]
控制电动机正转
[size=10.5000pt]
[size=10.5000pt]
|
|