數(shù)控系統(tǒng)加工過(guò)程遠(yuǎn)程監(jiān)控工具的設(shè)計(jì)與實(shí)現(xiàn)
點(diǎn)擊:1683
A+ A-
所屬頻道:新聞中心
0 引言
隨著計(jì)算機(jī)技術(shù)、通信技術(shù)、控制技術(shù)的迅速發(fā)展,出現(xiàn)了 IPC 工控機(jī)以及大量的智能儀表,其應(yīng)用使得工業(yè)生產(chǎn)過(guò)程的自動(dòng)化水平得到了很大的提高。過(guò)程分析技術(shù)( Process Analytical Technology,PAT) 的出現(xiàn),促使裝備制造業(yè)引入該技術(shù)來(lái)提高產(chǎn)品的精度以及生產(chǎn)過(guò)程自動(dòng)化的水平。遠(yuǎn)程監(jiān)控是指利用計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)系統(tǒng)實(shí)現(xiàn)對(duì)遠(yuǎn)程工業(yè)生產(chǎn)過(guò)程控制系統(tǒng)的監(jiān)視和控制。工業(yè)生產(chǎn)過(guò)程的監(jiān)控信息接入 Internet,在一定條件下就可以通過(guò) Internet 監(jiān)控生產(chǎn)系統(tǒng)和現(xiàn)場(chǎng)設(shè)備的運(yùn)行狀態(tài)和各種參數(shù),控制者就不必親臨現(xiàn)場(chǎng),這能夠節(jié)省大量的人力物力。
本文采用硬件抽象層、共享內(nèi)存以及 I/O 多路復(fù)用技術(shù)實(shí)現(xiàn)對(duì)數(shù)控系統(tǒng)加工過(guò)程的遠(yuǎn)程監(jiān)控。數(shù)控系統(tǒng)加工過(guò)程中軸位置、軸速等信息通過(guò)共享內(nèi)存技術(shù)與服務(wù)器進(jìn)行交互,以 C/S 模式構(gòu)成遠(yuǎn)程監(jiān)控系統(tǒng),client 可以通過(guò)運(yùn)行客戶端應(yīng)用程序監(jiān)控?cái)?shù)控系統(tǒng)加工過(guò)程的狀態(tài)信息。
1 相關(guān)技術(shù)
1.1 硬件抽象層( Hardware Abstract Layer,HAL)
數(shù)控系統(tǒng)作為一個(gè)復(fù)雜的嵌入式系統(tǒng),具有專(zhuān)用性強(qiáng)、外圍設(shè)備多樣的特性,這決定了其應(yīng)用的硬件環(huán)境差異性較大。系統(tǒng)軟件模塊與硬件之間的接口是系統(tǒng)設(shè)計(jì)過(guò)程中的必需環(huán)節(jié),也是影響數(shù)控系統(tǒng)應(yīng)用前景的關(guān)鍵問(wèn)題之一。HAL 的引入可有效的解決該問(wèn)題,HAL 是將硬件平臺(tái)與應(yīng)用軟件隔離開(kāi)來(lái)的的軟件層次,通過(guò)硬件抽象層技術(shù)實(shí)現(xiàn)硬件相關(guān)和硬件無(wú)關(guān)兩部分程序代碼的隔離,為應(yīng)用程序提供一個(gè)沒(méi)有硬件特性的接口。硬件抽象層的引入不僅是系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)方法的改進(jìn),更直接關(guān)系到整個(gè)系統(tǒng)的開(kāi)發(fā)模式以及嵌入式操作系統(tǒng)的可移植性。硬件抽象層的引入大大推動(dòng)了嵌入式系統(tǒng)開(kāi)發(fā)的規(guī)范化進(jìn)程。
EMC2 中設(shè)計(jì)硬件抽象層的目的是使 EMC2 可以快速的針對(duì)不同的硬件進(jìn)行配置而不需要改變上層程序,實(shí)現(xiàn)在 I/O 接口和其他底層模塊之間傳輸實(shí)時(shí)數(shù)據(jù)。HAL 的設(shè)計(jì)采用了傳統(tǒng)的電路設(shè)計(jì)的模式,I/O設(shè)備以軟元件的形式存在于 HAL 中,HAL 軟元件和傳統(tǒng)元件類(lèi)似,包括引腳( pin) 、參數(shù)( parameter) 等信息。可以通過(guò) HAL 中軟元件的加載和相連形成復(fù)雜多樣的控制系統(tǒng),如圖 1 所示,利用 HAL 組件構(gòu)建并口輸出 PWM 信號(hào)驅(qū)動(dòng) X-Y 軸的直流伺服電機(jī)的連接圖。
圖 1 井口輸出 PWM 信號(hào)驅(qū)動(dòng) X-Y 軸的直流伺服電機(jī) HAL 連接圖
1.2 I/O 多路復(fù)用
在 Linux 服務(wù)器編程中,系統(tǒng)資源的利用率是一個(gè)令人關(guān)注的問(wèn)題。本系統(tǒng)通過(guò)采用單進(jìn)程 I/O 多路復(fù)用的方式解決了傳統(tǒng)的創(chuàng)建子進(jìn)程方式帶來(lái)的系統(tǒng)資源消耗,并極大地提高了 CPU 的利用率,同時(shí)也可以方便的支持多個(gè)客戶端,理論上,在一個(gè)線程中可支持 63 個(gè)客戶端; 可以采用多線程支持更大數(shù)量的 clients。
I/O 多路復(fù)用,即一個(gè)進(jìn)程需要在多個(gè) I/O 端口上等待讀取或?qū)懭霐?shù)據(jù),可選擇將自己掛起,如果一個(gè)或多個(gè) I/O 滿足數(shù)據(jù)操作時(shí),進(jìn)程將被通知,繼續(xù)運(yùn)行,并作相應(yīng)的判斷處理和 I/O 操作。select( ) 方法可以對(duì)多路 I/O 進(jìn)行阻塞式查詢。它提供同時(shí)對(duì)多個(gè) I/O 描述符進(jìn)行阻塞式查詢方法,可以方便地實(shí)現(xiàn) I /O多路復(fù)用。
2 系統(tǒng)設(shè)計(jì)
遠(yuǎn)程監(jiān)控工具利用模塊化的設(shè)計(jì)思想,從縱向來(lái)看總體框架自底向上包含 linux 操作系統(tǒng)、RTAI 模塊、硬件抽象層模塊、數(shù)據(jù)采集程序和客戶端程序。RTAI模塊和硬件抽象層模塊運(yùn)行在內(nèi)核空間,數(shù)據(jù)采集程序和客戶端程序運(yùn)行在用戶空間,它們之間的數(shù)據(jù)通信利用 rtai 提供的共享內(nèi)存和 I/O 多路復(fù)用技術(shù)來(lái)實(shí)現(xiàn)的,總體結(jié)構(gòu)如 2 圖所示。
圖 2 遠(yuǎn)程監(jiān)控工具總體結(jié)結(jié)構(gòu)圖
2.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
數(shù)據(jù)采集方法的設(shè)計(jì)以 RTAI 的共享內(nèi)存為數(shù)據(jù)傳輸介質(zhì)。共享內(nèi)存在內(nèi)核空間和用戶空間之間進(jìn)行數(shù)據(jù)傳輸,具有較高的靈活性,所以在數(shù)控系統(tǒng)中應(yīng)用廣泛,因此提高共享內(nèi)存的管理效率對(duì)各種使用共享內(nèi)存的應(yīng)用具有很重要的意義。采用兩級(jí)數(shù)據(jù)管理結(jié)構(gòu),能夠有效的分配和釋放共享內(nèi)存,使用 C 語(yǔ)言實(shí)現(xiàn)的該共享內(nèi)存管理層具有很好的可移植性,能夠減少共享內(nèi)存分配和釋放時(shí)間,同時(shí)互斥量的使用也能保證共享內(nèi)存的并發(fā)訪問(wèn)。數(shù)控系統(tǒng)加工過(guò)程遠(yuǎn)程監(jiān)控工具的設(shè)計(jì)是基于一個(gè)共享內(nèi)存的管理工具來(lái)實(shí)現(xiàn)的。使用共享內(nèi)存池和共享內(nèi)存塊這兩種結(jié)構(gòu)來(lái)完成對(duì)共享內(nèi)存管理工具的設(shè)計(jì),共享內(nèi)存管理工具的結(jié)構(gòu)如圖 3 所示。
圖 3 共享內(nèi)存管理工具結(jié)構(gòu)圖
2.2 遠(yuǎn)程監(jiān)控工具設(shè)計(jì)
主要是描述利用 I/O 多路復(fù)用技術(shù)實(shí)現(xiàn)多個(gè)客戶端的登錄服務(wù)器的流程,登陸處理流程圖如圖4 所示。
圖 4 客戶端登陸流程圖
客戶端登陸服務(wù)器端,首先需要打開(kāi)遠(yuǎn)程調(diào)試模式,并利用 I/O 多路復(fù)用技術(shù)創(chuàng)建 TCP 并發(fā)服務(wù)器;客戶端登陸成功后,可以通過(guò)終端輸入 halcmd 命令,實(shí)現(xiàn)遠(yuǎn)程查看數(shù)控系統(tǒng)運(yùn)行狀態(tài)。當(dāng)輸入 exit 或 quit命令時(shí),客戶端終止這一次的連接。
利用 I/O 多路復(fù)用技術(shù)設(shè)計(jì)的服務(wù)器端架構(gòu)大致如下:
初始化( socket,bind,listen) ; while( 1) { 設(shè)置監(jiān)聽(tīng)讀寫(xiě)文件描述符; 調(diào)用 select; 如果是監(jiān)聽(tīng)套接字就緒,說(shuō)明一個(gè)新的連接請(qǐng)求 建立。 { 建立連接( accept) ; 加入到監(jiān)聽(tīng)文件描述符中 } 否則說(shuō)明是一個(gè)已經(jīng)連接過(guò)的描述符 { 進(jìn)行 read 或 write 操作 }}
與多進(jìn)程并發(fā)方式相比,采用 I/O 復(fù)用技術(shù)的最大優(yōu)勢(shì)是服務(wù)器只需要一個(gè)進(jìn)程來(lái)處理所有的客戶機(jī)請(qǐng)求,所有程序沒(méi)有創(chuàng)建和管理進(jìn)程的開(kāi)銷(xiāo),減少了系統(tǒng)運(yùn)行中的系統(tǒng)開(kāi)銷(xiāo),提高了服務(wù)質(zhì)量; 同時(shí)服務(wù)器運(yùn)行在單一進(jìn)程上下文中,因此每個(gè)邏輯流都能訪問(wèn)該進(jìn)程的全部地址空間使得在流之間共享變量很容易。
3 系統(tǒng)實(shí)現(xiàn)
3.1 關(guān)鍵數(shù)據(jù)結(jié)構(gòu)
在內(nèi)核空間和用戶空間之間的通信主要是嵌入硬件抽象層來(lái)實(shí)現(xiàn)的,硬件抽象層的設(shè)計(jì)又采用了共享內(nèi)存技術(shù)。共享內(nèi)存結(jié)構(gòu)體 hal_data_t 的主要組成為:
typedef struct { ?。?. . . . . int comp_free_ptr; / / 存儲(chǔ)空閑的 comp 地址 int pin_free_ptr; / / 存儲(chǔ)空閑的 pin 地址 int param_free_ptr; . . . . . . unsigned long mutex; / /該結(jié)構(gòu)互斥訪問(wèn)信號(hào)量地址 int shmem_bot; int shmem_top; / / 共享內(nèi)存的首地址和尾地址 int comp_list_ptr; / /已加載的 comp 模塊的首地址 int pin_list_ptr; / /已加載的 comp 模塊的首地址 ?。?. . . . . } hal_data_t;
該結(jié)構(gòu)作為全局變量,halcmd 的命令是通過(guò)獲取互斥信號(hào)量來(lái)對(duì)該內(nèi)存區(qū)域進(jìn)行訪問(wèn)的。以 loadrtsiggen 為例,流程圖 5 如所示。
圖 5 處理 loadrt siggen 命令流程圖
用戶輸入 loadrt siggen 命令時(shí),該命令的功能是實(shí)現(xiàn)加載軟元件 siggen,通過(guò) halcmd _commands 查找loadrt 對(duì)應(yīng)的操作函數(shù) do _loadrt _cmd ( ) ,如果 siggen模塊尚未插入,則利用 insmod siggen. ko 將該模塊插入。并將 siggen 加入到 hal_data - > pin_list_ptr 的鏈表中。命令執(zhí)行完畢,返回 halcmd 命令行。
3.2 遠(yuǎn)程監(jiān)控工具的實(shí)現(xiàn)
遠(yuǎn)程監(jiān)控工具是 halcmd 應(yīng)用程序的一部分,它的主要任務(wù)是完成對(duì)輸入命令的讀入,解析命令,執(zhí)行命令,返回命令執(zhí)行結(jié)果。
具體的代碼實(shí)現(xiàn):
if( rmonitoring = = 1) / /監(jiān)測(cè)是否開(kāi)始遠(yuǎn)程監(jiān)控模塊 { / / 創(chuàng)建遠(yuǎn)程監(jiān)控模塊 createTCPServer( ) ; / /創(chuàng)建本地 select 并發(fā)服務(wù)器; select( maxfdp1,readfds,writefds,NULL,tvptr) ; / /查找接入的 socket 連接 read( sockfd,buf,BUFSIZE) ; halcmd_parse _cmd ( tokens) ; / /在服務(wù)器端處理遠(yuǎn)程輸入命令 / /關(guān)閉 halcmd 應(yīng)用程序 halcmd_shutdown( ) ; / /關(guān)閉 socket 連接 shutdown_socket( ) ; } else / /啟用本地調(diào)試模式 { get_input( srcfile,raw_buf,MAX_CMD_LEN) ; / /從終端獲取輸入的命令 halcmd_parse_cmd( tokens) ; / /執(zhí)行命令,并將結(jié)果輸出到終端 / /關(guān)閉 halcmd 應(yīng)用程序 halcmd_shutdown( ) ; }
其中 halcmd_parse_cmd( tokens) 主要是根據(jù) to-kens,按照命令索引跳轉(zhuǎn)到相應(yīng)的命令函數(shù)中執(zhí)行??梢詫?shí)現(xiàn)加載模塊,模塊互聯(lián),模塊信息讀取等命令功能; print_info( ) 根據(jù) tokens 執(zhí)行的結(jié)果將命令反饋信息發(fā)送給相應(yīng)的客戶端程序,從而實(shí)現(xiàn)對(duì)數(shù)控系統(tǒng)的加工狀態(tài)的遠(yuǎn)程監(jiān)測(cè)過(guò)程。
4 實(shí)驗(yàn)
在 pc1 上運(yùn)行數(shù)控系統(tǒng)仿真軟件 EMC2,打開(kāi)終端,使用 halcmd -kfr 啟用加工過(guò)程遠(yuǎn)程監(jiān)測(cè)模式。分別在 pc2 和 pc3 上運(yùn)行. /monitor 192. 168. 2. 14,連接到 pc1 服務(wù)器端。查看 pc2 和 pc3 的輸出情況,同時(shí)也可以執(zhí)行 halcmd 命令。實(shí)驗(yàn)結(jié)果如圖 6 所示。
圖 6
上圖是在 pc2 和 pc3 上顯示的對(duì)引腳變化的圖形化顯示的結(jié)果,顯示了三種不同的引腳曲線: 正弦,余弦和方形曲線。用戶可以方便使用該工具遠(yuǎn)程查看各個(gè)引腳的變化情況。
5 總結(jié)與展望
本文使用硬件抽象層技術(shù)和 I/O 多路復(fù)用技術(shù),提出了一個(gè)數(shù)控系統(tǒng)加工過(guò)程遠(yuǎn)程監(jiān)測(cè)工具的設(shè)計(jì)方案,并利用 EMC2 開(kāi)源數(shù)控軟件對(duì)數(shù)控?cái)?shù)控加工過(guò)程進(jìn)行仿真,運(yùn)用該遠(yuǎn)程監(jiān)測(cè)工具進(jìn)行對(duì)其進(jìn)行遠(yuǎn)程監(jiān)測(cè),能夠獲得數(shù)控加工過(guò)程中的軸的速度、軸的當(dāng)前位置、軸的位置反饋等信息,表明了該設(shè)計(jì)方案在對(duì)加工過(guò)程遠(yuǎn)程監(jiān)控方面是可行的。
(審核編輯: 智匯胡妮)
分享