CODESYS Modbus 开发
本节将通过 CODESYS 对从站 0 - 16 位线圈状态(Coil Status)进行读写, 0 - 16 位输入寄存器 (Input Status) 进行读取,实现快速体验中的 Modbus 控制效果。
环境准备
设备列表
序号 | 设备名称 | 数量 | 备注 |
---|---|---|---|
1 | IGC1503 控制器 | 1 | 必选 |
2 | Modbus TCP 远程 IO 模块 | 1 | 可选 |
3 | 交换机 | 1 | 可选 |
软件列表
序号 | 软件名称 | 数量 | 备注 |
---|---|---|---|
1 | CODESYS 上位机 | 1 | 必选 |
2 | Modbus 从站调试软件 | 1 | 必选 |
下载列表
与从站仿真软件数据交互
本案例中 IGC 控制器作为 Modbus TCP Client,Modbus 从站仿真软件作为 Modbus TCP Server。实现 IGC1503 作为Client“主动读取 Server 输入通道值”和“控制 Server 流水灯”两个功能。
注意:
本节所使用的 Modbus 从站仿真软件,需要单独下载。
若使用的是 IGC1500 控制器,下面的操作请替换成“IGC1500 设备描述文件”进行完成。
前提条件
根据“快速体验 > CODESYS 数据采集 > 环境准备”中 步骤 1 操作,将硬件设备进行连接。
根据“快速体验 > SylixOS 数据采集 > 部署应用”中 步骤 1 操作,设置本机 IP 与 IGC1503 处于同一网段。
步骤 1:配置从站仿真软件
此步骤与“SylixOS Modbus 开发”中 步骤 1 一致,请按照章节中的步骤 1 至步骤 3 完成操作。
步骤 2:添加设备文件
双击 CODESYS ,选择菜单栏中 Tools > Device Repository 打开安装设备描述文件的窗口。
在窗口中单击 Install 选择 IGC1503 设备文件后,单击打开进行 IGC1503 设备描述文件的添加。
若 Device Repository 窗口中加载如下信息,说明 IGC1503 设备文件安装成功,可单击 Close 关闭窗口。
步骤 3:新建 CODESYS 工程
选择菜单栏 File > New Project 打开新建工程窗口。
选择模板为 Standard project,并填入工程名及工程存放位置,单击 OK 进入下一步。
如图 Device 选择为 IGC1503 型号,PLC_PRG 选择 ST 语言开发,单击 OK 完成新工程的创建。
新建工程完成后,左侧的 Device 列表如下。
步骤 4: 连接控制器设备
双击开 Device 操作窗口,选择 Communication Settings > Scan Network 扫描网络连接设备。
注意:
务必确保已按照 前提条件 完成操作,IGC1503 和 PC 之间可以 Ping 通,否则 CODESYS 网络扫描将无法发现设备。
单击扫描到的设备,IGC1503 的设备信息如下图所示。最后,单击 OK 完成设备的连接。
设备连接成功后,界面如下图所示,通信指示灯为绿色。
步骤 5: 构建设备拓扑
在设备界面,选择 Device 右击,选择 Add Device。
在窗口中,选择 Fieldbuses > Ethernet Adapter > Ethernet,单击 Add Device 完成网卡设备的添加。
在设备界面,选中 Ethernet 右击,选择 Add Device。
在窗口中,选择 Fieldbuses > Modbus > Modbus TCP Master > Modbus TCP Master,单击 Add Device 完成 Modbus TCP 主站设备的添加。
在设备界面,选中 Modbus TCP Master 右击,选择 Add Device。
在窗口中,选择 Fieldbuses > Modbus > Modbus TCP Slave > Modbus TCP Slave,单击两次 Add Device 完成 Modbus TCP 从站设备的添加。
说明:
由于本节体验功能有两个,所以这里需要添加两个从站设备。
将两个从站设备添加完成后,单击 Close 将窗口关闭。工程完整的设备拓扑结构如下图所示。
步骤 6: 配置工程参数
选择设备网卡 IP。双击 Ethernet 打开操作窗口,进入 General 界面,单击 Browse 进行 Network interface 的选择。
单击与硬件连接的 _X1 网口,IP 信息如下图所示,单击 OK 完成备网卡 IP 的选择。
注意:
每台设备网口的 MAC address 地址都是唯一的,其他参数都相同。
配置变量更新属性。双击 Device 打开配置界面。选择 PLC Settings > Always updatevariable 更新属性为 Enable 2 (always in bus cycle task)。在确认框中选择 是(Y) 确认更改。这样使得 IO 变量能一直在总线周期任务中更新其值。
步骤 7: 实现读取通道值功能
编写功能代码。双击 PLC_PRG 新建一个 16 bit 的输入变量,如下图所示。
配置 Modbus_TCP_Slave 从站。双击 Modbus_TCP_Slave 设备打开配置窗口,进入 ModbusTCPSlave Parameters 界面。双击对应的 Value 列,修改如图框出的四个参数值。
说明:
Slave IP address:从站 IP 地址,与 IGC1503 在同网段即可。Unit ID 和 Port 参数与实际从站的对应参数相同
添加读取通道。双击 Modbus_TCP_Slave 设备打开配置窗口,进入 Modbus Slave Channel 界面,单击 Add Channel 添加读取通道。
配置读取通道参数。在弹框中, Access type 选择为 Read Discrete Inputs (Function Code 2),Length 为 16,单击 OK 完成添加。
设置 IO 映射。双击 Modbus_TCP_Slave 设备打开配置窗口,进入 ModbusTCPSlave I/O Mapping 界面,双击对应的通道后,单击输入助手进入映射弹框。
在弹框中,选择代码中的输入变量,单击 OK 完成 I/O 变量的映射。
按照同样的操作,完成所有通道的 I/O 变量映射,读取通道值功能的 I/O 变量映射最终效果如下。
说明:
因为,输入变量是由一个长度为 2 字节 、类型为 BYTE 的一维数组构成,所以,一个通道对应一个数组元素。而输入助手只能显示变量名,需要添加后手动输入元素下标。
步骤 8: 实现控制流水灯功能
编写功能代码。双击 PLC_PRG 编辑流水灯功能代码,如下图所示。
配置 Modbus_TCP_Slave_1 从站。双击 Modbus_TCP_Slave_1 设备打开配置窗口,进入 ModbusTCPSlave Parameters 界面。双击对应的 Value 列,修改如图框出的四个参数值。
说明:
参数与 Modbus_TCP_Slave 均相同。
添加写入通道。双击 Modbus_TCP_Slave_1 设备打开配置窗口,进入 Modbus Slave Channel 界面,单击 Add Channel 添加读取通道。
配置写入通道参数。在弹框中, Access type 选择为 Write Mutiple Coils (Function Code 15),Length 为 16,单击 OK 完成添加。
设置 IO 映射。双击 Modbus_TCP_Slave_1 设备打开配置窗口,进入 ModbusTCPSlave I/O Mapping 界面,双击对应的通道后,单击输入助手进入映射弹框。
在弹框中,选择代码中的输出变量,单击 OK 完成 I/O 变量的映射。
按照同样的操作,并手动输入元素下标,完成所有通道的 I/O 变量映射,读取通道值功能的 I/O 变量映射最终效果如下。
步骤 9: 编译下载运行
单击常用栏中的编译并下载程序到 IGC1503 控制器。
![](/assets/9-1-iWNpJZ8G.png)
步骤 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”为灭灯。
![](/assets/11-1-DN4BMulZ.png)
与 Modbus TCP 远程 IO 数据交互
CODESYS 代码不需要更改,只是将 Modbus 从站仿真软件改成使用实物远程 IO 进行控制。
运行效果与“快速体验 > CODESYS 数据采集 > 运行效果”中 Modbus 远程 IO 小节一致。