基于RS485桥电路装置的故障定位方法与流程

文档序号:11234471阅读:1378来源:国知局
基于RS485桥电路装置的故障定位方法与流程

本发明涉及串行通信技术,特别涉及一种基于rs485桥电路装置的故障定位方法。



背景技术:

rs485是两线制、半双工、差分信号通讯接口(物理层)。参见图1,传统rs485总线允许多个设备连接到同一条总线上,这些设备通常使用modbus协议格式通讯,每个设备预先设置一个485id。主机采用轮询的方式跟总线上的设备交互,通过485id区分各个设备。主机发送请求时所有设备均会收到,但是只有485id相匹配的那个设备应答,485总线是半双工的,同一时间只能有一个数据发送者。传统rs485总线的所有传感器接在一根数据线上,当任何一个传感器发生故障时,主机与该传感器之后传感器的通信完全中断,而且也无法确定到底是哪一个传感器发生故障。特别地,在运行过程中,任一个传感器发生故障时,它并不能报告主机。

此外,根据传统的rs485总线技术,主机到传感器之间的通信线路质量是无法检测的。

因此,现有技术中存在对一种能够基于rs485总线进行传感器的故障定位以消除现有技术存在的缺陷的技术的需要。



技术实现要素:

有鉴于此,本发明提供一种基于rs485桥电路装置的故障定位方法,可以克服现有技术存在的问题。

本发明的技术方案具体是这样实现的:

一种基于rs485桥电路装置的故障确定方法,该方法包括:

主机向总线上发送携带有桥电路装置地址uid和命令代码的数据包;

桥电路装置从它的p端口接收到数据包后,解析所接收的通讯数据包以得到解析的uid和命令代码;将解析的uid与该桥电路装置的uid比较,如解析的uid与该桥电路装置的uid相同,则该桥电路装置执行该数据包中的命令代码所代表的命令以进行与主机的通信并向主机发送响应数据包;如不相同则忽略所述命令;

具有等于和大于解析的uid并且小于m的地址的每一个桥电路装置向与本桥电路装置最相邻的、具有大于解析的uid的桥电路装置发送心跳包;

每一个接收到心跳包的桥电路装置将向本桥电路装置发送心跳包的桥电路装置发送第一响应消息;

发送心跳包的桥电路装置如未能接收到来自最相邻的、具有大于解析的uid的桥电路装置的第一响应消息,则确定未发送响应的桥电路装置发生故障;

发送心跳包的、未能接收到来自最相邻的、具有大于解析的uid的桥电路装置的第一响应消息的桥电路装置将自身的地址加1作为发生故障的桥电路装置地址,并且在向相邻的、具有小于本桥电路装置的地址的桥电路装置发送第二响应消息时将发生故障的桥电路装置地址和故障标识加载到第二响应消息中;

位于与主机通信的桥电路装置和发生故障的桥电路装置之间的每一个桥电路装置在向与本桥电路装置相邻的、具有小于本桥电路装置的地址的桥电路装置发送第二响应消息时将接收到的发生故障的桥电路装置地址和故障标识加载到第二响应消息中;

与主机通信的桥电路装置在接收到携带有生故障的桥电路装置地址和故障标识的第二响应消息后,在向主机发送响应数据包时将发生故障的桥电路装置地址和故障标识加载到响应数据包中;

主机根据接收的响应数据包中的发生故障的桥电路装置地址和故障标识确定发生故障的桥电路装置;

其中,m个桥电路装置通过rs485总线串联在一起并连接到主机并且m个桥电路装置的地址按照距离主机从近到远依次为1,2,3,…,m。

其中,一个桥电路装置包括处理器;作为p端的第一rs485串口,用于通过总线连接上一个桥电路装置;作为n端的第二rs485串口,用于通过总线连接下一个桥电路装置;以及作为桥电路装置的l端的第三串口,用于连接类型匹配的传感器,所述处理器与第一rs485串口、第二rs485串口和第三串口进行信号交互。

较佳地,在桥电路装置从它的p端口接收到数据包后,并且解析所接收的通讯数据包以得到解析的uid和命令代码之前,该方法还包括:

桥电路装置将从它的p端口收到的所述数据包时立即开始逐单位信息长度的先转发到它的n端口以传递到下一个桥电路装置;

所述单位信息长度为1字节或者1比特。

进一步,所述故障定位方法还包括步骤:

主机将发生故障的桥电路装置地址加载和读取传感器应答数据的命令代码的数据包发送到总线上;

