CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

这篇具有很好参考价值的文章主要介绍了CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

一、前言

我们之前已经在windows机上运行起了基于codesys的软PLC,并且其作为主站和跑在虚拟机上的p-net从站进行了简单的IO操作,但是跑在Windows上的运行时PLC会影响网卡,而不跑运行时的则由于实时性不足导致一些超时的问题,因此我们这里在Ubuntu18.04上更换实时Linux内核,然后利用codesys的for Linux扩展包将该实时的Ubuntu18.04改造运行软PLC作为主站来和树莓派从站做profinet交互,也熟悉一下更换Linux实时内核的过程。

二、资料收集

● Ubuntu18.04虚拟机(使用desktop版本)搭建codesys:http://bbs.hicodesys.com/thread-28335-1-1.html
● 编译替换实时内核:https://www.jianshu.com/p/b74b05d26cf9
● 内核编译错误处理:https://blog.csdn.net/qq_36393978/article/details/118157426
● 修改grup时报错:https://askubuntu.com/questions/1024593/failed-to-execute-child-process-net-when-entering-nautilus
● 树莓派安装codesys运行时,Ubuntu安装codesys运行时可以相互借鉴:https://www.cnblogs.com/ChenMichael/p/16352297.html

三、Ubuntu18.04从安装到更换实时内核

1、下载安装Ubuntu18.04

建议在虚拟机下进行,这个教程已经很多了,这里不再赘述,也可以参考这里:
Ubuntu18.04下载安装及配置网络:
下载地址:https://releases.ubuntu.com/18.04/
虚拟机安装参考:
Ubuntu更换国内源:https://www.qkeke.com/archives/1762.html
解决安装完vmtools仍不能和Windows复制黏贴的问题(或者安装虚拟机过程中就配置好了网卡自动安装了相关工具):

sudo apt-get autoremove open-vm-tools
sudo apt-get update
sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop
reboot

1、备份原来的源

sudo cp /etc/apt/sources.list /etc/apt/sources_init.list

2、使用 vim 编辑源

sudo apt-get install vim
sudo vim /etc/apt/sources.list

3、更换为阿里的源(Ubuntu18.04)

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

4、更新源

sudo apt-get update

5、复损坏的软件包,尝试卸载出错的包,重新安装正确版本的

sudo apt-get -f install

6、更新软件

sudo apt-get upgrade

2、下载安装实时内核,解决编译问题及替换内核时的问题

根据网上的资料按照步骤处理即可。

2.1、首先使用此命令查看你的Ubuntu内核,本人的Ubuntu18.04的内核版本是5.4.0-84-generic
uname -a

Linux ubuntu 5.4.0-84-generic #94~18.04.1-Ubuntu SMP Thu Aug 26 23:17:46 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
2.2、安装依赖项
sudo apt-get install libncurses-dev
sudo apt-get install libssl-dev
2.3、创建内核目录
mkdir ~/kernel && cd ~/kernel
2.4、下载linux内核以及RT-PREEMPT patch

我的内核版本是5.4.0-84-generic,所以下载与目前我的版本最接近的,linux-5.4.10.tar.gz我们可以选择国内清华的镜像网站,国外的源下载速度特别慢。linux内核网址:https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/,你可以在此找到与你想要的内核版本,我下载了linux-5.10.180.tar.gzRT-PREEMPT patch:https://mirrors.tuna.tsinghua.edu.cn/kernel/projects/rt/
我下载了patch-5.10.180-rt89-rc1.patch.gz,可以在older文件夹下找到更多的版本。需要注意的是补丁与所下载的内核版本要一致。

2.5、解压,并给内核打补丁

下载完内核和补丁后把文件移到刚才创建的kernel目录下。

tar zxvf linux-5.10.180.tar.gz
gunzip patch-5.10.180-rt89-rc1.patch.gz

将 patch-文件放到 linux-5.4.10文件夹里,(直接将patch文件拖进 linux-5.4.10文件夹)执行打补丁

cp patch-5.10.180-rt89-rc1.patch linux-5.10.180
cd linux-5.10.180/
patch -p1 < patch-5.10.180-rt89-rc1.patch
2.6、配置内核
sudo apt install make
sudo apt install make-guile
sudo apt install gcc
sudo apt install flex
sudo apt install bison
make menuconfig

General setup —> [Enter]
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

