当RS485隔离遇见FreeModbus,你碰到问题了吗

摘要: 基于RS485物理接口的Modbus总线在工业控制中广泛应用。Freemodbus是一个免费的实用的协议栈,孔丙火(微信公众号:孔丙火)用它实现了一个从站。串口收发信号和RS485芯片的收发使能信号采用光耦进行了隔离,在测试过程发现了偶尔出现TimeOut的问题,经过查找及分析,发现是光耦信号延时导致的,给出了解决方案,并对问题进行了详细分析。

关键词:RS485 隔离 Freemodbus 光耦 时序

1.问题来源

工业应用中,在进行RS485电路设计的时候,为了确保电气安全和抗干扰性,经常会做信号隔离,光耦隔离是常用的一种形式。Modbus协议是现场总线协议中比较常见的一种,其设计和使用简单,运行可靠,在可编程控制器、仪器仪表、传感器中使用广泛,其中,基于RS485物理接口的Modbus总线使用最多。Modbus是主从式的通信结构,一个系统中仅有一个主站,其他为从站。Freemodbus是一个免费的协议栈,仅支持从站。Freemodbus有专门的机构在维护,比较成熟,相对于自己编写的协议代码,运行更稳定,是开发者在研发时的常用选项。

近来,孔丙火(微信公众号:孔丙火)在设计一个基于Modbus-RTU接口的信号采集站,作为从站,把采集到的信号传输给PLC等主站设备。单片机采用STM32F103C8T6,RS485芯片:SP485EEN,接收和发送的隔离采用光耦PC410,485收发使能信号的隔离采用光耦EL357NB。RS485部分的原理图如图1所示。

图1

程序设计中,采用Freemodbus协议栈实现Modbus-RTU协议,串口速率为115200bps,数据位8位,停止位1位,无校验。

在使用Modbus主站软件(Modbus Poll)进行调试的过程中,孔丙火(微信公众号:孔丙火)发现通信过程中会出现TimeOut的错误,有以下几个特点:

a)并不是每一帧都会出错,但会不定时地出现;

b)主站询从站的频率越高,出错的几率越低,主站每30ms询一帧数据的时候基本不出错,但每500ms或1000ms询一次的时候,就会比较明显地出错。

2.查找过程

由于硬件电路是之前使用过的,刚开始并没有考虑是电路的问题。首先是从软件开始查找的。由于能够正常的回复数据,只是偶尔出错,因此软件的整体流程应该是通的,只是某个代码的细节有问题,孔丙火(微信公众号:孔丙火)把代码整个重新捋了一遍,也没有发现明显的问题。

后来,开始逐步排查,先把RS485部分的电路短接掉,用USB-TTL转换器直接连接单片机的串口收发管脚,进行收发数据的测试,结果一切都正常,无论主站的询问数据周期是多少,都不会出错。于是开始怀疑跟485相关的代码。

(0)

相关推荐