CoDeSys系列-4、基于Ubuntu的codesys運(yùn)行時擴(kuò)展包搭建Profinet主從環(huán)境
一、前言
我們之前已經(jīng)在windows機(jī)上運(yùn)行起了基于codesys的軟PLC,并且其作為主站和跑在虛擬機(jī)上的p-net從站進(jìn)行了簡單的IO操作,但是跑在Windows上的運(yùn)行時PLC會影響網(wǎng)卡,而不跑運(yùn)行時的則由于實(shí)時性不足導(dǎo)致一些超時的問題,因此我們這里在Ubuntu18.04上更換實(shí)時Linux內(nèi)核,然后利用codesys的for Linux擴(kuò)展包將該實(shí)時的Ubuntu18.04改造運(yùn)行軟PLC作為主站來和樹莓派從站做profinet交互,也熟悉一下更換Linux實(shí)時內(nèi)核的過程。
二、資料收集
● Ubuntu18.04虛擬機(jī)(使用desktop版本)搭建codesys:http://bbs.hicodesys.com/thread-28335-1-1.html
● 編譯替換實(shí)時內(nèi)核:https://www.jianshu.com/p/b74b05d26cf9
● 內(nèi)核編譯錯誤處理: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運(yùn)行時,Ubuntu安裝codesys運(yùn)行時可以相互借鑒:https://www.cnblogs.com/ChenMichael/p/16352297.html
三、Ubuntu18.04從安裝到更換實(shí)時內(nèi)核
1、下載安裝Ubuntu18.04
建議在虛擬機(jī)下進(jìn)行,這個教程已經(jīng)很多了,這里不再贅述,也可以參考這里:
Ubuntu18.04下載安裝及配置網(wǎng)絡(luò):
下載地址:https://releases.ubuntu.com/18.04/
虛擬機(jī)安裝參考:
Ubuntu更換國內(nèi)源:https://www.qkeke.com/archives/1762.html
解決安裝完vmtools仍不能和Windows復(fù)制黏貼的問題(或者安裝虛擬機(jī)過程中就配置好了網(wǎng)卡自動安裝了相關(guān)工具):
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、復(fù)損壞的軟件包,嘗試卸載出錯的包,重新安裝正確版本的
sudo apt-get -f install
6、更新軟件
sudo apt-get upgrade
2、下載安裝實(shí)時內(nèi)核,解決編譯問題及替換內(nèi)核時的問題
根據(jù)網(wǎng)上的資料按照步驟處理即可。
2.1、首先使用此命令查看你的Ubuntu內(nèi)核,本人的Ubuntu18.04的內(nèi)核版本是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、創(chuàng)建內(nèi)核目錄
mkdir ~/kernel && cd ~/kernel
2.4、下載linux內(nèi)核以及RT-PREEMPT patch
我的內(nèi)核版本是5.4.0-84-generic,所以下載與目前我的版本最接近的,linux-5.4.10.tar.gz我們可以選擇國內(nèi)清華的鏡像網(wǎng)站,國外的源下載速度特別慢。linux內(nèi)核網(wǎng)址:https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/,你可以在此找到與你想要的內(nèi)核版本,我下載了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文件夾下找到更多的版本。需要注意的是補(bǔ)丁與所下載的內(nèi)核版本要一致。
2.5、解壓,并給內(nèi)核打補(bǔ)丁
下載完內(nèi)核和補(bǔ)丁后把文件移到剛才創(chuàng)建的kernel目錄下。
tar zxvf linux-5.10.180.tar.gz
gunzip patch-5.10.180-rt89-rc1.patch.gz
將 patch-文件放到 linux-5.4.10文件夾里,(直接將patch文件拖進(jìn) linux-5.4.10文件夾)執(zhí)行打補(bǔ)丁
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、配置內(nèi)核
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]
Preemption Model (Voluntary Kernel Preemption (Desktop)) ->[Enter]
Fully Preemptible Kernel (Real-Time)-> [Enter] #Select
然后一直按esc鍵返回至主頁面
Kernel hacking –> [Enter]
Memory Debugging [Enter]
取消選擇Check for stack overflows,我的里面沒有此選項,直接忽略
返回主頁面,保存配置退出
2.7、編譯內(nèi)核
vim .config
#修改CONFIG_SYSTEM_TRUSTED_KEYS,將其賦空值
#如果CONFIG_SYSTEM_REVOCATION_KEYS的值不為空的話,也將其賦空值。
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
make -j8
我的cpu內(nèi)核數(shù)是4,所以是j8,內(nèi)核數(shù)的2倍。
2.8、安裝內(nèi)核
sudo make modules_install -j8
sudo make install -j8
2.9、修改grub文件
打開文件 /etc/default/grub,我的這個文件是只讀文件,不能直接進(jìn)行修改。在終端輸入命令
sudo nautilus
選擇grub文件進(jìn)行修改,注釋掉GRUB_TIMEOUT_STYLE=hidden,將GRUB_TIMEOUT=0改成了GRUB_TIMEOUT=5
2.10、更新grub
sudo update-grub
2.11、重啟
sudo reboot
重啟后在開機(jī)界面,選擇Ubuntu高級選項,選擇安裝好的帶rt的版本(默認(rèn)第一個就可以)。
開機(jī)后,查看當(dāng)前的內(nèi)核版本
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、實(shí)時性測試
可參考以下網(wǎng)頁:
https://blog.csdn.net/kl1125290220/article/details/78560220
https://blog.csdn.net/longerzone/article/details/16897655
sudo apt-get install rt-tests
運(yùn)行cyclictest程序進(jìn)行實(shí)時性測試:
shellsudo cyclictest -t 5 -p 80 -n #運(yùn)行五個線程,線程優(yōu)先級為80,無限循環(huán)
cyclictest運(yùn)行結(jié)果詳解
P: 0 線程優(yōu)先級為0
C: 9397 計數(shù)器。線程的時間間隔每達(dá)到一次,計數(shù)器加1
I: 1000 時間間隔為1000微秒(us)
Min: 最小延時(us)
Act: 最近一次的延時(us)
Avg:平均延時(us)
Max: 最大延時(us)
我的測試結(jié)果:
# /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運(yùn)行時:
通過ssh登錄設(shè)備配置安裝,這里可以查看、安裝及操作(之后點(diǎn)擊安裝并查看System Info來確定安裝是否成功,最后Start啟動運(yùn)行時即可):
創(chuàng)建codesys項目時設(shè)備選擇Linux設(shè)備:
之后通信配置激活即可:
五、創(chuàng)建應(yīng)用并測試
1、創(chuàng)建項目
1.1、創(chuàng)建標(biāo)準(zhǔn)工程
標(biāo)準(zhǔn)工程,CODESYS Control for Linux SL(運(yùn)行時環(huán)境),控制設(shè)備(主站控制器):
1.2、添加設(shè)備并激活
添加設(shè)備(只有安裝了對應(yīng)的Linux擴(kuò)展包才能找到添加如下對應(yīng)類型的設(shè)備):
1.3、回聲測試
發(fā)送回聲服務(wù):
1.4、安裝p-net類型Profinet設(shè)備
下載對應(yīng)GSDML文件:github.com/rtlabs-com/p-net/blob/master/samples/pn_dev/GSDML-V2.4-RT-Labs-P-Net-Sample-App-20220324.xml
安裝GSDML文件:
安裝成功:
1.5、配置添加Profinet主站網(wǎng)絡(luò)
● 在左側(cè)面板的 Device(CODESYS Ccontrol RTE V3 x64)上,右鍵單擊并選擇添加設(shè)備。使用 以太網(wǎng)適配器、 以太網(wǎng)。
● 在 以太網(wǎng)上,右鍵單擊并選擇 添加設(shè)備。使用 Profinet IO主站、 PN-控制器。
● 在 PN_Controller上,右鍵單擊并選擇 添加設(shè)備。使用 P-Net 示例應(yīng)用程序。
● 在 P_Net_Sample_App上,右鍵單擊并選擇 添加設(shè)備。使用 DIO 8xLogicLevel。
● 雙擊 左側(cè)菜單中的以太網(wǎng)節(jié)點(diǎn)。選擇自己的網(wǎng)絡(luò)接口。IP 地址將相應(yīng)更新。
● 雙擊 左側(cè)菜單中的PN_controller節(jié)點(diǎn)。使用“第一個 IP” 和 “最后一個 IP”調(diào)整 IP 范圍, 使其都具有 IO 設(shè)備的現(xiàn)有 IP 地址(例如運(yùn)行 example_app 的 Linux 筆記本電腦或嵌入式 Linux 板)。在本教程中,我們使用 First IP 172.16.1.174 和 Last IP 172.16.1.174。
● 雙擊 左側(cè)菜單中的P_Net_Sample_App節(jié)點(diǎn)。將 IP 地址設(shè)置為 IO 設(shè)備的現(xiàn)有地址。在本教程中我們使用 172.16.1.174.
3、PLC編程
● 單擊左側(cè)面板中的 PLC 邏輯 ? Applicaiton ? PLC_PRG并輸入程序。
在控制器應(yīng)用程序中,根據(jù)教程,使用ST語言編程,變量部分和程序部分的代碼都給了,這里我們添加進(jìn)去即可:
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;
● 在左側(cè)菜單中的 DIO_8xLogicLevel節(jié)點(diǎn)上 ,右鍵單擊并選擇“編輯 IO 映射”。
● 單擊小 +號打開 “Input 8 bits”行 。
● 雙擊您想要編輯的行上的圖標(biāo)。
● 將“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 的循環(huán)。使用優(yōu)先級 14。
4、燒錄程序并測試
● 在頂部菜單中,使用 Build ? 生成代碼。
● 使用頂部菜單 Online ? Login 將應(yīng)用程序傳輸?shù)絃inux。 在彈出窗口中按 “是” 。
● 在頂部菜單中,使用 Debug ? Start 您可以使用頂部菜單 Tools ? “Update Linux”來跟蹤控制器日志。單擊 “系統(tǒng)信息” 按鈕,然后查看 “運(yùn)行時信息” 文本框。如果在網(wǎng)絡(luò)上找不到 IO 設(shè)備,它將顯示錯誤消息。使用 Wireshark 驗(yàn)證控制器是否每 5 秒發(fā)送一次 LLDP 數(shù)據(jù)包。每 15 秒,它會發(fā)送一個 ARP 數(shù)據(jù)包來詢問(第一個?)IO 設(shè)備 IP 地址,并發(fā)送一個 PN-DCP 數(shù)據(jù)包來詢問名為“rt-labs-dev”的 IO 設(shè)備。
實(shí)際我這里需要登錄->運(yùn)行:
wireshark抓包(參考這里:https://rt-labs.com/docs/p-net/how-to-guides/capturing-and-analyzing-ethernet-packets/,后面也會單獨(dú)出一節(jié)怎么抓包分析profinet的總結(jié),這里實(shí)時的內(nèi)核總算抓到了PNIO的協(xié)議數(shù)據(jù)):
● 配置完在 Raspberry Pi 上運(yùn)行的 Codesys softplc 后,您可以關(guān)閉用于配置它的個人計算機(jī)(運(yùn)行 Codesys 桌面應(yīng)用程序)。請記住,您需要每兩個小時重新啟動運(yùn)行 Softplc 的 Raspberry Pi,如果使用試用版。
Codesys 故障排除 —————- ——- 如果您收到錯誤,聲稱缺少庫,請單擊左側(cè)面板中的 PLC 邏輯 ? 應(yīng)用程序 ? 庫管理。Codesys 應(yīng)該自動檢測是否有任何缺失的庫。單擊 “庫管理器”選項卡 下的 “下載缺少的庫” 以下載任何缺少的庫。(這里也是上一節(jié)提到的第一次運(yùn)行會缺少庫,需要掛tz下載解決)文章來源:http://www.zghlxwxcb.cn/news/detail-814722.html
六、最后
接下來理論上還可以安裝樹莓派的擴(kuò)展包,利用兩個樹莓派虛擬機(jī)來模擬搭建PN的IO設(shè)備交互;此外,還應(yīng)當(dāng)利用p-net做更多的交互開發(fā),但是目前項目因?yàn)橐恍┰蛲V沽?,所以研究也被迫暫停了,可惜,生活所迫,并不總是有的選,國內(nèi)科研情況不太清楚,但是企業(yè)內(nèi)部確實(shí)沒有太多的研究空間,只是急著套現(xiàn),問題就留給后人吧,也或許留給以后不為生活所迫的自己。文章來源地址http://www.zghlxwxcb.cn/news/detail-814722.html
到了這里,關(guān)于CoDeSys系列-4、基于Ubuntu的codesys運(yùn)行時擴(kuò)展包搭建Profinet主從環(huán)境的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!