Preemption Model (Voluntary Kernel Preemption (Desktop)) ->[Enter]
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

Fully Preemptible Kernel (Real-Time)-> [Enter] #Select
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

然后一直按esc键返回至主页面
Kernel hacking –> [Enter]
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

Memory Debugging [Enter]
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

取消选择Check for stack overflows,我的里面没有此选项,直接忽略
返回主页面,保存配置退出

2.7、编译内核
vim .config
#修改CONFIG_SYSTEM_TRUSTED_KEYS,将其赋空值
#如果CONFIG_SYSTEM_REVOCATION_KEYS的值不为空的话,也将其赋空值。
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
make -j8

我的cpu内核数是4,所以是j8,内核数的2倍。

2.8、安装内核
sudo make modules_install -j8
sudo make install -j8
2.9、修改grub文件

打开文件 /etc/default/grub,我的这个文件是只读文件,不能直接进行修改。在终端输入命令

sudo nautilus

选择grub文件进行修改,注释掉GRUB_TIMEOUT_STYLE=hidden,将GRUB_TIMEOUT=0改成了GRUB_TIMEOUT=5

2.10、更新grub
sudo update-grub
2.11、重启
sudo reboot

重启后在开机界面,选择Ubuntu高级选项,选择安装好的带rt的版本(默认第一个就可以)。
开机后,查看当前的内核版本

uname -a

Linux ubuntu 5.10.180-rt89-rc1 #1 SMP PREEMPT_RT Wed Sep 27 01:35:01 PDT 2023 x86_64 x86_64 x86_64 GNU/Linux

至此安装成功。

3、实时性测试

可参考以下网页:
https://blog.csdn.net/kl1125290220/article/details/78560220
https://blog.csdn.net/longerzone/article/details/16897655

sudo apt-get install rt-tests

运行cyclictest程序进行实时性测试:

shellsudo cyclictest -t 5 -p 80 -n  #运行五个线程,线程优先级为80,无限循环

cyclictest运行结果详解

P: 0 线程优先级为0
C: 9397 计数器。线程的时间间隔每达到一次,计数器加1
I: 1000 时间间隔为1000微秒(us)
Min: 最小延时(us)
Act: 最近一次的延时(us)
Avg:平均延时(us)
Max: 最大延时(us)

我的测试结果:

# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 2.62 1.81 0.77 1/787 2295          

T: 0 ( 2290) P:80 I:1000 C:  20854 Min:      5 Act:  127 Avg:  251 Max:    1166
T: 1 ( 2291) P:80 I:1500 C:  13903 Min:      6 Act:  113 Avg:  252 Max:     681
T: 2 ( 2292) P:80 I:2000 C:  10427 Min:      7 Act:  115 Avg:  255 Max:    1000
T: 3 ( 2293) P:80 I:2500 C:   8341 Min:      6 Act:   79 Avg:  253 Max:    2721
T: 4 ( 2294) P:80 I:3000 C:   6951 Min:      7 Act:  114 Avg:  254 Max:    2931

四、CoDeSys安装及Linux runtime包下载安装

配置Linux运行时:
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

通过ssh登录设备配置安装,这里可以查看、安装及操作(之后点击安装并查看System Info来确定安装是否成功,最后Start启动运行时即可):
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

创建codesys项目时设备选择Linux设备:
之后通信配置激活即可:
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

五、创建应用并测试

1、创建项目

1.1、创建标准工程

标准工程,CODESYS Control for Linux SL(运行时环境),控制设备(主站控制器):
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

1.2、添加设备并激活

添加设备(只有安装了对应的Linux扩展包才能找到添加如下对应类型的设备):
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

1.3、回声测试

发送回声服务:
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

1.4、安装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文件:
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

安装成功:
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

1.5、配置添加Profinet主站网络

● 在左侧面板的 Device(CODESYS Ccontrol RTE V3 x64)上,右键单击并选择添加设备。使用 以太网适配器、 以太网。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 在 以太网上,右键单击并选择 添加设备。使用 Profinet IO主站、 PN-控制器。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 在 PN_Controller上,右键单击并选择 添加设备。使用 P-Net 示例应用程序。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 在 P_Net_Sample_App上,右键单击并选择 添加设备。使用 DIO 8xLogicLevel。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 双击 左侧菜单中的以太网节点。选择自己的网络接口。IP 地址将相应更新。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 双击 左侧菜单中的PN_controller节点。使用“第一个 IP” 和 “最后一个 IP”调整 IP 范围, 使其都具有 IO 设备的现有 IP 地址(例如运行 example_app 的 Linux 笔记本电脑或嵌入式 Linux 板)。在本教程中,我们使用 First IP 172.16.1.174 和 Last IP 172.16.1.174。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 双击 左侧菜单中的P_Net_Sample_App节点。将 IP 地址设置为 IO 设备的现有地址。在本教程中我们使用 172.16.1.174.
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

