MODBUS从站通讯应用

更新时间:2024-01-15 21:25:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MODBUS从站通讯应用

有些工业应用中,PLC作为工业自动化系统的一部分,要接受自动化控制网络的监控,典型的上位机如DCS、运行组态软件的工业PC等,作为监控主机,以MODBUS主站协议与PLC等设备进行通讯,此时PLC的通讯口需要以MODBUS从站协议与上位机通讯。TH系列PLC内置有MODBUS-RTU从站协议和MODBUS-ASCII从站协议,并且只有com2口可以支持该协议运行。 MODBUS从站协议的相关寄存器

PLC程序中,将上述几个寄存器配置完毕,当相应通讯口有MODBUS主站发送给本机地址的通讯帧时,PLC系统程序即会根据通讯要求,自动组织MODBUS

通讯帧进行应答,无需用户程序的参与。 MODBUS从站支持的操作

TH系列plc作为MODBUS从站时,支持MODBUS的0x01,0x03,0x05,0x06,0x 0f,0x10等通讯操作命令;通过这些命令,可读写PLC的线圈有M,S,T,C,X(只读),Y等变量;寄存器变量有D,T,C。 MODBUS通讯主机在访问(读取或改写)PLC从机的内部变量时,必须遵循如下的通讯命令帧定义,以及变量地址索引方法,才能进行正常的通讯操作。

1.1命令码0x01(01):读线圈

请求帧格式:从机地址+0x01+线圈起始地址+线圈数量+CRC检验 序号 1 2 3 4 5 数据(字节)意义 从机地址 0x01(命令码) 线圈起始地址 线圈数量 CRC校验 字节数量 1个字节 1个字节 2个字节 2个字节 2个字节 说明 取值1~247,由D8121设定 读线圈 高位在前,低位在后,见线圈编址 高位在前,低位在后( N) 高位在前,低位在后 响应帧格式:从机地址+0x01+字节数+线圈状态+CRC检验 序号 数据(字节)意义 字节数量 1 2 3 4 5 从机地址 1个字节 说明 取值1~247,由D8121设定 读线圈 值:[(N+7)/8] 0x01(命令码) 1个字节 字节数 线圈状态 CRC校验 1个字节 每8个线圈合为一个字节,最后一个若不足8位,[(N+7)/8]未定义部分填0。前8个线圈在第一个字节,最地个字节 址最小的线圈在最低位。0为OFF,256为ON. 2个字节 高位在前,低位在后 错误响应:见错误响应帧

1.2命令码0x03(03):读寄存器

请求帧格式:从机地址+0x03+寄存器起始地址+寄存器数量+CRC检验

序号 1 2 3 4 5 数据(字节)意义 字节数量 从机地址 1个字节 0x03(命令码) 1个字节 寄存器起始地址 2个字节 寄存器数量 2个字节 CRC校验 2个字节 说明 取值1~247,由D8121设定 读寄存器 高位在前,低位在后,见寄存器编址 高位在前,低位在后(N) 高位在前,低位在后 响应帧格式:从机地址+0x03+字节数+寄存器值+CRC检验 序号 1 2 3 4 5 数据(字节)意义 从机地址 0x03(命令码) 字节数 寄存器值 CRC校验 字节数量 说明 1个字节 取值1~247,由D8121设定 1个字节 读寄存器 1个字节 值:N*2 N*2个字节 每两字节表示一个寄存器值,高位在前低位在后。寄存器地址小的排在前面 2个字节 高位在前,低位在后 错误响应:见错误响应帧

1.3 命令码0x05(05):写单线圈

请求帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验 序号 1 2 3 4 5 数据(字节)意义 从机地址 0x05(命令码) 线圈地址 线圈状态 CRC校验 字节数量 1个字节 1个字节 2个字节 2个字节 2个字节 说明 取值1~247,由D8121设定 写单线圈 高位在前,低位在后,见线圈编址 高位在前,低位在后。0为OFF,-256为ON 高位在前,低位在后 响应帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验 序号 1 2 3 4 5 数据(字节)意义 从机地址 0x05(命令码) 线圈地址 线圈状态 CRC校验 字节数量 1个字节 1个字节 2个字节 2个字节 2个字节 说明 取值1~247,由D8121设定 写单线圈 高位在前,低位在后,见线圈编址 高位在前,低位在后。0为OFF,-256为ON 高位在前,低位在后 错误响应:见错误响应帧

1.4 命令码0x06(06):写单个寄存器

请求帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验 序号 1 2 3 4 5 数据(字节)意义 从机地址 0x06(命令码) 寄存器地址 寄存器值 CRC校验 字节数量 1个字节 1个字节 2个字节 2个字节 2个字节 说明 取值1~247,由D8121设定 写单寄存器 高位在前,低位在后,见寄存器值编址 高位在前,低位在后。 高位在前,低位在后 响应帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验。 序号 1 2 3 4 5 数据(字节)意义 字节数量 说明 从机地址 1个字节 取值1~247,由D8121设定 0x06(命令码) 1个字节 写单寄存器 寄存器地址 2个字节 高位在前,低位在后,见寄存器编址 寄存器值 2个字节 高位在前,低位在后。 CRC校验 2个字节 高位在前,低位在后 错误响应:见错误响应帧。

1.5 命令码0x 0f(15):写多个线圈

