PLC与通信模块(简称CB)通过485通信(9600,1bit停止,无校验),PLC发送查询报文,CB应答。在调试过程中发现CB无应答,再加入一台PC设备监视总线报文。总线上共3台设备,无终端电阻,用分别PC模拟PLC、CB设备与另一设备通信正常,但PLC与CB仍不能直接通信。接口部分电路为 PLC_Rx/Tx——隔离芯片——485收发芯片——>CB。
CB设备端的485接口芯片为3.3V供电,PLC端的485接口芯片为5V供电,怀疑是否为此原因。查询CB端芯片手册,共模输入电平范围为-7V~+12V,PLC端发送到总线数据电平范围-5V~+5V,且接收端对电平的判断阈值为200mV,A-B>200mV为高,A-B<200mV为低,排除此原因。
PC端能监视到PLC发出了正确的查询报文,CB设备无响应,但CB对PC发出的报文有相应,比较两份查询报文到总线上的波形。将示波器单端探头的地、信号分别接到总线的A,B端。9600波特率,每个Bit宽度约为104us,一帧一个字节10bits为1.04ms。
PC端发出的报文如下,第一字节为0x03(低位先发0_1100_0000_1),图中高低电平与实际相反(1_0011_1111_0),数据"00"宽度是起始"1"的2倍宽,数据正确。
PLC端发出的总线报文,图中标1处为1bit起始与2Bits数据,但测量后起始位宽约144us,后2Bit的数据宽共约150us,标2处的停止位宽大约50us,一帧总长正确仍为约1.03ms。图中波形宽度不准确,正确的1bit宽度应为104us。
继续向前查看485收发芯片的发送数据输入脚DI的单端电平,数据位宽仍不准确,与上图类似。
再向前查看隔离芯片的发送输入脚INB,波形异常,影响芯片对高低电平的判断,造成数据位宽异常。
断开R47的33Ω,用是示波器查看PLC控制器的输出脚信号,无电平输出。分析此脚可能为开漏输出,需要增加上拉,但所有的设计文档没有对此做提示。隔离芯片可能有弱上拉,输出的波形宽度虽然异常,但PC与CB设备对波形的采样位置可能不同,造成PC能够正确识别数据,CB某些位出错。
PLC的TX脚开漏,增加上拉后,通信正常;
3.3V供电的485接口芯片能够与5V供电的485接口芯片正常通信。
RS485详解可参考下方博客
https://blog.csdn.net/sternlycore/article/details/86493191