您好!欢迎访问深圳市易测电气有限公司网站!
专业的传感器与智能自动化方案提供商专注位移传感器行业
全国咨询热线:137-2888-0902
联系我们
微信扫一扫

【 微信扫码咨询 】

137-2888-0902

0755-85271862

串口和以太网通信不通怎么查?从电气层到协议层的六个环节

作者:易测电气技术团队 浏览量:0 时间:2026-10-13

串口与以太网通信排障图集封面:从一根线、一个字节到协议栈与现场排障

图注:这篇把串口和以太网放到同一条链路上讲,从电气层一直排到业务层

现场最耗时间的一类故障,不是设备坏了,而是线明明是通的、程序却连不上。万用表量着有电压,Ping 也通,可数据就是不对;或者串口偶尔蹦出几个乱码,重启一次又好了,过两天再犯。

这类问题有个共同点:能通的层面都查过了,出问题的层面还没查到。通信是一条从业务一路往下压到电平、再一路往上解开的链路,任何一层掉链子,表现出来的现象都差不多——”连不上”或”数据不对”。所以真正省时间的做法不是加校验、换线、改超时,而是先把问题定在哪一层。

接下来按串口侧、以太网侧、协议设计三块往下走,中间插一节专门讲位移传感器在现场是怎么挂上去的。

一、通信到底在传什么

先建立一个整体印象:一条命令从你按下按钮,到对方真的动作,中间要过五道关。

一条命令要过五道关

通信分层示意图:应用产生数据、协议封装成帧、控制器编码、线缆传电信号、接收端解析

图注:应用数据、协议封装、控制器编码、线缆电信号、接收端解析,五道关任何一道出问题都会表现为”不通”

按图上的顺序说:应用层先产生业务数据(比如”启动电机、转速 1500 rpm”),协议层把它按约定封装成帧(帧头、长度、数据、CRC、帧尾),控制器把帧编成 0 和 1 的电平序列,线缆把电平送出去,接收端再一层层还原回去。

反过来看,这也是排查的方向。你看到的现象在”业务”这一层——命令没执行、数值不对;但根因可能落在其中任意一层。反过来也一样,物理层看着波形很漂亮,业务层照样可能因为协议理解错而失败。

出问题先定性:是信号、帧、网络,还是业务

在现场养成一个习惯:拿到故障先问一句”问题发生在信号、帧、网络,还是业务”。这句话能省掉大半天。信号层的问题表现为波形不对、电平不对、噪声大;帧层的问题表现为校验错、长度不对、丢字节;网络层的问题表现为超时、连不上、地址不通;业务层的问题表现为帧收对了但数值解释错了、寄存器地址错了。

四类问题的排查工具和修改动作完全不同。把它们混在一起查,就会出现”来回换线、来回改超时,最后还是不通”的局面。

二、串口这一层:UART、RS-232 和 RS-485 不是一回事

很多人把这三个词当同义词用,实际上它们说的是三件不同的事。这也是现场接线最容易出错的地方。

三个名字,管的是三件事

UART、RS-232、RS-485 三层关系图:UART 管字符与比特,收发器管电平,RS-485 管差分总线

图注:UART 管字符与比特的排列,收发器管电平怎么变,RS-485 管总线怎么接

UART 是一种数字收发机制,管的是”字节怎么变成串行比特、比特怎么排列”,它不规定线上是什么电压。收发器管的是电平转换与驱动,把 UART 的 TTL 电平换成 RS-232 的正负电压,或者换成 RS-485 的差分电压。RS-232 和 RS-485 是两种电气规范,管的是总线怎么接、能拉多长、能挂几个节点。

所以现场有个反复出现的坑:3.3V/5V 的 TTL 串口直连 RS-232 或 RS-485 的线,是不可直接互接的。直连轻则不通信,重则把收发器打坏。调试口一般用 UART 加 USB 转串口芯片;工业仪表走的是 UART 加一颗 RS-485 收发器。