请求帧格式:从机地址+0x 0f+线圈起始地址+线圈数量+字节数+线圈状态+CRC检验。

> 序号 数据(字节)意义 1 从机地址 2 0x 0f(命令码) 3 线圈起始地址 4 线圈数量 5 字节数 说明 取值1~247,由D8121设定 写多个单线圈 高位在前,低位在后,见线圈编址 高位在前,低位在后。N,最大为1968 值:值:[(N+7)/8] 每8个线圈合为一个字节,最后一个若不足8位,[(N+7)/8]6 线圈状态 未定义部分填0。前8个线圈在第一个字节,最地个字节 址最小的线圈在最低位。依次类推 7 CRC校验 2个字节 高位在前,低位在后 >响应帧格式:从机地址+0x 0f +线圈起始地址+线圈数量+CRC检验 序号 数据(字节)意义 字节数量 说明 1 从机地址 1个字节 取值1~247,由D8121设定 2 0x 0f(命令码) 1个字节 写多个单线圈 3 线圈起始地址 2个字节 高位在前,低位在后,见线圈编址 4 线圈数量 2个字节 高位在前,低位在后。 字节数量 1个字节 1个字节 2个字节 2个字节 1个字节 序号 数据(字节)意义 字节数量 说明 5 CRC校验 2个字节 高位在前,低位在后 错误响应:见错误响应帧。

1.6 命令码0x10(16):写多个寄存器

请求帧格式:从机地址+0x10+寄存器起始地址+寄存器数量+字节数+寄存器值+CRC检验。 序号 数据(字节)意义 字节数量 说明 1 从机地址 1个字节 取值1~247,由D8121设定 2 0x10(命令码) 1个字节 写多个寄存器 3 寄存器起始地址 2个字节 高位在前,低位在后,见寄存器编址 4 寄存器数量 2个字节 高位在前,低位在后。N,最大为120 5 字节数 1个字节 值:N*2 6 寄存器值 N*2(N*4) 7 CRC校验 2个字节 高位在前,低位在后 响应帧格式:从机地址+0x10+寄存器起始地址+寄存器数量+CRC检验。 序号 1 2 3 4 5 数据(字节)意义 从机地址 0x10(命令码) 寄存器起始地址 寄存器数量 CRC校验 字节数量 1个字节 1个字节 2个字节 2个字节 2个字节 说明 取值1~247,由D8121设定 写多个寄存器 高位在前,低位在后,见寄存器编址 高位在前,低位在后。N,最大为120 高位在前,低位在后 错误响应:见错误响应帧。 1.7 错误响应帧

错误响应:从机地址+(命令码+0x80)+错误码+CRC校验。

序号 1 2 3 4 数据(字节)意义 从机地址 命令码+0x80 错误码 CRC校验 字节数量 1个字节 1个字节 1个字节 2个字节 说明 取值1~247,由D8121设定 错误命令码 1~4 高位在前,低位在后 2.1 线圈编址

线圈:指位变量,只有两种状态0和1。在本PLC中包含M,S,T,C,X,Y等变量。

变量名称 M0~3071 起始地址 0(0) 线圈数量 说明 3072 变量名称 M8000~M8256 S0~S999 T0~T256 C0~C255 X0~X255 Y0~Y255 2.2 寄存器编址

起始地址 线圈数量 说明 0x 1F40(8000) 256 0xE000(57344) 1000 0xF000(61440) 256 0xF400(62464) 256 0xF800(63488) 256 0xFC00(64512) 256 寄存器:指16位(字)或32位(双字)变量,在本PLC中,16位变量包

含D,T,C0~199;32位变量为C200~255。

变量名称 D0~D8255 T0~T255 C0~C199 C200~C255 起始地址 寄存器数量 说明 0(0) 8256 0xF000(61440) 256 0xF400(62464) 200 0xF700(63232) 56 32位寄存器 说明:通过MODBUS访问C200~C255段32位寄存器时,一个寄存器作两寄

存器看待,一个32位寄存器占用两个16寄存器空间。比如用户要读或写

C205~C208这4个寄存器,MODBUS地址为0xF 70A(0xF700+10),寄存器数量8(4*2)。

32位寄存器不支持写单个寄存器(0x06)命令码。

变量名称 M8000~M8256 S0~S999 T0~T256 C0~C255 X0~X255 Y0~Y255 2.2 寄存器编址

起始地址 线圈数量 说明 0x 1F40(8000) 256 0xE000(57344) 1000 0xF000(61440) 256 0xF400(62464) 256 0xF800(63488) 256 0xFC00(64512) 256 寄存器:指16位(字)或32位(双字)变量,在本PLC中,16位变量包

含D,T,C0~199;32位变量为C200~255。

变量名称 D0~D8255 T0~T255 C0~C199 C200~C255 起始地址 寄存器数量 说明 0(0) 8256 0xF000(61440) 256 0xF400(62464) 200 0xF700(63232) 56 32位寄存器 说明:通过MODBUS访问C200~C255段32位寄存器时,一个寄存器作两寄

存器看待,一个32位寄存器占用两个16寄存器空间。比如用户要读或写

C205~C208这4个寄存器,MODBUS地址为0xF 70A(0xF700+10),寄存器数量8(4*2)。

32位寄存器不支持写单个寄存器(0x06)命令码。

本文来源:https://www.bwwdw.com/article/84ho.html

Top