前端机由带RS -422接口的8031单片机系统组成,分别放在控制现场附近。通信控制器是插在IBM - PC/XT扩展槽上的带8031单片机的接口板,为主机和前端机间的通信提供一个智能化通道。用户只须通过主机向控制器发一条简单的命令而无须知道通信的细节,就可以使前端机执行相应的动作。控制器每次发送或接收的数据是可变的,但不超过255字节。每次通信都要进行差错检测和差错处理,以保证数据传输的准确性。主机IBM - PC/XT是命令的发起者和系统运行的控制者。
1.前端机
图1- 27是前端机的结构框图。它是一个带RS - 422串行接口的51系列单片机系统。其输入/输出和A/D转换的通道数是根据实际应用控制系统(如汽车自动检测线)的需要而配置的,与通信无关。图1- 28给出了串行接口原理图。每个前端机和通信控制器的接口均用MC3486和MC3487作差分驱动和接收。串行总线由一对双绞线DATA+和DATA-组成。双绞线的末端有提升电阻,使线路在空闲时处于逻辑1状态。当发送逻辑o(TxD=O)时,线路处于0状态。这种差分驱动和接收总线在电气特性上符合RS - 422标准,比起RS - 232,这样的单端驱动总线具有抗干扰能力强,数据传输率高,距离远等优点。
2.通信控制器
控制器的结构框图如图1- 29所示,8031通过串行接口和并行接口分别和各前端机以及主机交换数据。并行接口的原理图见图1- 30,控制器和IBM - PC/XT间的数据交换是以查询的方式实现的。8255A工作于A口方式2(双向总线I/O),控制器向IBM - PC/XT输出数据时,首先WR信号有效将数据写到A口,这使得PC7( OBFA)一O(初始状态OBFA =1);IBM - PC/XT通过读8212Ⅲ的状态得知OBFA=O后,再读8212 I即可将A口数据读入;与此同时,8212 I的INT信号使OBFA恢复到初始状态。IBM - PC/XT向控制器送数据时,用输出命令将数据写入8212Ⅱ;同时8212Ⅱ的INT信号有效,使PC4( STBA)产生一个选通信号;该信号将PC5(IBFA)置为有效(即IBFA =1,初始状态IBFA=0),8031读8255A的C口状态得知IBFA =1.再读A口即可将数据读入控制器。并行口地址采用部分译码,8212 I和8212Ⅱ的地址是02EOH;8212Ⅲ的地址是02EIH。
通信协议
1.帧格式
帧是一次发送或接收的数据。本系统有从控制器发送到前端机的命令帧和前端机发送到控制器的命令响应帧。它们的格式如下:
命令帧:前端机地址,前端机地址,数据长度,数据长度,命令字段,数据,……,数据,校验字1,校验字2。
响应帧:状态字段,数据,……,数据,校验字1,校验字2。
其中前端机地址(或称站地址)是前端机的唯一标识符;命令字段是要求前端机执行的操作;状态字段指示命令的执行情况;数据长度用一字节(B)表示,因此帧的长度不能大于255 B。
2.差错检测
对命令帧,前端机地址和数据长度各自重复发送两字节。前端机根据两字节是否一致,判断地址和数据长度字节在传输过程中是否出错。命令字和所有数据字节用CRC - 16多项式检错法检错。前端机通过计算得出两字节的校验字,并与命令帧最后两字节校验字相比较,判断数据传输是否有错。命令响应帧也采用同样的CRC - 16多项式检验法检错。实践证明,这种检错法既可以有效地检查出传输差错,又可以保证较低的数据冗余度。由于单片机缺少CRC检错的硬件,所以采用软件算法,所得的两字节校验字作为帧的最后两字节发送。
3.差错处理
可能有两种差错:帧受到损伤;或者完全丢失。系统规定,控制器每发送一帧,前端机仅当数据被正确接收时,才会发送一个响应帧。如果一个受损帧到达前端机,就会被丢弃,过一段时间后.控制器会因为超时而把原帧重发一次,直到该帧最终完好无损地到达为止。帧在从控制器到前端机的过程中丢失,也会因为收不到响应帧而超时,使原帧重发。
一种特殊情况是:
①控制器发一帧报文到前端机,该报文被前端机正确地接收并回送一响应帧。
②该响应帧在从前端机到控制器的过程中完全丢失或受损。
③控制器最终超时,由于没有收到正确的响应帧,它就会不正确地假定:发出的报文已经丢失或受损,并把该帧重发一次。
④该重复帧也完好无损地到达前端机,于是前端机收到重复的两帧。如果该帧要求前端机产生一个动作,则它会动作两次,这显然是不允许的。
为了避免这种情况的发生,命令字段的最高位设成序列编号。控制器每发一帧都加一个序列编号。新帧的序列编号总和前一帧的序列编号不同,重复帧的序列编号和前一帧的序列编号相同。前端机利用该编号判断是新帧,还是要丢弃的重复帧。当一个重复帧到达时,前端机拒绝接受,但重发上一次的响应帧。
本系统超时时间的长短是动态的。它与帧长度成正比,和传输速度成反比。这种方法比超时时间固定的方法具有更高的通信效率。
4.远程存取控制
远程存取控制( RAC)是一组高层命令,IBM - PC/XT可以根据这组高层命令的格式,在内存中组织一段报文送到控制器。控制器根据报文向前端机发送一个命令帧,然后根据响应帧将命令的执行情况报告IBM - PC/XT。
软件设计
1.通信控制器程序
通信控制器的程序流程图如图1- 31所示。其中初始化包括:①设定不高于100 kb的波特率;②设定超时计算用的To中断为最高级中断;③设定SP堆栈寄存器的值为30H;④初始化8255A使A口工作于方式2。从IBM接收一帧报文,将前端机不能通信的信息报告IBM.将前端机序列编号出错信息报告IBM及向IBM发响应报文,均是以查询方式与IBM - PC/XT交换数据的程序模块;发送子程序和接收响应帧子程序为满足通信协议的通信程序模块。限于篇幅,不再详述。程序的长度约2.4 KB。
2.前端机通信子程序
该程序是长为1.1 KB的串行口中断子程序,包括接收命令、执行命令、发响应帧三个满足通信协议的程序模块。限于篇幅,其详细的程序流程图在此从略。命令送到前端机后何时开始执行命令,取决于主程序对串行口中断级别的设定和主程序当时正在执行什么操作。若把串行口中断设为高级中断而其他中断设为低级中断,则收到命令后立即执行命令。通信子程序占用的资源包括串行中断口、2 KB RAM中开始的300个存储单元、128个内存字节中地址从30H~3FH的存储单元和定时器Tl。
3.IBM - PC/XT远程存取控制命令的组织和调用
IBM - PC/XT要前端机执行一条如表1- 14所列的命令只须向控制器发一段报文。报文的格式是:命令长度,前端机地址,命令值(见表1-14),数据,……,数据。例如复位1号前端机的报文是02H,OIH,OOH;读2号前端机外存8000H单元值的报文是04H,02H,18H,80H,OOH。
发送完报文后,根据IBM - PC/XT接收控制器发来的响应报文(包括状态字段、命令执行结果),即可得知命令的执行情况。
本系统已应用于汽车性能自动检测等集散式控制系统中。理论和实践都证明,在1 km范围内数据传输率可达100 kb/s,而且可靠性很好。应用于一般工业控制系统,其性能价格比是较高的;但由于缺乏总线裁决和碰撞检测等软件与硬件,前端机不能主动向主机或其他前端机发起通信。增加这些软硬件,便可构成实时性更强的分布式控制系统。
上一篇:单片机与IBM-PC机的串行通信分析
下一篇:单片机串行接口和调制解调器如何实现远程通信
推荐阅读最新更新时间:2024-03-16 15:55