3、PLC编程

● 单击左侧面板中的 PLC 逻辑 ‣ Applicaiton ‣ PLC_PRG并输入程序。
在控制器应用程序中,根据教程,使用ST语言编程,变量部分和程序部分的代码都给了,这里我们添加进去即可:

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;

ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 在左侧菜单中的 DIO_8xLogicLevel节点上 ,右键单击并选择“编辑 IO 映射”。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 单击小 +号打开 “Input 8 bits”行 。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 双击您想要编辑的行上的图标。
● 将“Input Bit 7”映射到“in_pin_button_LED”(通过Application/PLC_PRG找到),将“Output Bit 7”映射到“out_pin_LED”。
或者双击在这里编辑也可以:
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 在 Application ‣ MainTask 中选择 Cyclic with 4 ms。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 在 Application ‣ Profinet_CommunicationTask 中选择 10 ms 的循环。使用优先级 14。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

4、烧录程序并测试

● 在顶部菜单中,使用 Build ‣ 生成代码。
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 使用顶部菜单 Online ‣ Login 将应用程序传输到Linux。 在弹出窗口中按 “是” 。
● 在顶部菜单中,使用 Debug ‣ Start 您可以使用顶部菜单 Tools ‣ “Update Linux”来跟踪控制器日志。单击 “系统信息” 按钮,然后查看 “运行时信息” 文本框。如果在网络上找不到 IO 设备,它将显示错误消息。使用 Wireshark 验证控制器是否每 5 秒发送一次 LLDP 数据包。每 15 秒,它会发送一个 ARP 数据包来询问(第一个?)IO 设备 IP 地址,并发送一个 PN-DCP 数据包来询问名为“rt-labs-dev”的 IO 设备。
实际我这里需要登录->运行:
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

