最新新闻
我要投稿
联系电话:027-87592219/20/21转188
投稿邮箱:tb@e-works.net.cn
您所在的位置:首页 > 智库 > 智能生产

基于嵌入式linux的数控系统软件设计

发布时间:2012-08-20 作者:李芬 常勇 王威  来源:万方数据
嵌入式Linux以其开源、免费,实时性能、安全性能和稳定性好等优点越来越广泛的应用于工业控制领域.本文基于三星S3C2410处理器和FPGA开发出的三轴数控车床系统硬件平台进行控制软件的设计开发,实现数控系统位置控制、插补运算、刀具补偿、译码和人机显示等各项功能.

    具体划分如图2所示:

  系统软件结构和模块划分

图2 系统软件结构和模块划分

3 系统软件详细设计

    3.1 用户层与内核层的通信设计

    用户层与内核层在嵌人式Linux系统中属于两个相对独立的空间,两个空间之间不能直接进行通信和数据交换。嵌入式Linux系统进行Xenomai实时化改造后,管道通信、消息队列和共享内存等全部保留。用户层与内核层通过管道通信进行连接,在内核层建立管道后,在用户层可以通过读取设备文件进行管道读写。

    内核层创建及读写管道如下:

    int rt_pipe_create (RT_ PIPE *pipe, const char*name, int minor,siu t poolsize); //创建管道

     ssize t rt_pipe_receive (RT_PIPE *pipe, RT_PIPE_MSG **msgp, RTIME timeout);

    //从管道接收一条信息;

    ssize_t rt_pipe_send (RT_PIPE *pipe, RT_PIPE_MSG *msg, size_tsize, int mode);

    //向管道发送一条信息

    用户层读写管道如下:

    int PipeO=open("/dev/ntp0",O_RDWR);

    //打开管道文件

    int write(int handle, void *buf, int nbyte);

    //向管道文件写入数据

    int read(int handle, void *buf, int nbyte);

    //读取管道文件数据

    3.2 用户层的设计

    友好的人机界面是数控必须具备的功能,用户层的主要任务就是提供人机交互界面。通过比较市面上流行的GUI开发软件Qt/Embedded,MiniGUI, UC/GUI和Nano-X,结合Linux特性,本数控系统选用Qt/Embedded进行界面程序的开发。Qt/E是一个完整的基于framebuffer的GUI系统,它用C++编写,对用C语言程序有很好的兼容性,有着丰富的API函数库和图形处理功能,界面开发与图形驱动分开,易于开发和移植,同时它也是开源软件。

    设计过程中,根据用户层的划分,把位置、刀补、程序等界面采用单独的QWidget设计,每个界面都有自己的头文件和cpp文件,所有界面公用一个数据结构,将各个界面通用的参数放到一起,设置一个主Mainwindow,用于系统初始化、界面切换、变量初始化以及加载系统信息等功能。主界面中对按键的处理也是相当重要的,开发过程中充分利用Qt中的按键事件,设计过程中区分按下及释放事件,并单独编写按键更新程序。具体如下:

    void mainWindow::keyPressEvent(QKeyEvent *k}

    void mainWindow::keyReleaseEvent(QKeyEvent *k)

    void mainWindow::keyUpdateQ

    用户层设计过程中着重要考虑的就是各个界面之间的通信问题,各界面之间充分利用Qt特有的信号与槽的通信机制,在界面之间进行信号发送和槽函数调用。具体实现如下:

    signals: void mySignal(); //信号

    public slots: void mySlotQ;   //槽函数

    bool QObject::connect(const QObject*sender,

    const char*signal, const QObject*receiver,

    const char * member);//信号与槽函数的连接