linux tcl是什么系统,基于Linux 及Tcl / Tk 的数控系统人机界面的实现 您所在的位置:网站首页 linux数控系统 linux tcl是什么系统,基于Linux 及Tcl / Tk 的数控系统人机界面的实现

linux tcl是什么系统,基于Linux 及Tcl / Tk 的数控系统人机界面的实现

2023-08-27 14:09| 来源: 网络整理| 查看: 265

随着嵌入式系统的迅速发展和广泛应用,嵌入式Linux以其强大的性能和开放性,越来越被开发人员所推崇。现在,各种基于Linux的嵌入式系统已被用于各行各业中。其中,人们对基于嵌入式实时Linux平台的开放性的数控系统展开了很多的研究和探讨。而数控软件人机界面,作为数控系统的控制台,其图形构造与人机交互功能直接影响着人们对数控系统的评价。

1软件结构

数控系统软件是由多个程序组成的,包括界面程序、任务管理程序、I/O管理程序等。为讨论方便,将它大致分为两个部分,即界面程序和数控软件主体程序,如图1所示。界面程序的任务是提供一个友好的图形画面,显示诸如位置、模式、刀迹模拟等信息;同时要实现人机交互功能,接受外部用户指令,如文字输入,开关、按钮动作等。其实,界面只是一个控制台角色,它不能直接实现用户的指令,它必须将用的动作转换为相应的内部指令,然后传送给数控软件的主体程序并由主体程序来实现;它也不能自动产生诸如位置、刀迹模拟等信息,也必须从数控软件的主体程序中获取这些信息。于是,界面程序与主体程序之间存在着数据通信。本项目中,基于System V的IPC机制,采用共享内存的方法,开辟两个共享内存块,分别用于界面程序向主体程序发送指令,以及主体程序向界面程序反馈状态信息,分别称为命令渠道和状态渠道。

其中,数控系统界面程序可以详细分为三层结构,如图2所示。底层接口主程序负责与数控软件主体程序通信,实现指令信息的发送与状态信息的更新;中间层是根据数控需求而扩展的Tcl /Tk解释器,它除了具有标准C库外,还增加了与底层接口主程序相关联的Tcl /Tk扩展C库。对于标准的Tcl /Tk脚本命令,解释器会调用标准C库函数来处理;而对于扩展后与数控功能相关联的Tcl /Tk脚本命令,解释器就会调用扩展C库函数来处理。而顶层就是基于这个解释器的Tcl /Tk脚本程序。这两层结构体现了Tcl /Tk特殊的双重属性:①它是一种脚本语言。它提供一套完整的脚本命令,可用于构建图形画面,处理事件,实现交互功能。②它是一个解释器。它可以被添加到专用的应用程序中,将应用程序提供的编程接口与自定义的Tcl /Tk命令挂钩,使得用户可以编写具有特殊功能的脚本程序,如数控软件的人机界面程序。这也就是Tcl /Tk解释器的可扩展性。

5730972_1.jpg

2人机界面程序具体实现

2.1底层接口主程序

该层的任务包括:

(1)实现数控系统界面程序与主体程序之间的通信,包括

2人机界面程序具体实现

2.1底层接口主程序

该层的任务包括:

(1)实现数控系统界面程序与主体程序之间的通信,包括命令渠道和状态渠道的建立,命令信息与状态信息的格式设计,命令信息的传输与状态信息的获取等内容。下面是本项目中实现以上功能的编程接口,而且利用类的方法进行封装。

①建立命令渠道与状态渠道

void CommandChannel : : GetChannel( )

{

. . .

shmget( . . . ) ; / /建立共享内存

shmat( . . . ) ; / /将共享内存区添加到本地地址空间中

semget( . . . ) ; / /建立信号量,用于解决对共享内存的访问同步

问题

. . .

}

②信息的发送与接收

void CommandChannel : : SendMsg( MASSAGE * massage)

{

. . .

GetSem( . . . ) ; / /获取信号量

WriteMem( . . . ) ; / /将信息写入共享内存

ReleaseSem( . . . ) ; / /释放信号量

. . .

}

void ReadMSg( MASSAGE * massage)

{

. . .

ReadMem( . . . ) ; / /从共享内存获取信息

. . .

}

③信息格式。本项目中,利用类Massage来定义信息格式

class MASSAGE {

int MsgType; / /用不同的数值区分不同功能的信息

int MsgLength; / /代表信息的长度

. . . / /其他成员

}

(2)提供实现数控操作的编程接口,即对应不同的用户操作,界面程序需要向主体程序发送不同的信息;如一个代表“程序运行”指令的编程接口如下:

void SendRun ( )

{

. . .

/ /将一个代表“程序运行”指令的信息发送出去

SendMsg( RunProgramMsg ) ;

. . .

}

(3) Main ( )函数。主要任务,与数控系统主体程序建立联系;添加Tcl /Tk解释器。

