发表于:2019/7/20 16:23:18
#0楼
从Modbus开始说现场总线(三)
说完了Modbus协议的基本内容,我觉得有必要简单介绍一下Modbus总线的硬件。经典的串行通讯肯定要从RS232/485/422说起,但现在我觉得RS232应该用的很少了吧。这个当年PLC调试的主力接口,最大的问题就是不支持带电插拔,也特别容易因为各种原因被烧掉,如果你的现场还有老设备使用这种9针或RJ45口,一定不要热插拔。没错,后期有些RS232口为了节省空间做成了RJ45口,插上网线是不会工作的。RS422是四线的,支持全双工,但Modbus这种“问答”式的简单协议,本身就是半双工,所以没有什么优势,现场自然就是RS485的天下了。
RS485是差分工作的,所以抗干扰能力强多了,带电插拔也一般不会出问题。随着现场变频器等设备越来越多,RS485也变得非常容易受到干扰,很多情况下需要在使用屏蔽双绞线的同时把通讯电缆单独穿管保护,终端电阻也要合理配置才能稳定工作。
一个特别的情况是TSX Premium和Micro上带的Ter口,是个非隔离的RS485,一般需要专用的电缆才能工作,但如果你手头没有,可以用标准的485接口代替,当然这个口不是Modbus协议,是Uni telway。
不同厂家的RS485的工作电平和阻抗有一定的差别,因为RS485的硬件接口标准本来就是个范围,并不能说哪家不合格。但在多点通讯的情况下,节点数量就会有一定的限制,典型的极限值是32,但经常碰到多过一定数量以后就无法通讯的情况,这种情况下多数是因为不同设备的输入阻抗不匹配,简单的解决办法就是不要接太多的节点,因为要调整成型产品的阻抗实在是太麻烦了,除非得到厂家的技术支持。
调试RS485的Mobus总线需要一个USB的485接口,因为现在的笔记本甚至台式机都不带串口了。使用这种USB串口的常见问题是虚拟串口的地址(或名称)问题。USB设备驱动在检测到USB串口后,还是在Windows硬件中虚拟了一个串口叫COMx。以前自带串口的笔记本的串口肯定是COM1,现在的电脑没有实体串口(COM口)了,但或许蓝牙或什么其他硬件会有虚拟串口,或者就是驱动程序为了避免冲突,主动使用一个靠后的地址,比如COM5,这种情况下使用串口调试助手的时候,就要先从windows的设备管理器里找到对应的串口地址(COMx)并和软件设置一致。串口调试助手可以监视总线上的数据,如果你发现看不出规律的话,请把通信总线的+/-或A/B调换一下,而且一定要保证通讯参数设置一致(波特率,起始位,停止位,从地址等),因为不论设置怎么错误,你都会看到一堆数据的,但只有完全设置一致时读出的数据才是对的。有的软件可以自动生成校验码,Modbus使用的是最常见的CRC校验码,有了这个功能,你可以很方便的自己发出Modbus指令帧,检查设备的响应。Modbus从设备是只有接收到正确的指令帧才会有响应的,所以,除非你用正确的参数发送了正确的指令帧,从设备是不会有响应的。一般都是先检测主设备发出了正确的查询命令,如果从设备没有响应,就用软件模拟正确的查询指令,找到从设备没有响应的原因。一般如果不是接口烧坏的话,无非就是接线错误,或者通讯参数设置不对,再就是数据地址不正确,比如从设备只在50~100 号寄存器有数据,你去查询40号或101号,从设备是没有响应的。基本上通过这些方法,一定能找到原因。
说完了Modbus协议的基本内容,我觉得有必要简单介绍一下Modbus总线的硬件。经典的串行通讯肯定要从RS232/485/422说起,但现在我觉得RS232应该用的很少了吧。这个当年PLC调试的主力接口,最大的问题就是不支持带电插拔,也特别容易因为各种原因被烧掉,如果你的现场还有老设备使用这种9针或RJ45口,一定不要热插拔。没错,后期有些RS232口为了节省空间做成了RJ45口,插上网线是不会工作的。RS422是四线的,支持全双工,但Modbus这种“问答”式的简单协议,本身就是半双工,所以没有什么优势,现场自然就是RS485的天下了。
RS485是差分工作的,所以抗干扰能力强多了,带电插拔也一般不会出问题。随着现场变频器等设备越来越多,RS485也变得非常容易受到干扰,很多情况下需要在使用屏蔽双绞线的同时把通讯电缆单独穿管保护,终端电阻也要合理配置才能稳定工作。
一个特别的情况是TSX Premium和Micro上带的Ter口,是个非隔离的RS485,一般需要专用的电缆才能工作,但如果你手头没有,可以用标准的485接口代替,当然这个口不是Modbus协议,是Uni telway。
不同厂家的RS485的工作电平和阻抗有一定的差别,因为RS485的硬件接口标准本来就是个范围,并不能说哪家不合格。但在多点通讯的情况下,节点数量就会有一定的限制,典型的极限值是32,但经常碰到多过一定数量以后就无法通讯的情况,这种情况下多数是因为不同设备的输入阻抗不匹配,简单的解决办法就是不要接太多的节点,因为要调整成型产品的阻抗实在是太麻烦了,除非得到厂家的技术支持。
调试RS485的Mobus总线需要一个USB的485接口,因为现在的笔记本甚至台式机都不带串口了。使用这种USB串口的常见问题是虚拟串口的地址(或名称)问题。USB设备驱动在检测到USB串口后,还是在Windows硬件中虚拟了一个串口叫COMx。以前自带串口的笔记本的串口肯定是COM1,现在的电脑没有实体串口(COM口)了,但或许蓝牙或什么其他硬件会有虚拟串口,或者就是驱动程序为了避免冲突,主动使用一个靠后的地址,比如COM5,这种情况下使用串口调试助手的时候,就要先从windows的设备管理器里找到对应的串口地址(COMx)并和软件设置一致。串口调试助手可以监视总线上的数据,如果你发现看不出规律的话,请把通信总线的+/-或A/B调换一下,而且一定要保证通讯参数设置一致(波特率,起始位,停止位,从地址等),因为不论设置怎么错误,你都会看到一堆数据的,但只有完全设置一致时读出的数据才是对的。有的软件可以自动生成校验码,Modbus使用的是最常见的CRC校验码,有了这个功能,你可以很方便的自己发出Modbus指令帧,检查设备的响应。Modbus从设备是只有接收到正确的指令帧才会有响应的,所以,除非你用正确的参数发送了正确的指令帧,从设备是不会有响应的。一般都是先检测主设备发出了正确的查询命令,如果从设备没有响应,就用软件模拟正确的查询指令,找到从设备没有响应的原因。一般如果不是接口烧坏的话,无非就是接线错误,或者通讯参数设置不对,再就是数据地址不正确,比如从设备只在50~100 号寄存器有数据,你去查询40号或101号,从设备是没有响应的。基本上通过这些方法,一定能找到原因。
[此贴子已经被作者于2019/7/23 9:12:31编辑过]