使用双绞线采取对地浮空的差分平衡信号传输,是分布式测控系统计算机主机与从机进行数据通信的有效方法。在系统中,主机和从机均以节点形式出现在通信线路上,都采用专用接口芯片作串行数据收发器。接口芯片的负载能力有限,其特性参数,包括数据传送波特率、节点数以及通信距离,相互之间存在一定的制约关系。在确定波特率时,对于传输距离或线路上的节点数超过芯片额定参数的情况,为了保证主从机之间信号的准确传输,需要在线路上加接中继器对信号进行整形、驱动,完成对线路的扩展。
在主从式多机通信中,中继器在线路上的连接方式不止一种。若中继器以串联方式相连,每个中继器都以特殊的节点出现在线路上,作为其余节点的各个从机通过支线与通信干线相连,支线应较短,距离不应超过5m。在图1所示的电路原理中,A1,A2,A3及A5,A6…都是表示从机的节点。
图1
中继器电路如图2所示,其核心是二片反向连接的TTL-RS485/422串行通信接口芯片,我们采用的是特性参数较好的MAX489E,电路配置了单片机AT89C1051作信号处理。当中继器面向主机的通信线路上的节点(从机)向主机发出信号时应不受中继器输出的影响,此时必须禁止UT1的Y1和Z1输出。反之,应该使能UT1,保证中继器之后的各个从机能通过中继器顺利与主机联络。为了让中继器自动根据被访问节点的位置来决定是否使面向主机的MAX489E芯片处于使能状态,要求中继器具有节点地址识别功能。一个比较简单的处理方法是,根据距离从近到远将各节点地址由大到小(或由小到大)按序排列,作为特殊节点;中继器地址亦按序排列在其中。
图2
中继器电路中采用了一组8位微动开关,用来设置需要判定的地址范围。单片机AT89C2051的P1.0 和P1.1在片内无上拉电阻。本线路在P1口统一经8×4.7kΩ排电阻接+5V,保证任意位开关断开时,该位状态为“1”,否则为“0”。
图3
工作时,单片机AT89C2051经串行口始终监视主机发出的节点地址码,每收到一次地址码即与用户由8位微动开关设定的代码相比较。若地址码大于开关组设定的地址,单片机便使面向PC机的MAX489E芯片处于发送使能状态,保证来自从机的信息通过中继器加到主机。若主机发出的地址码小于开关组设定的地址,单片机程序控制面向主机的MAX489E芯片处于发送封锁状态。
这一方案的最大缺点是节点地址必须有序。一旦设定后,若增加新的节点,其地址值必须设置在本区段(指两个中继器之间通信线路)限定范围内,不便于系统的节点变动。理想的方案是使各中继器在通信线路上具有透明性,允许在每一区段上的节点地址是随机的。
欲做到这一点,要求中继器能够智能地识别地址信息。解决方法是在中继器内部动态地建立一张端口管理表,表内存放每个在端口UT1到前一个中继器(或主机)之间区段的从机地址。各节点,无论是中继器还是从机,其单片机依旧经串行口监视主机发出的节点地址。中继器每收到一次地址帧,就查表判断该节点地址是否在本区段管辖范围。若是,就禁止UT1输出,防止MAX489E的输出处于无信号状态——“1”电平出现在上行通信线上,以免与被选中在本区段的从机所发出的信号电平产生竞争。若查表发现主机发出的节点地址不在本区段管辖范围,则可能有两种情况。一是该节点地址在本中继器UT2之后,此时应该使能UT1输出,保证主机所选节点的从机其上行信号顺利通过本中继器。由于每次被主机选中的节点是惟一的,所以该从机送往主机的信号不会遇到其他信号电平竞争。另一种情况是被主机选中的节点是在前一个中继器之前,那么本中继器之前已经有一个中继器通向主机的输出被禁止,因此,本中继器尽管使能UT1输出,仍不可能与被选中的从机的输出信号相遇而导致竞争,不会对正常通信造成破坏。
例如,现有三个中继器M1,M2,M3。其中,M1负责管理节点A1,A6,A9;M2负责管理A3,A4;M3负责管理A2,A7。电路如图3所示。
当主机发出A4这一地址时,M1查表找不到这一地址,于是将M1-UT1的发送端打开。同样,M3将M3-UT1的发送端打开。而M2通过查表得到A4这一地址,所以M2将M2-UT1的发送端图4关闭,就这样建立起一条从主机到从机A4的数据通路。若主机发出的地址不在A1,A2,A3,A4,A6,A7,A9这一范围内,则所有的中继器都将自己的UT1端口打开,每个中继器只管辖与主机之间本区段的从机地址,而并不关心在自己管辖范围之外的从机地址,不论其存在与否。
剩下的问题是各中继器如何去动态地建立起一张正确的端口管理表。使用的方法是在包括主机、各部从机在内的整个系统统一上电复位时,在主机作系统初始化的同时,各中继器进行建表。具体处理步骤是:中继器首先关闭UT2输出,然后通过UT1,采用“穷举法”依次发出1~n(本例n=64)的地址;若在规定时间T1内接收到回应帧,表示具有此地址值的从机在管辖区段,则在管理表中相应的位置进行登记;若等待T1段时间后,未接收到回应帧,表示具有此地址值的从机在管理范围之外,则发下一地址帧。依次类推处理n个。在这里,T1时间的选取必须由中继器与从机之间的协议确定。
据此,每当中继器的位置改变时,只要主机发出一个复位命令就能使中继器自动建立正确的管理表。需要说明的一点是,当主机发出复位命令后,会接收到中继器M1在建表过程中发出的地址帧,此时主机应将它丢弃,不予理睬。另外,主机必须给予足够长的时间让中继器能顺利地建表,然后才对从机进行操作。
本技术涉及的另一个问题是:中继器在建表时,从机所发信息在通信线上传输方向是面向中继器的;而系统运行时,从机所发信息在通信线上传输方向是面向主机的,二者方向相反。解决这一问题的一个方案是:在每个从机上增加上行与下行通信线路的选择电路,并由程序控制方向。此方案看似简单,实际很繁琐且成本高。可行的另一方案是:由中继器在电路和程序上增加方向选择功能。如图4所示,在UT1芯片MAX489E的引脚A、B、Y、Z端加接二片双四选一多路模拟通道选择开关CD4052,然后再与差分平衡信号传输线相连;单片机的P3.3和P3.4接两片CD4052的通道地址选择端A和B。在中继器建表时,P3.4和P3.3输出代码‘01’,使得每片CD4052的XI/O接通X1,YI/O接通Y1。从而,导致双绞线S2作为从机面向中继器的上行线经IC2加到UT1的A端、B端;双绞线S1经IC1加到UT1的Y端、Z端,成为中继器对从机的下行线。这样,保证四芯双绞线S1和S2在本区段的各节点下位机,面向中继器完成建表联络。当P3.4和P33输出代码‘00’时,情况相反,双绞线S1经IC1加到UT1的Y端、Z端,成为中继器面向主机的上行线;S2作为中继器面向主机的下行线经IC2加到UT1的A端、B端,保证在系统运行时,任何节点的下位机都能经这四芯双绞线S1和S2与上位机正常通信。
图4
本技术成功运用于全数字粮库多点温湿度测控系统,理想地解决了各粮库下位机与监控中心上位机之间的数据通信问题,在解决数据传输误码率方面取得了良好的效果。