发明内容
本发明所要解决的技术问题是提供一种通过RS-485接口在主、从智能电器之间实现串行总线通讯的通讯系统的工作方法。
为解决上述技术问题,本发明提供了一种通讯系统的工作方法,该智能电器串行总线通讯系统包括:主智能电器和至少1个从智能电器;主智能电器与从智能电器之间通过RS-485总线相连;主智能电器和各从智能电器都具有唯一的端点号,主智能电器搜索到一个从智能电器后,与其建立一数据通信通道;然后,主智能电器与从智能电器相互发送数据包,当从智能电器接收到正确数据时,从智能电器向主智能电器发送确认握手包;当从智能电器接收到错误数据时,从智能电器向主智能电器发送不确认握手包,主智能电器向该从智能电器重新发送上一数据包;当主智能电器接收到正确数据时,主智能电器向从智能电器发送确认握手包;当主智能电器接收到错误数据时,主智能电器向从智能电器发送不确认握手包,该从智能电器向主智能电器重新发送上一数据包;当主智能电器向从智能电器发送一通路撤销包时,主智能电器与从智能电器之间的所述数据通信通道撤销。
所述主智能电器搜索从智能电器时,主智能电器先通过RS-485总线发送令牌包;连接在RS-485总线上的从智能电器接收该令牌包,然后通过RS-485总线发回确认握手包至主智能电器,从而使主智能电器与从智能电器之间建立一数据通信通道。
所述数据包包括:循环冗余校验字段;主智能电器和从智能电器根据该循环冗余校验字段来判断接收到的所述数据包为错误数据或正确数据。
所述主智能电器中包括一个设备连接表,该设备连接表与各端点号对应;主智能电器向一端点号发送令牌包,若在预设时间内未收到相应的确认握手包,则主智能电器确认该端点号上不存在从智能电器,即为空端点,该设备连接表上相应的记录为空;若在预设时间内收到相应的确认握手包,则主智能电器确认该端点号上存在从智能电器,即为非空端点,该设备连接表上作相应的记录,然后读取其产品标志,以识别生产厂商以及产品种类,填写设备连接表,并安装相应的驱动程序。
主智能电器对非空端点发送令牌包,并得到确认握手包时后,再发出数据包来确定数据传送的方向;当所述数据包为输入数据包时,从智能电器发出确认握手包后,开始接收数据;当所述数据包为输出数据包时,从智能电器发出确认握手包后,开始发送数据。
主智能电器对非空端点发送令牌包后,在预设时间内未得到确认握手包,主智能电器确认该端点号上的从智能电器断开,此时主智能电器将所述设备连接表上相应的记录清空;当主智能电器向一端点号发送数据包后,若在预设时间内未得到确认握手包,主智能电器确认该端点号上的从智能电器断开,此时主智能电器将所述设备连接表上相应的记录清空;当主智能电器正在接受来自一端点号上的从智能电器的数据包时,在预设时间内收不到下一个字节,主智能电器确认该从智能电器断开,此时主智能电器将所述设备连接表上相应的记录清空。
所述主智能电器在完成与一端点号上的从智能电器的数据通信后,主智能电器发送通路撤消包至该从智能电器,并断开与其的数据通信通道。
本发明具有积极的效果:(1)本发明的智能电器串行总线IASB(Intellect Apparatus Serial Bus)是为智能电器数据传输设计的一种低成本的数据总线,本发明的智能电器串行总线通讯系统中,主智能电器和从智能电器的工作方法适于实现主、从智能电器之间通过RS-485的接口规范进行数据通信。本发明的智能电器串行总线通讯系统采用RS-485总线,其接口为通用接口,一个接口适用于不同型号的电器。不需要为不同的电器准备不同的接口和协议。其次,其具有自动识别与配置功能。当用户将电器连接到智能电器串行总线,如果计算机处于运行状态时,计算机能够自动识别接入电器的类型,并装载相应的驱动程序,实现数据通信功能。RS-485规范采用双绞线可以方便连接。不需要在打开计算机机箱,为每个外设增加扩展卡。再次,其支持热插拨。可以在任何时候连接和断开电器,而不管计算机系统是否开机,都不会损坏计算机和外接的电器。当电器接入后,计算机系统会检测接入的电器。其传输速度达到100Kb/s,与RS-232相比数据传输速度快,能满足一般配电系统数据通信速度的要求。(2)本发明的智能电器串行总线通讯系统中,直接采用公用电话线作为信号线,可大量节省人力、物力和财力,且安装使用方便。
具体实施方式
(实施例1)
见图1,本实施例的通讯系统包括:主智能电器1和3个(其他实施例中可以是1-30个中的任意值)从智能电器3;主智能电器1与从智能电器3之间通过RS-485总线2相连。主智能电器1与从智能电器3之间的间距小于1200米。所述主智能电器1和从智能电器3包括:中央处理器和与该中央处理器相连的RS-485接口。主智能电器1和从智能电器3可以是计算机,也可以是多功能打复印机、通讯设备等具有单片机或嵌入式处理器的智能设备。
见图3,为延长通讯距离,主智能电器1与从智能电器3之间设有中继器4。为增加RS-485总线2上连接的从智能电器3的数量,从智能电器3通过RS-485总线2与集线器5相连,集线器5通过RS-485总线2与主智能电器1相连。集线器5与主智能电器1之间设有中继器4。从智能电器3与集线器5之间设有中继器4。
见图2,智能电器串行总线的物理接口包括:平衡驱动器10和差分接收器30;平衡驱动器10具有一对输出端,差分接收器30具有一对输入端,平衡驱动器10的一对输出端与差分接收器30的一对输入端之间分别通过信号线20相连。
所述平衡驱动器10具有数据输入端。所述差分接收器30具有数据输出端。平衡驱动器10将来自数据输入端的逻辑电平信号变换成电位差信号,由与平衡驱动器10的一对输出端相连的一对信号线20进行信号传送;差分接收器30将其一对输入端所接收的电位差信号变换为逻辑电平信号,并从其数据输出端输出,从而实现数据的传送与接收。
当表示逻辑“1”时,一条信号线输出正高电平,另一条信号线输出负高电平;当表示逻辑“0”时,这两条信号线的状态相反。接收器判断这两条信号线的电位差,来确定逻辑“1”和逻辑“0”。差分接收器30可以分辨的最小电压为±200mV。这种发送和接受方式被称为平衡驱动差分接收。
所述平衡驱动器10和差分接收器30具有彼此相连的电平参考端。
相对于电平参考端,平衡驱动器10的输出分别为+VT、-VT,则差分接收器30的输入端VR的电压:
VR=+VT-(-VT)=2VT
平衡驱动器10的一对输出端不共地,可以削弱干扰的影响,又可以获得更长的传输距离,允许更大的信号衰减。
本实施例的智能电器串行总线的物理接口的传输速率最大可以达到10Mb/s,传输速率为10Mb/s时,传输距离为12m;传输速率为1Mb/s时,传输距离为120m;传输速率为100Kb/s时,传输距离可达1200m。
平衡驱动器10能驱动32个负载设备。负载设备可以是被动的平衡驱动器或差分接收器。
其他实施例中,所述信号线20为公用电话线,且公用电话线的两根导线之间设有终端电阻R。直接采用公用电话线作为信号线,可大量节省人力、物力和财力,且安装使用方便。
从智能电器3上包括用于设置其端点号的DIP开关,主智能电器1和各从智能电器3都具有唯一的端点号,主智能电器1搜索到一个从智能电器3后,与其建立一数据通信通道;然后,主智能电器1与从智能电器3相互发送数据包,当从智能电器3接收到正确数据时,从智能电器3向主智能电器1发送确认握手包;当从智能电器3接收到错误数据时,从智能电器3向主智能电器1发送不确认握手包,主智能电器1向该从智能电器3重新发送上一数据包;当主智能电器1接收到正确数据时,主智能电器1向从智能电器3发送确认握手包;当主智能电器1接收到错误数据时,主智能电器1向从智能电器3发送不确认握手包,该从智能电器3向主智能电器1重新发送上一数据包;当主智能电器1向从智能电器3发送一通路撤销包时,主智能电器1与从智能电器3之间的所述数据通信通道撤销。
所述主智能电器1搜索从智能电器3时,主智能电器1先通过RS-485总线2发送令牌包;连接在RS-485总线2上的从智能电器3接收该令牌包,然后通过RS-485总线2发回确认握手包至主智能电器1,从而使主智能电器1与从智能电器3之间建立一数据通信通道。
所述数据包包括:包标识字段、地址字段、128个字节的数据区和循环冗余校验字段;主智能电器1和从智能电器3根据该循环冗余校验字段来判断接收到的所述数据包为错误数据或正确数据。
所述主智能电器1中包括一个设备连接表,该设备连接表与各端点号对应;主智能电器1向一端点号发送令牌包,若在预设时间内未收到相应的确认握手包,则主智能电器1确认该端点号上不存在从智能电器3,即为空端点,该设备连接表上相应的记录为空;若在预设时间内收到相应的确认握手包,则主智能电器1确认该端点号上存在从智能电器3,即为非空端点,该设备连接表上作相应的记录,然后读取其产品标志,以识别生产厂商以及产品种类,填写设备连接表,并安装相应的驱动程序。
主智能电器1对非空端点发送令牌包,并得到确认握手包时后,再发出数据包来确定数据传送的方向;当所述数据包为输入数据包时,从智能电器3发出确认握手包后,开始接收数据;当所述数据包为输出数据包时,从智能电器3发出确认握手包后,开始发送数据。
主智能电器1对非空端点发送令牌包后,在预设时间内未得到确认握手包,主智能电器1确认该端点号上的从智能电器3断开,此时主智能电器1将所述设备连接表上相应的记录清空;当主智能电器1向一端点号发送数据包后,若在预设时间内未得到确认握手包,主智能电器1确认该端点号上的从智能电器3断开,此时主智能电器1将所述设备连接表上相应的记录清空;当主智能电器1正在接受来自一端点号上的从智能电器3的数据包时,在预设时间内收不到下一个字节,主智能电器1确认该从智能电器3断开,此时主智能电器1将所述设备连接表上相应的记录清空。
所述主智能电器1在完成与一端点号上的从智能电器3的数据通信后,主智能电器1发送通路撤消包至该从智能电器3,并断开与其的数据通信通道。
所述主智能电器1和从智能电器3都包括:中央处理器、RS-485接口和通信程序,RS-485接口包括数据缓冲器。
见图4,从智能电器3的通信程序包括:主模通讯块11、中断方式的数据接收模块12、数据包处理模块13、数据包发送模块14和字节发送模块15;主模通讯块11、数据包处理模块13、数据包发送模块14和按位方式向智能电器串行总线发送数据的字节发送模块15依次构成调用关系;主模通讯块11与数据接收模块12之间为中断调用关系,数据接收模块12与数据包处理模块13之间为调用关系;字节发送模块15在发送数据前,判断所述数据缓冲器是否为空,若为空,则发送,否则等待。
见图5,从智能电器3中的中央处理器上电后,首先屏蔽通信接口,始化其所有端口、存储区、定时器和中断服务程序。之后,允许通信接口工作。这个过程确保了中央处理器正确响应数据通信产生的中断。
见图6,数据接收采用中断方式,该程序为中断服务程序。
微处理器带有串行接口,通过对接口初始化,可以设置接口的工作方式。一种工作方式是,当接收到的数据后面一位(第9位)为1时才产生中断;另一种工作方式是,不论第9位是0或1,只要有数据都产生中断。
令牌包正是利用这个特点。首先设置接口,使得发送数据后面一位(第9位)为1时,才产生中断的工作方式。令牌包的第9位设置为1,当发送令牌包时,所有端点上连接的微处理器均产生中断。只有和自己地址相同的端点改变接口的工作方式,形成不论第9位是0或1,只要有数据都产生中断功能,称之为数据接口状态。其它端点的工作方式不变。这样以后主智能电器1发送信息的第9位非1,因此,只有该端点可以接收。其它端点不响应。这样主智能电器1与端点(即一端点号上的从智能电器3)之间形成了一条数据管道。
当主智能电器1与端点之间的数据通信完成后,主智能电器1发送通路撤消包,该端点上的微处理器改变接口的工作方式,撤消数据管道。
当接口接收到信息时产生中断,微处理器通过判断接口的状态,就可以断定是数据,还是包是令牌包,或是其它类型的包。如果是令牌包并与端点地址相同,就将接口改变成为数据接口。如果本端点是数据接收接口,通过判定接收包的第一个字节,就可以断定包的类型——确认包、不确认包、通路撤消包、数据包。
对不同的数据包有不同的处理方法,确认包、不确认包设置相应的标志;当接收到通路撤消包时,微处理器改变接口状态,成为非数据接口;收到数据包时,当接收到131个字节时,设置收到数据包标志,和包处理标志,主程序检测到包处理标志时,调用包处理程序。
见图7,该程序主要实现接收到主智能电器1发送信息的处理程序。端点从主智能电器1接收到的包共有三大类:
1)数据包类
数据包又分为8种格式,每种格式中各个字节有明确的定义(具体的定义见IASB总线的数据规约)。接收到数据包后,首先进行CRC校验,不正确时,发送不确认包,请求主智能电器1重新发送;正确时,发送确认包,并根据输入、输出的数据类型进行数据包的拆分,或是组包发送。
2)握手包类
握手包分为确认握手包和不确认握手包。当端点向主智能电器1发送数据包后,主智能电器1才向端点发送该种类型的包。确认握手包,说明端点发送的数据已被主智能电器1正确接收。确认握手包已在数据接收程序中处理;不确认握手包,说明端点发送的数据主智能电器1接收不正确,此时,端点应当重新发送数据。为了避免反复发送数据,造成从智能电器3微处理器死机现象,在这里设置了重发计数器,当重发次数超过某一极限时,端点停止重发操作。
3)通路撤消包
通路撤消包是,主智能电器1与端点通信结束后,主智能电器1撤消通信数据管道的包。通路撤消包已在数据接收程序中处理。
见图8,信息发送程序分为两个层次,包发送程序和字节发送程序。前者实现的是面向包的发送功能;后者实现的是将包按字节发送功能。
调用包发送程后,首先判别要发送的信息包的类型。信息包的类型决定了要发送的字节数。根据IASB的通信协议,握手包为1个字节,数据包为131个字节。此时,按照顺序逐个发送即可。
有许多情况会产生端点发送超时的错误。为了简化处理方法,当出现超时错误时,端点将改变通信端口的数据接收状态,断开与主智能电器1的连接。如果是一般的错误,主智能电器1再次呼叫端点时,连接将再次建立。不会带来严重的后果。
见图9,字节发送程序,主要实现安照位方式向IASB总线发送数据的功能。在发送数据前,判断串行接口中发送缓冲器是否为空,为空则发送,否则等待。
为了避免出错造成死机现象,本程序中加入了等待超时判断。实现的方法是,每判断一次发送缓冲器,给计时计数单元加1。当该单元数值超出一定极限时,认为是超时出错。
超时的原因很多,其中之一是因为端点与总线断开,致使发送缓冲器中无字符,若不处理,会造成从智能电器3的微处理器死机。为避免该现象的产生,采用了端点主动与主智能电器1断开通路的方法。如果不是因为总线故障,而是偶然原因造成的超时,这样处理方法会造成主智能电器1认为端点为空的结果。但是,主智能电器1下一次寻呼端点时,即可以恢复连接,不会造成严重后果。
见图10,所述主智能电器1包括通讯程序,其包括:主模块21、用于对各端点进行巡回查看的巡呼模块22、用于完成主智能电器1与从智能电器3之间的数据交换功能的包处理模块23、用于发送数据的包发送模块24、用于接收数据的包接收模块25、字节发送模块26和字节接收模块27;主模块21、巡呼模块22和包处理模块23依次构成调用关系,包处理模块23分别与包发送模块24、包接收模块25、字节发送模块26和字节接收模块27构成调用关系,包发送模块24分别与字节发送模块26和字节接收模块27构成调用关系,包接收模块25分别与字节发送模块26和字节接收模块27构成调用关系。
见图11,主模块21的功能包括,初始化通讯端口、初始化总线、巡呼各个端点、绘制网络拓扑图、显示参数等功能。
见图12,巡呼模块22的功能是:从端点1到30进行巡回查看。具体过程是:首先确定了一个端点号,然后调用包处理程序,发送令牌包,有确认时说明端点上有一个从智能电器3。此时,核对端点设备连接表,该表为空时,则说明是新连接到总线上的从智能电器3。主智能电器1发送数据包,要求端点设备即从智能电器3传送其配置信息。当主智能电器1接收到来自该从智能电器3的有效数据后,填写端点所述设备连接表。设备连接表不空,说明端点上连接的设备种类已知,按照要求让端点传送本身状态、电路参数,或发送控制参数。发送令牌包后无应答,或是接收到的参数无效,均认为该端点无设备,清空端点设备连接表。
见图13,包处理模块23主要完成主智能电器1与各端点即从智能电器3之间的数据交换功能。它处理的包有:参数包、配置包、控制包、令牌包、通路撤消包。
参数包、配置包、控制包都是数据包,但是,端点对这三种包的处理方法不同。参数包和配置包对端点来说是输出包,要求端点返回一定数量的数据,对主智能电器1来说是有数据返回的数据包。因此,在向端点发出数据包后,应等待接收返回数据包。而控制包就不同了,控制包对端点来说是输入包,不需要端点返回数据包。
主智能电器1发送令牌包后,当接收到确认信号后,主智能电器1认为端点上连接着设备。通路撤消包用于取消主智能电器1与端点之间的数据管道。
见图14-15,包发送模块24用于发送131个字节的数据,发送完毕后,等待接收端点的握手信号,不确认时,主智能电器1将重发数据。包接收模块25用于接收131个字节数据,接收完毕后进行CRC校验,不正确时发送不确认握手信号,要求端点重发数据,主智能电器1重新接收。不论是接收还是发送,程序中均加入了超时判断,出现超时时设置接收、发送错误标志并返回。
见图16-17,字节发送模块26和字节接收模块27中加入了超时判断,超时时设置标志并返回。