一个字节是怎么从线上发出去的

UART 8N1 帧时序图:1 起始位、8 数据位、无校验、1 停止位共 10 位,9600 波特率下约 960 字节每秒

图注:8N1 一帧是 10 位,不是 8 位——这就是”9600 波特不等于 9600 字节每秒”的原因

这是被误解得最多的一条。8N1 的含义是 1 个起始位、8 个数据位、0 个校验位、1 个停止位,一帧总共 10 位。所以 9600 bit/s 的实际有效字节率是 9600 ÷ 10 = 960 字节每秒,而不是 9600。

这个数字直接决定超时该设多少。发 100 个字节,光在线路上就要 100 × 10 ÷ 9600 ≈ 104 毫秒。如果报文走完 104 毫秒,程序里却把超时设成 50 毫秒,那不管你代码写得多快,这条报文一定”失败”。很多”偶尔超时”的故障,根子就在这里。

接收端也有讲究。异步串口没有独立的时钟线,双方各自按本地时钟采样,所以接收端要先检测起始沿,等约 1.5 个位时间之后采首个数据位,此后每隔一个位时间采一位。波特率稍有偏差、线路稍长,采样点就会往边上漂,比特一多就采错。

串口乱码,先别急着换波特率

串口乱码五类根因图:参数不一致、电平接错、时钟漂移、接收溢出、干扰与接地

图注:乱码有五类根因,波特率只是其中一支

乱码的根因分五类:参数不一致(波特率、数据位、校验、停止位)、电平接错(TTL、RS-232、RS-485 混接)、时钟漂移导致采样点偏移、接收溢出(中断或 DMA 处理不及时、缓冲区太小)、干扰与接地(电机、变频器、长线、地电位差)。

其中”接收溢出”最容易被忽略。它的表现很典型:字节看着都对,但隔一段时间丢一批,而且丢的时候恰好是程序在忙别的。这种情况改波特率没用,要看中断优先级、DMA 配置和缓冲区深度。

图上给的排查顺序是从低到高:先看误码标志(帧错误、奇偶错误、溢出、CRC 错),再核协议一致性,之后查电平与布线,再看波形与溢出,最末才动代码和缓存。这个顺序的价值在于——先看硬件错误标志,再改协议;先定位是哪一层,再换线重启。反过来做,就是不断重复劳动。

还有一个具体案例值得记住:发送端用 8N1、接收端配成 8E1,字节能看到,但每次校验都失败,PE 标志位持续置位。参数”就差一位”,现象却是”数据不对”,很容易被误判成干扰问题。

三、RS-485 能扛住现场,靠的不只是差分

RS-485 在现场的口碑很好,但它也经常被”接第三台设备就丢帧”这类问题打脸。原因不在芯片,多半在接法。

差分只是起点

RS-485 抗干扰示意图:差分传输、手拉手拓扑、两端终端电阻、总线偏置、接地与隔离

图注:接收器只看两根线的差值,所以共模干扰能一起减掉;但拓扑、终端、偏置、接地一个都不能少

差分传输的原理简单:接收器只关心 (VA − VB),两根线上同时出现的干扰会一起被减掉。这是 RS-485 抗干扰的底子。

但只有差分是不够的。拓扑必须是手拉手的一条总线,两端各放一个 120Ω 终端电阻;星形接法或者一根长长的分支,会让阻抗不连续、产生反射,表现为时有时无的丢帧。总线空闲时还要有偏置,给两根线一个确定的电平,否则接收器可能把噪声当成起始位。

还有一条现场必须记住的:A、B 的命名不同厂家可能相反。有的标 A/B,有的标 D+/D−,有的干脆反过来。判据以手册上的 D+/D− 定义为准,不要只认丝印。接反了的现象是”完全不通”或者”偶尔通”,很容易被当成参数问题查半天。