如主机无法接收到具有所述故障桥电路装置地址的桥电路装置的传感器的应答数据,则确定是发生故障的桥电路装置地址的桥电路装置的传感器发生故障;否则,确定是发生故障的桥电路装置地址的桥电路装置本身发生故障。

较佳地,在主机向总线上发送携带有uid和命令代码的数据包的步骤之前,所述方法还包括:

主机向总线上发送携带有指定桥电路装置地址和echo命令代码的数据包;

如无法接收到指定桥电路装置地址的桥电路装置发送的echo响应消息,则确定指定桥电路装置地址的桥电路装置发生故障。

其中,指定桥电路装置地址的桥电路装置接收到携带有指定桥电路装置地址和echo命令代码的数据包后,向主机返回携带原始echo命令代码的响应消息。

其中,位于主机以及m个桥电路装置的每一段总线都是独立的。

其中,每一个桥电路装置的uid都是唯一的。

如上可见,在本发明中的基于rs485桥电路装置的故障定位方法,提供了可以用于基于rs485桥电路装置的新故障定位方式。由于传感器并不是直接连接到总线上,而是通过桥电路装置连接到总线上,因此可以避免了现有技术中任一个传感器发生故障导致主机与它之后的传感器无法通信的问题;此外,每一个桥电路装置与主机的通信都是相对独立的,不与主机通信的桥电路装置可以利用发送心跳包的方式确定与它相邻的在后桥电路装置是否发生故障,并将发送故障的桥电路装置地址通过一个个在前的桥电路装置最终传递报告给主机,从而可以确定发生故障的桥电路装置。而且,通过主机主动发送的取传感器数据命令,可以确定是桥电路装置发生故障,还是与桥电路装置连接的传感器发生故障。

附图说明

图1是现有技术中的基于rs485的传统总线电路示意图。

图2为本发明实施例中的基于rs485的桥电路装置的组成示意图。

图3为本发明实施例中的基于rs485的桥电路装置的总线电路示意图。

图4为本发明实施例中的基于rs485桥电路装置的故障定位方法的流程图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。

本发明中,基于rs485的桥电路装置具有三个端口,分别为l端,p端和n端,p端和n端分别用于连接上一个和下一个桥电路装置,l端用于连接到传感器。基于rs485的桥电路装置直接连接到rs485总线上。这样,传感器不再直接连接到rs485总线上,主机不再直接与传感器交互,而是使用485总线协议与桥电路装置交互。桥电路装置及与其连接的传感器可以称为rs485总线上的一个节点。rs485总线上的每两个桥电路装置之间都是一段独立的数据线,甚至基于rs485的桥电路装置连接传感器的那段线即l端也是一段独立的数据线,基于rs485的桥电路装置通过接力的方式在节点之间传递数据。可见,采用本发明,节点之间的数据线长度变短了,因此信号衰减小了,信号线上的信号抗干扰能力也相应变强。

本发明中,总线上的基于rs485的桥电路装置是数据搬运工即数据转发设备,rs485总线也是使用rs485物理接口,但不使用modbus协议,而是使用自定义协议。自定义协议在本发明中不是必须的,本发明也可以由本领域技术人员采用其它协议,因此在此略去对自定义协议的介绍。桥电路装置是主机跟传感器通讯的桥梁,它为主机和传感器提供一条不同与传统rs485总线的通讯线路。rs485总线上只连接基于rs485的桥电路装置,不像传统rs485总线那样直接连接传感器。使用rs485总线时,主机不再直接跟传感器交互,而是使用rs485桥协议跟桥电路装置交互。桥协议提供命令供主机将打包后的“传感器指令”转发给传感器来实现主机跟传感器的交互。

下面结合图2和图3对本发明的基于rs485的桥电路装置进行详细介绍。

图2示出了根据本发明实施例的基于rs485的桥电路装置的组成示意图。桥电路装置包括处理器,第一rs485串口和第二rs485串口。第一rs485串口用于通过总线连接上一个桥电路装置的第二rs485串口,第二rs485串口用于通过总线连接下一个桥电路装置的第一rs485串口。所述桥电路装置进一步包括作为桥电路装置的l端的第三串口,用于提供多种类型的接口以供连接类型匹配的传感器。

本发明中,第一rs485串口作为桥电路装置的p端,用于通过总线连接上一个桥电路装置;第二rs485串口作为桥电路装置的n端,用于通过总线连接下一个桥电路装置。所述处理器与第一rs485串口、第二rs485串口和第三串口进行信号交互。其中,所述第三串口为rs485、rs422和rs232串口的集合串口,用于连接基于rs485工作的传感器,基于rs422工作的传感器和基于rs232工作的传感器。较佳地,所述桥电路装置进一步包括辅助串口,用于连接期望类型的传感器。较佳地,所述处理器为c51芯片,所述第一rs485串口和第二rs485串口为rj45接口。根据本发明的实施例,第一rs485串口,第二rs485串口和第三串口是彼此独立的,能够彼此独立地同时进行数据通信。较佳地,桥电路装置还包括位于l端的干节点端口,用于连接干节点。

