国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
基于Linux 及Tcl / Tk 的數(shù)控系統(tǒng)人機(jī)界面的實(shí)現(xiàn)
俺 基于Linux 及Tcl / Tk 的數(shù)控系統(tǒng)人機(jī)界面的實(shí)現(xiàn)
 

隨著嵌入式系統(tǒng)的迅速發(fā)展和廣泛應(yīng)用, 嵌入式Linux 以其強(qiáng)大的性能和開放性, 越來(lái)越被開發(fā)人員所推崇?,F(xiàn)在, 各種基于Linux的嵌入式系統(tǒng)已被用于各行各業(yè)中。其中, 人們對(duì)基于嵌入式實(shí)時(shí)Linux 平臺(tái)的開放性的數(shù)控系統(tǒng)展開了很多的研究和探討。而數(shù)控軟件人機(jī)界面, 作為數(shù)控系統(tǒng)的控制臺(tái), 其圖形構(gòu)造與人機(jī)交互功能直接影響著人們對(duì)數(shù)控系統(tǒng)的評(píng)價(jià)。

    1 軟件結(jié)構(gòu)

數(shù)控系統(tǒng)軟件是由多個(gè)程序組成的,包括界面程序、任務(wù)管理程序、I/O 管理程序等。為討論方便,將它大致分為兩個(gè)部分即界面程序和數(shù)控軟件主體程序,如圖1所示。界面程序的任務(wù)是提供一個(gè)友好的圖形畫面顯示諸如位置、模式、刀跡模擬等信息;同時(shí)要實(shí)現(xiàn)人機(jī)交互功能接受外部用戶指令,如文字輸入,開關(guān)、按鈕動(dòng)作等。其實(shí),界面只是一個(gè)控制臺(tái)角色,它不能直接實(shí)現(xiàn)用戶的指令,它必須將用的動(dòng)作轉(zhuǎn)換為相應(yīng)的內(nèi)部指令,然后傳送給數(shù)控軟件的主體程序并由主體程序來(lái)實(shí)現(xiàn)它也不能自動(dòng)產(chǎn)生諸如位置、刀跡模擬等信息, 也必須從數(shù)控軟件的主體程序中獲取這些信息。于是,界面程序與主體程序之間存在著數(shù)據(jù)通信。本項(xiàng)目中基于System V IPC 機(jī)制, 采用共享內(nèi)存的方法, 開辟兩個(gè)共享內(nèi)存塊,分別用于界面程序向主體程序發(fā)送指令,以及主體程序向界面程序反饋狀態(tài)信息分別稱為命令渠道和狀態(tài)渠道。

其中, 數(shù)控系統(tǒng)界面程序可以詳細(xì)分為三層結(jié)構(gòu), 如圖2所示。底層接口主程序負(fù)責(zé)與數(shù)控軟件主體程序通信, 實(shí)現(xiàn)指令信息的發(fā)送與狀態(tài)信息的更新; 中間層是根據(jù)數(shù)控需求而擴(kuò)展的Tcl /Tk 解釋器, 它除了具有標(biāo)準(zhǔn)C 庫(kù)外, 還增加了與底層接口主程序相關(guān)聯(lián)的Tcl /Tk 擴(kuò)展C 庫(kù)。對(duì)于標(biāo)準(zhǔn)的Tcl /Tk腳本命令, 解釋器會(huì)調(diào)用標(biāo)準(zhǔn)C 庫(kù)函數(shù)來(lái)處理; 而對(duì)于擴(kuò)展后與數(shù)控功能相關(guān)聯(lián)的Tcl /Tk 腳本命令, 解釋器就會(huì)調(diào)用擴(kuò)展C 庫(kù)函數(shù)來(lái)處理。而頂層就是基于這個(gè)解釋器的Tcl /Tk 腳本程序。這兩層結(jié)構(gòu)體現(xiàn)了Tcl /Tk 特殊的雙重屬性: ①它是一種腳本語(yǔ)言。它提供一套完整的腳本命令, 可用于構(gòu)建圖形畫面, 處理事件, 實(shí)現(xiàn)交互功能。②它是一個(gè)解釋器。它可以被添加到專用的應(yīng)用程序中, 將應(yīng)用程序提供的編程接口與自定義的Tcl /Tk 命令掛鉤, 使得用戶可以編寫具有特殊功能的腳本程序, 如數(shù)控軟件的人機(jī)界面程序。這也就是Tcl /Tk 解釋器的可擴(kuò)展性。

 

2 人機(jī)界面程序具體實(shí)現(xiàn)

2.1 底層接口主程序

該層的任務(wù)包括:

(1) 實(shí)現(xiàn)數(shù)控系統(tǒng)界面程序與主體程序之間的通信, 包括

 2 人機(jī)界面程序具體實(shí)現(xiàn)

 2.1 底層接口主程序

 該層的任務(wù)包括:

 (1)實(shí)現(xiàn)數(shù)控系統(tǒng)界面程序與主體程序之間的通信包括命令渠道和狀態(tài)渠道的建立,命令信息與狀態(tài)信息的格式設(shè)計(jì),命令信息的傳輸與狀態(tài)信息的獲取等內(nèi)容。下面是本項(xiàng)目中實(shí)現(xiàn)以上功能的編程接口,而且利用類的方法進(jìn)行封裝。

