ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

工业自动化通信协议实战:Modbus、Profinet、EtherCAT、OPC UA详解

工业自动化通信协议实战:Modbus、Profinet、EtherCAT、OPC UA详解 1. 自动化通信协议全景概览干了十几年自动化从最早拿着RS232串口线蹲在配电柜前面一根一根对线到后来调EtherCAT伺服轴调到手心冒汗再到现在坐在办公室远程连OPC UA抓数据我最大的感受就是协议这东西你不懂它它处处跟你作对你摸透了它它就是一条条听话的数据高速公路。很多刚入行的兄弟一上来就问“Modbus和Profinet到底哪个好”这问题本身就问错了——它们压根不在一个赛道上就像你问“自行车和卡车哪个好”得先看你拉的是人还是货。自动化领域主流的通信协议按我的经验可以粗暴地分成三大梯队现场总线层Profibus、CANopen、DeviceNet这些老将、工业以太网层Profinet、EtherCAT、EtherNet/IP、Modbus TCP、以及数据集成与语义层OPC UA。而Modbus是个特殊的存在它横跨串口和以太网两个时代从1979年活到现在堪称工业通信界的“活化石”但你还真离不开它。这篇文章我打算把Modbus、Profibus、EtherCAT、Profinet、OPC UA这五个协议掰开揉碎了讲。不是照本宣科念参数而是结合我这些年踩过的坑、调过的设备、写过的报文告诉你每个协议为什么这么设计、什么场景该用它、实际配置时哪里最容易翻车。不管你是刚接触PLC的新手还是想从Modbus转战EtherCAT的老鸟看完应该都能少走点弯路。先给个全局对比让你心里有个谱协议物理层拓扑结构实时性典型周期主从模式典型场景Modbus RTURS485/RS232总线型低10-100ms单主多从仪表、变频器、传感器Modbus TCP以太网星型中低5-50ms多客户端SCADA、数据采集Profibus DPRS485总线型中高1-10ms单主多从西门子PLC与远程IOProfinet工业以太网星型/线型高1-10ms多主多从工厂自动化、运动控制EtherCAT工业以太网线型/环型极高0.1-1ms单主多从伺服、机器人、CNCOPC UATCP/HTTPS任意非实时10-1000ms客户端/服务器MES/SCADA数据集成这张表你先记在心里后面每个协议我都会展开讲。有一点要提前说清楚实时性不等于速度快。EtherCAT周期能做到100微秒不是因为它“传输快”而是因为它的报文处理机制和时钟同步做得极致。这个后面细说。2. Modbus协议最接地气的工业通信老兵2.1 Modbus为什么能活四十多年还不死Modbus是1979年Modicon公司搞出来的最初就是给PLC用的串口通信协议。你可能会想这么老的东西早该淘汰了吧但现实是你去任何一个工厂随便找个流量计、温控表、变频器十有八九都支持Modbus。原因很简单它足够简单简单到用一张纸就能把协议格式写完。Modbus的核心思想就一句话主站发请求从站回响应请求和响应都是固定格式的帧。没有复杂的握手没有协商过程没有认证机制。主站说“把保持寄存器40001开始的10个寄存器数据给我”从站就把数据打包回来。就这么直接。这种简单带来的好处是实现成本极低。一个8位单片机几KB的RAM就能实现一个Modbus RTU从站。我见过最离谱的是一个国产温控器用的芯片是STM8S003F3Flash只有8KB照样跑Modbus RTU跑得稳稳的。所以你在市场上能看到大量几十块钱的Modbus模块这在EtherCAT领域是不可想象的。但简单也是双刃剑。Modbus没有设备描述文件没有标准的数据字典没有互操作性认证。同样是“温度值”有的厂家放在40001有的放在40010有的用整数表示0.1度有的用浮点数占两个寄存器。每次对接新设备你都得翻手册、试地址、对数据格式这是Modbus最让人头疼的地方。2.2 Modbus RTU报文详解与CRC算法Modbus RTU的报文结构非常紧凑一个典型的读保持寄存器请求功能码03长这样[从站地址 1字节] [功能码 1字节] [起始地址 2字节] [寄存器数量 2字节] [CRC 2字节]比如你要读从站1的40001-40002两个寄存器报文就是01 03 00 00 00 02 C4 0B01从站地址03功能码读保持寄存器00 00起始地址注意这里是0-based对应4000100 02读2个寄存器C4 0BCRC校验低字节在前从站响应01 03 04 [数据1高] [数据1低] [数据2高] [数据2低] [CRC低] [CRC高]这里有个新手最容易搞混的点Modbus地址到底从0开始还是从1开始。协议报文里用的是0-based地址但设备手册上通常写的是1-based的“寄存器编号”。比如手册写“温度值在40001”那报文里的起始地址就是0x0000。如果手册写“温度值在40100”报文里就是0x006399。我见过太多人因为这个问题调半天明明报文没错就是读不到数据最后发现地址偏移了一位。CRC算法是Modbus RTU的另一个关键点。CRC-16/MODBUS用的是多项式0xA001反向的0x8005初始值0xFFFF。我贴一段C语言实现这个是我用了很多年的版本经过大量现场验证uint16_t modbus_crc16(uint8_t *buf, uint16_t len) { uint16_t crc 0xFFFF; for (uint16_t i 0; i len; i) { crc ^ buf[i]; for (uint8_t j 0; j 8; j) { if (crc 0x0001) { crc (crc 1) ^ 0xA001; } else { crc 1; } } } return crc; }注意返回的CRC要低字节在前、高字节在后放到报文末尾。这个算法用查表法可以加速256字节的表能快好几倍但在STM32这种主频的芯片上直接算也完全够用。2.3 Modbus TCP与RTU的本质区别很多人以为Modbus TCP就是在RTU外面套个TCP壳其实变化比想象的大。Modbus TCP的报文去掉了CRC校验因为TCP本身有校验换成了一个7字节的MBAP头[事务ID 2字节] [协议ID 2字节] [长度 2字节] [单元ID 1字节] [功能码...] [数据...]事务ID用来匹配请求和响应协议ID固定为0长度表示后面还有多少字节单元ID在网关场景下用来标识背后的RTU从站。Modbus TCP最大的优势是可以多客户端同时连接。RTU是单主站总线同一时刻只能有一个主站发话。TCP模式下SCADA、HMI、MES系统可以同时连同一个设备读数据互不干扰。但要注意很多低端设备的Modbus TCP实现只支持1-2个并发连接连接数一多就拒绝新连接这个在选型时要确认。2.4 Modbus实操避坑指南坑一485总线终端电阻。RS485总线两端必须各接一个120欧姆终端电阻中间节点不能接。我见过一个现场8个温控器挂在一条485总线上通信时好时坏查了半天发现是每个温控器上都焊了终端电阻8个120欧姆并联变成15欧姆驱动芯片直接过载。把多余的电阻拆掉就好了。坑二轮询间隔太短。Modbus RTU是半双工主站发完请求要等从站响应。如果你轮询间隔设成10ms但从站响应要50ms就会丢包。正确做法是根据从站数量和波特率算最小轮询周期。9600波特率下一个8字节请求加一个8字节响应大概需要16ms加上从站处理时间保守点每个从站留30-50ms。坑三浮点数字节序。Modbus寄存器是16位的32位浮点数要占两个寄存器。但这两个寄存器谁在前谁在后不同厂家不一样。有的用ABCD大端有的用CDAB字交换有的用BADC字节交换。对接新设备时先读一个已知值比如量程上限用不同字节序试一遍看哪个能对上。提示调试Modbus时手边常备一个USB转485工具和Modbus Poll/Modbus Slave软件。先单独测试从站设备确认地址、波特率、校验位都对再接入系统。不要一上来就在系统里调变量太多根本定位不了问题。3. Profibus与Profinet西门子生态的左右手3.1 Profibus DP的黄金时代与局限Profibus是1989年西门子主导推出的现场总线标准分DPDecentralized Periphery、PAProcess Automation、FMS三个版本其中DP用得最多。它的物理层是RS485最高12Mbps但12Mbps时总线长度不能超过100米降到1.5Mbps可以到200米187.5Kbps能到1000米。这个距离和速率的权衡是Profibus的一个硬约束。Profibus DP的报文结构比Modbus复杂得多有令牌传递机制、有诊断报文、有参数化报文。主站和从站建立通信要经过几个阶段首先主站发“Get Diagnostics”确认从站存在然后发“Set Parameters”配置从站参数再发“Check Configuration”核对IO配置最后才进入数据交换循环。这个过程叫“启动序列”任何一个环节失败从站都进不了数据交换状态。Profibus最大的问题是带宽有限且被西门子垄断。12Mbps听起来不低但这是整个总线共享的挂20个从站每个从站能分到的带宽就很有限了。而且Profibus的芯片和协议栈基本被西门子及其授权厂商控制第三方想开发从站设备门槛很高。这也是为什么现在新项目越来越少用Profibus都在往Profinet转。3.2 Profinet的三种通信类型Profinet是西门子在2000年代推出的工业以太网标准它把通信分成了三种类型这个设计思路很值得琢磨NRTNon-Real-Time普通TCP/IP通信用于参数配置、诊断、大文件传输。周期100ms以上走标准以太网协议栈。RTReal-Time实时通信用于周期性IO数据交换。周期1-10ms跳过TCP/IP栈直接在以太网层用专用以太类型0x8892。RT报文不经过路由器只能在同一个二层网络内通信。IRTIsochronous Real-Time等时同步实时用于运动控制。周期0.25-1ms抖动小于1微秒。IRT需要专用硬件支持交换机要支持时间片调度。这个分类很聪明不是所有数据都需要实时。参数配置慢一点无所谓IO数据要快运动控制要极快。用一套协议覆盖三种需求比搞三套协议要优雅。3.3 西门子PLC与安川机器人Profinet通讯地址对应这是热词里出现的问题我实际做过这个项目说一下关键点。西门子PLC比如S7-1200/1500作为Profinet主站安川机器人比如GP系列配YRC1000控制器作为从站地址对应关系是这样的首先在安川机器人侧你要在YRC1000的Profinet板卡配置里定义IO模块。假设你配置了16字节输入、16字节输出。然后在西门子TIA Portal里安装安川的GSDML文件把机器人拖到Profinet网络上。关键来了GSDML文件里定义的模块顺序和安川侧配置的顺序必须完全一致。比如安川侧配置了“16字节输入16字节输出”TIA里也要选同样的模块。如果安川侧是“8字节输入8字节输出8字节输入8字节输出”TIA里也要按这个顺序选四个模块。地址对应上TIA里会给每个模块分配I地址和Q地址。比如机器人输入模块分配I地址68-83那安川侧的第1个字节对应PLC的IB68第2个字节对应IB69以此类推。安川侧的输出对应PLC的QB地址。我踩过的坑是安川的Profinet板卡固件版本和GSDML文件版本要匹配。有一次用旧版GSDML配新固件板卡模块能连上但数据不刷新折腾了一下午才发现是版本问题。所以拿到设备第一件事确认板卡固件版本去官网下对应版本的GSDML。3.4 Profinet网络规划与诊断Profinet网络规划有几个硬性规则不支持普通家用交换机必须用支持Profinet的工业交换机比如西门子的SCALANCE系列。普通交换机对RT报文的处理没有优化可能丢包或延迟抖动大。设备名称分配是Profinet调试的第一步。每个Profinet从站有一个设备名称比如“robot1”主站通过名称来识别从站。设备名称和IP地址都可以通过TIA Portal在线分配但设备名称必须先分配因为Profinet的DCP协议用名称来寻址。诊断方面TIA Portal的“在线与诊断”功能很强大能看到每个从站的连接状态、IO数据、诊断报警。如果从站掉线先看是物理层问题网线、端口还是配置问题设备名称、IP冲突。我习惯用Wireshark抓Profinet报文过滤pn_rt能看到RT报文的周期和抖动对排查网络问题很有帮助。4. EtherCAT运动控制领域的性能王者4.1 EtherCAT的“On the Fly”机制为什么快EtherCAT是德国倍福Beckhoff2003年推出的它的核心创新是On the Fly处理机制。传统以太网通信每个从站收到报文后要完整接收、解析、再转发延迟大。EtherCAT不一样主站发一个报文从站在报文经过自己的时候直接在自己的数据段读写然后硬件转发给下一个从站。报文不用停下来像高铁过站一样乘客上下车但车不停。这个机制带来的效果是100个从站的系统通信周期可以做到100微秒。因为所有从站的数据都在一个报文里报文绕一圈回来主站就拿到了所有从站的数据。报文长度随从站数量线性增长但处理时间几乎不变。EtherCAT的另一个核心是分布式时钟DC。热词里有人问“ethercat dc时钟同步的过程”这个我详细说一下。DC机制让所有从站的时钟跟主站时钟同步同步精度可以达到纳秒级。过程是这样的主站发送一个带时间戳的广播报文记录发送时刻t1第一个从站收到报文记录接收时刻t2然后把处理延迟加到报文里后续每个从站都记录自己的接收时刻和处理延迟报文绕一圈回到主站主站记录接收时刻t4主站算出总延迟然后给每个从站发偏移量让它们调整本地时钟这样所有从站的时钟就对齐了。对于多轴同步运动控制这个机制至关重要。比如一个龙门架两个伺服轴要严格同步偏差不能超过1微秒没有DC根本做不到。4.2 EtherCAT从站硬件设计与TX网口数量热词里有人问“ethercat slave设备需要几个tx网口”这取决于从站的工作模式标准模式直通需要2个网口一个RX一个TX。数据从RX进从TX出形成线型拓扑。这是最常见的配置。环型冗余模式也需要2个网口但主站从两端同时发报文形成环型。如果一处断线系统仍能工作。这需要从站支持环型冗余功能。分支模式需要3个网口一个进两个出形成树型拓扑。这种模式用得少因为EtherCAT本身推荐线型拓扑。所以标准EtherCAT从站芯片比如ET1100、ET1200、LAN9252都是2个或3个MII/RMII接口。用STM32做EtherCAT从站的话通常外挂一颗LAN9252STM32通过SPI或并口跟LAN9252通信。热词里“基于stm32 ethercat”就是这个方案。4.3 EtherCAT配置与常见编译问题EtherCAT从站开发需要用到SSCSlave Stack Code工具倍福提供但需要签NDA才能拿到。SSC工具会根据你的硬件配置生成协议栈代码。热词里那个编译警告..\ethercat\objdef.c(890): warning: #767-d: conversion from pointer to small这是Keil MDK的警告意思是把一个指针赋给了小整数类型。在objdef.c里通常是对象字典的指针操作如果目标平台是32位ARM指针是32位赋给16位变量就会丢数据。解决办法是检查那个变量的类型定义改成uint32_t或指针类型。这个警告不能忽略否则运行时会出内存错误。EtherCAT配置的另一个关键是ESI文件EtherCAT Slave Information这是一个XML文件描述从站的对象字典、PDO映射、同步管理器配置。主站比如TwinCAT通过ESI文件识别从站。如果你自己开发从站ESI文件要跟固件里的对象字典完全一致否则主站配置不上。4.4 EtherCAT CSP模式与伺服控制热词里的“ethercat csp”指的是CiA 402驱动协议里的周期同步位置模式Cyclic Synchronous Position。这是EtherCAT伺服最常用的模式。主站每个周期发一个目标位置给伺服伺服在下一个周期到达这个位置。CSP模式的关键参数是插补周期和位置环周期。插补周期是主站发目标位置的周期通常是1ms或更短。位置环周期是伺服内部的位置控制周期通常是125微秒或250微秒。插补周期必须是位置环周期的整数倍否则会有累积误差。调试CSP模式时最容易出问题的是位置前馈和速度前馈。如果前馈没调好伺服会滞后于目标位置表现为跟随误差大。我一般先把前馈设为0调好位置环增益再逐步加前馈观察跟随误差的变化。TwinCAT的Scope工具可以实时看目标位置、实际位置、跟随误差的曲线调起来很直观。5. OPC UA打通IT与OT的数据桥梁5.1 OPC UA解决了什么问题OPC UAUnified Architecture是OPC基金会2006年推出的它要解决的是不同厂商设备之间的数据互操作问题。之前的OPC DA基于Windows COM/DCOM跨平台差、配置防火墙麻烦、不支持复杂数据结构。OPC UA把这些问题全解决了跨平台、内置安全、支持复杂类型、支持信息建模。OPC UA最核心的概念是信息模型。传统通信协议只传数据不传语义。你读到一个寄存器值是25你不知道这是温度、压力还是流量。OPC UA用对象、变量、方法来描述数据每个变量有类型、有单位、有描述。客户端连上来能自动发现服务器有哪些数据不用手动配地址。这个特性对MES和SCADA系统太重要了。以前对接一条产线要翻几十本手册把每个PLC的地址抄下来再在SCADA里一个个配。用OPC UA的话服务器自动暴露所有变量客户端浏览一下就能看到配置工作量减少一大半。5.2 OPC UA客户端工具选型与配置热词里出现了“uaexpert opc ua 客户端”、“opc ua 客户端工具下载”、“wincc opc ua配置”这些我统一说一下。UaExpert是我最常用的OPC UA客户端免费功能全。下载安装后新建连接输入服务器地址opc.tcp://192.168.1.100:4840如果服务器要认证就选对应的安全策略。连上后左侧是地址空间树可以浏览所有节点拖到中间就能看实时值。调试OPC UA服务器时UaExpert是标配。WinCC OPC UA配置稍微复杂点。WinCC作为OPC UA服务器要在“计算机属性”里勾选OPC UA服务器然后在“OPC UA配置”里设置端口、安全策略、用户认证。WinCC默认端口是4840安全策略建议至少用Basic256Sha256不要用None。客户端连接时要用WinCC里配置的用户名密码。SINUMERIK OPC UA是西门子数控系统的OPC UA服务器用于采集机床数据。配置要在SINUMERIK的HMI上启用OPC UA设置访问权限。SINUMERIK的OPC UA信息模型是定制的节点ID不是标准的要用西门子提供的文档对照。5.3 OPC UA安全配置与性能优化OPC UA的安全策略有None、Basic128Rsa15、Basic256、Basic256Sha256等。生产环境绝对不要用None那等于裸奔。Basic256Sha256是目前推荐的最低标准它用SHA-256做签名、AES-256做加密。证书管理是OPC UA最烦人的部分。服务器和客户端要互相信任需要交换证书。UaExpert连接时如果服务器证书不在信任列表里会弹窗让你确认。生产环境要把证书导出手动导入到信任列表不能每次弹窗都点“信任”。性能优化方面OPC UA的订阅模式比轮询模式效率高得多。轮询是客户端每隔一段时间问服务器要数据订阅是服务器数据变化时主动推给客户端。对于变化不频繁的数据比如温度订阅模式能大幅减少网络流量。订阅的发布间隔可以设一般设100ms-1000ms看数据变化速度。注意OPC UA的端口4840在有些企业网络里被防火墙挡了部署前先确认网络策略。另外OPC UA over TCP的实时性有限不适合运动控制它定位是数据集成层不是现场控制层。6. 协议选型与实战问题排查6.1 五个协议怎么选一张决策表选协议不是选最好的是选最合适的。我整理了一个决策表按你的需求对号入座你的需求推荐协议理由读几个温湿度传感器Modbus RTU成本最低接线简单变频器调速Modbus RTU/TCP大部分变频器都支持西门子PLC连远程IOProfinet西门子生态原生支持多轴伺服同步EtherCAT同步精度最高周期最短机器人集成到产线Profinet或EtherCAT看机器人品牌支持哪个产线数据上MESOPC UA语义化IT系统好对接老设备改造Modbus转OPC UA网关不动老设备加网关转换有个原则要记住不要为了用新协议而用新协议。我见过一个项目就几个温度传感器非要上EtherCAT结果成本翻了好几倍维护还复杂。Modbus能解决的问题就用Modbus。6.2 常见通信故障排查速查表现象可能原因排查方法Modbus读不到数据地址偏移、波特率不对、校验位不对用Modbus Poll单独测从站Modbus数据时有时无终端电阻、线缆屏蔽、干扰检查终端电阻示波器看波形Profinet从站掉线设备名称冲突、网线质量、交换机不兼容看TIA诊断换工业交换机EtherCAT从站不进入OP状态ESI文件不匹配、PDO映射错误看主站诊断核对ESI和固件OPC UA连接失败证书不信任、端口被挡、安全策略不匹配用UaExpert测看错误码通信周期抖动大网络负载高、交换机QoS没配Wireshark抓包看周期6.3 我踩过的那些坑坑一Modbus 485总线星型接线。RS485必须手拉手总线型接线不能星型。我见过一个现场8个设备从配电柜中心向四周辐射接线通信各种丢包。改成手拉手后立刻稳定。如果实在要星型用485集线器。坑二Profinet设备名称大小写。Profinet设备名称是大小写敏感的“Robot1”和“robot1”是两个不同的设备。TIA Portal里分配名称时要注意在线分配和离线配置要一致。坑三EtherCAT DC同步没开。有些从站的DC同步默认是关的要手动在ESI文件或主站配置里打开。如果没开DC多轴同步会有毫秒级偏差对于插补运动来说完全不能用。坑四OPC UA订阅太多节点。OPC UA服务器对订阅数量有限制一次订阅几千个节点可能导致服务器响应慢甚至崩溃。正确做法是分组订阅每组几百个节点或者用采样间隔区分优先级。坑五协议转换网关的延迟。Modbus转Profinet、Modbus转OPC UA这类网关内部有转换延迟通常几毫秒到几十毫秒。如果用在闭环控制里这个延迟可能导致振荡。网关适合数据采集不适合实时控制。6.4 调试工具清单我工具箱里常备的调试工具按协议分类ModbusModbus Poll主站模拟、Modbus Slave从站模拟、USB转485工具、串口调试助手。Modbus Poll的注册码网上很多但建议支持正版。ProfinetWireshark抓包分析、TIA Portal西门子官方调试、PRONETA西门子网络分析工具。EtherCATTwinCAT倍福主站软件、Wireshark带EtherCAT解析插件、EtherCAT Master工具。OPC UAUaExpert客户端、UaGateway协议转换、OPC UA SDK开发用。这些工具大部分有免费版足够日常调试用。Wireshark的EtherCAT解析需要装插件在Wireshark的协议设置里启用。7. 协议演进与个人经验杂谈7.1 TSN与OPC UA over TSN现在行业里讨论比较多的是TSN时间敏感网络和OPC UA over TSN。TSN是IEEE 802.1的一组标准目的是让标准以太网具备确定性传输能力。OPC UA over TSN就是把OPC UA跑在TSN网络上既有OPC UA的语义互操作又有TSN的实时性。这个方向如果成熟可能会改变现在的协议格局。但现在TSN的芯片和交换机还比较贵生态也不完善实际项目里用得少。我的建议是保持关注但别急着上等生态成熟再说。7.2 我个人的学习路径建议如果你刚入行我建议按这个顺序学先学Modbus RTU。找个USB转485工具和一个Modbus从站设备手动发报文看响应。把功能码03、06、16搞明白CRC算法自己写一遍。这是基本功。再学Modbus TCP。用Modbus Poll连一个Modbus TCP设备对比RTU和TCP的报文差异。理解MBAP头的作用。然后学Profinet。如果有西门子PLC用TIA Portal组态一个Profinet网络连一个远程IO。理解设备名称、IP地址、IO地址的关系。接着学EtherCAT。用TwinCAT连一个EtherCAT从站比如倍福的EK1100耦合器加EL1008输入模块看DC同步的过程。如果有伺服调一下CSP模式。最后学OPC UA。用UaExpert连一个OPC UA服务器比如KEPServerEX或西门子的OPC UA服务器浏览地址空间配置订阅。这个顺序是从简单到复杂从低速到高速从数据到语义。每一步都有实操不要只看书。7.3 最后分享几个实用技巧技巧一Modbus地址速算。40001对应0x000040100对应0x0063。算法是地址减1转十六进制。30100对应0x0063输入寄存器10001对应0x0000线圈。记住这个调试时不用翻手册。技巧二Profinet设备名称批量分配。TIA Portal里可以导出设备名称列表用Excel编辑后再导入批量分配比一个个点快得多。设备多的时候能省几个小时。技巧三EtherCAT从站EEPROM备份。EtherCAT从站的ESI信息存在EEPROM里调试好后用TwinCAT的EEPROM工具备份出来。如果从站坏了换新的直接烧录备份的EEPROM不用重新配置。技巧四OPC UA证书自动信任。开发阶段可以在服务器和客户端都设置“自动接受信任的证书”省去手动交换证书的麻烦。但生产环境一定要关掉这个选项手动管理证书。技巧五Wireshark过滤表达式。Modbus RTU用modbusModbus TCP用modbus tcp.port502Profinet用pn_rtEtherCAT用ecat。这些过滤表达式能快速定位报文比翻整个抓包文件快得多。通信协议这东西纸上得来终觉浅绝知此事要躬行。你看再多文章不如实际接一个设备调一次。调通了那些概念就变成你自己的了。调不通再回来翻这篇文章看看是不是踩了我说的某个坑。
返回列表