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
|