本发明的实施例中,虽然基于rs485的接口是半双工通讯的,但基于rs485的桥电路装置内部的三个接口是独立的,它们可以同时进行数据通讯,也就是说桥电路装置在将p端的数据转发到n端时,仍然可以跟l端连接的传感器进行通讯。这种工作方式比半双工通讯的传统rs485总线更高效。

传统rs485总线只能接rs485接口的传感器,而且通常只能以modbus协议进行通讯。而本发明中,基于rs485的桥电路装置的l端可以支持多种类型的传感器,这些传感器的协议可以是任意的。作为选择,l端也可以配置成仅连接一种类型的传感器。在rs485桥总线上,主机与这些不同类型传感器之间通讯不会产生任何冲突,因为实际直接跟传感器通讯的桥电路装置仅限于它所连接的那个rs485桥电路装置。

图3示出了根据本发明实施例的基于rs485的桥电路装置的总线电路示意图。如图4所示,基于rs485的总线电路包括m个串联连接在rs485总线上的节点和主机,m为正整数。每一个节点均为如前所述的桥电路装置,第一个节点的p端与所述主机连接,第m个节点的l端悬空,第i个节点的p端连接到第i-1个节点的l端,i为2,3,4,…,m-1。第k个节点和第k-1个节点之间的数据线为独立数据线段,k为2,3,4,…,m。较佳地,节点的p端、l端和n端中的每一个端口配置有4根线,其中2根线为信号线,另外2根线一根为地线,一根为5v电源线。较佳地,所述主机通过桥电路装置与传感器进行数据交互。较佳地,在主机通过桥电路装置与传感器进行数据交互,所述桥电路装置还可以与其后的桥电路装置通信。

参见图3,基于rs485的总线电路中,每两个桥电路装置即节点之间都是一段独立的数据线,甚至基于rs485的桥电路装置即l端连接传感器的那段线也是一段独立的数据线,桥电路装置通过接力的方式在节点之间传递数据。显然,由于节点之间的数据线长度变短了,因而信号衰减变小,抗干扰能力也就变强了。

根据本发明的实施例,主机发送给桥电路装置的数据包基本格式如下:

【命令开始符】+【桥电路装置uid】+【命令代码】+【内容】+【结束符】

桥协议要求【命令开始符】和【结束符】之间的数据要进行转码,以免这些数据中出现跟开始符、结束符冲突的字符。本发明中,转码规则是8bit转7bit,计算机每个字节由8个比特位组成,转码是将一组字节以每7个比特位重新组织,然后形成一组新的数据,新数据每个字节只使用低7位,最高位总是0(最高位为1是桥协议的特殊控制符,例如命令开始符和结束符),转码后的数据字节会比原数据字节多,但可以保证不会跟桥协议的特殊控制符冲突。

桥电路装置回应的数据包中可能会包含两份【内容】数据。因为rs485通讯是半双工的,一问一答式的,为了避免冲突,桥电路装置不能主动向主机发送数据包。有时候桥电路装置需要向主机报告一些事件,例如总线上新接入了一个桥电路装置,这个事件会在主机发出命令并等待回应时,桥电路装置将事件放在第2份【内容】数据中汇报给主机。

下面介绍本发明中的主要的rs485桥通讯命令代码和功能。

主机通过uid指定与某个桥电路装置通讯,每个桥电路装置都有一个自动分配的uid。本发明中,【命令代码】是单字节数值,命令需要的参数放在【内容】字段中。桥电路装置回应的数据包,【命令代码】是所回应命令的命令代码数值的反码。

主要的rs485桥通讯命令和功能如下:

1、要求总线上的桥电路装置自动分配地址(即uid)。

2、取“指定桥电路装置”的硬件信息(版本号、类型、出厂日期等信息)。

3、要求“指定桥电路装置”原样回复命令中携带的数据,用于测试线路通讯质量。

4、用一条命令获取总线所有桥电路装置的io输入状态(例如干节点输入状态)。

5、取“指定桥电路装置”的指定io的输入状态(例如干节点输入状态)。

6、将传感器指令告诉“指定桥电路装置”。桥电路装置记住指令并自动的重复向传感器发送这些指令,实现自动从传感器取数。该命令适合固定不变的传感器指令。

