SD300C伺服Modbus 通讯功能说明 V10Word文件下载.docx
《SD300C伺服Modbus 通讯功能说明 V10Word文件下载.docx》由会员分享,可在线阅读,更多相关《SD300C伺服Modbus 通讯功能说明 V10Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
3:
波特率为38400bps
P-183
MODBUS通讯数据模式选择
(暂时只支持RTU数据格式)
0~5
1
通过此参数选择RS-485通讯的数据模式,选择的数据模式需与上位控制器的通讯协议一致,具体的参数值意义如下:
数据位-8位校验位-无停止位-1位
数据位-8位校验位-偶校验(Even)停止位-1位
数据位-8位校验位-奇校验(Odd)停止位-1位
数据位-8位校验位-无停止位-2位(PC调试通讯模式:
13)
4:
数据位-8位校验位-偶校验(Even)停止位-2位
5:
数据位-8位校验位-奇校验(Odd)停止位-2位
3MODBUS通讯协议
使用RS-485串行通讯时,每台伺服驱动器必须预先在参数P-181上设定其通讯站号,计算机或者上位控制器根据站号对相应的伺服驱动器实施控制;
波特率需要参考上位控制器的通讯方式来设定参数P-182;
MODBUS通讯协议暂时只支持RTU(RemoteTerminalUnit)模式,使用者可根据上位控制器的要求在参数P-183上设定所需的通讯数据模式。
以上参数设置完成后,需要执行参数保存操作并且断电重启驱动器后才能生效。
以下说明MODBUS通讯的具体内容。
通讯数据结构:
•RTU模式:
MODBUS应用层协议定义了一个简单的协议数据单元(PDU),如下图所示,该协议数据单元不依赖于底层的通讯层。
地址场
功能码
数据场
检验码
MODBUS以地址场作为帧的开始,地址场的内容为有效地址值(0~247),主机在请求信息的地址场中放置从机地址值以确定该请求信息的接收者,符合条件的从机接收到信息并完成相应处理之后,在响应信息的地址场中放置自身的地址值,使主机知道是何从机发送的响应。
地址场之后是功能码,它指示从机将完成何种操作。
功能码之后是数据场,数据场包含请求和响应的参数,根据功能码的不同,数据场的格式、长度以及含义也有所不同。
校验码是用来验证信息的有效性,保证信息传送的可靠性。
RTU模式下是使用的16位
CRC(CyclicalRedundancyCheck)校验。
RTU模式下,信息帧中的每8位一个字节的数据按2个4位的16进制码发送,例如:
1byte数据64H。
RTU模式是面向比特的传输模式,以不少于3.5个字符的空闲时间为帧的开始,随后发送的是地址场,网上设备监视通讯总线,当连续监视到3.5个字符的空闲时间后可以接收地址场信息,当判断接收到的地址场信息为有效时,继续接收其后信息,然后根据功能码及附加信息进行相应操作,若要求有响应信息则封装响应信息并发送给主机。
最后发送的字节大约经过3.5个字符的空闲时间后表示信息帧的结束,新的信息帧可以发送。
RTU模式靠模拟的同步信息来保持帧同步,整个信息帧必须作为连续数据流一次传送完。
如果一个连续数据流在传送过程中,接收设备检测到有1.5个以上字符间隔时间,则认为一帧数据已经接收完,
并把下一个接收字符作为下一帧的开始。
在正常情况下,信息帧之间的间隔时间至少有3.5
个字符,即一帧数据发送完,至少要经过3.5个字符的空闲时间才能发送下一帧数据。
RTU模式下的信息帧格式为:
START
(ADR)
(CMD)
(DATA)
校验码
(CRC)
END
T1-T2-T3-T4
8bits
n*8bits
16bits
注:
T1-T2-T3-T4表示与上帧的时间间隔最小为3.5字符时间。
RTU模式下,发送每个字节的格式为:
起始位
数据位(低位在前)
奇偶校验位
停止位
1bit
1bitornobit
1bitor2bits
字符结构:
10bits字符框(用于8bits字符不加校验)
(8位数据+无校验+1停止位)
11bits字符框(用于8bit字符加校验)
通讯信息帧格式:
通讯信息帧格式框内各项条目说明如下:
➢START(通讯起始)
RTU模式:
与上帧的时间间隔最小为3.5字符时间。
➢ADR(通讯地址)
合法的通讯地址范围在1到32之间,如下所示:
与站号为16(十六进制10H)的伺服驱动器进行通讯:
ADR=10H
➢CMD(功能码)及DATA(数据场)
数据字符的格式依功能码而定。
常用的功能码叙述如下:
命令码03H:
读取驱动器的参数数值
命令码04H:
读取驱动器的运行状态(如电机转速、位置、电流、转矩等变量值)命令码06H:
写入驱动器的参数(单个写入)
命令码41H:
将驱动器的参数写入EEPROM(参数保存)
➢CRC(RTU模式)帧校验计算:
RTU模式采用CRC(CyclicalRedundancyCheck)帧校验,CRC帧校验计算以下列步骤说明:
步骤一:
初始化一个内容为FFFFH的16bits寄存器,称之为CRC寄存器。
步骤二:
将命令信息的第一个字节与16-bitsCRC寄存器的低字节进行异或运算,并将结果存回CRC寄存器。
步骤三:
检查CRC寄存器的最低位(LSB),若此位为0,则右移一位;
若此位为1,则CRC寄存器值右移一位后,再与A001H进行异或运算。
步骤四:
回到步骤三,直到步骤三已被执行过8次,然后进到步骤五。
步骤五:
对命令信息的下一个字节重复步骤二到步骤四,直到所有字节都完成上述处理,此时CRC寄存器的内容即是CRC帧校验。
说明:
计算出CRC帧校验之后,在命令信息中,须先填上CRC的低位,再填上CRC的高位,请参考以下例子。
例如:
读取站号为01H的伺服驱动器的0段05号参数。
从ADR至数据的最后一字节所算出的CRC寄存器的最后内容为3794H,则其命令信息如下所示,须注意的是:
字节
ADR
01H
CMD
03H
起始数据
位置
00H(高字节)
05H(低字节)
数据数
02H(低字节)
CRCLow
94H(高字节)
CRCHigh
37H(低字节)
94H应在字节37H之前传送。
➢END(通讯结束):
与下帧的时间间隔最小为3.5字符时间。
功能码(CMD):
功能码为1个byte(8bits),其范围为1~255。
功能码(HEX)
具体含义
Modbus协议规范中的含义
读取驱动器的参数数值(可同时读
取多个参数)
ReadHoldingRegister
04H
读取驱动器的运行状态(如电机
转速、位置、电流、转矩等变量值,可同时读取多个状态)
ReadInputRegister
06H
WriteSingleRegister
08h
诊断功能
Diagnostic
41H
将驱动器的参数写入
EEPROM(参数保存)
通讯期间可能会发生各种异常及错误,为了使这些异常和错误能够被主机识别,故定义了相应的异常码,如下表所示。
当从机接收主机的信息发现错误或无法完成正常响应时,从
机将向主机发送出错响应帧,即功能码字节的最高位置1,数据场放置相应的异常码
(ExceptionCode)。
ExceptionCode(HEX)
Mean
01h
ILLEGALFUNCTION
02h
ILLEGALDATAADDRESS
03h
ILLEGALDATAVALUE
04h
SLAVEDEVICEFAILURE
05h
ACKNOWLEDGE
06h
SLAVEDEVICEBUSY
4参数的写入与读出
伺服驱动器所有参数详情请参照调试手册的参数章节,参数按参数段进行划分。
每个参数使用16bits的数据表示,每个参数的通信地址由参数序号确定(范围0~249),例如:
参数P-005的通讯地址即为005(十进制),参数P-108的通讯地址即为108(十进制),参数P-204的通讯地址即为204(十进制),其他参数依次类推。
在参数部分说明的所有参数都可以通过通讯来读取,但只开放部分参数允许用户修改写入,调试手册上列出的参数是允许修改写入的,其他未做说明的参数是伺服驱动器保留参数
(用户不能对保留参数进行写入操作,否则可能引起伺服驱动器运行异常),若用户需要修改其他参数请联系本公司技术人员。
5监视状态量地址说明
伺服驱动器内部的状态量可以通过RS-485通讯口读出,写入操作无效。
状态量以16bit
数据存储,提供0~39共40个状态变量,相关的状态量的读取地址(十六进制)如下所示:
0x0000:
电机速度,单位“r/min”;
0x0001:
原始位置指令(输入脉冲)低16bit;
0x0002:
原始位置指令(输入脉冲)高16bit;
0x0003:
位置指令(脉冲)低16bit;
0x0004:
位置指令(脉冲)高16bit;
0x0005:
当前电机位置(脉冲)低16bit;
0x0006:
当前电机位置(脉冲)高16bit;
0x0007:
位置偏差(脉冲)低16bit;
0x0008:
位置偏差(脉冲)高16bit;
0x0009:
电机转矩,单位“%”(额定转矩的百分比);
0x000A:
峰值转矩,单位“%”(1s内的峰值转矩);
<
10>
0x000B:
电机瞬时电流,单位“0.1A”(12:
表示电机实时电流1.2A);
0x000C:
电机峰值电流,单位“0.1A”(152:
表示1s内电流最大值为15.2A);
0x000D:
位置指令脉冲频率,单位“0.1kHz”(3000:
表示300kHz);
0x000E:
速度指令,单位“r/min”;
0x000F:
转矩指令,单位“%”;
15>
0x0010:
速度模拟指令电压,单位“mV”;
0x0011:
转矩模拟指令电压,单位“mV”;
0x0012:
输入端子DI状态,[注1];
0x0013:
输出端子DO状态,[注2];
0x0014:
电机编码器单圈绝对位置(脉冲)低16bit;
20>
0x0015:
电机编码器单圈绝对位置(脉冲)高16bit;
0x0016:
电机编码器多圈的位置(在无多圈信息时,读出0值);
0x0017:
再生制动负载率,单位“%”;
0x0018:
平均负载率,单位“%”;
0x0019:
输出电压,单位“%”;
25>
0x001A:
报警代码;
0x001B:
电机速度,单位“0.1r/min”;
0x001C:
第二编码器位置(脉冲)低16bit;
0x001D:
第二编码器位置(脉冲)高16bit;
0x001E:
保留<
30>
0x001F:
保留
0x0020:
0x0021:
0x0022:
0x0023:
35>
0x0024:
0x0025:
0x0026:
0x0027:
39>
[注1]:
此地址读出的数据为16bit,其中bit5~bit0分别对应DI6~DI1的输入状态,“1”表示输入高电平,
“0”表示输入低电平;
bit15~bit6为保留位。
[注2]:
此地址读出的数据位16bit,其中bit5~bit0表示DO6~DO1的输出状态,“1”表示输出高电平,“0”表示输出低电平;
6通讯实例
6.1读状态量(CMD=04H)
采用读状态功能码(04H)可以读取伺服驱动器中的所有监视状态量,通讯帧格式说明如下:
注意:
每次读取的状态个数,最多为8个。
请求帧格式如下:
1byte
起始地址值
2bytes,高字节在前
读取状态个数
CRC校验码
2bytes,低字节在前
0x01
0x04
0x00,0x00
0x00,0x01(N)
CRC_Lo,CRC_Hi
正常响应:
状态所占字节数
1byte
状态值
0x02(2N)
异常响应:
异常码
0x84
0x01or02or03or04
示例如下:
主机发送帧:
ADDR
CODE
STADDR_H
STADDR_L
RNUM_H
RNUM_L
CRC_L
CRC_H
0x00
0x02
0xXX
从机回应帧:
BYTE_NUM
DATA1_H
DATA1_L
DATA2_H
DATA2_L
STADDR:
读状态起始地址RNUM:
读取的状态个数
BYTE_NUM:
读取的状态所占字节数(例如RNUM为2,即2个16位数据,则BYTE_NUM
为2*2=4字节)
DATAX:
读回的状态值,X代表序号,DATA1是第一个数据,DATA2是第二个数据
本示例发送帧中STADDR=0x0001,RNUM=0x02,表示从起始地址0x0001开始,读取2
个状态数据(即读取地址为0x0001和0x0002的两个状态值,具体含义见上节描述)。
回应帧中BYTE_NUM=0x04,表示读取的两个状态值占用4个字节,紧接着DATA1,DATA2
即是地址为0x0001和0x0002的状态值。
6.2读参数(CMD=03H)
采用读参数功能码(03H)可以读取驱动器中的所有参数,通讯帧格式说明如下:
每次读取的参数个数,最多为8个。
读取参数个数
0x03
参数所占字节数
参数数值
0x0B,0xB8
0x83
读参数起始地址RNUM:
读取的参数个数
读取的参数所占字节数(例如RNUM为2,即2个16位数据,则BYTE_NUM
为2*2=4)
读回的参数值,X代表序号,DATA1是第一个参数,DATA2是第二个参数
本示例发送帧中STADDR=0x01,RNUM=0x02,表示从起始地址1开始,读取2个参数
(即读取地址为0x01和0x02的两个参数P-001和P-002)。
回应帧中BYTE_NUM=0x04,表示读取的两个参数值占用4个字节,紧接着DATA1,DATA2
即是地址为0x01和0x02的参数值。
6.3写参数(CMD=06H)
采用写参数功能码(06H)可以写入调试手册列出的参数,通讯帧格式说明如下:
每次只能写入一个参数。
参数号
期望参数值
0x06
0x00,0x64
0x86
WADDR_H
WADDR_L
VALUE_H
VALUE_L
WADDR:
写参数地址
VALUE:
要写入的值
本示例发送帧中ADDR=0x01,VALUE=0x0102,表示将值0x0102写入地址为0x01的参数中。
回应帧和发送帧相同。
6.4诊断功能(CMD=08H)
主机发送诊断帧后,从机(伺服驱动器)会回应相同的数据。
提示:
诊断功能可用来确定MODBUS通讯是否正常。
DATA_H
DATA_L
0x08
0x12
0x34
诊断命令的从机回应帧数据应该与主机发送帧数据完全相同,因此用诊断命令可以检测通讯是否正常。
DATA可以是任意的自定义数据,例如主机发送0xABCD,则从机回应也是0xABCD
6.5保存参数(CMD=41H)
采用保存参数功能码(41H)可以将驱动器的参数存储到EEPROM,通讯帧格式说明如下:
发送此命令后,伺服驱动器需要一定时间将参数保存到EEPROM
0x41
建议发送此命令完毕后,等待5S以上,再进行其他操作。
0xC1