CODESYS Modbus 开发

更新时间:
2024-04-26

CODESYS Modbus 开发

本节将通过 CODESYS 对从站 0 - 16 位线圈状态(Coil Status)进行读写, 0 - 16 位输入寄存器 (Input Status) 进行读取,实现快速体验中的 Modbus 控制效果。

环境准备

设备列表

序号设备名称数量备注
1IGC1503 控制器1必选
2Modbus TCP 远程 IO 模块1可选
3交换机1可选

软件列表

序号软件名称数量备注
1CODESYS 上位机1必选
2Modbus 从站调试软件1必选

下载列表

与从站仿真软件数据交互

本案例中 IGC 控制器作为 Modbus TCP Client,Modbus 从站仿真软件作为 Modbus TCP Server。实现 IGC1503 作为Client“主动读取 Server 输入通道值”和“控制 Server 流水灯”两个功能。

注意:

本节所使用的 Modbus 从站仿真软件,需要单独下载。

若使用的是 IGC1500 控制器,下面的操作请替换成“IGC1500 设备描述文件”进行完成。

前提条件

  1. 根据“快速体验 > CODESYS 数据采集 > 环境准备”中 步骤 1 操作,将硬件设备进行连接。

  2. 根据“快速体验 > SylixOS 数据采集 > 部署应用”中 步骤 1 操作,设置本机 IP 与 IGC1503 处于同一网段。

步骤 1:配置从站仿真软件

此步骤与“SylixOS Modbus 开发”中 步骤 1 一致,请按照章节中的步骤 1 至步骤 3 完成操作。

步骤 2:添加设备文件

  1. 双击 CODESYS ,选择菜单栏中 Tools > Device Repository 打开安装设备描述文件的窗口。

  2. 在窗口中单击 Install 选择 IGC1503 设备文件后,单击打开进行 IGC1503 设备描述文件的添加。

  3. Device Repository 窗口中加载如下信息,说明 IGC1503 设备文件安装成功,可单击 Close 关闭窗口。

步骤 3:新建 CODESYS 工程

  1. 选择菜单栏 File > New Project 打开新建工程窗口。

  2. 选择模板为 Standard project,并填入工程名及工程存放位置,单击 OK 进入下一步。

  3. 如图 Device 选择为 IGC1503 型号,PLC_PRG 选择 ST 语言开发,单击 OK 完成新工程的创建。

  4. 新建工程完成后,左侧的 Device 列表如下。

步骤 4: 连接控制器设备

  1. 双击开 Device 操作窗口,选择 Communication Settings > Scan Network 扫描网络连接设备。

    注意:

    务必确保已按照 前提条件 完成操作,IGC1503 和 PC 之间可以 Ping 通,否则 CODESYS 网络扫描将无法发现设备。

  2. 单击扫描到的设备,IGC1503 的设备信息如下图所示。最后,单击 OK 完成设备的连接。

  3. 设备连接成功后,界面如下图所示,通信指示灯为绿色

步骤 5: 构建设备拓扑

  1. 在设备界面,选择 Device 右击,选择 Add Device

  2. 在窗口中,选择 Fieldbuses > Ethernet Adapter > Ethernet,单击 Add Device 完成网卡设备的添加。

  3. 在设备界面,选中 Ethernet 右击,选择 Add Device

  4. 在窗口中,选择 Fieldbuses > Modbus > Modbus TCP Master > Modbus TCP Master,单击 Add Device 完成 Modbus TCP 主站设备的添加。

  5. 在设备界面,选中 Modbus TCP Master 右击,选择 Add Device

  6. 在窗口中,选择 Fieldbuses > Modbus > Modbus TCP Slave > Modbus TCP Slave,单击两次 Add Device 完成 Modbus TCP 从站设备的添加。

    说明:

    由于本节体验功能有两个,所以这里需要添加两个从站设备。

  7. 将两个从站设备添加完成后,单击 Close 将窗口关闭。工程完整的设备拓扑结构如下图所示。

步骤 6: 配置工程参数

  1. 选择设备网卡 IP。双击 Ethernet 打开操作窗口,进入 General 界面,单击 Browse 进行 Network interface 的选择。

  2. 单击与硬件连接的 _X1 网口,IP 信息如下图所示,单击 OK 完成备网卡 IP 的选择。

    注意:

    每台设备网口的 MAC address 地址都是唯一的,其他参数都相同。

  3. 配置变量更新属性。双击 Device 打开配置界面。选择 PLC Settings > Always updatevariable 更新属性为 Enable 2 (always in bus cycle task)。在确认框中选择 是(Y) 确认更改。这样使得 IO 变量能一直在总线周期任务中更新其值。