接地同样要注意。RS-485 收发器有共模电压范围限制(常见是 −7V 到 +12V),超出这个范围就可能损坏或误码。两地之间有地电位差、线又拉得很长的时候,仅靠屏蔽和接地是不够的,需要考虑隔离型收发器。

半双工:最后一个字节为什么会丢

半双工 RS-485 发送时序图:TXE 只代表数据寄存器空,TC 才代表最后停止位已发完

图注:TXE 和 TC 是两件事,用错标志位就会在最后一个字节发完之前拉低 DE

这是半双工 RS-485 最经典的一个坑,而且它只在”最后一个字节”上出错,特别难查。

发送链路上有两级缓冲:数据寄存器(TDR)和移位寄存器(TSR)。TXE 标志只表示”数据寄存器空了”,意思是 CPU 可以往里塞下一个字节了;TC 标志才表示”移位寄存器也空了”,也就是最后一个停止位已经真的发出去了。

程序如果一看到 TXE 就立刻拉低 DE、释放总线,那最后一个字节的后半段——通常在停止位附近——就被截断了。接收端收到的数据体是对的,CRC 却是错的;重发几次,偶尔又能过。数值上很好理解:115200 波特率、8N1 时,一个字节只有约 86.8 微秒,方向切换早 50 微秒,末字节就必然残缺。

所以判据只有一条:判断”发送完成”要看 TC,不能看 TXE;判断”缓冲区可写”才看 TXE。把这一句记住,能省掉很多”偶发 CRC 错”的排查。

四、字节流没有边界,这是串口和 TCP 最像的地方

串口和 TCP 表面上差得很远,但在这一点上完全一样:它们都只保证字节流,不保证消息边界。很多人写程序时默认”发一次就是收一次”,后面所有怪现象都是从这一条假设来的。

四种成帧方式

字节流无边界示意图:一次 read 或 recv 不等于一条消息,四种成帧方式对比

图注:同一个字节序列,接收端可能一次读到完整一帧,也可能分两次读到,两种都对

四种成帧方式各有取舍。固定长度最简单,但灵活性差、改协议就崩;长度字段最通用,帧头里带一个长度,接收端先读头再按长度读数据体;结束符最直观,适合文本协议,但二进制数据里出现同样的字节就麻烦了;间隔时间靠静默时长分帧,Modbus RTU 用的就是这一种——帧尾靠 3.5 个字符时间的静默来判定。

接收端的写法应该是状态机:找帧头、读固定头、校验长度不超过上限、收满数据体、校验 CRC、交付业务;任何一步失败就滑动重同步,从下一个字节重新找帧头。而不是”读一次就当一帧”。

CRC、序号、ACK、重试各管一段

可靠性五层阶梯图:CRC 查损坏、序号查重复、ACK 确认、超时重试、幂等去重

图注:五层各司其职,加一层替代不了另一层

这一层阶梯的顺序值得背下来:CRC 发现内容损坏;序号识别重复、丢失与乱序;ACK 确认对方已接收或已处理;超时重试在没收到响应时补请求;幂等与事务记录保证重复请求不会重复执行。

为什么不能只加一个校验码?看图上那个”打开断路器”的例子就明白了:主站发事务号 102 打开断路器,从站执行成功,响应在链路里丢了。主站超时后重发,从站如果只认命令不认事务号,就会再执行一次。断路器被开了两次,可能现场看不出来,但语义已经错了。

还有一层区分要拎清:TCP 的 ACK 只说明字节到达了传输层,不代表业务处理了。要确认”这件事到底做没做”,得有应用层的 ACK,返回的是已处理、成功还是失败。

五、以太网这一层:网线只是物理入口

以太网侧的问题,比串口侧更容易被”经验”带偏。网口灯亮了、Ping 通了,很多人就觉得网络没问题,其实这才走到一半。

以太网不等于 TCP/IP

以太网与 TCP/IP 分层封装示意图:网线只是物理入口,可达性证据逐级递进

