1. 串口服务器上线不稳,问题到底出在哪
干工控这行的,谁没被串口服务器坑过。设备上电,指示灯看着挺正常,结果上位机就是连不上;或者白天跑得好好的,到了晚上数据就开始丢包;更邪门的是,同一批串口服务器,有的站点一次点亮,有的站点折腾三天都上不了线。你要是去问厂家技术支持,十有八九让你“恢复出厂设置再试”,这话跟没说一样。
我这些年做PLC联网、SCADA对接、变频器远程监控的项目,前前后后经手的串口服务器少说也有几百台。RS-232、RS-485、RS-422三种接口的转换场景都踩过坑,西门子、三菱、汇川、信捷这些PLC品牌的通讯配置也都折腾过。慢慢我发现一个规律:串口服务器上线不稳,九成以上的问题集中在三个环节——物理层接线与供电、串口参数匹配、网络层配置。这三个环节任何一个出问题,表现都是“时好时坏”或者“干脆连不上”,但排查方向完全不同。
这篇文章就是把我这些年排查串口服务器上线问题的实战经验整理出来。不管你是刚入门的PLC编程新手,还是做了几年自动化项目的老手,只要你的项目里涉及串口服务器、RS-485总线、PLC远程通讯、SCADA数据采集,这里面的排查思路和实操方法都能直接拿去用。我不讲教科书上的理论,只说现场能落地的招数。
2. 先搞清楚串口服务器到底在干什么
2.1 串口服务器的本质:翻译官角色
很多人把串口服务器想复杂了。说白了,它就是一个协议翻译官。你的PLC、变频器、仪表用的是RS-232或RS-485串口协议,数据是一串一串的比特流;而上位机、SCADA系统走的是TCP/IP网络协议,数据是一个一个的数据包。串口服务器干的事,就是把串口数据打包成网络数据包发出去,再把收到的网络数据包拆开还原成串口数据送给设备。
这个“翻译”过程涉及两个关键转换:电气信号转换和数据格式转换。电气信号转换是硬件层面的事,RS-232是单端信号,RS-485是差分信号,RS-422是四线全双工差分,串口服务器内部有专门的芯片处理这些电平。数据格式转换是软件层面的事,涉及波特率、数据位、停止位、校验位这些串口参数,以及TCP/UDP的工作模式。
理解了这个本质,你就能明白为什么排查问题要分环节。电气信号出问题,表现是通讯完全不通或者距离一长就断;数据格式出问题,表现是能连上但数据乱码或者丢包;网络配置出问题,表现是串口服务器本身能ping通但数据传不过去。
2.2 三种串口类型的典型应用场景
RS-232、RS-485、RS-422这三种串口,在工控现场各有各的地盘。RS-232是最古老的,点对点通讯,传输距离理论上15米,实际超过10米就不太稳了。它一般用在PLC的编程口、触摸屏的通讯口、一些老式仪表的输出口。RS-232是三线制(TXD、RXD、GND),接线简单,但抗干扰能力差,距离短。
RS-485是工控现场用得最多的,两线制差分信号,传输距离能到1200米,支持多点通讯,一条总线上可以挂几十台设备。PLC的通讯口、变频器的控制口、电表、温控仪表,大部分都是RS-485。它的特点是半双工,同一时刻只能收或者发,所以需要方向控制。很多串口服务器处理RS-485的时候,方向控制没做好,就会出现数据发不出去或者收不进来的情况。
RS-422是四线制全双工差分,传输距离和RS-485差不多,但可以同时收发。它一般用在需要高速双向通讯的场合,比如一些伺服驱动器、高精度编码器。RS-422和RS-485的电气标准兼容,但接线方式不同,不能混接。
注意:现场最容易搞混的就是RS-485和RS-422的接线。RS-485是两线(A、B),RS-422是四线(TX+、TX-、RX+、RX-)。如果你把RS-422的设备接到RS-485的串口服务器上,大概率通讯不上,因为信号线数量和定义都不一样。
2.3 串口服务器上线不稳的典型表现
上线不稳这个说法其实很笼统,现场表现五花八门。我总结了几种最常见的:
- 完全连不上:串口服务器指示灯正常,但上位机ping不通,或者ping通了但TCP连接建立不起来。
- 时通时断:白天正常,晚上丢包;或者设备一启动就断,设备停了就恢复。
- 能连上但数据乱码:TCP连接正常,但收到的数据是乱码,或者PLC返回错误码。
- 多台设备轮询时掉线:单台设备通讯正常,一旦总线上挂多台设备,就开始轮流掉线。
- 重启后恢复,运行一段时间又出问题:刚上电正常,跑几个小时或者几天后开始不稳定。
这些表现背后对应的原因各不相同,但排查的切入点都可以归到那三个环节里。下面我逐个拆开讲。
3. 第一个环节:物理层接线与供电排查
3.1 RS-485接线:A和B到底怎么接
RS-485接线是现场出问题最多的地方,没有之一。标准定义里,RS-485的差分信号线叫A和B,但不同厂家对A和B的定义有时候是反的。有的厂家标A是正、B是负,有的厂家标A是负、B是正。你如果按颜色接,红接A、蓝接B,换一个厂家的设备可能就反了。
我自己的做法是:不看标签,用万用表量。RS-485的A和B之间在空闲状态下有一个偏置电压,一般是A比B高200mV左右。你把万用表打到直流毫伏档,量一下设备端子的电压,正的那个就是A,负的那个就是B。这个方法比看标签靠谱得多。
还有一个常见错误是只接了A和B,没接GND。RS-485虽然是差分信号,理论上不需要参考地,但实际现场如果两台设备的接地电位差太大,共模电压超过芯片的承受范围,通讯就会不稳定甚至烧芯片。所以长距离通讯的时候,一定要把GND也接上,或者用带隔离的串口服务器。
实操心得:我遇到过一条总线,12台设备,其中3台偶尔掉线。查了半天发现是那3台设备的RS-485接线端子氧化了,接触电阻变大。换了端子之后问题解决。所以接线端子一定要拧紧,最好用带压接端子的线鼻子,不要直接拧裸线。
3.2 终端电阻:什么时候该加,什么时候不该加
RS-485总线在距离超过100米或者波特率超过19200的时候,需要在总线两端各加一个120欧姆的终端电阻。这个电阻的作用是消除信号反射,保证信号完整性。但很多现场要么不加,要么加错位置。
加终端电阻的原则是:只在总线的两个物理端点加,中间设备不加。如果你在中间设备上也加了终端电阻,总线负载会变重,信号幅度下降,反而导致通讯距离缩短。我见过一个现场,8台设备每台都焊了一个120欧姆电阻,结果总线负载只有15欧姆,串口服务器的驱动芯片直接推不动,通讯距离不到50米就开始丢包。
判断要不要加终端电阻,有个简单方法:用万用表量A和B之间的电阻。如果总线两端都加了终端电阻,量出来的阻值应该是60欧姆左右(两个120欧姆并联)。如果量出来是120欧姆,说明只加了一端;如果量出来是无穷大,说明两端都没加。根据这个结果决定要不要补。
3.3 供电问题:容易被忽略的隐形杀手
串口服务器的供电看起来简单,但出问题的时候很隐蔽。常见的供电问题有三种:
第一种是电源功率不够。串口服务器标称功耗一般是1到3瓦,但这是平均功耗,启动瞬间的电流可能是额定值的2到3倍。如果你用一个5V/500mA的电源同时给串口服务器和一个RS-485转换器供电,启动的时候电压可能被拉低到4V以下,串口服务器就反复重启。表现就是指示灯一闪一闪,网络时通时断。
第二种是电源纹波太大。开关电源的输出纹波如果超过100mV,串口服务器内部的DC-DC芯片可能工作不正常,导致网络芯片复位或者串口芯片误码率升高。这个问题用万用表量电压是正常的,必须用示波器看纹波才能发现。
第三种是共地干扰。如果串口服务器和PLC用同一个开关电源供电,PLC的输入输出动作会在电源线上产生干扰脉冲,串到串口服务器的电源里。表现就是PLC一动作,串口服务器就掉线。解决办法是给串口服务器单独用一个隔离电源,或者在电源输入端加磁珠和滤波电容。
注意:现场排查供电问题的时候,先量电压,再量纹波,最后看共地。三步走完,基本能定位。不要一上来就换电源,有时候问题不在电源本身,而在供电线路的干扰。
3.4 线材选择:不是随便找根线就能用
RS-485通讯线必须用双绞线,而且最好是带屏蔽层的双绞线。双绞的作用是让两根线受到的干扰尽可能一致,这样差分接收端可以把干扰抵消掉。如果你用普通的平行线,两根线受到的干扰不一样,差分信号就被破坏了。
屏蔽层怎么接也有讲究。屏蔽层应该单端接地,一般接在串口服务器这一端,另一端悬空。如果两端都接地,地电位差会在屏蔽层上形成环流,反而引入干扰。如果现场电磁环境特别恶劣,可以用双层屏蔽线,内层单端接地,外层两端接地。
线径方面,RS-485总线推荐用0.5平方毫米以上的线。线径太细,线路电阻大,信号衰减严重。我算过一笔账:0.2平方毫米的线,每100米电阻大约是9欧姆,1200米就是108欧姆,加上终端电阻60欧姆,总负载168欧姆,串口服务器的驱动芯片输出电流要超过70mA才能驱动,很多芯片根本达不到这个驱动能力。
4. 第二个环节:串口参数匹配排查
4.1 波特率、数据位、停止位、校验位:一个都不能错
串口通讯的参数必须完全一致,包括波特率、数据位、停止位、校验位。这四个参数里任何一个不匹配,通讯都会失败或者出现乱码。现场最常见的问题是波特率不匹配,比如PLC设的是9600,串口服务器设的是19200,那收到的数据全是乱码。
数据位一般是8位,停止位一般是1位,这两个参数大部分设备都是默认值,不太容易出错。校验位有None、Even、Odd三种,有些老设备默认是Even,而串口服务器默认是None,这个如果不注意就会通讯失败。
我排查参数问题的习惯是:先确认PLC侧的参数,再确认串口服务器侧的参数,最后确认上位机侧的参数。三者的参数必须完全一致。有时候PLC的编程软件里显示的参数和实际运行的参数不一样,比如你在软件里改了波特率但没断电重启,PLC还是按旧的波特率跑。所以改完参数一定要断电重启。
4.2 流控:什么时候需要,什么时候不需要
流控分为硬件流控(RTS/CTS)和软件流控(XON/XOFF)。RS-232通讯的时候,如果数据量比较大,可能需要硬件流控来防止缓冲区溢出。但RS-485是半双工,一般不用硬件流控,因为方向控制已经占用了RTS引脚。
现场很多串口服务器默认开启了硬件流控,但PLC侧根本没有接RTS和CTS线,结果就是串口服务器一直在等CTS信号,数据发不出去。表现就是TCP连接正常,但PLC收不到任何数据。解决办法是把串口服务器的流控设为None。
实操心得:我遇到过一台西门子S7-200 SMART的PLC,用RS-485口和串口服务器通讯,怎么都连不上。后来发现串口服务器的流控设的是RTS/CTS,而PLC的RS-485口只有A和B两根线,根本没有RTS和CTS。把流控改成None之后,立刻通讯正常。这个坑我踩过不止一次,现在拿到新串口服务器第一件事就是检查流控设置。
4.3 串口服务器的缓冲区和超时设置
串口服务器内部有两个缓冲区:串口接收缓冲区和网络发送缓冲区。如果串口接收缓冲区的数据还没打包成网络包,网络发送缓冲区就满了,数据就会丢失。表现就是高速通讯的时候丢包,低速通讯正常。
大部分串口服务器可以设置打包长度和打包超时。打包长度是指串口接收缓冲区收到多少字节就打包发出去,打包超时是指超过多长时间没收到新数据就把缓冲区里的数据发出去。这两个参数要根据实际通讯协议来调。
比如Modbus RTU协议,一帧数据最多256字节,帧间隔至少3.5个字符时间。在9600波特率下,3.5个字符时间大约是4毫秒。你可以把打包超时设为4到10毫秒,打包长度设为256字节。这样既能保证一帧数据完整打包,又不会因为等待太久导致响应延迟。
如果打包超时设得太长,比如100毫秒,那PLC的响应就会很慢,SCADA画面上看到的数据更新有明显的滞后感。如果设得太短,比如1毫秒,那一帧数据可能被拆成多个网络包发送,上位机解析的时候就会出错。
4.4 参数匹配速查表
| 参数项 | 常见值 | 排查要点 |
|---|---|---|
| 波特率 | 9600、19200、38400、115200 | 三者必须完全一致,改完断电重启 |
| 数据位 | 8位(最常见)、7位 | 老设备可能是7位,注意确认 |
| 停止位 | 1位(最常见)、2位 | 一般不会错,但老设备可能是2位 |
| 校验位 | None、Even、Odd | 最容易出错,必须逐项核对 |
| 流控 | None(推荐)、RTS/CTS | RS-485场景一般设为None |
| 打包长度 | 256字节(Modbus RTU) | 根据协议最大帧长设置 |
| 打包超时 | 4-10毫秒(9600波特率) | 根据波特率和协议帧间隔计算 |
5. 第三个环节:网络层配置排查
5.1 IP地址、子网掩码、网关:基础中的基础
串口服务器的网络配置看起来简单,但出问题的时候很让人抓狂。最常见的问题是IP地址冲突。现场如果有多台串口服务器,或者串口服务器和别的设备IP撞了,就会出现时通时断的情况。因为两个设备抢同一个IP,网络包有时候发给A,有时候发给B。
排查IP冲突的方法是:把串口服务器断开,用电脑ping那个IP,如果还能ping通,说明有别的设备占用了这个IP。或者用网络扫描工具扫一下整个网段,看看有没有重复的IP。
子网掩码和网关也要注意。如果串口服务器和上位机不在同一个网段,就必须设网关。如果网关设错了,串口服务器能ping通同网段的设备,但跨网段就不通。我见过一个现场,串口服务器IP是192.168.1.100,子网掩码255.255.255.0,网关192.168.1.1,但上位机在192.168.2.0网段,结果怎么都连不上。后来发现网关应该是192.168.1.254,是路由器的地址,不是随便填的。
5.2 工作模式:TCP Server、TCP Client、UDP怎么选
串口服务器的工作模式直接影响通讯的稳定性和实时性。常见的有四种模式:
TCP Server模式:串口服务器作为TCP服务器,等待上位机来连接。这种模式适合上位机主动采集数据的场景,比如SCADA系统定时轮询PLC。优点是连接稳定,有重传机制;缺点是如果上位机不主动连,串口服务器不会主动发数据。
TCP Client模式:串口服务器作为TCP客户端,主动连接上位机。这种模式适合串口服务器主动上报数据的场景,比如PLC主动往服务器发数据。优点是串口服务器可以主动建立连接;缺点是如果上位机没开,串口服务器会一直重连,占用资源。
UDP模式:无连接模式,数据直接发出去,不保证到达。优点是实时性高,延迟小;缺点是丢包不重传,适合对实时性要求高但对丢包不敏感的场景,比如一些实时监控画面。
Modbus TCP网关模式:串口服务器把Modbus RTU协议转换成Modbus TCP协议,上位机直接用Modbus TCP驱动就能读写PLC。这种模式最省事,但要求串口服务器支持Modbus网关功能。
注意:选工作模式的时候,先确认上位机软件支持哪种模式。很多SCADA软件只支持TCP Server模式,那串口服务器就必须设为TCP Client模式。如果设反了,两边都是Server或者两边都是Client,连接永远建立不起来。
5.3 心跳机制与断线重连
串口服务器上线不稳的一个典型表现是:TCP连接建立起来了,但过一段时间不用就断了,再想用的时候连不上。这是因为网络中间有防火墙或者NAT设备,长时间没有数据往来就会把连接表项老化掉。
解决办法是开启心跳机制。串口服务器定期发送心跳包,保持连接活跃。心跳间隔一般设30到60秒。如果串口服务器不支持心跳,可以在上位机侧定时发送一个查询指令,比如每30秒读一次PLC的某个寄存器,这样连接就不会断。
断线重连也很重要。TCP Client模式的串口服务器应该支持自动重连,当检测到连接断开后,每隔几秒尝试重新连接。如果串口服务器不支持自动重连,那上位机侧就要做重连逻辑,检测到连接断开后重新发起连接。
5.4 网络排查常用命令
排查网络问题的时候,几个命令必须会用:
# 检查网络连通性 ping 192.168.1.100 # 检查TCP端口是否开放 telnet 192.168.1.100 502 # 查看本机网络配置 ipconfig /all # 追踪路由路径 tracert 192.168.1.100 # 查看ARP表,检查IP冲突 arp -aping命令看的是网络层通不通,telnet看的是传输层端口开没开。如果ping通但telnet不通,说明网络层没问题,是TCP端口没监听或者被防火墙拦了。如果ping都不通,那就是IP配置或者物理连接的问题。
6. 常见问题与排查技巧实录
6.1 问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 完全连不上,ping不通 | IP配置错误、网线故障、供电不足 | 量电压、换网线、检查IP | 修正IP、换线、换电源 |
| ping通但TCP连不上 | 端口号错误、工作模式不对、防火墙拦截 | telnet测试端口、检查模式 | 改端口、改模式、关防火墙 |
| 能连上但数据乱码 | 串口参数不匹配、流控设置错误 | 核对波特率等参数 | 统一参数、关闭流控 |
| 时通时断 | IP冲突、电源纹波、共地干扰 | 扫描IP、示波器看纹波 | 改IP、加滤波、隔离电源 |
| 多台设备轮询掉线 | 终端电阻过多、总线负载过重 | 量总线电阻 | 去掉中间终端电阻 |
| 运行一段时间后断线 | 连接老化、无心跳 | 检查心跳设置 | 开启心跳、定时发数据 |
| 高速通讯丢包 | 打包参数不合理 | 调整打包长度和超时 | 按协议帧长设置 |
6.2 独家避坑技巧
技巧一:先本地后远程。排查的时候,先把串口服务器和电脑用网线直连,确认基本通讯正常,再接入现场网络。这样可以排除网络环境的干扰,快速定位是串口服务器本身的问题还是网络的问题。
技巧二:用串口调试助手抓包。在电脑上开一个串口调试助手,用USB转RS-485转换器接到总线上,监听PLC和串口服务器之间的数据。这样可以看到实际发出的数据是什么,和预期的是否一致。如果数据本身就不对,那问题在PLC侧;如果数据对但串口服务器没转发,那问题在串口服务器侧。
技巧三:替换法。现场排查最有效的方法就是替换。怀疑串口服务器有问题,换一台同型号的试试;怀疑线有问题,换一根线试试;怀疑电源有问题,换一个电源试试。替换法虽然笨,但最快。
技巧四:记录正常时的参数。每次调试成功之后,把串口服务器的所有参数截图保存,包括串口参数、网络参数、工作模式。下次再遇到问题,先和正常时的参数对比,很快就能发现哪里不一样。
实操心得:我有个习惯,每台串口服务器调试完之后,用标签纸把IP地址、波特率、工作模式写在设备外壳上。这样下次去现场,不用登录配置界面就能知道基本参数。这个习惯帮我省了很多时间,尤其是半夜被叫去处理故障的时候。
6.3 一个典型的排查案例
去年有个项目,客户反映一台串口服务器每天下午三点左右准时掉线,重启后恢复,第二天下午三点又掉。这个现象很有规律,说明不是随机干扰。
我先查了供电,电压正常,纹波也在范围内。然后查网络,没有IP冲突,交换机端口也没问题。最后查串口参数,发现PLC的波特率是19200,串口服务器也是19200,看起来没问题。
但是我在串口服务器的日志里发现,每天下午三点左右,串口接收缓冲区会突然收到大量数据。原来客户每天下午三点会启动一个自动报表程序,这个程序会一次性读取PLC里的大量历史数据。数据量太大,串口服务器的缓冲区溢出,导致死机。
解决办法是把串口服务器的打包长度从默认的1024字节改成256字节,打包超时从50毫秒改成10毫秒,让数据尽快打包发出去,不要积压在缓冲区里。改完之后,再也没有出现过下午三点掉线的问题。
这个案例说明,串口服务器上线不稳有时候不是配置错误,而是配置和实际数据量不匹配。调试的时候不能只测小数据量通讯,还要模拟大数据量场景,看看串口服务器能不能扛住。
7. 调试完成后的验证与固化
7.1 稳定性测试怎么做
串口服务器调试通了不代表就完事了,必须做稳定性测试。我的做法是:连续跑24小时,模拟实际工况。用上位机软件定时轮询PLC,记录每次通讯的响应时间和成功率。如果24小时内没有掉线、没有丢包、响应时间稳定,那基本可以交付了。
测试的时候要注意模拟最恶劣的工况。比如把所有设备都开起来,该变频的变频,该加热的加热,看看电磁干扰最大的时候通讯是否正常。很多问题在轻载测试的时候发现不了,一到满负荷运行就暴露出来。
7.2 参数固化与文档记录
调试完成之后,把串口服务器的配置导出备份。大部分串口服务器支持配置导出功能,导出一个配置文件存到电脑里。如果以后串口服务器坏了,换一台新的,直接导入配置文件就能恢复,不用重新调试。
同时要写一份调试记录,包括:设备型号、序列号、IP地址、串口参数、工作模式、打包参数、终端电阻位置、线材规格。这份记录交给客户或者存档,以后维护的时候能省很多事。
7.3 日常维护建议
串口服务器上线之后,日常维护也很重要。建议定期检查以下几点:
- 电源适配器有没有发热严重或者输出电压漂移
- 接线端子有没有松动或者氧化
- 网络交换机端口有没有报错计数增长
- 串口服务器的日志有没有异常记录
如果条件允许,可以在SCADA系统里加一个通讯状态监测,实时显示每台串口服务器的在线状态和通讯质量。一旦发现响应时间变长或者丢包率上升,提前处理,不要等到彻底掉线了才去修。
我个人在实际操作中的体会是,串口服务器这个设备本身技术含量不高,但现场出问题的概率不低。大部分问题都不是设备本身的质量问题,而是接线、参数、网络这三个环节的细节没做到位。把这三个环节排查清楚,串口服务器上线不稳的问题基本都能解决。最后再分享一个小技巧:每次去现场之前,把可能用到的工具和备件都带齐,包括万用表、示波器、USB转串口线、终端电阻、备用电源、备用串口服务器。现场排查最怕的就是工具不全,来回跑浪费时间。