MODBUS从站通讯协议说明(MODBUS功能码及数据编址)
H作为MODBUS从站时,支持MODBUS协议功能码0x01,0x03,0x05,0x06,0x0f,0x10(按十六进制数算);通过这些功能码,可读写的线圈有M,S,T,C,X(只读),Y等变量;寄存器有D,T,C。
MODBUS通讯主机在访问(读取或改写)PLC从机的内部变量时,必须遵循如下的通讯命令帧定义,以及变量地址索引方法,才能进行正常的通讯操作。 MODBUS帧格式(以MODBUS-RTU为例) a) 功能码0x01(01):读线圈
请求帧格式:从机地址+0x01+线圈起始地址+线圈数量+CRC检验
响应帧格式:从机地址+0x01+字节数+线圈状态+CRC检验
b) 功能码0x03(03):读寄存器
请求帧格式:从机地址+0x03+寄存器起始地址+寄存器数量+CRC检验
响应帧格式:从机地址+0x03+字节数+寄存器值+CRC检验
c) 功能码0x05(05):写单线圈
请求帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验
响应帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验
d) 功能码0x06(06):写单个寄存器
请求帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验
响应帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验。
e) 功能码0x0f(15):写多个线圈
请求帧格式:从机地址+0x0f+线圈起始地址+线圈数量+字节数+线圈状态+CRC检验。
响应帧格式:从机地址+0x0 f +线圈起始地址+线圈数量+CRC检验
f) 功能码0x10(16):写多个寄存器
请求帧格式:从机地址+0x10+寄存器起始地址+寄存器数量+字节数+寄存器值+CRC检验。
响应帧格式:从机地址+0x10+寄存器起始地址+寄存器数量+CRC检验。
变量编址 a) 线圈编址
线圈:指位变量,只有两种状态0和1。在本PLC中包含M,S,T,C,X,Y等变量。
b) 寄存器编址
寄存器:指16位或32位变量,在本PLC中,16位变量包含D,T,C0~199;32位变量为C200~255。
说明:
通过MODBUS访问C200~C255段32位寄存器时,一个寄存器作两寄存器看待,一个32位寄存器占用两个16寄存器空间。比
如用户要读或写C205~C208这4个寄存器,MODBUS地址为0xF70A(0xF700+10),寄存器数量8(4*2)。 32位寄存器不支持写单个寄存器(0x06)功能码。
注:MODBUS通讯用PLC的COM1口,变量都需转为十六进制数,如PL默认地址为1,读线圈M400的值,需把十进制400转为十六进制0190来读,请求帧格式:从机地址+0x01+线圈起始地址+线圈数量+CRC检验,0+ CRC检验。
读D1900需把十进制1900转为十六进制076C,请求帧格式:从机地址+0x03+寄存器起始地址+寄存器数量+CRC检验,0103076C0001+CRC检验。