在PLC程序中使用modbus库时,当填写的地址是40001时

在PLC程序中使用modbus库时,当填写的地址是40001时,第1张

如果您问得是西门子200系列的话,那么:

RW引脚中的值决定了读取03功能码或者写06功能码,在COUNT引脚中大于1的话,调用10功能码。

如果不是200系列的,请说明您使用的PLC的品牌型号。

从站不能发命令,只能被动响应。

若设备具有设定为MODBUS主站或从站的功能,则由用户确定并选择设定。若设备只具有一种功能(主站或从站),就据此使用了。主站发出命令,从站响应主站的命令并应答回传数据给主站。从站在未接收到任何请求,则什么都不做。主站不接收任何请求,1个网络一般是1主多从。

通信和设备:

一个ModBus命令包含了打算执行的设备的Modbus地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令)。

所有的Modbus命令包含了检查码,以确定到达的命令没有被破坏。基本的ModBus命令能指令一个RTU改变它的寄存器的某个值,控制或者读取一个I/O端口,以及指挥设备回送一个或者多个其寄存器中的数据。

要使用Modbus RTU协议读取三菱PLC从站1的40001地址,需要按照以下步骤进行编程:

配置串口通信参数,例如波特率、数据位、校验位和停止位等。

构建Modbus RTU协议的读取命令,命令格式为:

从站地址(1字节) + 功能码(1字节) + 起始地址(2字节) + 寄存器数量(2字节) + CRC校验(2字节)

其中,从站地址为1,功能码为03,起始地址为40001,寄存器数量为1,CRC校验为命令中除CRC字段以外的所有字节的CRC16校验值。

将命令通过串口发送给PLC,等待PLC响应。

解析PLC返回的响应数据,从中获取所需数据。

注意事项:

在编程过程中应注意Modbus RTU协议的数据格式,如字节顺序和数据类型等。

在发送命令和解析响应数据时,应注意处理异常响应,例如非法功能码或地址等。

FX系列PLC的程序段:

MC:MODBUS_RECEIVE_COMMAND

LD X0 ; 设置从站地址

STL $W8 ; 将从站地址存入D8000

LD 8 ; 设置寄存器数量

STL $W10 ; 将寄存器数量存入D8002

LD 40001 ; 设置起始地址

STL $W12 ; 将起始地址存入D8004

LD 3 ; 设置读取命令功能码

STL $W14 ; 将功能码存入D8006

CALL 'MODBUS_RECEIVE' ; 调用MODBUS_RECEIVE指令

MOV $W16,D8100 ; 将D8100-D8105寄存器的值拷贝到D2000-D2005中

MOV $W18,D8102 ; 将D8102-D8105寄存器的值拷贝到D2006-D2009中

RET

MC:MODBUS_RECEIVE

LOCAL STR[8] ; 定义本地变量

STL $W10 ; 将寄存器数量存入本地变量

STL $W12 ; 将起始地址存入本地变量

STL $W14 ; 将功能码存入本地变量

MOV 4,STR[0] ; 设置串口号,根据实际情况修改

MOV 9600,STR[1] ; 设置波特率

MOV 0,STR[2] ; 设置数据位

MOV 0,STR[3] ; 设置校验位

MOV 0,STR[4] ; 设置停止位

MOV 500,STR[5] ; 设置超时时间(单位:ms)

MOV 16,STR[6] ; 设置每个数据位所需时间(单位:us)

MOV 100,STR[7] ; 设置读写等待时间(单位:ms)

MOVE STR,D2000 ; 将本地变量的值拷贝到D2000-D2007中

CALL 'MODBUS_RECEIVE' ; 调用MODBUS_RECEIVE指令

RET

Q系列PLC的程序段:

MC:MODBUS_RECEIVE_COMMAND

MOV 100,D8040 ; 设置串口号,根据实际情况修改

MOV 9600,D8041 ; 设置波特率

MOV 0,D8042 ; 设置数据位

MOV 0,D8043 ; 设置校验位

MOV 0,D8044 ; 设置停止位

MOV 500,D8045 ; 设置超时时间(单位:ms)

MOV 16,D8046 ; 设置每个数据位所需时间(单位:us)

MOV 100,D8047 ; 设置读写等待时间(单位:ms)

MOV 8,D8010 ;

MOV 1,D8012 ; 设置从站地址

MOV 3,D8013 ; 设置读取命令功能码

MOV 40001,D8014 ; 设置起始地址

MOV 8,D8016 ; 设置寄存器数量

CALL "MODRD" ; 调用MODRD指令

MOV #D8020,D110 ; 将读取结果拷贝到D8020-D8027中

RET

MODRD指令需要在程序中先定义,具体定义方法可参考GX Works2的帮助文档。

需要注意的是,上述代码中的串口号、波特率等参数需要根据实际情况进行修改,且不同型号的三菱PLC编程语言略有不同。建议在编写程序前先查看相应的编程手册和帮助文档。

解决方法:

port硬件端口号,就是RS485的端口号ID,

MODBUS 通讯参数设置,停止位1位2位对应有校验或没有校验

功能块参数管脚设置,都是可以改的,改改就能明白了。程序初始化,modbus rtu 主站初始化调用。程序主体,学scl编程,一定要手敲代码,保证你每天都敲代码100行。mode = 4,这个是关键参数,4代表rtu的工作模式,西门子独有参数。

以上就是关于在PLC程序中使用modbus库时,当填写的地址是40001时全部的内容,包括:在PLC程序中使用modbus库时,当填写的地址是40001时、modbus从站怎么响应主站请求,需要编响应主站请求的程序吗、三菱plc用modbusrtu协议读取从站1的40001地址怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9794634.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存