背景技术
数控系统对实时性、同步性、可靠性和安全性的要求较高,其运动控制器与用户界面之间数据交互的主要问题在于由于周期不匹配导致的用户界面不能实时的显示运动控制的时间信息。运动控制器对现场总线驱动的反馈数据以及现场总线驱动使用运动控制器发送来的插补数据的实时采集成为系统调试的关键。
目前运动控制器和现场总线驱动之间数据互操作的方法主要有以下几种:
1.不改变运动控制器结构,通过观察用户界面的反馈值进行调试;
2.更改运动控制器结构,将关键数据等信息通过传统的系统调用的方式输出;
3.不改变运动控制器和现场总线驱动的结构,采用将调试信息保存在某个文件中进行离线分析。
第一种种方法要求运动控制器和用户界面刷新周期严格匹配。然而受到硬件条件限制,运动控制器的周期通常在毫秒级,而由于数控系统加工精度的要求,现场总线驱动的周期通常为微秒级,但是用户界面的刷新频率为秒级;另一方面,如果提高界面的刷新频率,则会增加系统的负载,影响数控系统的性能。采用传统的系统调用的方式输出调试信息,由于运动控制器的运行频率高,大量的数据输出会将系统内核堵死,影响数控系统的性能。采用离线分析的方法虽然能够解决系统效率的问题,但是不能实时的反映系统的运行信息,能实时跟踪和故障诊断。
发明内容
针对现有技术中存在的上述不足之处,本发明要解决的技术问题是提供一种能够满足运动控制器的实时性要求,且占用空间小的用于实时输出数控系统运动控制器关键数据的操作方法。
本发明为实现上述目的所采用的技术方案是:一种用于总线式数控系统的关键数据采集方法,包括以下步骤:
在数控系统端调试代理模块申请共享缓冲队列,并进行初始化;
数控系统运动控制器线程共享调试代理模式的共享缓冲队列;
在上述申请的共享缓冲队列,通过和运动控制器写操作,数据输出装置的读操作和发送操作实现数控系统的关键数据采集操作;
在数据输出装置输出的过程中直接使用串口输出;
显示终端通过串口接收并显示数控系统实时输出的调试信息。
所述共享缓冲队列为环形缓冲队列,具有一个读指针和一个写指针,每个数据区大小为运动控制器每周期发送调试信息的数据大小。
所述运动控制器写操作是运动控制器向缓冲队列头指针所指向的数据区中写入数控机床伺服系统反馈信息。
所述数据输出装置从调试代理模块中读取运动控制器返回的状态信息和调试信息。
所述数据模块与调试代理模块相互独立。
所述数据输出装置使用的运动控制器的剩余处理器时间进行输出。
所述串口符合RS232电气标准。
所述显示终端包括MCU单元,实时获取串口的数据,将数据在显示单元实时显示。
本发明具有以下优点:
1.能够解决运动控制器和用户界面之间周期不匹配问题。本发明方法将运动控制器的关键数据直接通过硬件串口设备输出,需要监测的运动控制器和现场总线驱动的调试信息,不通过用户界面,这样可以提高监测的实时性。
2.占用空间小。本发明只是在系统使用一个环形的缓冲区接受运动控制器向外输出的调试信息。
3.有效提高实时性。本发明通过缓冲区接收运动控制器实时发送的调试信息,并且利用运动控制器的调度间隙将调试信息输出。采用这样的方法,不会占用运动控制器自身的执行时间,也不影响调试信息输出的实时性。
4.通用性好。本发明方法不依赖于所传输的数据类型和数据内容,能够应用于多种类型的数控系统中。
具体实施方式
下面结合附图及实施例对本发明做进一步的详细说明。
实现本发明方法的总体结构图如图1所示。本发明的方法分为数控系统端和嵌入式的显示终端两个部分组成。数控系统端包含的模块有调试代理模块和数据输出装置;嵌入式显示终端为一套专用的嵌入式系统,包括数据接收装置,MCU单元和显示装置。
数控系统的运动控制器为数控系统插补命令发送端,向现场总线驱动发送插补数据,同时向调试代理模块实时发送调试数据;调试代理模块是数控系统运动控制器和数据输出装置之间的传输通道,负责将运动控制器的调试信息发送给数据输出装置;数据输出装置从调试代理模块中读取运动控制器输出的调试信息,并且利用处理器的非实时空闲时间将调试信息编码之后经由串口直接输出。
嵌入式显示终端为一套专用的嵌入式系统,显示终端通过串口接收数控系统发送的数据,数据经过MCU解析之后在显示单元显示。
本发明用于总线式数控系统的数据采集方法包括以下步骤:
调试代理模块程序负责申请共享缓冲队列,并进行初始化,该共享缓冲队列分为一个环形的队列,该队列具有一个读指针和一个写指针;数控系统运动控制器线程进行加载操作;数控系统运动控制器线程共享调试代理模块申请的共享缓冲队列;在上述申请的缓冲队列空间内,通过和运动控制器的写操作和数据输出装置的读操作,实现数控系统调试信息地实时输出。
运动控制器将调试信息写入共享数据缓冲队列,数据输出装置从共享数据缓冲队列中读该调试信息。
在向调试代理模块写调试数据过程中,运动控制器按照固定的控制周期将调试信息写入缓冲队列写指针所指向的数据区中。同样地,数据输出程序从缓冲队列读指针所指向的数据区中读取运行状态反馈信息等调试信息。
所述运动控制器写操作是指运动控制器向缓冲队列写指针所指向的数据区中写入数控机床伺服系统反馈信息。其具体执行步骤如图2所示:,执行步骤如下:
步骤2.0接收到运动控制器的调时信息
步骤2.1判断调试代理模块缓冲队列是否为满,如果调试代理模块缓冲队列状态不为满,则进行步骤2.3;如果调试代理模块缓冲队列状态已满,则进行步骤2.2.1;
步骤2.2.1将缓冲队列的读指针加1;
步骤2.2.2将缓冲队列读指针执行加1的结果与缓冲队列的长度进行比较,如果缓冲队列的读指针与缓冲队列的长度相等,则进行步骤2.2.3;如果缓冲队列的读指针位置和缓冲队列长度不相等,进行步骤2.3;
步骤2.3.3缓冲队列的读指针置为0;
步骤2.3运动控制器向接收缓冲队列写指针所指向的数据区写入出反馈数据和调试信息;
步骤2.4将缓冲队列的写指针位置向前移动一位;
步骤2.5判断缓冲队列的写指针与缓冲队列的大小是否相等,如果缓冲队列的写指针与缓冲队列大小相等,则执行步骤2.6;如果缓冲队列的写指针位置与缓冲队列大小不相等,本次操作结束
步骤2.6将缓冲队列写指针置为0;
本次写操作结束;
所述数据输出装置读操作是指位于数控系统端的数据输出装置从调试代理模块中读取运动控制器返回的状态信息和调试信息,并且通过串口发送到显示终端。其具体执行步骤如图3所示:
数据输出装置读操作是指数据输出装置从缓冲队列读指针所指向的数据区读出调试信息和状态,并且通过串口发送到显示终端执行步骤如下:
步骤3.0判断缓冲队列是否为空;如果队列不为空,则进行步骤3.1;如果为空,则本次操作结束;
步骤3.1将缓冲队列读指针所指向的数据读到数据输出装置,将读取到数据输出装置中的数据进行编码;将数据输出装置中完成编码的数据通过串口输出;
步骤3.2缓冲队列的读指针加1;
步骤3.3将缓冲队列读指针加1操作的结果与缓冲队列长度进行比较,如果缓冲队列的读指针与缓冲队列长度相等,进行步骤3.4;否则,执行步骤3.0
步骤3.4将缓冲队列的读指针设置为0,执行步骤3.4
所述数据输出装置使用串口发送数据是指数据输出装置使用串口硬件将数据输出。其具体执行步骤如图4所示:
步骤4.0接收来自数据缓冲队列的调试信息;
步骤4.1打开串口设备;
步骤4.2设置串口的属性,包括波特率,校验码;
步骤4.3使用串口设备发送数据;
步骤4.4判断数据是否发送成功;如果没发送成功,执行步骤4.3;如果发送成功,执行步骤4.4
步骤4.4关闭串口设备;
本次发送结束。
所述显示终端为一嵌入式的显示设备。该设备主要由三个部分组成,分别是串口单元,MCU单元和显示单元,如图1所示。显示终端的功能就是通过串口接收来自数控机床的调试信息,并且实时将其显示出来。显示终端的具体执行步骤如图5所示:
步骤5.0显示终端的MCU单元初始化显示终端的显示单元;
步骤5.1显示终端的MCU单元打开显示终端的串口单元;
步骤5.2显示终端的MCU单元设置显示终端的串口单元属性;
步骤5.3监听串口;
步骤5.4判断是否收到数据,没有收到数据,执行步骤5.4;串口设备接收到数据,执行步骤5.5;
步骤5.5将数据解析,在显示终端的显示模块显示出来;
步骤5.6判断是否结束,判断结果不为真,执行步骤5.3;判断结果为真,执行步骤5.7;
步骤5.7关闭嵌入式显示终端;
为了测试本发明的实际运行效果及性能,在SSB-III总线数控系统上应用本发明并实际带动伺服电机运行。伺服电机的实际运行情况平稳,不存在震动情况,实时数据观测未存在数据丢失和数据读写错误情况。
本发明的测试环境:SSB-III(Synchronous-Serial-Bus,同步串行总线)数控总线;数控系统硬件平台为CPU 5X86-133MHz、RAM-32M、FLASH-32M;操作系统为linux-2.4.22(RTAI);执行结果测试方式:电机实际转动情况,运动插补数据和伺服反馈数据的实时打印观测。
显示终端采用的是OMAP3530处理器作为MCU单元,使用符合RS232电气特性的串口线与数控系统进行连接,显示终端的显示单元采用的是7寸液晶屏。