步骤 7: 实现读取通道值功能

  1. 编写功能代码。双击 PLC_PRG 新建一个 16 bit 的输入变量,如下图所示。

  2. 配置 Modbus_TCP_Slave 从站。双击 Modbus_TCP_Slave 设备打开配置窗口,进入 ModbusTCPSlave Parameters 界面。双击对应的 Value 列,修改如图框出的四个参数值。

    说明:

    Slave IP address:从站 IP 地址,与 IGC1503 在同网段即可。Unit IDPort 参数与实际从站的对应参数相同

  3. 添加读取通道。双击 Modbus_TCP_Slave 设备打开配置窗口,进入 Modbus Slave Channel 界面,单击 Add Channel 添加读取通道。

  4. 配置读取通道参数。在弹框中, Access type 选择为 Read Discrete Inputs (Function Code 2)Length16,单击 OK 完成添加。

  5. 设置 IO 映射。双击 Modbus_TCP_Slave 设备打开配置窗口,进入 ModbusTCPSlave I/O Mapping 界面,双击对应的通道后,单击输入助手进入映射弹框。

  6. 在弹框中,选择代码中的输入变量,单击 OK 完成 I/O 变量的映射。

  7. 按照同样的操作,完成所有通道的 I/O 变量映射,读取通道值功能的 I/O 变量映射最终效果如下。

    说明:

    因为,输入变量是由一个长度为 2 字节 、类型为 BYTE 的一维数组构成,所以,一个通道对应一个数组元素。而输入助手只能显示变量名,需要添加后手动输入元素下标。

步骤 8: 实现控制流水灯功能

  1. 编写功能代码。双击 PLC_PRG 编辑流水灯功能代码,如下图所示。

  2. 配置 Modbus_TCP_Slave_1 从站。双击 Modbus_TCP_Slave_1 设备打开配置窗口,进入 ModbusTCPSlave Parameters 界面。双击对应的 Value 列,修改如图框出的四个参数值。

    说明:

    参数与 Modbus_TCP_Slave 均相同。

  3. 添加写入通道。双击 Modbus_TCP_Slave_1 设备打开配置窗口,进入 Modbus Slave Channel 界面,单击 Add Channel 添加读取通道。

  4. 配置写入通道参数。在弹框中, Access type 选择为 Write Mutiple Coils (Function Code 15)Length16,单击 OK 完成添加。

  5. 设置 IO 映射。双击 Modbus_TCP_Slave_1 设备打开配置窗口,进入 ModbusTCPSlave I/O Mapping 界面,双击对应的通道后,单击输入助手进入映射弹框。

  6. 在弹框中,选择代码中的输出变量,单击 OK 完成 I/O 变量的映射。

  7. 按照同样的操作,并手动输入元素下标,完成所有通道的 I/O 变量映射,读取通道值功能的 I/O 变量映射最终效果如下。

步骤 9: 编译下载运行

单击常用栏中的编译并下载程序到 IGC1503 控制器。

步骤 10:查看运行效果

  • 主动读取 Server 输入通道值功能:修改 Modbus 从站仿真软件中的 Mbslave2 的通道值,可以发现 CODESYS 的输入通道 ab_Modbus_IO_Input 变量也同步跟着改变。由于 Modbus 从站仿真软件以“二进制”显示,CODESYS 变量以“十进制”显示,用户需要换算一下结果。

    说明:

    ab_Modbus_IO_Input[1] 对应 Modbus 从站仿真软件中的 Mbslave2 的 0 - 7 通道;ab_Modbus_IO_Input[2] 对应 Modbus 从站仿真软件中的 Mbslave2 的 8 - 15 通道。第 0 位通道为低位,第 15 位通道为高位。

  • 控制 Server 流水灯功能:CODESYS 的输出通道 ab_Modbus_IO_Output 变量按通道顺序依次置 1,可以看到 Modbus 从站仿真软件中的 Mbslave1 的对应通道值也变成了 1。运行效果模拟了流水灯亮灭的操作,“1”为亮灯,“0”为灭灯。

与 Modbus TCP 远程 IO 数据交互

  1. CODESYS 代码不需要更改,只是将 Modbus 从站仿真软件改成使用实物远程 IO 进行控制。

  2. 运行效果与“快速体验 > CODESYS 数据采集 > 运行效果”中 Modbus 远程 IO 小节一致。

文档内容是否对您有所帮助?
有帮助
没帮助