[CodeSys] CODESYS运动控制器ModbusTCP与ModbusRTU通信底层驱动实现

[复制链接]
查看86734 | 回复0 | 2024-5-24 14:36:41 | 显示全部楼层 |阅读模式

modbus_tcp支持写入数据断电保持,RTU不支持断电保持,请知悉,如需支持请提前申请。

如果使用RTU从站功能:波特率38400  停止为1位,无校验,站号:1

1.如果需要使用modbus协议请按需要导入库文件



双击对应的文件黄色即可,例如modbus_tcp



例如modbus_rtu



2.在新工程库管理器中加入modbus库文件



3.在杂项中选择需要增加的库



4.建立modbus指针变量,如果复杂请直接复杂例子程序(moddata变量表)。

以下4个指针为Modbus_Tcp_Configure功能块固定指针,客户目前不能修改,可以直接使用

Readbool :ARRAY [0..511] OF BOOL;         

(*对应功能码1,即为离散输入,对应寄存器地址为1xxxx,Modbus起始地址为1*)

Readword :POINTER TO WORD;         

(*对应功能码4,即为暂存寄存器,对应寄存器地址为3xxxx,Modbus起始地址为1*)

writebool:ARRAY [0..255] OF BOOL;         

(*对应功能码0,即为线圈输出,对应寄存器地址为0xxxx, Modbus起始地址为1*)

writeword            :POINTER TO WORD;                    

(*对应功能码3,即为保存寄存器,对应寄存器地址为4xxxx,Modbus起始地址为1*)

以下是根据应用需求自行转化为需要的数据类型

例如马达的当前值:

readreal:POINTER TO REAL;                      (*浮点数显示,只能转一次,不然有冲突*)         

例如上位机写入的参数设定:

writereal:POINTER TO REAL;           (*转化为32位的浮点数,设定的时候由于功能块的指针为word 16位数据,需要跳一位来设定*)

writeint :POINTER TO INT;                      (*转化为16位的整数*)

5.添加Modbus_Tcp_Configure功能块到POU中



功能块介绍:

Mb_Activate           :BOOL:=FALSE;

(*Mobbus tcp slave 使能*)

读取部分:

RegDiscrete :ARRAY [0..511] OF BOOL;

(*对应功能码1,即为离散输入,对应寄存器地址为1xxxx,Modbus起始地址为1,有512个变量*)

RegInput:POINTER TO WORD;                              

(*对应功能码4,即为暂存寄存器,对应寄存器地址为3xxxx,Modbus起始地址为1,最大数量为128个,word为16位数据*)         

上位参数写入部分

RegCoils:ARRAY [0..255] OF BOOL;         

(*对应功能码0,即为线圈输出,对应寄存器地址为0xxxx, Modbus起始地址为1,有256个开关量写入*)

RegHolding :POINTER TO WORD;                              

(*对应功能码3,即为保存寄存器,对应寄存器地址为4xxxx,Modbus起始地址为1,最大数量为128个,word为16位数据,如果设定32位浮点数需要地址跳位*)

完成程序



6.以上是原理说明,客户可以直接将程序复制过来即可



7.根据需要调整4个解析子程序



8.modbus_rtu和这个一样的使用方式

8.Modbus pool监控软件32位浮点数编码下发方式



控制器为长度32位,需要跳开以为modbus地址。

9.以上虽然写的复杂,主要介绍原理,客户只要将程序和变量全部复杂到自己的工程中去,然后导入缺失的modbus库即可。

视频链接:

【27.CODESYS控制器_C#上位机_ModbusTCP通信实现-哔哩哔哩】 https://b23.tv/h0Fdco8


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则