图注:以太网管的是物理链路和帧,TCP/IP 管的是寻址与传输,两者不是一回事

报文出去的时候是一层层封装的:应用数据变成 TCP 或 UDP 段,段外面套 IP 包,包外面套以太网帧,帧最后变成线路上的电信号。进来的时候方向相反,一层层解开。

关键在于”证据阶梯”:网口灯亮只证明物理链路建立了;ARP 正常只证明同网段邻居能解析;Ping 通只证明 IP 路径可达;TCP 握手成功才说明端口上真的有服务;应用响应正确才是业务成功。每一层只证明自己的事,不能替上一层背书。

MAC、IP、端口分别解决什么

MAC、IP、端口类比图:MAC 找网卡、IP 找主机、端口找程序

图注:MAC 找网卡、IP 找主机、端口找程序,三层地址各管一段

拿楼房来类比很直观:MAC 相当于楼门卡,只在同一栋楼(同网段)里有效;IP 相当于城市地址,可以跨区;端口相当于房间号,进了大楼之后要靠它找到具体哪一间。同一台设备上可以同时开很多个服务,就是因为它们的端口不一样。

所以现场遇到”两台设备 IP 冲突”和”同一台设备上服务端口冲突”,是两件不同的事,排查手段也不同。

Ping 通了程序连不上,差在哪

Ping 通但程序连不上的排查链路图:从网口状态、IP 地址到端口监听、防火墙与握手

图注:ICMP 可达和 TCP 可连接是两件事,Ping 通只说明走到了第三级

顺序是网口状态、IP 地址、邻居 ARP、可达性、路由、端口、监听、策略、握手、应用。Ping 在第四步,后面还有六步。

TCP 连接失败分三种典型表现:SYN 发出去没有回应,最后超时——问题在路由、防火墙或服务没起;收到 RST 立刻被拒——端口上确实没有监听,或者被策略明确拒绝;握手完成了马上被断开——说明网络是通的,问题在应用层或者协议不匹配。

把”Ping 通了”当成”网络没问题”,会把后面六步全部跳过,最后变成在自己代码里反复找 bug。先确认端口,再查应用;不要拿 Ping 当业务验收。

TCP 和 UDP 怎么选

TCP 与 UDP 对比图:面向连接与无连接,可靠性与低延时的取舍

图注:不是谁更快的问题,而是可靠性该放在哪一层的问题

TCP 面向连接、有序字节流、有序号确认和重传、有流量与拥塞控制,适合参数配置、文件传输、远端管理这类必须可靠的场景;它不保留消息边界,应用层照样要自己分帧。UDP 无连接、保留报文边界、不保证到达与顺序,但开销小、没有重传带来的延迟,适合高频状态广播、实时视频这类”旧数据丢了反而更好”的场景。

判断路径可以简单一点:能不能容忍丢包?要求不要求低延时?需不需要广播或组播?是不是必须确认业务执行?四个问题走下来,多数场景就定了。

有一个结论要单独记:关键命令不要指望协议层替你保证业务。跳闸、停机这类动作,需要在应用层加 ACK、加事务号、做幂等,而不是选一个”可靠协议”就完事。

粘包拆包不是故障

TCP 粘包与拆包示意图:长度前缀协议与按字节流解析的循环流程

图注:错的是把一次 send 当成对方的一次 recv,TCP 从来不承诺这件事

“粘包”这个词本身有点误导。发 ABC 再发 12345,对方收到 ABC12345、或者先收到 ABC 再收到 12345、或者分成三段收到,三种都合法。原因既有发送缓冲和接收缓冲,也有 MSS 分段、接收窗口和调度时机。

正确做法是长度前缀协议,按字节流循环解析:读满固定头、解析长度、检查不超过上限、读满数据体、校验、交付、保留剩余字节继续下一轮。长度一定要校验上限——不然一个错误的长度字段就能让程序一直等数据或者申请超大内存。

六、协议怎么写:从字段设计到超时核算

