CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试
文章目录
- CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试
- 一、前言
- 二、Windows运行时软plc配置编程
- 1、安装Windows下的运行时扩展包(非必要)
- 2、创建项目
- 2.1、创建标准工程
- 2.2、添加RTE设备或非RTE设备
- 2.3、激活设备
- 2.4、回声测试
- 2.5、安装p-net类型Profinet设备
- 2.6、配置添加Profinet主站网络
- 3、PLC编程
- 4、烧录程序并测试
- 三、注意事项
一、前言
前面CODESY下载安装并熟悉了,p-net搭建从站也已经跑在虚拟机树莓派上了,我们只需要快速搭建一个profinet主站来和从站进行交互即可,这里我们直接用Windows下带的软PLC搭建profinet主站并和p-net的demo从站程序进行IO交互。
评估是否进行Windows下的运行时PLC前先看一下注意事项,Windows下安装配置会需要修改boot及防火墙等,可能会影响Windows电脑的正常使用,所以创建项目时的设备可以选择非RTE的。
二、Windows运行时软plc配置编程
1、安装Windows下的运行时扩展包(非必要)
下载安装Windows运行时:
http://store.codesys.cn/codesys/store/detail.html?productId=58
导入下载好的运行时安装包:
然后按照提示安装对应扩展包即可。
之后安装CODESYS Control RTE并重启电脑,之后启动对应的RTE的PLC即可:
打开防火墙,否则网关搜不到:
管理员权限安装,不要安装到C盘:
2、创建项目
2.1、创建标准工程
标准工程,RTE设备(运行时环境),控制设备(主站控制器):
或者选择非RTE的控制器设备:
2.2、添加RTE设备或非RTE设备
添加设备(只有安装了对应的RTE扩展包才能找到添加如下对应类型的设备):
非RTE设备搜索添加:
2.3、激活设备
如下以非RTE设备为例:
设备激活成功(需要输入Windows的用户名密码):
2.4、回声测试
发送回声服务:
2.5、安装p-net类型Profinet设备
下载对应GSDML文件:github.com/rtlabs-com/p-net/blob/master/samples/pn_dev/GSDML-V2.4-RT-Labs-P-Net-Sample-App-20220324.xml
安装GSDML文件:
安装成功:
2.6、配置添加Profinet主站网络
● 在左侧面板的 Device(CODESYS Ccontrol RTE V3 x64)上,右键单击并选择添加设备。使用 以太网适配器、 以太网。
● 在 以太网上,右键单击并选择 添加设备。使用 Profinet IO主站、 PN-控制器。
● 在 PN_Controller上,右键单击并选择 添加设备。使用 P-Net 示例应用程序。
● 在 P_Net_Sample_App上,右键单击并选择 添加设备。使用 DIO 8xLogicLevel。
● 双击 左侧菜单中的以太网节点。选择接口“eth0”。IP 地址将相应更新。
● 双击 左侧菜单中的PN_controller节点。使用“第一个 IP” 和 “最后一个 IP”调整 IP 范围, 使其都具有 IO 设备的现有 IP 地址(例如运行 example_app 的 Linux 笔记本电脑或嵌入式 Linux 板)。在本教程中,我们使用 First IP 172.16.1.174 和 Last IP 172.16.1.174。
● 双击 左侧菜单中的P_Net_Sample_App节点。将 IP 地址设置为 IO 设备的现有地址。在本教程中我们使用 172.16.1.174.
3、PLC编程
● 单击左侧面板中的 PLC 逻辑 ‣ Applicaiton ‣ PLC_PRG并输入程序。
在控制器应用程序中,根据教程,使用ST语言编程,变量部分和程序部分的代码都给了,这里我们添加进去即可:
PROGRAM PLC_PRG
VARin_pin_button_LED: BOOL;out_pin_LED: BOOL;in_pin_button_LED_previous: BOOL;flashing: BOOL := TRUE;oscillator_state: BOOL := FALSE;oscillator_cycles: UINT := 0;
END_VAR
oscillator_cycles := oscillator_cycles + 1;
IF oscillator_cycles > 200 THEN oscillator_cycles := 0;
oscillator_state := NOT oscillator_state;
END_IF IF in_pin_button_LED = TRUE THEN IF in_pin_button_LED_previous = FALSE THEN flashing := NOT flashing;
END_IF out_pin_LED := TRUE;
ELSIF flashing = TRUE THEN out_pin_LED := oscillator_state;
ELSE out_pin_LED := FALSE;
END_IF in_pin_button_LED_previous := in_pin_button_LED;
● 在左侧菜单中的 DIO_8xLogicLevel节点上 ,右键单击并选择“编辑 IO 映射”。
● 单击小 +号打开 “Input 8 bits”行 。
● 双击您想要编辑的行上的图标。
● 将“Input Bit 7”映射到“in_pin_button_LED”(通过Application/PLC_PRG找到),将“Output Bit 7”映射到“out_pin_LED”。
或者双击在这里编辑也可以:
● 在 Application ‣ MainTask 中选择 Cyclic with 4 ms。
● 在 Application ‣ Profinet_CommunicationTask 中选择 10 ms 的循环。使用优先级 14。
4、烧录程序并测试
● 在顶部菜单中,使用 Build ‣ 生成代码。
● 使用顶部菜单 Online ‣ Login 将应用程序传输到 Raspberry Pi。 在弹出窗口中按 “是” 。(Windows下的PLC不需要,Ubuntu和树莓派的都需要ssh去登录设备,这个后面的实例我么会再按照流程执行)
● 在顶部菜单中,使用 Debug ‣ Start 您可以使用顶部菜单 Tools ‣ “Update Raspberry Pi”来跟踪控制器日志。单击 “系统信息” 按钮,然后查看 “运行时信息” 文本框。如果在网络上找不到 IO 设备,它将显示错误消息。使用 Wireshark 验证控制器是否每 5 秒发送一次LLDP 数据包。每 15 秒,它会发送一个 ARP 数据包来询问(第一个?)IO 设备 IP 地址,并发送一个 PN-DCP 数据包来询问名为“rt-labs-dev”的 IO 设备。
实际我这里需要登录->运行:
wireshark抓包(参考这里:https://rt-labs.com/docs/p-net/how-to-guides/capturing-and-analyzing-ethernet-packets/,后面也会单独出一节怎么抓包分析profinet的总结):
可以看到我这里是没有找到对应的IO设备,这里不去具体分析原因了,我们后面会再去深究这里,期待一下吧。
● 配置完在 Raspberry Pi 上运行的 Codesys softplc 后,您可以关闭用于配置它的个人计算机(运行 Codesys 桌面应用程序)。请记住,您需要每两个小时重新启动运行 Softplc 的 Raspberry Pi,如果使用试用版。
Codesys 故障排除 —————- ——- 如果您收到错误,声称缺少库,请单击左侧面板中的 PLC 逻辑 ‣ 应用程序 ‣ 库管理。Codesys 应该自动检测是否有任何缺失的库。单击 “库管理器”选项卡 下的 “下载缺少的库” 以下载任何缺少的库。(这里也是上一节提到的第一次运行会缺少库,需要挂tz下载解决)
三、注意事项
由于CODESYS Control RTE V3会配置boot以及防火墙(如果安装过程中不同意配置boot的话会导致搜不到RTE设备),所以会影响正常的Windows使用,所以这里我们使用非RTE的CODESYS Control创建软PLC作为主站,虽然由于没有达到实时性导致IO通信超时(这个在日志上到时候会具体再分析查看),但是基础的profinet交互过程可以做大致的查看分析了。