1、现象

        PLC与通信模块(简称CB)通过485通信(9600,1bit停止,无校验),PLC发送查询报文,CB应答。在调试过程中发现CB无应答,再加入一台PC设备监视总线报文。总线上共3台设备,无终端电阻,用分别PC模拟PLC、CB设备与另一设备通信正常,但PLC与CB仍不能直接通信。接口部分电路为   PLC_Rx/Tx——隔离芯片——485收发芯片——>CB。

android rs485设置高低电平 rs485调试_波特率

2、分析测试

2.1 总线接口电平

       CB设备端的485接口芯片为3.3V供电,PLC端的485接口芯片为5V供电,怀疑是否为此原因。查询CB端芯片手册,共模输入电平范围为-7V~+12V,PLC端发送到总线数据电平范围-5V~+5V,且接收端对电平的判断阈值为200mV,A-B>200mV为高,A-B<200mV为低,排除此原因。

android rs485设置高低电平 rs485调试_RS485_02

2.2分析总线数据

     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倍宽,数据正确。

android rs485设置高低电平 rs485调试_android rs485设置高低电平_03

       PLC端发出的总线报文,图中标1处为1bit起始与2Bits数据,但测量后起始位宽约144us,后2Bit的数据宽共约150us,标2处的停止位宽大约50us,一帧总长正确仍为约1.03ms。图中波形宽度不准确,正确的1bit宽度应为104us。

android rs485设置高低电平 rs485调试_数据_04

      继续向前查看485收发芯片的发送数据输入脚DI的单端电平,数据位宽仍不准确,与上图类似。

android rs485设置高低电平 rs485调试_数据_05

     再向前查看隔离芯片的发送输入脚INB,波形异常,影响芯片对高低电平的判断,造成数据位宽异常。

android rs485设置高低电平 rs485调试_android rs485设置高低电平_06

    断开R47的33Ω,用是示波器查看PLC控制器的输出脚信号,无电平输出。分析此脚可能为开漏输出,需要增加上拉,但所有的设计文档没有对此做提示。隔离芯片可能有弱上拉,输出的波形宽度虽然异常,但PC与CB设备对波形的采样位置可能不同,造成PC能够正确识别数据,CB某些位出错。

3、结论

         PLC的TX脚开漏,增加上拉后,通信正常;

         3.3V供电的485接口芯片能够与5V供电的485接口芯片正常通信。