前面讲的是”怎么查”,这一节讲”怎么设计得不容易出问题”。自定义协议的坑,多数在字段设计和超时设置上。

一个自定义协议该有哪些字段

自定义通信协议八要素图:魔数、版本、消息类型、标志、序列号、长度、业务内容、CRC

图注:字段不是越多越好,每个字段要解决一个明确的问题

八个要素:魔数用来识别帧头并在失步后恢复;版本用来支持协议升级与向后兼容;消息类型区分命令、响应、事件、心跳;标志位放应答、错误、分片这类状态;序列号用来匹配请求与响应、定位丢包;长度字段确定边界;业务内容放具体数据;CRC 做端到端错检。

除此之外还要约定字节序、变长编码方式(文本用 UTF-8)、地址与时间戳的长度与精度、版本协商规则。协议的目的不是写得漂亮,而是让不同团队、不同 CPU、不同版本的设备都能理解同一段字节。

为什么不能直接发一个 C 结构体

结构体内存布局与对齐填充示意图:为什么通信必须显式序列化并约定字节序

图注:内存布局是编译器的事,协议格式是双方约定的事,两者不能混为一谈

把结构体直接按内存字节发出去,看着省事,实际埋了三个雷。一是对齐填充:编译器为了访问效率会在字段之间插入空隙,同一个结构体换个平台大小就变了。二是字节序:小端机器发出去的多字节整数,到大端机器上读出来就是另一个数。三是类型宽度:int 可能是 16 位也可能是 32 位,float 的精度和表示也不一定一样。

正确做法是显式序列化:把每个字段按协议规定的宽度、字节序逐个写进缓冲区,长度和 CRC 也是算出来再填。举个具体例子,温度 25.3℃ 按 0.1℃ 量化成 253,写成 16 位大端就是 0x00 0xFD,接收端再乘回 0.1 得到 25.3。

Modbus RTU 和 Modbus TCP 差在哪

Modbus RTU 与 Modbus TCP 帧格式对比图:功能码相同,外层封装与分帧方式不同

图注:功能码和寄存器地址完全一样,差的是外层封装和分帧方式

这两个容易混,其实差别全在外层。RTU 跑在 RS-485 串行总线上,帧是”站号 + 功能码 + 数据 + CRC”,帧尾靠 3.5 个字符时间的静默来分;TCP 跑在以太网上,帧前面多了一个 7 字节的 MBAP 头(事务标识、协议标识、长度、单元标识),不再带 RTU 的 CRC,分帧靠长度字段。

拿读保持寄存器举例(起始地址 0x0000、数量 2):RTU 请求是 8 个字节,01 03 00 00 00 02 C4 0B;TCP 请求是 12 个字节,00 01 00 00 00 06 01 03 00 00 00 02。同一件事,字节数都不一样,所以”把 RTU 报文直接塞进 TCP”一定会出错。

网关的作用就在这里:收到 TCP 请求后剥掉 MBAP,补上站号和 CRC 再发到 485 总线;响应回来反向处理,并用事务号匹配回原来的请求。

超时要算,不能拍脑袋

通信超时计算示意图:总时延等于请求发送、总线传输、从站处理、响应发送、调度抖动与安全裕量之和

图注:总时延不是线路时间,而是六个环节加起来的和

总时延由六部分组成:请求发送、总线传输、从站处理、响应发送、调度抖动、安全裕量。通信协议里只有”字符时间”是确定的,其余都要估。

拿一个常见的 Modbus RTU 例子算一遍(9600 波特率,请求 8 字节、响应约 37 字节,从站处理 20 毫秒):请求发送 8 × 10 ÷ 9600 ≈ 8.33 毫秒,总线传输约 5 毫秒,从站处理 20 毫秒,响应发送 37 × 10 ÷ 9600 ≈ 38.54 毫秒,调度抖动 15 毫秒,安全裕量 10 毫秒,加起来约 86.87 毫秒。所以超时设 120 到 150 毫秒是合理的,设 50 毫秒必然偶尔失败。