wireshark抓包(参考这里:https://rt-labs.com/docs/p-net/how-to-guides/capturing-and-analyzing-ethernet-packets/,后面也会单独出一节怎么抓包分析profinet的总结,这里实时的内核总算抓到了PNIO的协议数据):
ubuntu安装codesys,# 工业互联网协议,Linux实时内核,Profinet,PLC,工业互联网

● 配置完在 Raspberry Pi 上运行的 Codesys softplc 后,您可以关闭用于配置它的个人计算机(运行 Codesys 桌面应用程序)。请记住,您需要每两个小时重新启动运行 Softplc 的 Raspberry Pi,如果使用试用版。
Codesys 故障排除 —————- ——- 如果您收到错误,声称缺少库,请单击左侧面板中的 PLC 逻辑 ‣ 应用程序 ‣ 库管理。Codesys 应该自动检测是否有任何缺失的库。单击 “库管理器”选项卡 下的 “下载缺少的库” 以下载任何缺少的库。(这里也是上一节提到的第一次运行会缺少库,需要挂tz下载解决)

六、最后

接下来理论上还可以安装树莓派的扩展包,利用两个树莓派虚拟机来模拟搭建PN的IO设备交互;此外,还应当利用p-net做更多的交互开发,但是目前项目因为一些原因停止了,所以研究也被迫暂停了,可惜,生活所迫,并不总是有的选,国内科研情况不太清楚,但是企业内部确实没有太多的研究空间,只是急着套现,问题就留给后人吧,也或许留给以后不为生活所迫的自己。文章来源地址https://www.toymoban.com/news/detail-814722.html

到了这里,关于CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于RK3588+Codesys+Xenomai的ARM+LINUX实时硬件平台的软PLC解决方案

    产品概述 公司推出基于瑞芯微RK3588架构的AI边缘计算主板,RK3588是 新一代国产旗舰高性能6 4 位八核处理器,采用8nm工艺, 具有高算力、低功耗、超强多媒体、丰富数据接口等特点。搭载四核A76+四核A55的八核CPU和ARM G610MP4 GPU,内置6 TOPs算力的NPU,搭载Hailo   AI算力芯片,单芯

    2024年03月15日
    浏览(50)
  • codesys【看门狗】

    看门狗 : Task类型 : PDO配置【CAN】:

    2024年01月17日
    浏览(47)
  • 什么是CODESYS开发系统

    CODESYS是一种用于工业自动化领域的开发系统软件,提供了一个完整集成的开发环境。该软件由德国CODESYS GmbH(原 3S-Smart Software Solutions GmbH)公司开发,其最新版本为CODESYS V3。 CODESYS开发系统具有多种特性和优点。首先,它支持多种编程语言,包括IL(指令列表)、ST(结构化

    2024年02月22日
    浏览(29)
  • CODESYS开发教程11-库管理器

    今天继续我们的小白教程,老鸟就不要在这浪费时间了😊。 前面一期我们介绍了CODESYS的文件读写函数库SysFile。大家可能发现了,在CODESYS的开发中实际上是离不开各种库的使用,其中包括系统库、第三方库以及用户自己开发的库。实际开发中为了快速完成任务,通常都会使

    2024年02月16日
    浏览(26)
  • Codesys SCARA机器人控制

    Codesys SCARA机器人控制 1.添加运动学模型 选择Scara2模型(Scara2模型只包含大臂小臂两个关节,Z轴和旋转轴是附加轴) 把机器人关节参数填上 2.方向运动学 选择第一个 3.映射轴到轴组中 4.程序编程 1)轴组使能 调用SMC_GroupPower 和MC_GroupEnable使能SCARA轴组,与单轴使能用法类似。

    2024年02月10日
    浏览(37)
  • ARM+Codesys标准通用型控制器

    整机工业级设计,通讯外设经过隔离保 护   电源宽 电 压设计(9~36V DC ) 丰 富 的通讯接口,满足多种场合控制和通讯需求   四 核工业级处理器,高性能,低功耗,高可靠性      机 身 无风扇设计,外壳小巧 搭载内核 1 00% 自主化大型实时操作系统 SylixOS,支持     POSI X  

    2024年02月09日
    浏览(52)
  • Codesys电子凸轮表的规划与凸轮曲线的拟合

    1、序言 Codesys电子凸轮的功能使用已经在之前介绍过,还未熟悉Codesys电子凸轮功能的可以参考文章 https://blog.csdn.net/qq_19979629/article/details/122373387 在实际应用中,主轴与从轴的关系不仅仅是简单的线性关系,更多的是一些不规则的曲线,那么在使用电子凸轮时,就需要更好的

    2024年02月05日
    浏览(31)
  • Codesys与Modbus TCP从站通信详细说明+实例代码+Modbus软件助手

    一、 说明 codesys 软件版本: 3.5.17 测试助手软件 : Modbus Poll 程序和软件下载 : 在底部 二、Codesys设置 1 新建项目 2 选择控制器类型和语言 3 右键点击【Device】选择【添加设备】添加网络驱动 4 再添加Modbus Tcp Slave Device 5 扫描网络并确定 6 扫描Ethernet网络接口 7 设置从站端口号

    2024年01月16日
    浏览(69)
  • 6轴关节机械手仿真和控制QtQuick3D 和 CodeSys Robotics

    本工程利用QtQuick3D做上位机 ,基于CodeSys的控制器,使用 Robotics的库,进行6轴垂直机械手仿真和控制。 2.1.1程序组织 2.1.2代码 2.1.2.1 pro文件 2.1.2.2 armgeometry.h 2.1.2.3 armgeometry.cpp 2.1.2.4 plccomm.h 2.1.2.5 plccomm.cpp 2.1.2.6 main.cpp 2.1.2.7 main.qml 2.2.1 程序组织 2.2.2 程序代码 2.2.2.1 KinGroup 2.2

    2024年02月08日
    浏览(68)
  • 运动控制很难搞,Codesys解烦恼-----softmotion实现单轴控制的编程及可视化

    1、序言 随着自动化技术的不断发展,伺服电机的精度高,稳定性好,可控性强等优势受到了越来越多的青睐,当前,多轴控制已成为主流,传统的控制模式(脉冲或模拟量)已逐渐跟不上自动化程度更新的脚步,总线控制以超强的灵活性和高性价比逐渐代替传统控制模式,

    2024年02月04日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包