簡介
PROFINET是由PI(PROFIBUS和PROFINET International)組織開發和推廣的工業以太網標準,廣泛應用于工業自動化領域。
P-Net協議是一個開源的PROFINET實現,專門用于嵌入式設備的實時網絡通信。它是一個開源項目(p-net),目標是提供一個輕量級的PROFINET協議棧實現,使得開發者能夠在嵌入式平臺上快速集成PROFINET功能。
在本示例中將使用P-Net軟件包來實現PROFINET主從站通信。
前期準備
軟件環境:
CODESYS(profinet主站模擬)
CODESYS
CODESYS Gateway(網關設備)
CODESYS Control Win SysTray(軟PLC設備)
Npcap(該軟件是運行CODESYS必須的,需要提前安裝好!)
硬件環境:
FSP配置
打開工程配置文件configuration.xml,新增r_gamc Stack:
點擊g_ether0 Ethernet,配置中斷回調函數為user_ether0_callback:
下面配置phy信息,選擇g_ether_phy0,Common配置為User Own Target;修改PHY LSI地址為1(根據原理圖查詢具體地址);設置phy初始化回調函數為ether_phy_targets_initialize_rtl8211_rgmii();同時設置MDIO為GMAC。
配置g_ether_selector0,選擇以太網模式為交換機模式,PHY link設置為默認active-low,PHY接口模式設置為RGMII。
網卡引腳參數配置,選擇操作模式為RGMII:
ETHER_GMAC配置:
RT-Thread Settings 配置
雙擊打開 RT-Thread Settings,在搜索欄檢索p-net軟件包并使能,下面是相關用戶配置信息說明;
Default netif name for p-net:p-net 網卡設備接口名稱,默認為 e00 ;
Enable pnet sample board config:p-net app 用戶LED及按鍵配置;
Default root filesystem path for p-net:p-net 文件系統配置,默認使用 ramfs ,默認分配 8K 內存空間;
P-NET sample slave network ip config:p-net 從站設備靜態IP配置(請關閉 RT_LWIP_DHCP 功能,使用靜態IP)
下面我們還需要配置禁用dhcp功能并使用靜態IP,點擊組件->使能lwip堆棧,選擇禁用DHCP;
完成上述配置后,將程序編譯下載至開發板。
網絡配置
我們使用一根網線連接開發板與PC,同時在PC端配置靜態IP:
檢查開發板端的 IP 信息,并測試聯通性:
軟PLC啟動
CODESYS簡介:CODESYS是德國3S公司開發的PLC軟件,集成了PLC邏輯、運動控制、組態顯示等功能。CODESYS,全稱為“Controller Development System”,是一種基于 IEC 61131-3 標準的工業自動化編程工具。它不僅支持多種編程語言(如梯形圖、結構化文本、功能塊圖等),還提供了豐富的庫和功能模塊,幫助工程師快速開發和調試 PLC(可編程邏輯控制器)和工業控制系統。CODESYS 的靈活性和強大功能使其成為工業自動化領域廣泛使用的開發平臺。
CODESYS創建標準工程
請確保已安裝CODESYS軟件,安裝之后下面這三個是我們需要用到的軟件:
CODESYS V3.5 SP20 Patch 3:Profinet 主站模擬
CODESYS Gateway V3:網關設備
CODESYS Control Win V3 -x64 SysTray:軟PLC設備
首先打開 CODESYS V3.5 SP20 Patch 3,依次選擇 -> 新建工程 -> Projects -> Standard project ,配置工程名稱及位置后點擊確定:
彈出下面這個彈窗后保持默認配置(CODESYS Control Win V3 (CODESYS) / x64 (CODESYS))點擊確定:
注意:如果您購買了CODESYS Control RTE SL(http://store.codesys.cn/codesys/store/detail.html?productId=58),可選擇設備:CODESYS Control RTE V3 (CODESYS) / x64 (CODESYS),正常評估用途可選擇不安裝此擴展包,選擇 CODESYS Control Win V3 (CODESYS) / x64 (CODESYS) 設備創建即可。
創建成功后就可以看到主界面了:
Gateway 及 軟PLC 啟動
依次打開下面兩個軟件:
CODESYS Gateway V3(右鍵 Start Gateway)
CODESYS Control Win V3 -x64 SysTray(右鍵 Start PLC)
回到 CODESYS 主站軟件,雙擊 Device(CODESYS Control Win V3 x64) -> 通信設置 -> 掃描網絡:
彈出設備用戶登錄窗口后,配置用戶名和密碼(用戶自定義):
檢查網關設備及軟PLC設備是否在線:
profinet GSDML文件添加
GSD(Generic Station Description file):即通用站點描述文件,主要用于PROFIBUS DP(GSD文件)和PROFINET IO(GSDML文件)通信,作為描述文件,是PLC系統中CPU模塊和IO模塊之間的橋梁,通常包括通道數據、參數數據、診斷數據以及用戶自定義數據。
本項目的 GSDML文件位于如下路徑:
..\src\ports\rtthread\pn_dev
選擇設備存儲庫安裝描述文件,選擇上述路徑下的 GSDML-V2.4-RT-Labs-P-Net-Sample-App-20220324.xml 文件。
安裝成功后可以看到 p-net 從站描述文件:
設備添加
Ethernet添加:左側導航欄點擊Device并右鍵添加設備,選擇以太網適配器;
圖20-13 Ethernet添加
PROFINET IO主站添加:右鍵左側導航欄中的Ethernet,選擇PN-Controller
PROFINET IO從站添加:右鍵左側導航欄中的 PN-Controller,選擇 P-Net-multiple-module sample app
任務響應
Main Tasks 配置:左側導航欄選擇 Application -> 任務配置 -> 雙擊MainTask(IEC-Tasks),優先級設置為1,類型選擇循環,周期選擇 4ms;
Profinet_CommunicationTask 配置:雙擊 Profinet_CommunicationTask(IEC-Tasks),優先級設置為14,類型選擇循環,周期設置為 10ms。
網絡配置
Ethernet 配置:雙擊左側導航欄中的Ethernet(Ethernet) -> 通用,修改網絡接口為連接到開發板的以太網端口;
PN_Controller 配置:雙擊左側導航欄 PN_Controller(PN-Controller) -> 通用,并正確修改默認從站IP參數的區間,根據提示修改即可。
P-Net 從站網絡配置:雙擊左側導航欄 P-Net-multiple-module sample app -> 通用, 修改IP參數為開發板IP
工程編譯并啟動調試
step1:工程上方導航欄選擇 編譯-> 生成代碼
step2:選擇 在線 -> 登錄
step3:點擊 調試 -> 啟動
此時就可以看到 PN 主站已經上線成功
profinet 從站應用啟動
開發板端上電后,一旦檢測到網卡 link up,則會自動啟動 PN 從站:
PN協議棧運行demo
這里我們使用 CODESYS軟件來測試 PN 的主從站交互。
LED閃爍
回到 CODESYS 軟件,左側導航欄選擇 PN_Controller,右鍵點擊掃描設備,單擊設備名后點擊閃爍LED:
此時的開發板端(PN從站IO)可以看到日志輸出,并伴隨板載User LED閃爍:
從站 I&M(標識和維護) 數據修改
依然是掃描設備界面,我們點擊左下角的 I&M,修改信息并寫入 I&M:
同時 PNIO 會更新從站配置信息:
我們再次點擊查看 I&M,即可發現 I&M 修改成功!
PLC編程及PNIO控制
首先我們點擊左側面板的Device->PLC邏輯->Application->PLC_PRG(PRG),使用ST語言編程,編寫變量及程序代碼:
變量定義:這些變量定義了按鈕的輸入狀態(in_pin_button_LED),LED 的輸出狀態(out_pin_LED)以及控制 LED 是否閃爍的狀態變量(flashing)。振蕩器狀態(oscillator_state)和振蕩器周期計數器(oscillator_cycles)用來實現定時閃爍效果。
程序定義:
首先在每次循環中,oscillator_cycles 增加 1。當計數器超過 200 時,重置計數器并切換 oscillator_state 的狀態(TRUE 或 FALSE),實現周期性變化;
如果按鈕被按下(in_pin_button_LED 為 TRUE),并且在上一周期按鈕狀態是 FALSE,則切換 flashing 狀態。即每次按鈕按下時,切換 LED 是否閃爍的狀態。
如果 flashing 為 TRUE,則 LED 會根據振蕩器狀態 (oscillator_state) 閃爍;如果 flashing 為 FALSE,LED 直接關閉。
在每次循環結束時,將當前按鈕的狀態保存在 in_pin_button_LED_previous 中,以便在下次判斷按鈕按下的事件。
工程中的配置位置如下圖所示:
接下來我們還需要添加一個內置的IO模塊,右鍵點擊P_Net_multi_module_sample_app然后添加一個IO模塊(DIO 8xLogicLevel),如下圖所示:
接下來雙擊DIO_8xLogicLevel節點,選擇PNIO Module I/O映射,編輯Input Bit 7和Output Bit 7并綁定PLC變量:
接著我們點擊上方導航欄的編譯->生成代碼,然后選擇在線->登錄,運行查看現象;
接下來回到CODESYS,再次雙擊Device->PLC邏輯->Application下的PLC_PRG(PRG),此時便可動態觀察程序運行狀態,例如我們按住etherkit開發板上的KEY0,可以發現in_pin_button_LED及in_pin_button_LED_previous 這兩個變量值為FALSE,此時再松開KEY0,可以發現flashing值反轉一次。
-
嵌入式
+關注
關注
5086文章
19140瀏覽量
305863 -
工業以太網
+關注
關注
10文章
621瀏覽量
42345 -
Profinet
+關注
關注
6文章
1195瀏覽量
23436
發布評論請先 登錄
相關推薦
評論