堵 峰,奚冠巍,呂文發(fā)
(1.海軍駐無錫地區(qū)軍代室,江蘇 無錫 214000;2.中國船舶重工集團(tuán)公司江蘇自動化研究所,江蘇 連云港 222006)
遠(yuǎn)程設(shè)備控制技術(shù)指的是通過本地計(jì)算機(jī)來實(shí)現(xiàn)對遠(yuǎn)程設(shè)備的監(jiān)視和控制,如打開、關(guān)閉、添加、刪除遠(yuǎn)程設(shè)備的文件或文件目錄,控制遠(yuǎn)程設(shè)備鼠標(biāo)移動,上傳下載文件,關(guān)閉、重起系統(tǒng)等。本文將采用ARM芯片,模擬鍵盤、鼠標(biāo)來實(shí)現(xiàn)本地計(jì)算機(jī)對遠(yuǎn)程設(shè)備的控制,實(shí)現(xiàn)接收遠(yuǎn)程設(shè)備發(fā)送的信息、模擬生成計(jì)算機(jī)主機(jī)可以接收的信息,實(shí)現(xiàn)遠(yuǎn)程設(shè)備各項(xiàng)參數(shù)的模擬鍵入等,使操作遠(yuǎn)程設(shè)備如操作本地計(jì)算機(jī)一樣方便。
系統(tǒng)實(shí)時(shí)接收鍵盤、鼠標(biāo)命令,向計(jì)算機(jī)主機(jī)進(jìn)行轉(zhuǎn)發(fā),實(shí)現(xiàn)鍵盤、鼠標(biāo)正常信息輸入;在外部設(shè)備的控制下自動完成鍵盤、鼠標(biāo)信息傳輸通道切換,并接收外部設(shè)備發(fā)送的指示信息,模擬生成計(jì)算機(jī)主機(jī)可以接收的信息并按照設(shè)計(jì)的時(shí)序發(fā)送至計(jì)算機(jī)主機(jī),實(shí)現(xiàn)遠(yuǎn)程設(shè)備信息中各項(xiàng)參數(shù)的模擬鍵入;實(shí)現(xiàn)參數(shù)鍵入后,及時(shí)將控制權(quán)交還給鍵盤、鼠標(biāo),恢復(fù)正常操控功能,系統(tǒng)的結(jié)構(gòu)框圖如圖1所示。
遠(yuǎn)程設(shè)備信息自動輸入轉(zhuǎn)換系統(tǒng)工作流程如下:
第一步,在未收到遠(yuǎn)程設(shè)備信息時(shí),模擬器對鍵盤、鼠標(biāo)進(jìn)行實(shí)時(shí)轉(zhuǎn)發(fā),完成鍵盤、鼠標(biāo)命令信息輸入;
第二步,在需要輸入遠(yuǎn)程設(shè)備信息時(shí),首先進(jìn)入需要輸入遠(yuǎn)程設(shè)備信息的頁面,在遠(yuǎn)程設(shè)備信息處理設(shè)備上輸入需要發(fā)送的遠(yuǎn)程設(shè)備信息批號,并確認(rèn)發(fā)送;
第三步,遠(yuǎn)程設(shè)備信息處理設(shè)備將遠(yuǎn)程設(shè)備信息的內(nèi)容和需要輸入的位置信息按照規(guī)定的接口協(xié)議發(fā)送給模擬器;
第四步,模擬器在收到遠(yuǎn)程設(shè)備的信息后,自動進(jìn)行鍵盤、鼠標(biāo)信息傳輸通道切換,屏蔽原有鍵盤、鼠標(biāo)傳輸通道,接通模擬鍵盤、鼠標(biāo)通道;
第五步,模擬器首先控制鼠標(biāo)指針移到屏幕左上角位置(0,0)像素點(diǎn)上,然后調(diào)用鼠標(biāo)最優(yōu)移動算法將鼠標(biāo)指針移動到指定位置像素區(qū)域,并模擬單擊指令,選中需要輸入的數(shù)據(jù);
第六步,模擬器將接收到遠(yuǎn)程設(shè)備信息的鍵盤碼轉(zhuǎn)換成符合專用鍵盤格式的掃描碼數(shù)據(jù),完成遠(yuǎn)程設(shè)備信息的自動鍵入;
第七步,數(shù)據(jù)輸入完成后,模擬器控制將鍵盤、鼠標(biāo)信息傳輸通道切換回原來狀態(tài),恢復(fù)鍵盤、鼠標(biāo) 正常操控功能。
圖1 基于的ARM的遠(yuǎn)程設(shè)備信息自動輸入轉(zhuǎn)換系統(tǒng)結(jié)構(gòu)框圖
遠(yuǎn)程設(shè)備信息自動輸入轉(zhuǎn)換系統(tǒng)可采用成熟的接口電路技術(shù),以ARM為主控芯片,結(jié)合串口控制芯片、DC-DC電源轉(zhuǎn)換模塊、繼電器芯片等一些專用接口芯片和外圍電路實(shí)現(xiàn)。遠(yuǎn)程設(shè)備信息自動輸入轉(zhuǎn)換系統(tǒng)邏輯原理圖如圖2所示。
圖2 基于的ARM的遠(yuǎn)程設(shè)備信息自動輸入轉(zhuǎn)換系統(tǒng)邏輯原理圖
ARM芯片采用NXP公司的LPC2378[1-2]。該芯片集成了4個(gè)UART串口,兩個(gè)I2C口,兩個(gè)USB主口,片內(nèi)集成了512KB的Flash和38KB的SRAM。
在鍵盤、鼠標(biāo)模擬器中,ARM 作為主控芯片完成遠(yuǎn)程設(shè)備信息的接收和發(fā)送應(yīng)答,實(shí)現(xiàn)鍵盤、鼠標(biāo)輸入的切換,并把遠(yuǎn)程設(shè)備信息模擬轉(zhuǎn)發(fā)給本地計(jì)算機(jī)。
系統(tǒng)在不通電的情況下,鍵盤輸入和模擬鍵盤輸出直接連通,當(dāng)外部設(shè)備輸入信息后,切換繼電器輸出引腳,實(shí)現(xiàn)遠(yuǎn)程設(shè)備信息解析并按照PS/2協(xié)議轉(zhuǎn)發(fā)給本地計(jì)算機(jī)。信息發(fā)送完畢后,切換繼電器,恢復(fù)鍵盤輸入和模擬鍵盤輸出直接連通狀態(tài)。鍵盤輸入和模擬鍵盤輸出同時(shí)通過繼電器切換和ARM芯片連接,實(shí)現(xiàn)信息的轉(zhuǎn)發(fā)。
系統(tǒng)在不通電的情況下,鼠標(biāo)輸入和模擬鼠標(biāo)輸出直接連通。當(dāng)外部設(shè)備輸入信息后,切換繼電器輸出引腳,實(shí)現(xiàn)遠(yuǎn)程設(shè)備信息處理轉(zhuǎn)發(fā)給本地計(jì)算機(jī)。信息發(fā)送完畢后,切換繼電器,恢復(fù)鼠標(biāo)輸入和模擬鼠標(biāo)輸出直接連通狀態(tài)。
遠(yuǎn)程設(shè)備輸入采用RS485協(xié)議,輸入和輸出端完全隔離,控制芯片采用美信公司 MAX1490,在該芯片內(nèi)集成了隔離變壓器方便電路的設(shè)計(jì)。同時(shí)需要采用 TI公司的 SN74ALVC164245DL芯片來實(shí)現(xiàn)雙向5V和3.3V交換,采用該方案后,技術(shù)難度小。
因?yàn)锳RM的GPIO引腳是通用的,每個(gè)I/O口的功能至少有兩個(gè),如RS232發(fā)送串口,需要設(shè)置其為TXD和RXD引腳才能正確工作。管腳功能設(shè)置有管腳功能選擇寄存器PINSELn設(shè)置。配置4個(gè)串口,遠(yuǎn)程設(shè)備占用一個(gè)串口,鼠標(biāo)輸入數(shù)據(jù)占用一個(gè)串口,模擬鼠標(biāo)輸出占用一個(gè)串口,調(diào)試、下載數(shù)據(jù)占用一個(gè)串口,而LPC2378正好4個(gè)串口,所以不需要再擴(kuò)展串口。
管腳復(fù)用設(shè)置寄存器PINSEL0 = 0x4050005A,即設(shè)置P0.0為TXD3口,P0.1為RXD3口,P0.2為TXD0口,P0.3為RXD0口,P0.10為TXD2口,P0.11為RXD1口,P0.15為TXD1口。其中TXD3和RXD3口用于調(diào)試備用口,TXD0口和RXD0口為遠(yuǎn)程設(shè)備信息輸入輸出口,TXD2和RXD2口為模擬器和主機(jī)的通信串口,用于模擬鼠標(biāo)方式向主機(jī)發(fā)送數(shù)據(jù)。TXD1和RXD1為接收鼠標(biāo)的串口數(shù)據(jù),判斷鼠標(biāo)是否正在移動或按鍵。
設(shè)置U0LCR為0x83,即使能除數(shù)訪問寄存器,禁止間隔發(fā)送,使能奇偶檢驗(yàn),字長度為8位字符長度,1個(gè)停止位。設(shè)置波特率因子,本系統(tǒng)中,系統(tǒng)晶體頻率為11.0592MHz,由公式
用戶可以對除數(shù)的小數(shù)波特率發(fā)生器不影響UARTn的波特率。即MULVAL為1,DIVADDVAL為0,那么只要求出UnDL就可以了。設(shè)置調(diào)試口的波特率為 9600bps,即 TXD3和 RXD3波特率為9600bps,那么其UnDL為72;遠(yuǎn)程設(shè)備信息占用TXD0和RXD0口,其波特率為19200bps,那么其UnDL為36;鼠標(biāo)發(fā)送接收波特率都為1200bps,那么其UnDL為576,主機(jī)鼠標(biāo)接口UnDL也為576。
設(shè)置好UnDLM和UnDLL后,設(shè)置UnLCR,禁止訪問除數(shù)鎖存。接收和發(fā)送FIFO使能,F(xiàn)IFO只要接收字符就會中斷,并且復(fù)位FIFO,注冊FIFO中斷。
鍵盤輸入輸出采用PS/2[3]協(xié)議,PS/2協(xié)議規(guī)定4根物理線,一根電源線,一根電源地線,兩根雙向信號線,一根時(shí)鐘線,一根數(shù)據(jù)線。
1)鍵盤至主機(jī)格式
圖3 鍵盤至主機(jī)格式
如圖3所示,鍵盤在時(shí)鐘上升沿將數(shù)據(jù)準(zhǔn)備好,主機(jī)在下降沿時(shí)將數(shù)據(jù)讀取至主機(jī),當(dāng)主機(jī)讀取到完整的一幀掃描碼(校驗(yàn)位、起始位、停止位均正確),將時(shí)鐘拉低(時(shí)間約為12個(gè)時(shí)鐘周期)后,再釋放時(shí)鐘,準(zhǔn)備接收下一幀數(shù)據(jù)。
2)主機(jī)至鍵盤格式
圖4 主機(jī)至鍵盤格式
主機(jī)在上升沿時(shí)將數(shù)據(jù)準(zhǔn)備好,鍵盤在時(shí)鐘下降沿時(shí)將數(shù)據(jù)讀取,讀取完整的一幀報(bào)文后將數(shù)據(jù)線拉低一個(gè)時(shí)鐘周期后釋放數(shù)據(jù)線。
鍵盤掃描碼有兩種不同的類型:“通碼”和“斷碼”。當(dāng)一個(gè)鍵被按下或按住就發(fā)送通碼;當(dāng)一個(gè)鍵被釋放就發(fā)送斷碼。每個(gè)按鍵被分配了唯一的通碼和斷碼,這樣主機(jī)通過查找唯一的掃描碼就可以測定是哪個(gè)按鍵。每個(gè)鍵一整套的通斷碼組成了“掃描碼集”,有三套標(biāo)準(zhǔn)的掃描碼集分別是第一套、第二套和第三套。所有現(xiàn)代的鍵盤默認(rèn)使用第二套掃描碼。本方案也采用的是第一套掃描碼集。例如,當(dāng)按下鍵盤字符“A”時(shí),發(fā)送通碼1C,當(dāng)釋放鍵盤字符“A”后,發(fā)送斷碼F0,1C,斷碼的第一個(gè)字節(jié)一般都是F0,所以當(dāng)按下鍵盤字符A然后釋放,發(fā)送的字節(jié)碼是1C,F(xiàn)0,1C。
在系統(tǒng)不開電時(shí),直接連接鍵盤輸入和模塊鍵盤輸出,一旦遠(yuǎn)程設(shè)備有數(shù)據(jù)輸入且有鍵盤數(shù)據(jù),此時(shí)檢查鍵盤是否正在輸入,等待鍵盤輸入完成,開始切換繼電器,實(shí)現(xiàn)模擬PS/2協(xié)議的數(shù)據(jù)發(fā)送。通過模擬鍵盤輸出口輸出到計(jì)算機(jī)主機(jī)。
鼠標(biāo)輸入采用的是微軟的串口鼠標(biāo)協(xié)議,傳輸波特率1200BPS、7個(gè)數(shù)據(jù)位、1個(gè)起始位、2個(gè)停止位、無校驗(yàn)。協(xié)議格式為3個(gè)字節(jié):第1字節(jié)的6、7位固定為1,4,5位分別為左右鍵狀態(tài),2、3位為上下移動數(shù)據(jù)的高6、7位,0、1位為左右移動數(shù)據(jù)的高6、7位;第2、第3字節(jié)發(fā)送的低六位是左右上下的其余6位數(shù)據(jù),其中Y表示上下、X表示左右移動的數(shù)據(jù)位[4]。例如:[0ECH 82H BAH](P1=ECH,P2=82H,P3=BAH)反饋出鼠標(biāo)向右移動了 2個(gè)單位,向上移動了6個(gè)單位,目前左鍵按下。
鼠標(biāo)數(shù)據(jù)流程為開機(jī)時(shí)主機(jī)通過拉低 DTR線檢測鼠標(biāo),鼠標(biāo)發(fā)送CD表示鼠標(biāo)存在。在系統(tǒng)不開電是,直連接鼠標(biāo)輸入和模擬模塊輸出,一旦遠(yuǎn)程設(shè)備有數(shù)據(jù)輸入且有鼠標(biāo)數(shù)據(jù),此時(shí)檢查鼠標(biāo)是否正在輸入,等待鼠標(biāo)輸入完成,開始切換繼電器,實(shí)現(xiàn)模擬RS232協(xié)議的數(shù)據(jù)發(fā)送。通過模塊串口輸出口輸出到計(jì)算機(jī)主機(jī)。
該系統(tǒng)在保留原有人工鍵入方式的基礎(chǔ)上,通過遠(yuǎn)程設(shè)備信息輸入轉(zhuǎn)換系統(tǒng)建立了加裝的外加設(shè)備與原有設(shè)備之間信息的直接接口交聯(lián),實(shí)現(xiàn)了遠(yuǎn)程設(shè)備信息的自動輸入;信息傳輸時(shí)間小于5s,與人工鍵入方式相比,時(shí)間縮短約3min。在不損失輸入信息的精度、確保信息正確性的同時(shí),消除了復(fù)雜的人工鍵入環(huán)節(jié),降低了操作人員的負(fù)擔(dān)和壓力,縮短了系統(tǒng)的反應(yīng)時(shí)間,滿足了實(shí)際需要,同時(shí)為其它引進(jìn)設(shè)備改裝提供了可借鑒的技術(shù)思路,具有重要的意義。
[1] 周立功,等. 深入淺出 ARM7--LPC2300[M].廣州:廣州致遠(yuǎn)電子有限公司,2008.
[2] NXP.LPC2378 Datasheet[DB/OL].www.nxp.com,2006.
[3] 陳啟美,吳守兵,周洋. 微機(jī)·外設(shè)·接口[M].北京:清華大學(xué)出版社,2002.
[4] 陳志宇,沈建華. 嵌入式設(shè)備鼠標(biāo)接口的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2003.