• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于RS232協(xié)議的工業(yè)顯示器控制系統(tǒng)設(shè)計實現(xiàn)

      2015-08-02 03:58:49殷潔張忠能
      微型電腦應(yīng)用 2015年1期
      關(guān)鍵詞:信號量顯示器命令

      殷潔,張忠能

      基于RS232協(xié)議的工業(yè)顯示器控制系統(tǒng)設(shè)計實現(xiàn)

      殷潔,張忠能

      隨著互聯(lián)網(wǎng)逐步深入企業(yè)的日常運作,越來越多的企業(yè)產(chǎn)品開始依賴互聯(lián)網(wǎng)進行工作。因為,傳統(tǒng)的設(shè)備大多擁有自己的編碼標準和底層通信機制,如何有效地通過互聯(lián)網(wǎng)控制傳統(tǒng)的設(shè)備已經(jīng)成為一個新的課題。論文實現(xiàn)的遠程控制系統(tǒng),以LG工業(yè)顯示器為例分析了這類設(shè)備,并通過RS232工業(yè)接口實現(xiàn)了互聯(lián)網(wǎng)發(fā)送控制指令經(jīng)終端中轉(zhuǎn)后控制設(shè)備的過程,使得控制設(shè)備不再受到地點因素影響。

      RS232;遠程控制;C/S架構(gòu)

      0 引言

      隨著互聯(lián)網(wǎng)的不斷發(fā)展,社會進入網(wǎng)絡(luò)時代。越來越多產(chǎn)品利用互聯(lián)網(wǎng)為用戶提供便利,物聯(lián)網(wǎng)的概念更是期望將互聯(lián)網(wǎng)應(yīng)用到人們生活的方方面面,控制任何人們需要操控的工具。但另一方面,仍有相當?shù)膫鹘y(tǒng)設(shè)備,如顯示器等,由于擁有自身和PC端的底層通信機制及命令的編碼規(guī)范,暫時無法直接通過互聯(lián)網(wǎng)直接控制。

      論文主要針對工業(yè)顯示器進行研究,設(shè)計了基于C/S框架的系統(tǒng),完成了通過網(wǎng)絡(luò)發(fā)送命令到與顯示器相連的終端,終端轉(zhuǎn)換后通過RS232端口控制設(shè)備并將結(jié)果通過網(wǎng)絡(luò)進行返回的工作。

      1 工業(yè)顯示器控制系統(tǒng)分析

      工業(yè)顯示器控制系統(tǒng)(以下均稱本系統(tǒng))的目的在于控制工業(yè)顯示器。通過該系統(tǒng),用戶可以遠程通過網(wǎng)絡(luò)控制設(shè)備,并且能夠得到設(shè)備的反饋以確定指令是否完成。

      整個系統(tǒng)構(gòu)建在RS232接口通信協(xié)議之上。工業(yè)顯示器的接口多為RS232串行接口,這是一種9針接口,被廣泛應(yīng)用于計算機串行接口與外設(shè)的連接。不同設(shè)備針對RS232的9針接口都有不同的定義,每一個端口被賦予其特定的意義,可以通過編程對其賦予高電平以激活該接口。本文中以LG工業(yè)顯示器為例進行分析,其管腳定義如圖1所示:

      圖1 LG RS232管腳定義

      相對應(yīng)地,不同設(shè)備的控制命令編碼方式也不同,系統(tǒng)需要針對不同顯示器以及希望其完成的功能組裝命令然后通過RS232接口傳輸?shù)皆O(shè)備中。LG設(shè)備的命令格式如圖2所示:

      圖2 LG 命令格式

      該命令中,數(shù)據(jù)項由兩個byte組成,在電源開/關(guān)命令中,00表示電源開,01表示電源關(guān)。設(shè)定ID為顯示器設(shè)備的ID號,可調(diào)整范圍為1~99,在組裝命令時以0x0~0x63表示(十六進制)。Cr表示回車。

      對于該命令,設(shè)備接收并執(zhí)行后會進行返回,如果執(zhí)行成功,返回命令的格式圖3所示:

      圖3 LG 執(zhí)行執(zhí)行成功后返回

      如果指令執(zhí)行失敗,則OK的數(shù)據(jù)位由NG代替。

      基于以上基礎(chǔ),系統(tǒng)實現(xiàn)了LG的命令組裝和RS232的通信協(xié)議以進行對設(shè)備的控制,同時應(yīng)用JDK網(wǎng)絡(luò)編程實現(xiàn)了對設(shè)備的遠程控制。配合服務(wù)器端軟件,人們可以在任意地點實現(xiàn)對工業(yè)顯示器的控制。

      2 設(shè)計與實現(xiàn)

      2.1 控制系統(tǒng)的設(shè)計

      整個遠程控制系統(tǒng)的設(shè)計,采用C/S架構(gòu),前臺與后臺使用java開發(fā),與底層通信基于Rxtx庫,前后臺之間的通信則采用socket。同時解決了客戶端同時控制多臺設(shè)備以及因此而來的返回與指令不匹配問題。整個系統(tǒng)的架構(gòu)如圖4所示:

      圖4 控制系統(tǒng)架構(gòu)圖

      本地控制軟件運行在播放器中。

      整個系統(tǒng)的本地模塊由3個部分組成:1、環(huán)境設(shè)置模塊2、設(shè)備實例管理模塊 3、監(jiān)聽及消息處理模塊。

      環(huán)境設(shè)置模塊只用于加載rxtx底層通信庫,一般而言rxtx提供兩個不同的動態(tài)鏈接庫(DLL)以便開發(fā)者進行并行接口(Parallel)或者串行接口(Serial)的通信開發(fā)。加載dll可以選擇將dll拷貝到j(luò)dk的對應(yīng)目錄下由jdk在編譯的時候自動調(diào)用。也可以選擇將dll文件放在開發(fā)項目目錄下,通過程序進行加載。本系統(tǒng)中為了可以直接使用,不需要額外的環(huán)境配置操作,采用程序加載的方式。

      設(shè)備實例管理模塊,在軟件啟動后將自動申請一個設(shè)備實例,實例中設(shè)置與設(shè)備通信的參數(shù),用于管理與這個終端管理軟件對應(yīng)的設(shè)備,設(shè)備可能有多臺,但與終端相連的只有一臺,其他設(shè)備則通過串聯(lián)方式相互連接。如圖5所示:

      圖5 設(shè)備串聯(lián)模式

      監(jiān)聽及消息處理模塊,完成指令由終端pc發(fā)出后,設(shè)備執(zhí)行指令的監(jiān)聽及返回結(jié)果收集的工作。系統(tǒng)中每一次遠程命令到達,系統(tǒng)會開啟一個線程針對這條命令進行處理。監(jiān)聽和消息處理模塊采用回調(diào)機制來區(qū)分每一次的命令執(zhí)行,配合使用信號量系統(tǒng)來監(jiān)聽指令執(zhí)行是否超時。整個系統(tǒng)設(shè)計架構(gòu)如6圖所示:

      圖6 系統(tǒng)設(shè)計架構(gòu)

      2.2 控制系統(tǒng)實現(xiàn)

      2.2.1 環(huán)境設(shè)置

      本系統(tǒng)并未采用將dll文件放入jdk動態(tài)加載目錄下的做法,而是直接在項目以代碼加載dll動態(tài)鏈接庫。

      String path=System.getProperty("user.dir");

      System.load(path+File.separator+"rxtxParallel.dll");

      System.load(path+File.separator+"rxtxSerial.dll");

      其中user.dir將定位到安裝包生成后與安裝包平級的地址。故而后期生成exe安裝包后需要將rxtx的兩個dll文件放到與之對應(yīng)的地方。

      2.2.2 控制命令解析與填充

      遠程命令通過socket以json格式傳輸?shù)娇刂贫?,程序中需要取出其中的cmd字段并重新填充命令。

      JSONObject jsobj=JSONObject.fromObject(src);

      String cmd=jsobj.getString("cmd");

      首先獲取json object,即在服務(wù)器端發(fā)送命令時生成的json實例,然后從obj中取出被編碼的字段cmd。

      獲取cmd后需要生成傳輸?shù)皆O(shè)備的命令,系統(tǒng)實現(xiàn)了一個接口類(interface)ControlCommond,應(yīng)用多態(tài)方法,實現(xiàn)了可擴展的命令生成接口。對應(yīng)不同的設(shè)備,只要實現(xiàn)這個接口,并對應(yīng)實現(xiàn)每條命令的填充即可,無需對每個設(shè)備單獨建立一個命令類。

      controlCommand接口類中要實現(xiàn)的接口類型如下:

      byte[] powerOn(int screenNo);

      byte[] powerOff(int screenNo);

      byte[] setContrast(int value, int screenNo);

      ……

      每一個函數(shù)都需要返回一個byte數(shù)組,即設(shè)備可以執(zhí)行的命令。系統(tǒng)實現(xiàn)了LG設(shè)備的命令集,以powerOn命令為例:

      public byte[] powerOn(int screenNo)

      {

      String screenNoString = String.valueOf(screenNo);

      byte[] screenNoBts = screenNoString.getBytes();

      byte[] cmd = new byte[9];

      cmd[0] = (byte)'k';cmd[1] = (byte)'a';cmd[2] = 0x20;

      if (screenNoBts.length == 2)

      {cmd[3] = screenNoBts[0];

      cmd[4] = screenNoBts[1];}

      if (screenNoBts.length == 1)

      {cmd[3] = 0x30;cmd[4] = screenNoBts[0];}

      cmd[5] = 0x20;cmd[6] = 0x30;

      cmd[7] = 0x31;cmd[8] = 0x0d;

      return cmd;

      }

      其中0x30代表ascii碼中值,對應(yīng)空格,其余類似。需要注意的是設(shè)備號如果只有一位需要自動填充一位空格,否則指令長度錯誤。

      2.2.3 設(shè)備實例生成

      系統(tǒng)啟動后會自動生成一個設(shè)備實例,實例生成時需要設(shè)置與設(shè)備通信的一些參數(shù),以LG設(shè)備為例如表1所示:

      表1 系統(tǒng)生成LG設(shè)備實例參數(shù)

      系統(tǒng)同時需要獲取一個串行接口實例,即serialPort端口實例,這個實例被用于與設(shè)備進行交互。

      首先通過程序讀入portName,根據(jù)portName獲取CommPortIdentifier,最后調(diào)用serialPort.open方法獲取serialPort實例。

      獲取serialPort實例后就需要對實例設(shè)置參數(shù)。參數(shù)值如表2所示

      表2 LG端口參數(shù)設(shè)置

      對于serialPort,還需要關(guān)注從管道中返回的事件,對于每一個事件都可以定義相對應(yīng)的代碼去處理這個事件被觸發(fā)時系統(tǒng)將進行的操作如表3所示:

      表3 LG返回事件

      這里我們只關(guān)注notifyOnDataAvailable事件即可,即處理當有數(shù)據(jù)返回時的命令解析工作。

      當serialPort獲取成功,所有監(jiān)聽設(shè)置完成,輸入輸出管道綁定到device實例上之后,一個完整的設(shè)備實例便生成成功。

      2.2.4 消息監(jiān)聽處理

      每一條命令從serialPort的輸入管道寫入設(shè)備時,系統(tǒng)開啟一個線程去進行操作,寫入工作完成后就運行waitForResponse()函數(shù),這是一個DataEventListener類中的函數(shù),用于等待信號,生成信號量。而notifyOnDataAvailable事件監(jiān)聽中會調(diào)用DataEventListener類中的另一個函數(shù),與之對應(yīng),即dataEvent函數(shù),用于消除信號量。通過信號量的匹配,來完成命令的執(zhí)行結(jié)果返回的解析工作。每一條命令所處的線程都將維護這樣一對函數(shù)以保障程序運行。

      3 技術(shù)難點

      系統(tǒng)在實現(xiàn)過程中主要遇到了以下3個問題,具體描述以及解決方案如下:

      技術(shù)難點 解決方案多種設(shè)備兼容 server存儲及本地接口多命令返回混亂 多線程及信號量作為服務(wù)自動運行 Exe4j加jar打包

      3.1 多種設(shè)備兼容方案設(shè)計

      系統(tǒng)在設(shè)計之初就希望能夠兼容多種設(shè)備,不同廠商的顯示器設(shè)備雖然在通信接口上基本都選用RS232接口,但在命令組成封裝上卻各有不同。在實現(xiàn)時希望能夠盡量將命令不同對代碼的影響減小,盡量在命令生成模塊處理解決這個問題。

      針對這個問題,設(shè)計了兩種解決方案。一是在服務(wù)器端加載命令,即將所有命令儲存在服務(wù)器上,然后針對不同的設(shè)備發(fā)送命令。這種方式需要在客戶端啟動時向服務(wù)器注冊設(shè)備類型,如果設(shè)備發(fā)生更換需要重新注冊,造成額外網(wǎng)絡(luò)負載。服務(wù)器端的邏輯處理也將非常復(fù)雜,因而放棄了這個方案。

      另一個方案是在本地將代碼封裝成一個interface接口類,運用java編程中的多態(tài)技術(shù),新增設(shè)備后即在本地實現(xiàn)interface接口類,在其中將不同命令用對應(yīng)函數(shù)名的函數(shù)進行封裝。對于外部而言,只需要生成對應(yīng)的接口類實例即可。這種方式將變量控制在本地,服務(wù)器只需要發(fā)送希望完成的操作,在本地進行命令生成。沒有多余網(wǎng)絡(luò)負載。因而實現(xiàn)時采用此方法。

      3.2 多命令返回混亂解決方案

      每一條命令被送到設(shè)備執(zhí)行時都需要時間,不是立即返回的。而在執(zhí)行過程中可能會出現(xiàn)新的指令。在主線程中操作會造成線程阻塞。

      因而在每一條命令從服務(wù)器端到達終端并重新生成指令后,客戶端都會開啟一個新的線程去執(zhí)行指令,避免了線程阻塞。

      但隨之而產(chǎn)生了另一個問題,即不同指令,執(zhí)行時間可能不同,有的指令可能執(zhí)行失敗導(dǎo)致超時,使后續(xù)指令的返回與輸入不對應(yīng)。

      為了解決這個問題,系統(tǒng)中引入了信號量和同步(synchroniz)機制。每一條命令發(fā)送之前會更新信號量的值,而每一次命令的返回都進入一個synchronized的函數(shù),即這個過程中只有一個線程(即一個設(shè)備返回)會進入這個處理過程。保障了返回的唯一性,超時也會進入這個函數(shù),對應(yīng)更新信號量,以達到標志這個命令的處理結(jié)束的目的,下一次進來的返回是下一條命令的返回。

      通過多線程和信號量以及同步機制,嚴格控制了指令與設(shè)備返回的對應(yīng)。

      3.3 終端軟件作為服務(wù)自動運行解決方案

      考慮到用戶的使用習(xí)慣,不希望在啟動終端后還需要單獨打開本系統(tǒng)。

      為了解決這個問題,系統(tǒng)將程序打包成為一個windows service服務(wù)。需要先將用Eclipse開發(fā)的程序打包成jar包,然后通過exe4j軟件在打包成exe時選擇executable type為service。并將需要用到的庫文件包含進去一起打包。最后,還需要將rxtx的兩個dll文件隨exe文件一起封裝,否則在程序內(nèi)加載時找不到文件會導(dǎo)致windows service不能運行。

      4 應(yīng)用與分析

      4.1 應(yīng)用實例

      工業(yè)顯示器控制系統(tǒng)采用C/S架構(gòu),運行時需要一臺后臺服務(wù)器,服務(wù)器需要配置JDK環(huán)境。用戶只需要在服務(wù)器端配置需要控制的設(shè)備所連接的終端PC的ip地址和端口,然后啟動服務(wù)器即可。

      軟件中可以填寫希望控制的設(shè)備所對應(yīng)的終端ip地址并選擇對應(yīng)的命令,通過socket傳輸?shù)綄?yīng)終端并通過終端控制設(shè)備。

      4.2 用戶體驗與實用性分析

      由于工業(yè)顯示器在性能上的提升,越來越多的場合需要工業(yè)顯示器進行播放展示。且隨著技術(shù)的進步,出現(xiàn)了多臺顯示器拼接顯示等等新的展示手段,擴大了屏幕的尺寸,提升了展示的效果。

      對應(yīng)的,人們希望不再是展示單一的內(nèi)容,這就需要終端對顯示器的控制更進一步,在網(wǎng)絡(luò)條件允許的情況下,通過網(wǎng)絡(luò)傳輸播放內(nèi)容并對設(shè)備進行控制。無論需求如何,第一步總是完成對設(shè)備的控制,本系統(tǒng)主要關(guān)注的正是這個問題,已經(jīng)在一些公司投入實際使用??梢韵胍?,在未來的生產(chǎn)生活中,本系統(tǒng)的適用范圍會更廣。

      系統(tǒng)在開發(fā)過程中,將易于使用放在首位。在界面上盡量做到不需要用戶輸入,只需要進行

      選擇即可。所有指令均預(yù)先在程序中實現(xiàn),減少用戶輸入不僅優(yōu)化了用戶體驗,更加減少了用戶輸入錯誤帶來的系統(tǒng)崩潰可能性,提升了系統(tǒng)的容錯性能。

      在設(shè)備的控制方面,從底層rxtx到上層的多線程信號量處理,保障了對設(shè)備的精確控制。對于每條指令均監(jiān)視其返回,確保返回與指令的對應(yīng)。通過socket返回給控制端,精確的返回可以幫助用戶了解遠程設(shè)備的工作狀態(tài)。

      5 結(jié)束語

      隨著互聯(lián)網(wǎng)的飛速發(fā)展,越來越多傳統(tǒng)產(chǎn)品借助互聯(lián)網(wǎng)開啟了新的使用方式。本系統(tǒng)從終端出發(fā),實現(xiàn)了遠程管理者對不同終端所連接設(shè)備的控制。簡化了操作,提高了系統(tǒng)容錯性,有效提升了整個系統(tǒng)的可靠性與實用性。

      [1] 張紅兵,孫士平,趙永泉.RS-232接口轉(zhuǎn)換為USB接口的設(shè)計原理[J].現(xiàn)代計算機,2002(2):23-26.

      [2] 葛磊蛟,毛一之,李歧等.基于C語言的RS232串行接口通信實現(xiàn)-河北工業(yè)大學(xué)學(xué)報,2008(6):12-14.

      [3] 艾紅,王捷,厲虹,萬明明.基于串行接口的漢字液晶顯示模塊應(yīng)用與開發(fā)-液晶與顯示,2006,21(3):254-259.

      Industrial Monitor Control System Base on RS232

      Yin Jie, Zhang Zhongneng
      (Shanghai Jiaotong University, Shanghai 200030, China)

      Along with the Internet go deep into the daily operation of companies, more and more products are working with the Internet. Because most of the traditional device has its own coding standards and communication mechanism, how to control these devices effectively has become a new topic. This paper is based on implement a system, based on the research of LG industrial monitors, which can take and translate orders from the Internet and control devices by sending them to the devices via RS232. So that the control is no longer subject to location factors.

      RS232; Remote Control; C/S Framework

      TP311

      A

      2014.11.16)

      1007-757X(2015)01-0040-04

      殷 潔(1989-),男,江蘇南通,上海交通大學(xué),碩士研究生,研究方向:計算機應(yīng)用,上海,200030

      張忠能(1958-),男,上海,上海交通大學(xué),副教授,研究方向:計算機應(yīng)用,上海,200030

      猜你喜歡
      信號量顯示器命令
      基于STM32的mbedOS信號量調(diào)度機制剖析
      只聽主人的命令
      把顯示器“穿”在身上
      一種新型點陣顯示器的設(shè)計
      電子制作(2019年24期)2019-02-23 13:22:32
      Nucleus PLUS操作系統(tǒng)信號量機制的研究與測試
      感應(yīng)式帶電顯示器抗干擾處理
      電子測試(2018年13期)2018-09-26 03:29:36
      移防命令下達后
      這是人民的命令
      μC/OS- -III對信號量的改進
      Linux操作系統(tǒng)信號量機制的實時化改造
      施秉县| 信丰县| 鞍山市| 财经| 大余县| 遂平县| 环江| 弥勒县| 黑龙江省| 利津县| 白朗县| 阜平县| 泰和县| 松阳县| 南靖县| 东安县| 琼海市| 越西县| 龙陵县| 玉门市| 五峰| 都兰县| 定边县| 玛多县| 鞍山市| 贵德县| 万安县| 连江县| 凤阳县| 安泽县| 都兰县| 兴化市| 阿拉善右旗| 拜城县| 从江县| 汾西县| 临澧县| 古交市| 资源县| 永和县| 犍为县|