Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RTThreaed
EtherKit快速上手PROFINET
发布于 2025-01-09 16:02:23 浏览:36
订阅该版
[tocm] ## 简介 PROFINET是由PI(PROFIBUS和PROFINET International)组织开发和推广的工业以太网标准,广泛应用于工业自动化领域。 P-Net协议是一个开源的PROFINET实现,专门用于嵌入式设备的实时网络通信。它是一个开源项目(p-net),目标是提供一个轻量级的PROFINET协议栈实现,使得开发者能够在嵌入式平台上快速集成PROFINET功能。 在本示例中将使用P-Net软件包来实现PROFINET主从站通信。 ## 前期准备 **软件环境:** - **CODESYS**(https://us.store.codesys.com/)(profinet主站模拟) - CODESYS - CODESYS Gateway(网关设备) - CODESYS Control Win SysTray(软PLC设备) - **Npcap**(https://npcap.com/dist/npcap-1.80.exe)(该软件是运行CODESYS必须的,需要提前安装好!) **硬件环境:** - EtherKit开发板 购买链接:https://item.taobao.com/item.htm?ft=t&id=855679103445 ## FSP配置 打开工程配置文件configuration.xml,新增r_gamc Stack: ![1.png](https://oss-club.rt-thread.org/uploads/20250109/4984ed4dcd1f1e603790be0245195dcf.png.webp) 点击g_ether0 Ethernet,配置中断回调函数为user_ether0_callback: ![2.png](https://oss-club.rt-thread.org/uploads/20250109/b0163ab7ff0fc0690b4012d3804a8809.png.webp) 下面配置phy信息,选择g_ether_phy0,Common配置为User Own Target;修改PHY LSI地址为1(根据原理图查询具体地址);设置phy初始化回调函数为ether_phy_targets_initialize_rtl8211_rgmii();同时设置MDIO为GMAC。 ![4.png](https://oss-club.rt-thread.org/uploads/20250109/e9d6afa3b37aa066dc042c4a5642e4d9.png.webp) 配置g_ether_selector0,选择以太网模式为交换机模式,PHY link设置为默认active-low,PHY接口模式设置为RGMII。 ![5.png](https://oss-club.rt-thread.org/uploads/20250109/affa30bd31128aa2ed450664ea05764d.png.webp) 网卡引脚参数配置,选择操作模式为RGMII: ![6.png](https://oss-club.rt-thread.org/uploads/20250109/d20c68ca93047a8887d9369ebd940133.png.webp) ETHER_GMAC配置: ![7.png](https://oss-club.rt-thread.org/uploads/20250109/002eded768c1fc3b9d687760802f5692.png.webp) ## RT-Thread Settings 配置 双击打开 RT-Thread Settings,在搜索栏检索p-net软件包并使能,下面是相关用户配置信息说明; ![8.png](https://oss-club.rt-thread.org/uploads/20250109/ec9ce646cffd866697d10b780a8be541.png.webp) - **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; ![9.png](https://oss-club.rt-thread.org/uploads/20250109/e8298b232fe92daac4d727a0c48a37d7.png.webp) 完成上述配置后,将程序编译下载至开发板。 ## 网络配置 我们使用一根网线连接开发板与PC,同时在PC端配置静态IP: ![10.png](https://oss-club.rt-thread.org/uploads/20250109/ce797f7096fd35ec1aaf63e45005ae06.png.webp) 检查开发板端的 IP 信息,并测试联通性: ![11.png](https://oss-club.rt-thread.org/uploads/20250109/db72b35ab07bfc9a5eb10fca84ae7157.png.webp) ## 软PLC启动 CODESYS简介:CODESYS是德国3S公司开发的PLC软件,集成了PLC逻辑、运动控制、组态显示等功能。CODESYS,全称为“Controller Development System”,是一种基于 IEC 61131-3 标准的工业自动化编程工具。它不仅支持多种编程语言(如梯形图、结构化文本、功能块图等),还提供了丰富的库和功能模块,帮助工程师快速开发和调试 PLC(可编程逻辑控制器)和工业控制系统。CODESYS 的灵活性和强大功能使其成为工业自动化领域广泛使用的开发平台。 ## CODESYS创建标准工程 请确保已安装CODESYS软件,安装之后下面这三个是我们需要用到的软件: ![13.png](https://oss-club.rt-thread.org/uploads/20250109/ae9289253045d1b2c81ff950285261e1.png.webp) - 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 ,配置工程名称及位置后点击确定: ![14.png](https://oss-club.rt-thread.org/uploads/20250109/55f88698585400be54ff0c206eb5b6fd.png.webp) 弹出下面这个弹窗后保持默认配置(CODESYS Control Win V3 (CODESYS) / x64 (CODESYS))点击确定: ![15.png](https://oss-club.rt-thread.org/uploads/20250109/0be562541a11641b19f8f17ef632d8b9.png.webp) *注意:如果您购买了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) 设备创建即可。* 创建成功后就可以看到主界面了: ![16.png](https://oss-club.rt-thread.org/uploads/20250109/e9a7e6fa158e2e45433d0dab53a8e91e.png.webp) ## Gateway 及 软PLC 启动 依次打开下面两个软件: - CODESYS Gateway V3(右键 Start Gateway) - CODESYS Control Win V3 -x64 SysTray(右键 Start PLC) ![17.png](https://oss-club.rt-thread.org/uploads/20250109/17c3bd8f91d996e56480746a7a25524f.png) 回到 CODESYS 主站软件,双击 Device(CODESYS Control Win V3 x64) -> 通信设置 -> 扫描网络: ![18.png](https://oss-club.rt-thread.org/uploads/20250109/f35f2aa6c5e068ac3d112b38398fc436.png.webp) 弹出设备用户登录窗口后,配置用户名和密码(用户自定义): ![19.png](https://oss-club.rt-thread.org/uploads/20250109/98975ff50cd5117f10cc671376a43e1f.png.webp) 检查网关设备及软PLC设备是否在线: ![20.png](https://oss-club.rt-thread.org/uploads/20250109/b6af5a4e7918a7d62455e4e6ea53f613.png.webp) ## 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** 文件。 ![21.png](https://oss-club.rt-thread.org/uploads/20250109/e39e751e9530a256feb9b2a1e6445c9d.png.webp) 安装成功后可以看到 p-net 从站描述文件: ![22.png](https://oss-club.rt-thread.org/uploads/20250109/d7694907c4f290539ac6238f0f0a188b.png.webp) ## 设备添加 - Ethernet添加:左侧导航栏点击Device并右键添加设备,选择以太网适配器; ![23.png](https://oss-club.rt-thread.org/uploads/20250109/49eb2e2e373eebc50251a74849b24299.png.webp) 图20-13 Ethernet添加 - PROFINET IO主站添加:右键左侧导航栏中的Ethernet,选择PN-Controller ![24.png](https://oss-club.rt-thread.org/uploads/20250109/7a2cf7c8f1a66775ef8f815044016c28.png.webp) - PROFINET IO从站添加:右键左侧导航栏中的 PN-Controller,选择 P-Net-multiple-module sample app ![25.png](https://oss-club.rt-thread.org/uploads/20250109/ce5d67de2a233f1bfebffc4e9cfb2644.png.webp) ## 任务响应 - Main Tasks 配置:左侧导航栏选择 Application -> 任务配置 -> 双击MainTask(IEC-Tasks),优先级设置为1,类型选择循环,周期选择 4ms; ![26.png](https://oss-club.rt-thread.org/uploads/20250109/3456a9bb007713b14c49e1c599ad342e.png.webp) - Profinet_CommunicationTask 配置:双击 Profinet_CommunicationTask(IEC-Tasks),优先级设置为14,类型选择循环,周期设置为 10ms。 ![27.png](https://oss-club.rt-thread.org/uploads/20250109/ee0b0e7bfccdce9dd899fae11153030f.png.webp) ## 网络配置 - Ethernet 配置:双击左侧导航栏中的Ethernet(Ethernet) -> 通用,修改网络接口为连接到开发板的以太网端口; ![28.png](https://oss-club.rt-thread.org/uploads/20250109/93925d51526f9176629bcfb33324a1ee.png.webp) - PN_Controller 配置:双击左侧导航栏 PN_Controller(PN-Controller) -> 通用,并正确修改默认从站IP参数的区间,根据提示修改即可。 - P-Net 从站网络配置:双击左侧导航栏 P-Net-multiple-module sample app -> 通用, 修改IP参数为开发板IP ![29.png](https://oss-club.rt-thread.org/uploads/20250109/d59a05b8bbd5fb710c5f9ccaed47b585.png.webp) ![30.png](https://oss-club.rt-thread.org/uploads/20250109/aaa950dd4ef00bbedae9a7992960da42.png) ## 工程编译并启动调试 - step1:工程上方导航栏选择 编译-> 生成代码 - step2:选择 在线 -> 登录 - step3:点击 调试 -> 启动 此时就可以看到 PN 主站已经上线成功 ![31.png](https://oss-club.rt-thread.org/uploads/20250109/0be26a5348aacc29f470dbba846f0b0d.png.webp) ## profinet 从站应用启动 开发板端上电后,一旦检测到网卡 link up,则会自动启动 PN 从站: ![33.png](https://oss-club.rt-thread.org/uploads/20250109/fab0763646c165e6c00071b45415d450.png.webp) ![34.png](https://oss-club.rt-thread.org/uploads/20250109/21277e10b1d30ed4410f9670e406d944.png.webp) ## PN协议栈运行demo 这里我们使用 CODESYS软件来测试 PN 的主从站交互。 ## LED闪烁 回到 CODESYS 软件,左侧导航栏选择 PN_Controller,右键点击扫描设备,单击设备名后点击闪烁LED: ![35.png](https://oss-club.rt-thread.org/uploads/20250109/a2d704bd4ff214fcfc5ef3f0628400f6.png.webp) 此时的开发板端(PN从站IO)可以看到日志输出,并伴随板载User LED闪烁: ![36.png](https://oss-club.rt-thread.org/uploads/20250109/0310f6431f2cb71dd09b382eee14c185.png.webp) ## 从站 I&M(标识和维护) 数据修改 依然是扫描设备界面,我们点击左下角的 I&M,修改信息并写入 I&M: ![37.png](https://oss-club.rt-thread.org/uploads/20250109/48b823891116903cc7d3f0cc6fe086f0.png.webp) 同时 PNIO 会更新从站配置信息: ![38.png](https://oss-club.rt-thread.org/uploads/20250109/13f537f3c579c3006e4c97e2dfe99f2a.png.webp) 我们再次点击查看 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)用来实现定时闪烁效果。 ![39.png](https://oss-club.rt-thread.org/uploads/20250109/cbefeacc631334de25b588a99f585f8f.png.webp) - 程序定义: 1. 首先在每次循环中,oscillator_cycles 增加 1。当计数器超过 200 时,重置计数器并切换 oscillator_state 的状态(TRUE 或 FALSE),实现周期性变化; 2. 如果按钮被按下(in_pin_button_LED 为 TRUE),并且在上一周期按钮状态是 FALSE,则切换 flashing 状态。即每次按钮按下时,切换 LED 是否闪烁的状态。 3. 如果 flashing 为 TRUE,则 LED 会根据振荡器状态 (oscillator_state) 闪烁;如果 flashing 为 FALSE,LED 直接关闭。 4. 在每次循环结束时,将当前按钮的状态保存在 in_pin_button_LED_previous 中,以便在下次判断按钮按下的事件。 ![40.png](https://oss-club.rt-thread.org/uploads/20250109/0ffc9fbf988816e340d626a8e364f3e4.png.webp) 工程中的配置位置如下图所示: ![41.png](https://oss-club.rt-thread.org/uploads/20250109/03492961a636343fbd0bcc38b364381b.png.webp) 接下来我们还需要添加一个内置的IO模块,右键点击P_Net_multi_module_sample_app然后添加一个IO模块(DIO 8xLogicLevel),如下图所示: ![42.png](https://oss-club.rt-thread.org/uploads/20250109/864ccd964d089976b89f4c5d0de3cb3a.png.webp) 接下来双击DIO_8xLogicLevel节点,选择PNIO Module I/O映射,编辑Input Bit 7和Output Bit 7并绑定PLC变量: ![43.png](https://oss-club.rt-thread.org/uploads/20250109/5e49fbaaeefc0d9f0f9801473a0d1973.png.webp) 接着我们点击上方导航栏的编译->生成代码,然后选择在线->登录,运行查看现象; ![44.png](https://oss-club.rt-thread.org/uploads/20250109/58e862796733366457997c6fa8552598.png.webp) 接下来回到CODESYS,再次双击Device->PLC逻辑->Application下的PLC_PRG(PRG),此时便可动态观察程序运行状态,例如我们按住etherkit开发板上的KEY0,可以发现in_pin_button_LED及in_pin_button_LED_previous 这两个变量值为FALSE,此时再松开KEY0,可以发现flashing值反转一次。 ![45.png](https://oss-club.rt-thread.org/uploads/20250109/88202426a1dcc1e1522284b51820cf2e.png.webp) ## 采购链接 ![46.jpg](https://oss-club.rt-thread.org/uploads/20250109/64403360ea407a50e3464a8f7e693d32.jpg) 或购买链接:https://item.taobao.com/item.htm?ft=t&id=855679103445 ——————End——————
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
xiaorui
小睿手办 https://item.taobao.com/item.htm?id=674889867009
文章
8
回答
347
被采纳
70
关注TA
发私信
相关文章
1
RTThread支持loongson2k1000了么?
2
终端出现The aht10 is under an abnormal status
3
为什么系统一直在重启?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部