随着嵌入式系统的迅速发展和广泛应用,嵌入式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解释器的可扩展性。

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所示

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

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

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

②程序实现。该项目中,界面脚本程序分为两部分,即界面构建部分和循环监视部分。界面构建,就是要利用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所示。

3结束语

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

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

  1. linux移动视频监控系统,基于Linux的高速公路视频移动监控系统的研究与实现

    摘要: 在高速公路建设.维修和突发事件的处理上,由于涉及地域范围广.地理情况复杂以及监控点变动大等特点,使有线监控手段在高速公路实际应用中遇到一些困难,加之使用传统视频监控设备涉及布线繁琐.体积大.移 ...

  2. linux透明加密系统,基于Linux的透明加密系统的设计与实现

    摘要: 随着互联网时代的到来,人们用于接触事物的方式不仅仅局限于简单的通讯工具了,如:口语交流,书信传递等等,现在已经越来越多地通过手机,电脑,平板等电子设备进行信息的交流和信息的存储.但是在我们享受 ...

  3. Linux断点方法,一种基于Linux问题断点的定位方法及系统与流程

    本发明属于Linux断点解决技术领域,涉及一种基于Linux问题断点的定位方法及系统. 背景技术: 在Linux的日常测试过程中,经常会遇见一些未知的原因下系统启动过程中突然出现的宕机,黑屏等现象.导 ...

  4. linux 认证 转发,一种基于Linux系统实现路由器的portal认证报文转发方法和装置

    主权项: 1.一种基于Linux系统实现路由器的portal认证报文转发方法,其特征在于,在Linux系统上创建虚拟网卡,为虚拟网卡配置环回口IP地址,配置portal进程监听环回口的TCP协议预设端 ...

  5. 基于Linux的集群系统(五) Linux集群系统的实现

    1.设计目标 设计一个基于Linux的集群系统,它能够提供负载平衡的功能.系统能够不断监视集群中各台实际服务器的负载状况,并且将来自外部网的多种请求转发到内部网中的某一台实际服务器上执行. 具体来说, ...

  6. linux点餐系统,基于Linux的智能点餐系统

    基于Linux的智能点餐系统 摘要:当今这个快节奏的社会,效率这个词被提升到了一个很重要的地位,不管工作上,还是生活上.饮食方面也是一个很重要的部分,尤其是在上班日,每个餐厅的人员都爆满,传统的现金付 ...

  7. 嵌入式系统基于linux的优点

    嵌入式开发基于linux环境下,提供原代码是为了编译生成自己的linux内核. 嵌入式的系统特点: 1.可裁剪性.支持开放性和可伸缩性的体系结构. 2.强实时性.EOS实时性一般较强,可用于各种设备控 ...

  8. linux测试自动化,一种基于Linux系统下自动化测试RoCE性能的方法及系统与流程

    本发明涉及自动化测试的技术领域,特别涉及一种基于Linux系统下自动化测试roce性能的方法及其系统. 背景技术: 现在迅速发展的服务器行业,对网络服务性能提出了越来越高的要求.特别是在互联网行业以及 ...

  9. 基于嵌入式Linux的测温系统,基于嵌入式Linux的图像监控系统

    设计.发明的目的和基本思路.创新点.技术关键和主要技术指标 随着嵌入式技术的快速发展,产生了基于嵌入式系统的远程图像视频监控系统,为信息产业,管理行业.监控行业提供了快捷.高效.廉价的服务.丰富的网络 ...

最新文章

  1. python 使用sax 解析xml 文件
  2. 链表中倒数第k个节点
  3. 2021世界上“最猎奇”“最难的”六大编程语言
  4. JSP内置对象-page
  5. (chap2 TCP/IP基础知识) TCP/IP协议分层模型
  6. boost::histogram模块实现自定义二维轴的测试程序
  7. UVa 489 - Hangman Judge
  8. Debian耳机声音问题
  9. 牛客练习赛71E-神奇的迷宫【点分治,NTT】
  10. A Boring Game
  11. 关于“xxx”object is not callable的异常
  12. MVC Layout布局系统
  13. python安装whl_1 Matplotlib在win10下安装
  14. MyBatis的其它方法
  15. python抖音涨粉代码_抖音最火表白代码
  16. 微信小程序echarts问题整理与解决
  17. 深度学习笔试、面试题 二
  18. 1996年图灵奖--阿米尔·伯努利简介
  19. 运动耳机排行榜10强,运动人士必备的几款运动耳机分享
  20. oracle数据库怎么ping,Oracle中tnsping命令解析

热门文章

  1. linux sar 历史负载,sar 查看历史负载
  2. PHP疗法,人体穴位疗法的秘密-咔咔养生网
  3. 大数据分析平台的重点发展方向
  4. 服务器安装mysql文档_Linux 服务器安装MySQL数据库
  5. elmentui的短信验证界面_[javascript] elementui下login登录页界面和js验证逻辑
  6. 图论最短路:Bellman-Ford与其优化SPFA算法的一点理解
  7. java ztree_ztree简介_动力节点Java学院整理
  8. python︱Python进程、线程、协程详解、运行性能、效率(tqdm)
  9. 一句Python,一句R︱数据的合并、分组、排序、翻转、集合
  10. 笔记(2)-文本挖掘与机器学习