TCP 侧要分三段设:连接超时(3 到 5 秒)、写超时(3 到 10 秒)、读超时(10 到 30 秒)。三个阶段卡的资源不一样,用同一个数不合适。超时要大于可证明的最坏响应时间,而不是凭感觉设一个整数。

心跳不是发个 0x00

断线重连示意图:心跳判在线、退避加抖动、重连后按顺序重新同步状态

图注:TCP 重连成功不等于双方状态一致,恢复的重点是重新同步

心跳的作用是判断设备是否在线、运行是否正常,不是周期性发一个没有语义的字节。真正有用的心跳是”一次能验证协议和业务的读取”——比如周期性读一个固定寄存器,读到了才叫在线。

重连要有退避策略,比如 1 秒、2 秒、4 秒、8 秒、16 秒,并且每次加一点抖动(上下浮动 20% 左右),避免大量客户端同时重试把服务打垮。

恢复顺序比连接本身更重要:先做身份与版本校验,再同步时间,之后读设备的真实状态,对账未完成的事务,清理过期命令,最后才恢复控制。有一步的差别是很大的——如果连接一恢复就把断线前的命令全部重发,而设备断电重启后状态已经变了,就可能执行出完全不同的动作。

千兆以太网,为什么控制命令还是慢

端到端时延组成图:串行化、传播、排队、处理与重传,控制看 P99 最差值

图注:带宽解决吞吐,实时性关心的是最坏时延与抖动

带宽和实时性是两件事。端到端时延是串行化、传播、排队、处理、重传五项之和。把百兆换成千兆,只是把一帧 1500 字节的串行化时间从约 120 微秒压到约 12 微秒,省下来的一百多微秒,如果系统的任务调度本身就有几毫秒的抖动,那等于没省。

更值得看的是分布而不是平均值。控制类业务要看 P99 甚至最坏值——平均 1 毫秒、偶尔 40 毫秒的系统,比平均 3 毫秒、最坏 5 毫秒的系统危险得多。常见的隐藏瓶颈有交换队列、操作系统调度、内存回收、日志写入、TCP 重传。

七、位移传感器在现场是怎么通信的

前面讲的都是通用规律,落到位移传感器上,有几件具体的事需要单独说清楚。位移传感器是产线的”尺子”,它的数据出问题,往往不是传感器坏了,而是通信链路上某一环没配对。

四种常见接口,各自的适用面

现在现场常见的位移传感器接口有四类,各自的适用面差别很大。

  • 模拟量(4-20mA 或 0-10V):最传统,一根线进 PLC 模拟量模块。4-20mA 用电流环传信号,抗干扰比电压型好得多,断线时电流掉到 0 还能报故障。缺点是分辨率有限、需要标定、一条线只能传一个值,量程改了要重新标定。
  • SSI 同步串行:位移传感器里很常见。主站给时钟脉冲,传感器回绝对位置数据,断电再来不用回零。线数偏多(时钟差分、数据差分加电源),一般用在几十米以内的机床、液压伺服场合。
  • RS-485 加 Modbus RTU:多站、成本低、普通双绞线就能拉。一条总线挂多台,PLC 轮询读取。适合点位多、布线长、对刷新周期要求不算苛刻的产线。
  • CANopen 等现场总线:工程机械、风电这类本来就有 CAN 网络的场合用得比较多,抗干扰好、带优先级仲裁。

选哪种,跟前面第六节讲的选型六问是同一套逻辑:传多远、多少节点、每帧多大、多久更新一次、要不要逐个确认、最坏时延能接受多少。答案不同,接口就不同。

串口与以太网选型图:按距离、节点数、帧大小、更新周期、确认方式与最坏时延选择

图注:选接口先回答六个问题,而不是先看哪个更”高级”

多台传感器挂在一条 RS-485 总线上