①建立命令渠道與狀態(tài)渠道

void CommandChannel : : GetChannel( )

{

. . .

shmget( . . . ) ; / /建立共享內(nèi)存

shmat( . . . ) ; / /將共享內(nèi)存區(qū)添加到本地地址空間中

semget( . . . ) ; / /建立信號(hào)量, 用于解決對(duì)共享內(nèi)存的訪問(wèn)同步

問(wèn)題

. . .

}

②信息的發(fā)送與接收

void CommandChannel : : SendMsg( MASSAGE * massage)

{

. . .

GetSem( . . . ) ; / / 獲取信號(hào)量

WriteMem( . . . ) ; / / 將信息寫入共享內(nèi)存

ReleaseSem( . . . ) ; / /釋放信號(hào)量

. . .

}

void ReadMSg( MASSAGE * massage)

{

. . .

ReadMem( . . . ) ; / / 從共享內(nèi)存獲取信息

. . .

}

 ③信息格式。本項(xiàng)目中, 利用類Massage 來(lái)定義信息格式

class MASSAGE {

int MsgType; / / 用不同的數(shù)值區(qū)分不同功能的信息

int MsgLength; / /代表信息的長(zhǎng)度

. . . / / 其他成員

}

 (2)提供實(shí)現(xiàn)數(shù)控操作的編程接口, 即對(duì)應(yīng)不同的用戶操作, 界面程序需要向主體程序發(fā)送不同的信息; 如一個(gè)代表“程序運(yùn)行”指令的編程接口如下:

void SendRun ( )

{

. . .

/ /將一個(gè)代表“程序運(yùn)行”指令的信息發(fā)送出去

SendMsg( RunProgramMsg ) ;

. . .

}

 (3) Main ( ) 函數(shù)。主要任務(wù), 與數(shù)控系統(tǒng)主體程序建立聯(lián)系; 添加Tcl /Tk 解釋器。

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

{

. . .

/ /建立并連接命令渠道和狀態(tài)渠道

CommandChannel * cmdChnPtr = new CommandChannel( ) ;

StatusChannel * statChnPtr = new StatusChannel( ) ;

/ /添加Tcl/ Tk 解釋器

Tk_Main( argc, argv, Tcl_AppInit ) ;

}

Tcl /Tk 的編程接口Tk_Main( ) 簡(jiǎn)化了添加Tcl /Tk 解釋器的工作, 它會(huì)創(chuàng)建包含所有標(biāo)準(zhǔn)Tcl 命令的解釋器, 創(chuàng)建Tk 主窗口; 然后, 它會(huì)調(diào)用用戶自定義的初始化函數(shù)Tk_AppInit( ) 來(lái)定制一個(gè)合乎用戶要求的Tcl /Tk 解釋器; 最后進(jìn)入腳本解

釋循環(huán)中。

2. 2 擴(kuò)展Tcl/Tk 解釋器, 即編寫函數(shù)Tk_AppInit( )

其任務(wù)包括:

( 1) 調(diào)用Tcl /Tk 庫(kù)函數(shù)Tcl_Init( Interp) Tk_Init( Interp)對(duì)解釋器進(jìn)行標(biāo)準(zhǔn)初始化;

( 2) 調(diào)用Tcl /Tk 庫(kù)函數(shù)Tcl_CreateObjCommand( ) 添加新的Tcl /Tk 命令, 并使之與應(yīng)用程序編程接口掛鉤。如添加一個(gè)名為Run_Program的命令, 使之與Tcl /Tk 擴(kuò)展C 庫(kù)中的Run_Program函數(shù)相關(guān)聯(lián), 并最終調(diào)用底層接口程序提供的接口SendRun( ) 函數(shù), 實(shí)現(xiàn)發(fā)送一條“程序運(yùn)行”的指令給數(shù)控主體程序的功能。Tcl_CreateObjCommand ( interp, " run_program" , Run_Program,( Client_Data) NULL, ( Tcl_CmdDeleteProc * ) NULL) ;綜合( 1) ( 2) , Run_Program命令的整個(gè)實(shí)現(xiàn)過(guò)程如圖3所示

 

    ( 3) 編寫腳本程序, 實(shí)現(xiàn)用戶圖形界面。

     界面設(shè)計(jì)。Tcl /Tk 提供了足夠而且合適的圖形部件來(lái)構(gòu)建數(shù)控軟件圖形界面, 較為常用的組件包括框架、標(biāo)簽、按鈕、文本和輸入框。數(shù)控軟件界面的特點(diǎn)是規(guī)則與簡(jiǎn)潔, 而且具有很強(qiáng)的專業(yè)慣例, 結(jié)合這些特點(diǎn), 我們將界面布局劃分為三個(gè)部分, 即狀態(tài)欄、主窗口和按鈕欄( 4、圖5)

 

