3 系统实现
3.1 关键数据结构
在内核空间和用户空间之间的通信主要是嵌入硬件抽象层来实现的,硬件抽象层的设计又采用了共享内存技术。共享内存结构体 hal_data_t 的主要组成为:
typedef struct {
. . . . . .
int comp_free_ptr;
/ / 存储空闲的 comp 地址
int pin_free_ptr;
/ / 存储空闲的 pin 地址
int param_free_ptr;
. . . . . .
unsigned long mutex;
/ /该结构互斥访问信号量地址
int shmem_bot;
int shmem_top;
/ / 共享内存的首地址和尾地址
int comp_list_ptr;
/ /已加载的 comp 模块的首地址
int pin_list_ptr;
/ /已加载的 comp 模块的首地址
. . . . . .
} hal_data_t;
该结构作为全局变量,halcmd 的命令是通过获取互斥信号量来对该内存区域进行访问的。以 loadrtsiggen 为例,流程图 5 如所示。
图 5 处理 loadrt siggen 命令流程图
用户输入 loadrt siggen 命令时,该命令的功能是实现加载软元件 siggen,通过 halcmd _commands 查找loadrt 对应的操作函数 do _loadrt _cmd ( ) ,如果 siggen模块尚未插入,则利用 insmod siggen. ko 将该模块插入。并将 siggen 加入到 hal_data - > pin_list_ptr 的链表中。命令执行完毕,返回 halcmd 命令行。
3.2 远程监控工具的实现
远程监控工具是 halcmd 应用程序的一部分,它的主要任务是完成对输入命令的读入,解析命令,执行命令,返回命令执行结果。
具体的代码实现:
if( rmonitoring = = 1) / /监测是否开始远程监控模块
{ / / 创建远程监控模块
createTCPServer( ) ; / /创建本地 select 并发服务器;
select( maxfdp1,readfds,writefds,NULL,tvptr) ;
/ /查找接入的 socket 连接
read( sockfd,buf,BUFSIZE) ;
halcmd_parse _cmd ( tokens) ; / /在服务器端处理远程输入命令
/ /关闭 halcmd 应用程序
halcmd_shutdown( ) ;
/ /关闭 socket 连接
shutdown_socket( ) ;
}
else / /启用本地调试模式
{
get_input( srcfile,raw_buf,MAX_CMD_LEN) ; / /从终端获取输入的命令
halcmd_parse_cmd( tokens) ; / /执行命令,并将结果输出到终端
/ /关闭 halcmd 应用程序
halcmd_shutdown( ) ;
}
其中 halcmd_parse_cmd( tokens) 主要是根据 to-kens,按照命令索引跳转到相应的命令函数中执行。可以实现加载模块,模块互联,模块信息读取等命令功能; print_info( ) 根据 tokens 执行的结果将命令反馈信息发送给相应的客户端程序,从而实现对数控系统的加工状态的远程监测过程。
4 实验
在 pc1 上运行数控系统仿真软件 EMC2,打开终端,使用 halcmd -kfr 启用加工过程远程监测模式。分别在 pc2 和 pc3 上运行. /monitor 192. 168. 2. 14,连接到 pc1 服务器端。查看 pc2 和 pc3 的输出情况,同时也可以执行 halcmd 命令。实验结果如图 6 所示。
图 6
上图是在 pc2 和 pc3 上显示的对引脚变化的图形化显示的结果,显示了三种不同的引脚曲线: 正弦,余弦和方形曲线。用户可以方便使用该工具远程查看各个引脚的变化情况。
5 总结与展望
本文使用硬件抽象层技术和 I/O 多路复用技术,提出了一个数控系统加工过程远程监测工具的设计方案,并利用 EMC2 开源数控软件对数控数控加工过程进行仿真,运用该远程监测工具进行对其进行远程监测,能够获得数控加工过程中的轴的速度、轴的当前位置、轴的位置反馈等信息,表明了该设计方案在对加工过程远程监控方面是可行的。