这是位移传感器上量最多的用法,也是最容易接出问题的地方。几条现场经验:

  • 手拉手,不要星形。从 PLC 出发一路串下去,每台传感器挂在总线上,不要从中间某个点分出一根长分支。分支一长,反射一来,表现就是”某几台偶尔读不到”。
  • 终端电阻只在两端。一条总线两个 120Ω,分别放在物理两端。中间几台不要各加一个——多接会并联降阻抗,反而更容易出问题。
  • A、B 以 D+/D− 为准。不同品牌的丝印可能相反,接反了直接不通。初次调试时先只挂一台,通了再往上加。
  • 屏蔽层单端接地。屏蔽层通常只在 PLC 侧接一次地,两头都接会形成地环流,反而把干扰引进来。
  • 站号不能重,轮询要有间隔。同一总线上出现重复站号,会表现为”两台读数一样”或者”随机某台不响应”。
  • 距离长、干扰大就降波特率。9600 比 115200 稳得多,代价是刷新变慢。位移数据的刷新周期能接受的话,优先选低波特率。
  • 和动力线分开走。传感器线缆不要和变频器输出线、伺服动力线同槽,平行距离尽量拉开,交叉时垂直过。

具体的接线端子定义、两线三线四线六线怎么分,可以参考站内这篇:位移传感器怎么接线?先分清两线、三线、四线、六线,再对着线色定义接。线缆本身怎么选,尤其是双绞和屏蔽的部分,双绞线为什么能抗干扰这篇讲得更细。

读位移值的超时、心跳与断线判断

把第六节的算法套到位移传感器上,就很好算了。一条典型的 Modbus RTU 读取(请求 8 字节、响应 37 字节),在 9600 波特率下光线路时间就接近 47 毫秒,再加上传感器内部处理、PLC 扫描周期和调度抖动,总时延落在 90 到 150 毫秒是正常的。

所以两个常见的错误设置要避开:超时设成 50 毫秒以下,必然”偶尔失败”;轮询周期设得比响应时间还短,总线上会不停堆积请求,读到的数值会越来越滞后。

心跳建议用”周期性读一个固定寄存器”来做,而不是发一个没有业务含义的字节。这样一次心跳同时验证了三件事:通信在线、协议正确、设备可响应。判断”设备掉线”的判据也要多看几个:连续几次超时、CRC 错误计数上涨、数值长时间不变化。

断线恢复的时候有一个坑:不要一恢复连接就把断线前攒下的命令全部重发。传感器断电重启后位置可能已经变了,这时候应该先重新读一次实际位置,确认现场状态,再决定要不要继续执行原动作。

读数跳变:先分通信和干扰

位移传感器最常见的现场投诉就是”数值在跳”。判断起来其实有规律,看跳的形态就能分开。

  • 数值整段跳、跳完停住,同时通信超时计数在涨:这是通信问题,不是传感器。查总线、终端电阻和轮询周期。
  • 数值小幅高频抖动,幅度和频率都不规律:多半是干扰、接地或电源问题。查屏蔽层接法、与动力线的距离、以及供电是否和变频器共用。
  • 只在电机或变频器启动的瞬间跳:典型的共模干扰或地电位差。考虑隔离收发器,或者把传感器供电单独走一路。
  • 数值按固定步长跳,且跳变点和机械位置对得上:这更可能是机械间隙、联轴器松动或者安装同轴度的问题,跟电信号无关。

一个实用判据:先看 PLC 侧的通信错误计数(CRC 错、超时次数),再看数值本身。错误计数不动而数值在跳,问题在传感器或机械;错误计数在涨,问题在通信链路。这一条能把排查范围立刻缩小一半。

八、现场排障的顺序:从物理层往上查

前面把原理铺完了,这一节是操作顺序。

串口不通,按这六层查

串口排障六层顺序图:接口类型、线缆拓扑、电气波形、UART 参数、协议、业务解析

