主从式数控系统工作时,上位机应该能够可靠、畅通地将经过处理的控制指令和参数发送到下位机,以保证下位机能够准确、及时的工作。同时,上位机还应该能够收集下位机反馈的各种状态信号,进行诊断和处理。由此可见,可靠、快速地实现上、下位机之间的数据通讯是整个数控系统可靠、有效工作的关键。
本文所研究的数控系统是以IPC作为上位机,以步进电机驱动卡为下位机,软件开发平台为Windows95。IPC作为系统的信息管理部分,接受用户命令并以查询方式实现与步进电机驱动卡之间的数据通讯。步进电机驱动卡是系统的实时控制部分,以中断方式响应IPC的通讯信号,并对所接受的控制指令进行插补运算以驱动步进电机,完成刀具几何轨迹、运动速度和电机升降速控制。
1 步进电机驱动卡的特点和通讯接口电路的原理
步进电机驱动卡是基于PC总线的一个智能插卡,本身带有8031CPU。它通过接收IPC的控制指令,完成对步进电机的开环或半闭环控制,同时能接受主轴脉冲发生器输出的脉冲信号,控制车床车削螺纹加工,是联系伺服系统和IPC的纽带。由于工控机和驱动卡之间的每次通信的信息量大,传输速度高且是短途通讯,故采用并行口的通讯方式。
驱动卡的通讯接口电路如图1所示,左边的总线为PC机的AT总线(80286以上机型),驱动卡插入PC机的I/O扩展槽中,两片8255A作为8031和PC机之间的通信接口,27512作为EPROM,存放8031的程序,74LS373为地址锁存器,74LS138(1)为地址译码器,输出8255A(2)的片选信号,8255A(1)的由74LS138(2)进行片选(图中未画出)。
图1 接口电路图
每次系统工作之前,必须通过上位机软件设置两片8255A都处于工作方式1,即PA口为方式1输出,PB口为方式1输入,PC口的某些位为状态控制线,其余的线作I/O线。
为了保证数据传输的可靠性,在每次发送数据之前必须做一次检测,只有当上一次的数据已经取走,本次数据才能发送,电路通过检测IBFB来实现。8031要求向PC机发送数据时,其工作流程如下:首先,8031读取8255A(1)的PC4口,而PC4连接8255A(2)的IBFB,当PC4为1时,说明8255A(2)中的数据还未被PC取走,8031继续查询检测PC4。若PC4为0,则8255A(2)的IBFB为0,说明8255A(2)中的数据已经被PC机取走,8031可以将当前的数据送至8255A(2)的寄存器中。此时,上位机正在查询8255A(2)的端口,发现数据已经送到,就读进内存中,同时有一次跳转引起IBFB恢复为0,8255A(1)的PC4也为0,为下次传输数据作好准备。至此,8031向PC机发送数据的过程结束。PC机往8031发送数据也经过同样的过程。这样就实现了上位机和步进电机驱动卡之间的双向并行通讯,每次发送的是一个八字节的数。
2 通讯协议
数控系统工作时,上位机要向下位机发送的控制指令有很多种,如直线插补指令、圆弧插补指令等。除此之外,上位机还要向下位机发送一些查询指令,用于查询下位机的状态或刀具位置。由于这些指令所包含的信息类型和数据格式各不相同,为了避免上下位机通讯时出现混乱,这就要求系统有一个清晰、准确的通讯协议,来保证数据通讯能够有条不紊地进行。
本系统中引入标志功能字来标识指令的类型,具体如下表所示。当上位机准备向下位机发送某一控制指令时,首先要发送该指令的标志功能字,(如下表中1~11),在得到下位机的确认信号之后,上位机才能按预定的格式一步步完成此次数据发送。
表 标志功能字的定义
标志功能字
定义
标志功能字
字义
0
机床点动控制
8
暂停/重新启动
1
机床手动加工
9
机床回零点
2
手动加工结束
10
改变进给速度
4
机床进行直线加工
11
机床进行间隙补偿
5
机床进行圆弧加工
12
查询程序段是否加工结束
6
机床进行螺纹加工
13
查询刀具位置
7
停止自动加工
当上位机查询下位机的状态时,首先上位机要发送该查询指令的标志功能字(如表1中12~13),在得到下位机的确认信号之后,上位机利用循环来等待下位机将所要查询的数据反馈到8255A(2)的端口上。一旦数据到达8255A(2)的端口,上位机将数据读回并结束此次查询。
3 Windows95平台下查询式通讯程序的研究
通讯程序在执行过程中是作为车床数控系统软件相应进程的一个线程而存在。由于Windows95是一个多任务并行处理的操作系统,它对每一个线程所分配的时间是有限的,如果某一线程的时间片时间被用完,则Windows95会强行收回CPU的控制权,再进行下一次分配。如果有一个线程占用CPU时间过长(如采用死循环的方式),超过了时间限额而Windows95不能收回CPU的控制权则Windows95系统将会崩溃。由于IPC上的通讯程序采用了查询方式,其核心是在程序中利用循环来等待下位机将上位机所要求的数据反馈到8255A(2)的端口上,所以通讯程序的等待时间应该设计在时间限额之内。
对于每次发送和接受的一个八字节数据,通讯程序中专门设计了Void Sendcha(unsighed charData)和unsigned char Recvcha(void)函数来分别实现,图2、图3分别为Sendcha()和Recvcha()函数的流程图。其中Seddcha()函数的流程图中,PC4口为0表示上位机此次发送的数据已经由8255A(2)送到了8255A(1)之中,上位机可以准备下一次数据发送;Recvcha()函数的流程图中,PC0口为1表示对于上位机此次所要求查询的数据,驱动卡已经将其送到了8255A(2)之中,上位机可以接受该数据了。
图2 Sendcha()函数流程图
图3 Recvcha()函数流程图
由于下位机对不同指令的响应速度有所不同,这样导致上位机所需的等待时间可能不一样。如果在时间限额内未完成一次数据交互,上位机将临时放弃CPU的控制权,然后申请第二次查询,直到得到所要求的信息。实验表明:绝大多数次数据交互都可以在时间限额内完成。
由于每次只能发送(接受)八个字节,所以一个大的数据(如刀具位置坐标值和进给速度值等)必须通过三次连续发送(接受)。IPC发送数据时,先将数据转化成二十四个字节的二进制数,先低位后高位的发送,驱动卡连续接受到数据之后将它们合并成一个完整的数据在进行下一步的操作。接受数据时,采用的原理一样,只是过程刚好相反。
4 结束语
通讯问题是主从式数控系统的一个关键问题,它直接决定了系统的可靠性。本文所介绍的通讯协议和通讯方法已经应用于实践,长时间的现场工作表明:该方法能够保证上下位机进行畅通、准碓的数据通讯,并能够满足系统实时性要求。