Codesys—标准Modbus串口通讯库的应用示例

RTU主站,对从站设备进行读写操作,描述了设备的添加,通讯参数的设置,以及通讯命令的配置操作。

 1.Modubus设备添加

 首先右键"【Device】",在弹出菜单栏下选择“【添加设备】

 步骤:选择“【现场总线】”->"【Modbus】"->"【Modbus串行端口】"->"【Modbus COM】"->"【添加设备】";

注意:示例中为标准的Modbus 总线设备,也可通过菜单栏”工具“->"设备存储库"->"安装",安装其他供应商的Modbus总线设备。

添加Modbus COM设备后,左侧视图上将新增一个"Modbus_COM"设备 ,此时右键单击"【Modbus_COM】"设备,在弹出菜单栏中点击“【添加设备】”。

如上图所示,找到并选中“【Modbus Master,COM Port】”设备,点击“【添加设备】”。

 添加Modbus Master COM Port设备后,左侧视图上将新增一个"Modbus_Master_COM_Port"设备 ,此时右键单击"【Modbus_Master_COM_Port】"设备,在弹出菜单栏中点击“【添加设备】”。

如上图所示,找到并选中“【Modbus Slave,COM Port】”设备,点击“【添加设备】” 。

至此,Modbus 从站设备添加完成,一共需要添加3个设备;

1.添加 Modbus COM 设备。

2.添加 Modbus Master,COM Port 设备。

3.添加 Modbus Slave,COM Port 设备。

补充一个较为快捷的添加设备方式,如下视频:

2024-02-21-11-40-33

2.通讯参数设置

双击【Modbus_COM】设备,在右侧窗口的“【通用】”中,可设置硬件COM端口号】,此端口号根据实际硬件的COM口进行设置;设置【串口参数】波特率、奇偶校验、数据位、停止位

双击【Modbus Master,COM】设备,在右侧窗口的“【通用】”中,可设置传输模式为“RTU”或"ASCII",以及响应超时,帧间隔时间等参数;其中建议勾选“【自动重启通讯】”功能,不勾选时当通讯异常时总线状态可能异常此时将自动断线,勾选自动重启通讯后,发生通讯异常时将会进行自动重连。

 双击【Modbus Slave,COM Port】设备,在右侧窗口的“通用”中,可以设置连接的设备的【从站地址】,和响应超时参数。

3.通讯命令配置 

在上图界面的基础下,选中“【Modbus从站通道】”,此时无通讯命令配置,可通过点击右下角的“【添加通道】”添加通讯命令。

 以下分别是使用功能码03,读保持型寄存器;使用功能码16,写多个保持型寄存器的相应界面。

 

 使用03功能码读寄存器16功能码写寄存器时,可选择循环、上升沿、应用这三种触发方式,循环触发时,可设置循环时间;上升沿触发时,可设置触发变量;应用触发方式未使用过,此处不做记录。

备注:通常读取使用循环触发,写入则使用上升沿触发为佳,但也需要看具体需求,较为简单的方式为都使用循环触发。

偏移地址为需要读取或写入的寄存器地址,长度为字数。

 

 如上图所示,添加了两条通讯命令的配置。

添加了通讯命令的配置后,左侧将显示“【ModbusGenericSerialSlaveIO映射】”选项,此时点击它,出现下图: 

 在上图右侧红框中,

1.通道 Channel 0为循环读取0x0000的连续两个字,可以在变量框中选择变量,用来接收读取回来的数据;

2.通道Channel 1为上升沿触发写入0x0020的连续两个字,可以在变量框中选择触发的变量,以及写入的数据。

如下图所示,先添加ModbusRTU变量表,然后在右侧声明区添加变量:

然后在ModbusSlaveIO映射界面的【变量】列中,选择刚才在ModbusRTU变量表中新建的变量,如下图所示:

至此Modbus的设备添加和通讯配置已经完成,不需要在程序中通讯指令,只需在配置中完成配置和映射即可完成Modbus RTU主站和从站的通讯。 

原文链接:https://blog.csdn.net/wushangwei2019/article/details/136202630

### Codesys与MCD之间的通讯方式及实现方法 Codesys(Control Engineering System Software)和MCD(Machine Control Device)之间的通讯可以通过多种方式实现,具体取决于实际应用需求、硬件环境以及软件支持的功能。以下是几种常见的通讯方式及其配置方法[^1]。 #### 1. **以太网通讯** - 通过标准的TCP/IP协议栈,Codesys可以与MCD设备进行数据交换。在Codesys中,可以通过创建一个TCP Server或Client对象来实现通讯。 - 配置步骤包括设置IP地址、端口号,并编写PLC程序来处理接收到的数据。 - 示例代码如下: ```python // 创建TCP连接 IF NOT TcpIp.IsConnected THEN TcpIp.Connect('192.168.1.10', 502); END_IF; // 发送数据到MCD TcpIp.Send(DataBuffer, LENGTH(DataBuffer)); ``` #### 2. **Modbus RTU/Modbus TCP** - Modbus是一种广泛使用的工业通讯协议,适用于Codesys与MCD之间的数据交互。 - 在Codesys中,可以使用`Modbus Master`或`Modbus Slave`来实现通讯。 - 配置时需要定义寄存器地址、波特率、停止位等参数。 - 示例代码如下: ```python // 初始化Modbus通信 ModbusMaster.Connect('COM1', 9600, 8, 'N', 1); // 读取MCD中的寄存器值 ModbusMaster.ReadHoldingRegisters(1, 40001, 10, DataBuffer); ``` #### 3. **CANopen通讯** - CANopen是一种基于CAN总线的高层协议,适合用于分布式控制系统的通讯。 - 在Codesys中,可以通过配置OD(Object Dictionary)来映射MCD设备的对象。 - 示例代码如下: ```python // 配置CANopen节点 CanOpen.MasterInit(NodeId := 1); // 读取MCD设备的状态 CanOpen.SdoRead(ObjIndex := 1000h, SubIndex := 0, Data := Status); ``` #### 4. **OPC UA通讯** - OPC UA是一种现代的工业通讯协议,支持跨平台和跨厂商的数据交换。 - 在Codesys中,可以使用OPC UA客户端或服务器来实现与MCD的通讯。 - 配置时需要定义节点ID、安全策略等参数。 - 示例代码如下: ```python // 连接到OPC UA服务器 OpcUaClient.Connect('opc.tcp://192.168.1.10:4840'); // 读取MCD设备的变量值 OpcUaClient.ReadNode('ns=2;i=1001', Value); ``` #### 5. **串口通讯** - 如果MCD设备支持串口通讯,可以通过RS232或RS485接口与Codesys进行数据交换。 - 在Codesys中,可以使用串口来实现通讯,配置波特率、数据位、校验位等参数。 - 示例代码如下: ```python // 初始化串口 SerialPort.Open('COM2', 115200, 8, 'N', 1); // 向MCD发送命令 SerialPort.Write(CommandBuffer, LENGTH(CommandBuffer)); ``` ### 注意事项 - 在配置通讯时,确保双方设备的协议版本、参数设置一致[^2]。 - 测试通讯稳定性时,建议使用调试工具(如Wireshark、Modbus Poll)来捕获和分析数据包。 - 根据实际应用场景选择合适的通讯方式,例如实时性要求高的场景推荐使用CANopen或EtherCAT。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值