图注:从电气信号向上排,不要一上来就改协议

六层的顺序是:接口类型(接对了吗)、线缆拓扑(端子、屏蔽、接地的接法对吗)、电气波形(干净吗、幅值对吗、差分对吗)、UART 参数(波特率和帧格式一致吗)、协议(字节对得上吗、帧格式对吗)、业务解析(寄存器地址和数值解释对吗)。

工具也要配对:万用表量电压、通断和线序;示波器看波形、幅值、时序和噪声;带协议解码的逻辑分析仪看字节流;USB 转串口工具做收发和回显测试。手上只有万用表的时候,能落到实处的是前两层,硬查第三到第六层只会浪费时间。

以太网不通,按这八步查

以太网排障八步图:从电缆网口、VLAN 子网到抓包会话与业务回应

图注:Ping 只走到网络层,业务成功必须逐层举证

顺序是电缆与网口、VLAN 与子网、IP 与网关、ARP 与路由、端口与服务、策略与 ACL、抓包与会话、应用与业务回应。

抓包看不明白的时候,按八个要素扫一遍:有没有包、ARP 有没有解析、IP 对不对、TCP 三次握手成不成、端口对不对、序号连不连续、有没有重传、有没有 RST 或零窗口。八个要素对着看,多数”网络时通时不通”的问题都能定位。

十个常见误区

通信十大误区图:UART 不等于 RS-485,9600 波特不等于 9600 字节每秒等

图注:这十条都是在现场被反复验证过的错觉,每一句错话都能带偏一整条排查思路

把图上这十条过一遍:UART 不等于 RS-485;9600 波特不等于 9600 字节每秒;终端电阻不是越多越稳;一次 read 不等于一整帧;TCP 可靠不代表业务不需要 ACK;Ping 通不代表服务正常;UDP 不一定比 TCP 快;CRC 解决不了重复和乱序;断线后不要盲目重发全部旧命令;反复通信失败不要先改协议参数。

这十条有一个共同的错误来源:把不同层的问题混成一句话。记住分层之后,很多争论其实不用争——问题本来就在不同层。

九、写在最后

可靠通信系统七要件图:完整链路、数据层可解析、事务层知做没做、连接层可恢复、可观测性、安全与破坏性测试

图注:一套可靠的通信系统,是从”能通”走到”可证明、可恢复、可演进”

把整篇收一下。一套可靠的通信系统要具备七件事:一条完整的链路;数据层保证一帧可解析(边界明确、长度、类型、CRC);事务层知道这件事到底做没做(请求 ID、执行一次、ACK);连接层断了也能安全回来(心跳、退避、恢复顺序);可观测性(日志、时间戳、报文长度、事务号、错误计数);安全(身份、权限、防重放、限速);以及上线前做过破坏性测试(断电重启、热插拔、极端时延、断线、边界长度、丢包与乱序)。

如果只记一段话,记这个:UART 管字符与比特,RS-485 管差分电气;串口和 TCP 都只保证字节流,不保证边界;CRC 只查损坏,不保证业务;分片、丢失、乱序、超时要应用层自己处理;超时要按时延核算;关键业务必须有事务号与幂等;排障从物理层往上查证据链。

通信这块内容看着零碎,其实只有一个主线:每一层只证明自己的事。把这条线抓住,现场一大半”玄学问题”都会变成有顺序可查的普通问题。

相关产品:拉绳位移传感器 | 磁致伸缩位移传感器 | 本安防爆位移传感器

相关阅读:位移传感器怎么接线?先分清两线、三线、四线、六线,再对着线色定义接 | 双绞线为什么能抗干扰?差分、绞距、阻抗与屏蔽四个环节 | 压铸机用什么位移传感器?合模行程、顶出位置与压射位移三个测量点

选型、安装调试、输出通信、故障排查、防爆认证这几类现场问题,站里另有一页 位移传感器常见问题解答,按主题分开整理,遇到拿不准的可以对着翻。