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日
    浏览(48)
  • codesys【看门狗】

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

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

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

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

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

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

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

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

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

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

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

    2024年02月05日
    浏览(29)
  • 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日
    浏览(65)
  • 运动控制很难搞,Codesys解烦恼-----softmotion实现单轴控制的编程及可视化

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

    2024年02月04日
    浏览(54)
  • 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日
    浏览(65)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包