7、读取“指定桥电路装置”收到的传感器应答数据。桥电路装置自动从传感器取到数据后,先将数据存放到自己的内存区中,能保存多少条历史数据要看单条数据的大小。主机发送该命令从桥电路装置中读取这些传感器历史数据。这条命令跟上一条命令即第条命令是成对的。

8、要求“指定桥电路装置”开启主机到传感器的直接通讯通道。有些传感器通讯需要多次交互,或则,传感器数据量太大,桥电路装置无法对这样的传感器执行自动取数。主机可以用这条命令跟传感器建立直接通讯通道,桥电路装置负责主机和传感器之间的双向数据转发。

9、桥电路装置内部事件通知,主要是用于桥电路装置之间的一些事件沟通。

参见图4,示出了本发明实施例中的基于rs485桥电路装置的故障定位方法的流程图。在步骤410,主机向总线上发送携带有桥电路装置地址uid和命令代码的数据包。接下来,在步骤420,桥电路装置从它的p端口接收到数据包后,解析所接收的通讯数据包以得到解析的uid和命令代码;将解析的uid与该桥电路装置的uid比较,如解析的uid与该桥电路装置的uid相同,则该桥电路装置执行该数据包中的命令代码所代表的命令以进行与主机的通信并向主机发送响应数据包;如不相同则忽略所述命令。

根据本发明的基于rs485桥电路装置的总线技术,总线上的任何一个桥电路装置开始接收到数据包时,均先判断数据包中的命令开始符是否表明数据包为携带自动分配地址的命令代码的数据包。根据本发明的实施例,所述数据包是由主机向rs485总线上发送的,该数据包的格式为:依次按序排列的命令开始符、桥电路装置的uid、命令代码、第一内容和结束符;其中,命令开始符和结束符之间的数据被转码,命令开始符的最高位为“1”,用于表示一个数据包的开始,其它字节都是以“0”开始的字节;所述转码为将8比特一字节的数据转换为以7比特为一字节的数据。较佳地,本发明的实施例是以命令开始符的值来判断该数据包所包含的命令代码是否是自动分配地址的命令,并且命令开始符所在的字节的值表示是何种类型的命令代码。

然而,本发明的基于rs485桥电路装置的故障定位方法主要是涉及到故障定位,它可以不关心总线上的数据包是否携带有自动分配地址的命令,只要是可以根据数据包进行故障定位就不影响本发明的实施。此外,如果总线上的数据包是否携带有自动分配地址的命令,主机将会自动为总线上的桥电路装置重新分配唯一的uid。该重新分配唯一的uid的具体过程不属于本发明的技术方案的构成部分,在此略去详述。

在步骤430,具有等于和大于解析的uid并且小于m的地址的每一个桥电路装置向与本桥电路装置最相邻的、具有大于解析的uid的桥电路装置发送心跳包。例如,如果图3中的节点3正在与主机通信,那么节点3及其之后的节点4,5,…,m-1中的桥电路装置都可以向后发送一个心跳包。

在步骤440,每一个接收到心跳包的桥电路装置将向本桥电路装置发送心跳包的桥电路装置发送第一响应消息。在步骤450,发送心跳包的桥电路装置如未能接收到来自最相邻的、具有大于解析的uid的桥电路装置的第一响应消息,则确定未发送响应的桥电路装置发生故障。例如,如果节点6发生故障,则节点5中的桥电路装置无法接收到第一响应消息。

在步骤460,发送心跳包的、未能接收到来自最相邻的、具有大于解析的uid的桥电路装置的第一响应消息的桥电路装置将自身的地址加1作为发生故障的桥电路装置地址,并且在向相邻的、具有小于本桥电路装置的地址的桥电路装置发送第二响应消息时将发生故障的桥电路装置地址和故障标识加载到第二响应消息中。例如,如果节点6发生故障,则节点5中的桥电路装置将它的地址加1作为发生故障的桥电路装置地址,即表明是地址为“6”的桥电路装置发生故障。

在步骤470,位于与主机通信的桥电路装置和发生故障的桥电路装置之间的每一个桥电路装置在向与本桥电路装置相邻的、具有小于本桥电路装置的地址的桥电路装置发送第二响应消息时将接收到的发生故障的桥电路装置地址和故障标识加载到第二响应消息中。例如,如果是主机正在与节点3中的桥电路装置通信,则在节点6的桥电路装置发生故障的情况下,节点5中的桥电路装置将故障地址“6”和故障标识加载到第二响应消息中发送给节点4中的桥电路装置;节点4中的桥电路装置在收到故障地址和故障标识后,又将故障地址和故障标识记载到它要发送给节点3中的桥电路装置的第二响应消息中。

