ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

开源p-net协议栈实战:从零打造PROFINET从站

开源p-net协议栈实战:从零打造PROFINET从站 1. 项目定位为什么非要自己折腾一个 PROFINET 从站最近几年只要是做工业自动化设备接入的工程师大概率都绕不开 PROFINET。上位机、PLC、伺服、机器人、视觉系统满产线都是西门子或者其他支持 PROFINET 的主站设备而手里的仪表、阀门、采集模块、第三方控制器却只有 Modbus、串口或者以太网 TCP。想在产线上跟西门子 PLC 直接对话最干净的办法就是给自家设备加一个 PROFINET 从站接口也就是让设备在 PROFINET 总线上变成一台标准的 IO 设备。这个项目要做的就是用开源的 p-net 协议栈从零搭一个属于你自己的 PROFINET 从站。p-net 是一个用纯 C 语言实现的 PROFINET IO 从站协议栈它的好处在于不依赖特定硬件普通带以太网口的 MCU 或者 Linux 主机就能跑省掉了买 ASIC 协议芯片的成本也摆脱了厂商 SDK 的束缚。整个项目落地之后设备不仅能跟西门子 S7-1200/1500 正常组态通讯还能灵活控制 IO 数据区、报警、参数读写甚至做到和 EtherCAT 从站类似的实时数据交换体验。我建议的关注人群分三类第一类是嵌入式工程师手上有带网口的 MCU想给产品加 PROFINET 接口第二类是自动化集成商经常要对接第三方设备想从底层搞明白从站通讯原理第三类是纯粹被 PROFINET 协议折腾过、想找个不买板卡也能开发从站方案的工程师。这篇内容会按“底层原理—协议栈拆解—实操搭建—故障排查”的顺序走中间会穿插我在实际项目里踩过的坑和验证过的做法保证看完能直接上手。2. PROFINET 从站开发的核心认知与方案选型2.1 从站到底在做什么理解 PROFINET 通讯的本质很多人一听说 PROFINET 就头大觉得协议复杂、文档全是英文、帧结构绕来绕去。但如果我们把视角放到一个“从站设备”的角度事情其实没那么可怕。PROFINET 从站在总线上做的事可以归结为三点响应主站的连接管理请求、周期性交换 IO 数据、处理报警和记录数据。第一点对应的是连接建立阶段。主站比如 S7-1500会上电后通过 DCPDiscovery and Configuration Protocol发现从站然后发起连接参数协商包括设备名称、IP 地址、期望的报文周期、IO 数据长度等。这个过程有点像两个人见面先互相确认身份和工作内容确认完了才进入正式干活状态。第二点是正常运行时最重要的部分。主站和从站之间按照设定好的周期典型 1ms、2ms、4ms、8ms、16ms互相交换输入输出数据。对从站来说输出数据是 PLC 写给设备的数据比如阀门开度指令、伺服使能信号输入数据是设备反馈给 PLC 的数据比如当前位置、温度、状态字。理解这一层之后后面用 p-net 时你就知道该把数据放在哪里、长度怎么定义、刷新机制是怎么回事。第三点是报警和记录数据。PROFINET 的好处是通讯不只是传 IO 数据还能在通道层面传递诊断信息。比如传感器断线了、设备过温了从站可以主动往主站推一条报警西门子 PLC 那边用 OB82 或者诊断缓冲区就能看到。p-net 对这些也提供了接口只是大部分人在第一步做 IO 通讯时容易忽略后面我会专门讲。搞清楚这三点你就知道“从零打造从站”不是重新发明协议而是把这三件事在你的硬件平台上跑通。p-net 做的事就是把 PROFINET 协议栈最复杂的部分——状态机、报文封装、报警管理、DCP 响应——全部封装好留出一套干净的 API 给你操作。2.2 选 p-net 而不是其他方案三类实现路线对比做 PROFINET 从站市面上通常有三条路线。第一条是买专用协议芯片典型代表是西门子的 ERTEC200、瑞萨的 R-IN32M3、Hilscher 的 netX 系列这类芯片内部已经固化了 PROFINET 协议开发者只需要做外围 IO 映射就可以。优点是稳定性高、经过大量验证、通讯周期可以做得很短缺点是价格贵、交期长、开发受厂商工具链限制而且一旦用上芯片你的产品硬件基本就被绑死。第二条路是用商业协议栈比如 Softing、HMS Anybus CompactCom、赫优讯 netTAP。这类方案通常以模块或者 DLL 形式提供协议实现完整认证好过。但成本同样不低而且核心代码不开源出了问题只能找原厂技术支持自己很难深挖。第三条路就是本项目选的 p-net 开源协议栈。p-net 由瑞典 RT-Labs 团队维护纯 C 代码实现主要面向嵌入式平台Linux、FreeRTOS、裸机都能跑。它支持 PROFINET RTReal-Time通讯Class 1 和 Class 2 的部分功能都覆盖包括 DCP、LLDP、GSD 文件管理、报警、记录数据读写等。最关键的它不依赖专门的 MAC 芯片市面上常见的以太网控制器加一个 PHY 就能用比如 STM32 的 F4/H7 系列自带的 MAC、Allwinner 的 EMAC、Intel 的 I210 网卡等。三条路线放在一起对比结论很直接方案类型硬件成本开发周期协议完整性灵活性认证难度专用芯片高短受SDK限制高低容易商业协议栈高中高中容易p-net开源低中需自己消化代码中高极高中等p-net 适合的场景很明确你自己有硬件平台、有嵌入式开发能力、想以最低成本给产品加 PROFINET 接口并且不想被厂商封闭生态卡住。做产品原型验证、小批量定制设备、学习协议内部机制p-net 都是很合适的选择。2.3 需要提前打好的基础在动手之前有几样东西建议先准备好不然很容易中途卡壳。第一是PROFINET 的基本术语IO 设备、IO 控制器、IO 系统、设备名称、IP 分配方式、GSD 文件这些概念要清楚第二是以太网基础至少知道 MAC 地址、VLAN 帧、ARP、UDP 这些是怎么工作的因为 PROFINET RT 的实时数据是直接封装在以太网二层帧里的不走 TCP/IP第三是C 语言的嵌入式开发能力p-net 虽然是封装好的代码但里面涉及到的内存管理、回调函数、线程同步概念如果你完全没有接触过初期会有点遭罪。第四点是硬件准备。我实际用过的组合是 STM32H743 加 LAN8720A 的 PHY跑 FreeRTOS外扩了一块 32KB 的 SRAM 作为报文缓存。这套配置对 p-net 来说绰绰有余。如果只是想先在 PC 上验证逻辑那更好办直接用 Linux 普通千兆网卡就能跑通 p-net 自带的 pc_demo 示例等逻辑没问题再移植到 MCU 上。3. p-net 协议栈结构解析与工程搭建准备3.1 从仓库到工程p-net 的代码结构和依赖关系把 p-net 代码拉下来之后第一眼看上去会有点懵目录结构其实很清晰。核心目录是src里面从头文件到具体实现分得清清楚楚。pnet_api.h是应用层接口相当于你操作协议栈的唯一入口pnet_eth.h管以太网帧收发pnet_dcp.h管 DCP 协议pnet_util.h是工具函数pnet_rt.h管实时数据交换。除了 src 目录还有一个test目录放着协议栈的自测套件这个非常有用可以在没有硬件的情况下模拟主站行为来测试从站逻辑。src/osal目录是操作系统抽象层p-net 不依赖任何特定 RTOS但要求你提供互斥锁、事件标志、线程创建这些基础能力。你换平台的时候主要就是改这个 osal 层。这里要特别提醒一点p-net 对平台的实时性是有要求的不是随便就能跑起来。因为 PROFINET RT 报文是二层帧直接收发而协议栈内部又有多条状态机在跑连接状态机、报警状态机、DCP 状态机所以你的以太网驱动得保证帧接收中断能在短时间内把数据交到协议栈手里。实测下来在 FreeRTOS 里用独立的高优先级任务处理收包中断里只做拷贝和置事件标志稳定性最好。如果图省事在 Linux 用户态跑建议用 PF_PACKET 套接字不要经过内核 TCP/IP 协议栈否则实时性会受调度延迟影响。3.2 搭建工程前必须搞懂的四个关键概念在真正写代码之前有四个 p-net 里的核心概念需要先消化掉否则看示例代码会像看天书。第一个是MSPMaintenance Service Protocol维护服务协议。这个名字听着唬人其实就是从站向主站上报设备状态和维护信息的通道。p-net 通过 MSP 上报 MAC 地址、设备状态、固件版本等信息主站那边用西门子的 Primar 或者 TIA 的诊断功能可以直接读到。对大多数项目来说你不需要主动操作 MSP协议栈内部会自动处理。第二个是CIPConnectionless/IP based无连接 IO 数据通道。PROFINET 的标准 IO 数据交换用的是有连接的方式主站和从站之间建立 ARApplication Relation然后周期收发数据帧。但 p-net 同时支持无连接的 CIP 方式适合那些不需要周期通讯、只需要按需读写的场景。这个在实际项目中用得少知道有这个东西就行。第三个是变量表Variable Table。这是 p-net 给应用层留的数据接口。你在 p-net 的配置结构体里定义一个变量表里面放你希望和 PLC 交换的所有数据项包括输入区、输出区、方向、长度、偏移量。协议栈启动时会根据这个表建立内部的数据缓冲后续你往变量表里写数据就相当于把数据放到了 PROFINET 的输入区PLC 那边周期就能读到。反过来PLC 写的输出数据也会自动更新到变量表里你随时可以读出来用。第四个是GSD 文件。这是 PROFINET 设备能够被主站识别的“身份证”。文件里描述了设备的名称、厂商、设备类型、模块化结构、IO 数据长度、支持的报文周期等。你在 TIA Portal 里组态时导入 GSDML 文件后就能看到这个设备然后像配置普通 IO 模块一样配置它的输入输出长度。GSD 文件写错是新手最容易犯的错后面我会详细说。3.3 从零搭建开发环境用 p-net 做从站开发我推荐的最小环境是一块 Linux 主机 一个交叉编译工具链 目标板或者直接用 PC 跑。先把环境搭好再考虑协议栈集成。第一步是准备操作系统和编译工具。如果目标板是 STM32 这类 MCU用 arm-none-eabi-gcc如果是 Linux 跑 x86 板子直接用系统自带的 gcc。p-net 的构建系统用的是 CMake所以把 CMake 和 ninja 装上就行。我建议先在 Linux PC 上把 p-net 的pc_demo示例跑通这能帮你验证环境问题也能让你熟悉协议栈的运行流程。第二步是准备定位工具。跑 PROFINET 从站你需要一个主站来协调查询最简单的是用西门子的 TIA Portal 一台 S7-1200 PLC。如果没有 PLC也可以用 Wireshark 抓包分析 p-net 报文来判断从站是否正常工作。强烈建议 Wireshark 必须装好后面排查问题全靠它看 DCP 请求、连接建立、周期数据帧。第三步是把 osal 层接上你的操作系统。p-net 提供了 Linux 和 FreeRTOS 两种 osal 实现直接用现成的比较省事。如果换到其他 RTOS照着 FreeRTOS 的模板改互斥锁和事件标志就行。这里有个细节p-net 的循环数据交换默认是独立线程跑的所以你的 RTOS 必须支持优先级抢占且这个线程的优先级要高于一般任务。4. 从零实现 PROFINET 从站的完整实操4.1 硬件初始化和平台适配我实际做的第一个从站硬件平台是 STM32H743 LAN8720A DP83848 PHY系统跑 FreeRTOS。一开始直接从 ST 的标准以太网库开始配好 MAC 地址、PHY 地址、中断优先级然后启动收包任务。以太网驱动要特别注意三点。第一MAC 地址必须唯一建议从设备序列号或者随机数生成器里派生如果两台设备 MAC 相同总线上会冲突主站认出来的设备也是同一个故障排查极其恶心。第二以太网中断的优先级必须设置得足够高否则帧接收延迟会导致 DCP 响应超时、连接建立失败。第三DMA 描述符数量要配够。PROFINET 通讯是高频双向收发至少配 8 个 RX DMA 描述符、8 个 TX DMA 描述符太小了会丢帧。做完驱动之后就是 p-net 的 osal 适配。p-net 的 osal 层无非是互斥锁、事件组、线程创建、延时、计时器这几个接口。FreeRTOS 下一一映射即可。需要注意的一点是p-net 内部很多回调是从协议栈线程直接触发到应用层的所以你在应用回调里不能做耗时操作比如往 Flash 写数据、调用 printf 重定向到串口、或者执行长延时。最好的做法是回调里只置标志位、拷贝数据具体的业务逻辑放到独立的任务里去处理。4.2 用示例工程搭出自己的从站框架你可以在 p-net 仓库里找到src/pc_demo/pc_demo.c这是一个很完整的从站参考实现。我的建议是别从空文件自己写先把 pc_demo 编译跑通然后逐段替换成你自己的业务代码。它的代码逻辑大概是这样初始化网络接口绑定 MAC 地址、IP 地址这里 IP 地址可以设成 0.0.0.0由主站通过 DCP 协议下发这是 PROFINET 的正常工作方式。配置 p-net往pnet_cfg结构体里填设备名称、设备 ID、厂商 ID、变量表定义、模块化配置等。启动协议栈调用pnet_init和pnet_start协议栈开始工作。主循环里处理应用逻辑周期刷新输出数据、采集输入数据、应答命令。我实际用过的变量表是这样的输入区从站到 PLC32 字节、输出区PLC 到从站32 字节每个区分成 4 个 8 字节的槽位方便 PLC 端按模块划分。变量表配置代码类似这样static const pnet_cfg_t pnet_cfg { .device_name pn-dev, .device_id 0x0001, .vendor_id 0x002A, .num_module_apis 1, .module_apis { ... }, .input_volatile true, .output_volatile true, };配置里要注意device_name必须和 GSD 文件里的设备名一致.vendor_id是厂商唯一标识西门子会分配自己测试时可以先用临时值。.input_volatile和.output_volatile设为true的意思是你每次直接访问变量表内存即可协议栈不需要做内部缓存拷贝可以省掉一层数据搬运也能减少延迟。4.3 GSD 文件的生成与关键参数设置GSD 文件是整个项目中坑最多的部分。PROFINET 主站是通过 GSD 文件来识别和配置从站的文件格式是 XML扩展名是.xml但西门子 TIA 导入的时候要求文件是 GSDML 命名规范。这个文件如果出错最典型的现象就是 TIA 里根本刷新不出设备或者导入时报“文件格式不正确”。一个最小可用的 GSD 文件至少包含以下内容ProfileHeader声明协议版本和文件命名空间。DeviceIdentity设备厂商 ID、设备 ID必须和你在 p-net 配置里的一致。DeviceAccessPointList定义设备接入点DAP这是主站看到的设备入口。ModuleList定义可配置的模块每个模块指定输入输出数据长度、数据类型、地址范围。RecordDataItemList定义参数记录数据项比如设备的额定电流、IP 参数、通信参数。我最开始写的 GSD 文件只定义了一个模块输入输出各 4 字节在 TIA 里配置之后PLC 始终显示“设备没有响应”。查到最后发现GSD 文件里的模块标识符ModuleIdent必须和 p-net 配置里的模块标识完全对应包括子模块 ID 和槽号排序少一个数字都对不上。后来把 GSD 文件里的模块标识改成和 p-net 一致通讯立刻通了。还有一点是 GSD 文件里设置的报文周期。PROFINET 支持的周期有 1ms、2ms、4ms、8ms、16ms、32ms、64ms、128ms、256ms、512ms。你 GSD 里声明的周期要和 PLC 组态时选择的周期一致。如果你的设备不太追求高性能建议 8ms 起步把 1ms、2ms 的选项去掉这样主站配置时不会误选到太快的周期导致从站因为处理不过来而掉线。4.4 与西门子 PLC 的组态联调全记录从站代码写完之后联调是验证协议栈工作正常的最终步骤。我最常用的流程如下先在 TIA Portal 里新建一个项目添加 S7-1500 PLC然后在网络视图里右键“添加设备”导入你的 GSD 文件。导入成功之后把从站设备拖到网络视图里和 PLC 用 PROFINET 接口连起来。接着给从站分配设备名称这里需要保持和 p-net 里 device_name 一致默认是“pn-dev”。然后进入设备视图配置模块。我的配置是 DAP 一个 32 字节输入、32 字节输出的模块PLC 的 I/Q 地址分别是 IW0 / QW0 这种形式。组态完成之后编译下载到 PLC。下载完成后PLC 会自动通过 DCP 协议去网络上找“pn-dev”这个设备。这时候你在 PC 上用 Wireshark 抓包应该能看到 DCP Identify 请求、从站的 DCP Identify 响应、连接建立请求Connect、连接释放确认Release等报文。真正跑起来之后PLC 里可以把输入输出地址映射到 DB 块或者标准 IO 地址然后在监控表里写入输出值看从站变量表里的对应数据有没有变。我这里用的调试方法是从站这边一旦检测到输出数据变化就把数据通过串口打印出来同时往输入区里回写一个相同的值。这样在 PLC 里往 QW0 写 0x1234从站串口打印出 0x1234然后 PLC 能读到 IW0 为 0x1234整个数据回路就验证通了。5. 实操中的坑与排查技巧实录5.1 连接建立失败先查设备名和 GSD 标识联调过程中最容易遇到的一个问题是 PLC 那边一直报“设备无响应”或者“组态与实际设备不匹配”。这种问题的排查思路我总结成一套固定动作第一步在 TIA 的设备视图里查看设备名称是否和 p-net 配置完全一致。PROFINET 的设备名字符串是大小写敏感的pn-dev和Pn-Dev都不是同一个设备。第二步确认 GSD 文件中的 DeviceIdentity 和 ModuleIdent 和代码中的配置一致。只要有一项对不上主站就会认为设备不符合组态要求。第三步用 Wireshark 抓包看 DCP Identify 请求能否得到响应。如果抓不到响应说明从站的 DCP 处理有问题重点检查以太网底层收发是否正常。实测中我发现 p-net 对 GSD 文件中的设备名长度有限制最长不超过 32 个字符。设备名别用太长尽量用短小且易识别的字符串比如sm-01、fanuc-rbt这种。5.2 周期数据抖动看门狗和报文周期设置不当通讯建立之后偶尔会出现数据刷新的随机性延迟或者从站在运行一段时间后掉线。用 Wireshark 看报文会发现周期数据帧的间隔忽大忽小甚至出现两帧之间间隔超过设定周期的两倍。这种情况多半是协议栈线程的调度不及时或者看门狗时间设置得太短。PROFINET 协议里有一个看门狗机制主站会设定一个超时时间如果从站在这个时间内没有发帧就判定为连接断开。p-net 的默认看门狗时间取值跟报文周期相关一般是周期的 3 倍。如果你把周期设置成 4ms但你的系统在某种极端情况下调度延迟超过了 10ms那就很容易误触发看门狗掉线。解决方案是这样的在 GSD 文件里把可选的周期范围放宽比如支持 4ms、8ms、16ms在 TIA 组态时优先选 8ms 或 16ms给系统留够余量。同时在 p-net 配置里调大看门狗时间倍数。另外你这个从站的协议栈任务优先级要确保是最高优先级并且所有中断处理函数里不能有长时间的临界区否则帧发送会被卡住。5.3 PLC 与其他工业机器人设备的地址对应方法项目上线后我一个客户那边遇到了典型的“S7-1200 和安川机器人 PROFINET 通讯地址对应”问题这在现场其实很常见。场景是这样的安川机器人作为 PROFINET 从站PLC 作为主站两边都配了一组 IO 数据但中间的数据对不上——PLC 里写的第一个字节机器人的寄存器里看到的不是同一个数据。这个问题的根源是IO 地址映射顺序不一致。PROFINET 的 IO 数据是顺序排列的比如从站有 32 字节输出这 32 个字节的排列顺序完全由 GSD 文件里的模块定义决定。PLC 侧如果按照“第一个模块对应第一个字节槽”来组态但机器人侧 GSD 文件的模块顺序是反着排的就会出现错位。我处理这个问题的标准做法是先看两边的 GSD 文件定义的模块顺序和字节长度把 PLC 组态里的模块顺序调整到和机器人 GSD 的模块顺序一致然后在 TIA 里每个模块的 IO 地址手动设置确保映射正确。调试好了之后每个 IO 地址的对应关系用一张表记录下来方便现场维护。如果是发那科机器人的 PROFINET 板卡原理也一样关键在于板卡侧有自己的 IO 映射寄存器表你需要参考发那科的 PROFINET 板卡说明书找到输入输出数据在寄存器里的偏移位置然后去 PLC 侧做地址平移。很多现场工程师这里没搞明白以为两边地址对不上就是一方坏了其实只是映射规则没看仔细。5.4 常见问题速查表把实操中遇到的典型问题按“现象—原因—解法”整理成一张表方便后续排查参考现象典型原因解决方法TIA 刷新不到设备设备名不一致 / GSD 文件导入错误核对 device_name、重新导入 GSDPLC 报设备无响应以太网驱动异常 / MAC 冲突抓包看 DCP 帧检查 MAC 地址唯一性连接建立后立即断开GSD 模块标识与 p-net 配置不一致对齐 ModuleIdent、子模块 ID周期数据乱跳协议栈线程优先级太低 / 看门狗过短提高线程优先级调大看门狗余量报文收发正常但数据不变变量表映射与业务代码不匹配检查变量表偏移量、DMA 缓冲区地址PLC 无法写输出从站输出区配置为只读检查 p-net 配置和 GSD 属性定义5.5 调试利器有效的抓包姿势最后分享一个我强烈推荐的调试方法。你开发 PROFINET 从站一定不要把逻辑都写完之后再测试那样出问题会很难定位。我的习惯是协议栈启动之后先用 Wireshark 抓 10 分钟的包确认 DCP、LLDP、Connect 这些管理帧都正常再往上叠加业务逻辑。具体抓包姿势把 PC 的网卡接到和 PLC、从站同一个交换机的镜像口或者直接在 PC 上跑 p-net 从站时用本机 Wireshark 抓回环网卡。过滤器用eth.proto 0x8892这是 PROFINET 实时帧的以太网类型可以只过滤 PROFINET 帧。再叠加eth.proto 0x88ab过滤 DCP 帧。这样能清晰看到主从之间的握手过程和数据交换是否正常。如果发现从站没回 DCP 响应优先排查硬件层PHY 的 link 状态、MAC 中断有没有产生、DMA 描述符有没有跑完。如果 DCP 正常但连接建不起来那就是协议栈配置层面的事重点看 GSD 和代码配置的匹配情况。这套打法适用于绝大部分从站调试场景。6. 项目调试的最终阶段稳定性验证与边界测试协议功能都打通后稳定性验证是不可跳过的环节尤其是给现场设备用。这里分享我记得的几个关键测试项。第一是异常断电重启测试。在从站正常通讯时直接断开电源然后重新上电观察 PLC 能否自动重新建立连接。PROFINET 的设计目标之一就是热插拔和自动恢复如果你的从站断电重启后 PLC 不重新连接基本可以确定 DCP 响应或者连接状态机在初始化时有资源没释放。p-net 这种纯 C 实现最容易在内存分配上出问题正常情况下启动和停止各 100 次不应该出现内存增长。第二是长时运行稳定性测试。让从站和 PLC 以 8ms 周期持续通讯 48 小时中间观察 Wireshark 统计是否有丢帧、重传或者异常广播帧。同时把从站的 CPU 占用率、堆栈使用量记录下来确保没有内存泄漏。p-net 在 FreeRTOS 上跑我实测过一周不掉线但前提是 osal 层的互斥锁逻辑正确尤其是pnet_set_input_data和pnet_get_output_data这两个接口所在的临界区不能太长。第三是错误注入测试。比如在通讯过程中拔掉网线等 5 秒再插回去或者用 Wireshark 伪造一个错误的 DCP 请求看从站是否会错误地修改自己的设备名。这部分测试做完基本就可以放心交付现场使用了。项目做到这一步你对 PROFINET 协议的理解会比只看文档的人深刻得多。行业内普遍的痛点是你不知道一个从站在总线上到底怎么被发现的、怎么被配置的、怎么被监控的。用 p-net 亲手搭一遍之后这些原来黑盒般的环节会变成你脑子里的白盒模型——甚至在遇到西门子 PLC 和其他机器人板卡对应问题时你也能一眼看出是哪一层没配对。我最后的建议是如果你只是想做快速原型验证直接拿 p-net 的 pc_demo 在 Linux 上跑花一个下午就能让 Wireshark 看到完整的从站报文如果你要做产品级从站别急着写 UI 和业务功能先把 GSD 文件、模块定义、看门狗、变量表这四个东西反复吃透它们才是 PROFINET 从站开发中最容易出问题且影响最大的部分。这套流程走完你就能把 p-net 变成自己的工具箱以后任何设备需要接入 PROFINET 总线对你来说都只是配置一个新变量表的事。
返回列表