实现基于Codesys的PROFINET控制器
在树莓派上安装Codesys运行时
可以参考基于CODESYS打造树莓派工业控制器,将树莓派打造成基于CODESYS的软PLC。
- 将编程平台IDE和Raspberry Pi连接到一个网段中,如192.168.0.*网段;
- 在Codesys编程平台菜单栏中的工具->Update Raspberry Pi,则可以在看到Raspberry的属性页面;
- 在Raspberry的属性页面中正确输入Username、Password、IP Address,然后可以点击“Start”启动Codesys运行时
- 双击“Device”页面,在通信设置中点击“扫描网络”,一般可以查找到Raspberry Pi的IP,如果没有还可以直接通过Raspberry Pi的IP地址查找;
- 通过SSH可以在
/opt/codesys/
路径下找到codessyscontrol文件。
新建Codesys工程
- Codesys编程平台菜单中的文件,创建一个新的“standard project”,输入工程名称;
- 在随后标准项目的配置对话框中,选择设备
Codesys Control for Raspberry Pi SL
; - PLC编程语言选择ST;
- 在设备属性页中双击“Device”,在通信设置中点击“扫描网络”,一般可以查找到Raspberry Pi的IP,如果没有还可以直接通过Raspberry Pi的IP地址,如果一切正常,Gateway-1下的Device标记应变为绿色;
- Codesys编程平台菜单中的工具,选择“设备库”;
- 通过加载设备描述文件(*.xml)在设备库中安装一个PROFINET设备;
- 右击设备
Device (Codesys Control for Raspberry Pi SL)
,添加一个Ethernet
设备; - 右击
Ethernet
,在添加设备对话框中Profinet IO master
选项中添加一个PN-Controller
控制器; - 右击
PN-Controller
,在添加设备对话框中Profinet IO slave
选项中添加一个PROFINET IO设备; - 右击
P_Net_multi_module_sample_App
, 在添加设备对话框中添加一个IO模块DIO 8xLogicLevel
; - 双击
Ethernet
打开以太网属性页面,在“通用”标签页中点击“Browser”,选择控制器的网络接口,然后设置控制器的IP地址、子网掩码和默认网关,一般来说可以直接按照网络接口显示的IP地址进行设置; - 双击
PN_controller
节点,在“通用”标签页中限制默认从站IP参数,也就说需要分配给PROFINET主站下所有连接的PROFIENT从站的IP地址,范围从“第一个IP地址” 和 “最后一个IP地址”,在例中只有一个从站设备,故两个都输入192.168.0.50; - 双击
P_Net_multi_module_sample_App
节点,在“General”标签页中设置站点名称、IP地址、减速比等参数,本例中输入192.168.0.50,使用默认的设备名称,在PNIO标签页中可以看到PROFINET IO设备的数据已经自动映射到PLC的输入或输出区。
编写一段PLC应用程序
- 双击
PLC logic -> Application -> PLC_PRG
开始编辑PLC代码:
-
变量定义
PROGRAM PLC_PRG VAR in_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
节点,在Edit IO mapping
标签页中,通道Input 8 bits
对应的变量映射到变量定义中的in_pin_button_LED
,而Output Bit 7
对应的变量映射到变量定义中的out_pin_LED
; - 双击
Application --> MainTask
,将MainTask任务周期Cyclic
设置为4ms; - 双击
Application --> Profinet_CommunicationTask
,将任务周期Cyclic
设置为10ms,优先级设为14;
PLC应用程序下载调试
- Codesys编程平台菜单中的编译,使用
生成代码
; - 使用Codesys编程平台菜单中
联机
,将PLC代码下载到树莓派的Codesys运行时中; - 在Codesys编程平台菜单中的
调试 --> 开始
; - 在Codesys编程平台菜单中的“更新树莓派”来跟踪Codesys控制器的日志,单击系统信息按钮,然后查看运行时信息文本框。如果找不到IO设备会显示一条网络错误消息;
- IO控制器每隔5s发一次LLDP数据包,每隔15秒它将发送一个ARP数据包请求IO设备的IP地址,通过PN-DCP数据包请求名称为“RT-Labs-Dev”的IO设备,这些数据包可以通过Wireshark软件抓包进行验证。
posted on 2022-06-07 16:16 MichaelChen-99 阅读(1819) 评论(0) 编辑 收藏 举报