在步骤480,与主机通信的桥电路装置在接收到携带有生故障的桥电路装置地址和故障标识的第二响应消息后,在向主机发送响应数据包时将发生故障的桥电路装置地址和故障标识加载到响应数据包中。例如,如果是主机正在与节点3中的桥电路装置通信,在节点6的桥电路装置发生故障的情况下,节点3中的桥电路装置将故障地址和故障标识加载到响应数据包中发送给主机。

在步骤490,主机根据接收的响应数据包中的发生故障的桥电路装置地址和故障标识确定发生故障的桥电路装置。

下面举一个例子说明本发明的故障定位方法的实现。

如图3所示,假设主机持续跟节点2进行交互,如果节点1有故障需要上报(比如传感器死机了),它可以篡改节点2的响应数据包来实现故障上报,因为节点2的数据包是经过它传递的。现在,架设节点10发现它后边的节点11故障了。如果主机向节点10发命令,它可以趁机汇报这条故障,但是主机一直跟节点2通讯,节点10不能直接将故障发送给主机。根据本发明,节点10如下确定知道节点11故障。当主机与节点2交互时,节点2右边路段空闲,节点2主动向右发送心跳包,要求节点3做出响应。节点3应该会响应,而且节点3响应数据被节点2收到的时间小于节点2响应数据被主机收到的时间,因为心跳包字节数比较少,也就是说节点2不会因为等待节点3的应答而导致不能及时向下转发下一条主机命令。节点3的响应数据除了告诉节点2它还活着,还能趁机向节点2报告其它事件。这种传感器内部状态沟通数据包仅限两个桥电路装置之间,不会向前或向后转发。节点10就是通过心跳包判断出节点11出故障了,因为它收不到节点11的响应数据,然后它利用响应节点9心跳包的机会将故障地址和故障标识告诉节点9,就这样一直这样传递到节点2,节点2就能够将故障地址和故障标识插入到响应数据包中发给主机了。

较佳地,在桥电路装置从它的p端口接收到数据包后,并且解析所接收的通讯数据包以得到解析的uid和命令代码之前,本发明的实施例的故障定位方法还包括:桥电路装置将从它的p端口收到的所述数据包时立即开始逐单位信息长度的先转发到它的n端口以传递到下一个桥电路装置;所述单位信息长度为1字节或者1比特。

较佳地,在步骤490之后,本发明的故障定位方法还包括步骤:主机将发生故障的桥电路装置地址加载和读取传感器应答数据的命令代码的数据包发送到总线上;如主机无法接收到具有所述故障桥电路装置地址的桥电路装置的传感器的应答数据,则确定是发生故障的桥电路装置地址的桥电路装置的传感器发生故障;否则,确定是发生故障的桥电路装置地址的桥电路装置本身发生故障。

较佳地,本发明的故障定位方法中,在主机向总线上发送携带有uid和命令代码的数据包的步骤之前,所述方法还包括:主机向总线上发送携带有指定桥电路装置地址和echo命令代码的数据包;如无法接收到指定桥电路装置地址的桥电路装置发送的echo响应消息,则确定指定桥电路装置地址的桥电路装置发生故障。其中,指定桥电路装置地址的桥电路装置接收到携带有指定桥电路装置地址和echo命令代码的数据包后,向主机返回携带原始echo命令代码的响应消息。通过发送echo命令,可以判断总线线路质量。因为echo命令由桥电路装置原样返回,主机可以通过比较发出和收到的数据来判断总线线路错码的情况,当发现错码率太高(线路质量差)时,可以提示用户解决它。

其中,位于主机以及m个桥电路装置的每一段总线都是独立的。

在本发明中的基于rs485桥电路装置的故障定位方法,提供了可以用于基于rs485桥电路装置的新故障定位方式。由于传感器并不是直接连接到总线上,而是通过桥电路装置连接到总线上,因此可以避免了现有技术中任一个传感器发生故障导致主机与它之后的传感器无法通信的问题;此外,每一个桥电路装置与主机的通信都是相对独立的,不与主机通信的桥电路装置可以利用发送心跳包的方式确定与它相邻的在后桥电路装置是否发生故障,并将发送故障的桥电路装置地址通过一个个在前的桥电路装置最终传递报告给主机,从而可以确定发生故障的桥电路装置。而且,通过主机主动发送的取传感器数据命令,可以确定是桥电路装置发生故障,还是与桥电路装置连接的传感器发生故障。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1