本文介绍施耐德M340 PLC与第三方设备进行Modbus通讯的简单教程。第三方设备可以采用Modsim或Modbus Slave软件来仿真Modbus从站。软件可登录网信智汇(wangxinzhihui)下载。
1)打开unitypro软件,配置通讯模块参数。本案例采用0机架第2模块0通道,设备类型为主站,从站ID为1,其他参数与从设备参数一致。
2)编写读取数据程序:程序如下。
程序解读如下:
a)ADDM 功能用于将字符串转换为可以由以下通讯功能直接使用的地址。
Addr_String:格式为rack.module.channel.slaveid,本案例为’0.2.0.1’,见第1张图。
b)Read_VAR:用于读取一个或多个语言对象的值。读取的对象必须始终是连续的。它们可能位于远程 CPU 中,或者位于连接到信息通道的设备中。
在 Modicon M340 和 M580 CPU 中,READ_VAR 功能可以在远程设备中最多读取 2000 个连续位。
在 Premium PLC 中,READ_VAR 函数可以在远程设备中最多读取 1000 个连续位,无论使用任何设备和协议(Uni-Telway 或 Modbus/Jbus)。
ADR:由ADDM模块传递过来。
OBJ:对M340取值为:
“%M”:内部位,对应Modbus 01寄存器
“%MW”:内部字,对应Modbus 03寄存器
“%I”:输入位,对应Modbus 02寄存器
“%IW”:输入字,对应Modbus 04寄存器
NUM:要读取的第一个对象的地址
NB:要读取的对象数量
RECP:包含读取对象的值的字表
GEST:交换管理表,用于传递超时参数、保存通讯状态值等。本案例定义的交换管理表如下:
交换管理表结构如下:
要设置超时参数,可在特定字节传入超时值。
通讯报告:返回通讯的状态值
操作报告: 返回操作的结果。当通讯报告返回为16#00时,操作报告值如下:
当通讯报告返回为16#FF时,操作报告值如下:
3)编写写数据程序:以下例子实现向01寄存器地址为55的线圈置ON。
参数同上,这里交代一下EMIS,EMIS是ARRAY [n..m] OF INT ,而线圈是bit位,所以要写入的数据要计算好对应的INT值。