main( int argc, char * argv[ ] ) {

{

. . .

/ /建立并连接命令渠道和状态渠道

CommandChannel * cmdChnPtr = new CommandChannel( ) ;

StatusChannel * statChnPtr = new StatusChannel( ) ;

/ /添加Tcl/ Tk解释器

Tk_Main( argc, argv, Tcl_AppInit ) ;

}

Tcl /Tk的编程接口Tk_Main( )简化了添加Tcl /Tk解释器的工作,它会创建包含所有标准Tcl命令的解释器,创建Tk主窗口;然后,它会调用用户自定义的初始化函数Tk_AppInit( )来定制一个合乎用户要求的Tcl /Tk解释器;最后进入脚本解

释循环中。

2. 2扩展Tcl/Tk解释器,即编写函数Tk_AppInit( )

其任务包括:

( 1)调用Tcl /Tk库函数Tcl_Init( Interp)和Tk_Init( Interp)对解释器进行标准初始化;

( 2)调用Tcl /Tk库函数Tcl_CreateObjCommand( )添加新的Tcl /Tk命令,并使之与应用程序编程接口挂钩。如添加一个名为Run_Program的命令,使之与Tcl /Tk扩展C库中的Run_Program函数相关联,并最终调用底层接口程序提供的接口SendRun( )函数,实现发送一条“程序运行”的指令给数控主体程序的功能。Tcl_CreateObjCommand ( interp, " run_program" , Run_Program,( Client_Data) NULL, ( Tcl_CmdDeleteProc * ) NULL) ;综合( 1)和( 2) , Run_Program命令的整个实现过程如图3所示

5730972_2.jpg

( 3)编写脚本程序,实现用户图形界面。

①界面设计。Tcl /Tk提供了足够而且合适的图形部件来构建数控软件图形界面,较为常用的组件包括框架、标签、按钮、文本和输入框。数控软件界面的特点是规则与简洁,而且具有很强的专业惯例,结合这些特点,我们将界面布局划分为三个部分,即状态栏、主窗口和按钮栏(图4、图5)。

5730972_3.jpg

状态栏用于显示当前模式、当前功能界面名称、加工文件及加工状态等信息;按钮栏用于模拟面板按钮,并显示按钮功能,且按照不同的操作界面切换不同的按钮功能菜单;如图5中的位置功能界面,它的按钮功能菜单包括“相对坐标”、“绝对坐标”、“ALL”等;而程序功能界面的按钮菜单包括“打开文件”、“删除文件”等。主窗口用于显示当前功能界面。本项目的数控软件图形界面分为七个功能界面,分别是“位置”、“程序”、“参数”、“图形”、“系统”、“诊断”和“帮助”,根据用户选择,七个功能界面相互切换。如图6、图7所示,主窗口位置显示的分别是“程序”功能界面和“图形”功能界面。

5730972_4.jpg

②程序实现。该项目中,界面脚本程序分为两部分,即界面构建部分和循环监视部分。界面构建,就是要利用Tcl /Tk提供的组件构建一个操作画面,不仅要显示信息,还要能够接受外部指令。这里提供两

个主要的技巧:多用框架作为容器,将相关组件进行打包。如图4中的状态栏、主窗口和按钮栏三部分,就是对应三个框架,从而使三部分彼此独立,这样便于管理。同理,七个功能界面也是对应七个框架(分别是positionFrame, programFrame, graphyFrame等)。这样一来,在主窗口中,能够很方便地对它们进行切换,只要直接控制各个功能界面的顶层框架的“隐”或“现”就行了。如

proc ChangeFunc { } {

pack forget$LastFuncFrame ; #隐藏上一个功能界面

pack$CurrentFuncFrame ; #显示当前需要的功能界面

set LastFuncFrame$CurrentFuncFrame

}

使用键盘绑定功能,实现用户与界面的交互。例如,将按键F7与前面所述的用户自定义的命令scnc_

run绑定起来。bind all < F7 > { scnc_run }这样,当用户按键F7时,便能促发事件,并通过底层应用程序接口向数控软件主体程序发送“程序运行”命令。当然,用户与数控软件人机界面的交互方式不一定是通过键盘,本项目中,是通过一个与串口相连的控制面板来实现的。但中间经过一个映射程序转换为键盘信息,又实现了键盘绑定的功能。循环监视。界面构建工作完成之后,程序就调用Update( )

函数进入循环监视状态。这个函数负责定期查看状态,更新界

面。

Proc Update { } {

#从状态渠道获取最新状态信息

scnc_update

#更新界面信息,如位置坐标、模式、加工轨迹模拟等

#定期循环监视

after 200 Update

}

该系统运行情况如图8所示。

5730972_5.jpg

3结束语

随着科技的发展,人们对数控系统的需求越来越大,对数控系统的人机界面的要求也越来越高。综合在基于嵌入式Linux的数控系统上的开发经验,提出了利用Tcl /Tk实现数控系统人机界面的一种方法。其实用性和可靠性在实际使用中得到验证。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有