狀態(tài)欄用于顯示當(dāng)前模式、當(dāng)前功能界面名稱、加工文件及加工狀態(tài)等信息; 按鈕欄用于模擬面板按鈕, 并顯示按鈕功能, 且按照不同的操作界面切換不同的按鈕功能菜單; 如圖5中的位置功能界面, 它的按鈕功能菜單包括“相對(duì)坐標(biāo)”、“絕對(duì)坐標(biāo)”、“ALL”等; 而程序功能界面的按鈕菜單包括“打開文件”、“刪除文件”等。主窗口用于顯示當(dāng)前功能界面。本項(xiàng)目的數(shù)控軟件圖形界面分為七個(gè)功能界面, 分別是“位置”、“程序”、“參數(shù)”、“圖形”、“系統(tǒng)”、“診斷”和“幫助”, 根據(jù)用戶選擇, 七個(gè)功能界面相互切換。如圖6、圖7 所示, 主窗口位置顯示的分別是“程序”功能界面和“圖形”功能界面。

 

②程序?qū)崿F(xiàn)。該項(xiàng)目中, 界面腳本程序分為兩部分, 即界面構(gòu)建部分和循環(huán)監(jiān)視部分。界面構(gòu)建, 就是要利用Tcl /Tk 提供的組件構(gòu)建一個(gè)操作畫面, 不僅要顯示信息, 還要能夠接受外部指令。這里提供兩

個(gè)主要的技巧:多用框架作為容器, 將相關(guān)組件進(jìn)行打包。如圖4 中的狀態(tài)欄、主窗口和按鈕欄三部分, 就是對(duì)應(yīng)三個(gè)框架, 從而使三部分彼此獨(dú)立, 這樣便于管理。同理, 七個(gè)功能界面也是對(duì)應(yīng)七個(gè)框架( 分別是positionFrame, programFrame, graphyFrame ) 。這樣一來(lái), 在主窗口中, 能夠很方便地對(duì)它們進(jìn)行切換, 只要直接控制各個(gè)功能界面的頂層框架的“隱”或“現(xiàn)”就行了。如

proc ChangeFunc { } {

pack forget LastFuncFrame ; # 隱藏上一個(gè)功能界面

pack CurrentFuncFrame ; # 顯示當(dāng)前需要的功能界面

set LastFuncFrame CurrentFuncFrame

}

使用鍵盤綁定功能, 實(shí)現(xiàn)用戶與界面的交互。例如, 將按鍵F7 與前面所述的用戶自定義的命令scnc_

run 綁定起來(lái)。bind all < F7 > { scnc_run }這樣, 當(dāng)用戶按鍵F7 時(shí), 便能促發(fā)事件, 并通過(guò)底層應(yīng)用程序接口向數(shù)控軟件主體程序發(fā)送“程序運(yùn)行”命令。當(dāng)然, 用戶與數(shù)控軟件人機(jī)界面的交互方式不一定是通過(guò)鍵盤, 本項(xiàng)目中, 是通過(guò)一個(gè)與串口相連的控制面板來(lái)實(shí)現(xiàn)的。但中間經(jīng)過(guò)一個(gè)映射程序轉(zhuǎn)換為鍵盤信息, 又實(shí)現(xiàn)了鍵盤綁定的功能。循環(huán)監(jiān)視。界面構(gòu)建工作完成之后, 程序就調(diào)用Update( )

函數(shù)進(jìn)入循環(huán)監(jiān)視狀態(tài)。這個(gè)函數(shù)負(fù)責(zé)定期查看狀態(tài), 更新界

面。

Proc Update { } {

# 從狀態(tài)渠道獲取最新狀態(tài)信息

scnc_update

# 更新界面信息, 如位置坐標(biāo)、模式、加工軌跡模擬等

# 定期循環(huán)監(jiān)視

after 200 Update

}

該系統(tǒng)運(yùn)行情況如圖8 所示。

 

 3 結(jié)束語(yǔ)

 隨著科技的發(fā)展, 人們對(duì)數(shù)控系統(tǒng)的需求越來(lái)越大, 對(duì)數(shù)控系統(tǒng)的人機(jī)界面的要求也越來(lái)越高。綜合在基于嵌入式Linux 的數(shù)控系統(tǒng)上的開發(fā)經(jīng)驗(yàn), 提出了利用Tcl /Tk 實(shí)現(xiàn)數(shù)控系統(tǒng)人機(jī)界面的一種方法。其實(shí)用性和可靠性在實(shí)際使用中得到驗(yàn)證。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
基于PMAC的活塞車床開放式數(shù)控系統(tǒng)
python可以做界面嗎
Tkinter教程3——一個(gè)例子(真實(shí)的)程序
1_FG-3000數(shù)控磨溝機(jī)大修改造
Python程序設(shè)計(jì)初識(shí)Python(ython 3.x中用print()函數(shù)取代了python 2.x中的print語(yǔ)句兩者功能相同格式不同)
「新手的福音」VBA代碼解釋器,助你看懂所有VBA程序
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服