• 
    

    
    

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

      ?

      C++Builder編程實(shí)現(xiàn)IXS系列X射線光機(jī)的控制

      2015-03-16 09:10:18劉龍郝萌吳慶星黃寧
      電腦知識與技術(shù) 2015年1期
      關(guān)鍵詞:串口通信

      劉龍 郝萌 吳慶星 黃寧

      摘要:針對VJ Technologies公司IXS系列X射線光機(jī),分析其RS232接口,使用C++ Builder編程實(shí)現(xiàn)了對光機(jī)的控制。其中,串口通信采用了MSCOMM控件,串口信息讀取則采用了多線程。根據(jù)通信協(xié)議,要求上位機(jī)和X射線光機(jī)每750ms內(nèi)要通信一次,因此采用C++類實(shí)現(xiàn)和封裝了上述內(nèi)容和協(xié)議。通過類成員函數(shù)可以設(shè)置光機(jī)工作電壓和電流,控制光機(jī)的啟停,讀取和解碼光機(jī)的運(yùn)行狀態(tài)和故障信息,完成每750ms的Watch dog通信。此外,類實(shí)現(xiàn)方式可方便地創(chuàng)建多個(gè)實(shí)例,實(shí)現(xiàn)對多臺光機(jī)的控制,從應(yīng)用的結(jié)果看,效果良好。

      關(guān)鍵詞:C++Builder;X射線光機(jī);RS232;串口通信;MSCOMM

      中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)01-0060-03

      Software Implementation for Controlling IXS Series X-ray Tube Using C++ Builder

      LIU Long,HAO Meng,WU Qing-xing, HUANG Ning

      (1.Ministry of Education Key Laboratory of Radiation Physics of Institute of Nuclear Science and Technology of Sichuan University,Chengdu 610064, China)

      Abstract: In this paper, C++ Builder platform,MSCOMM ActiveX Control and multithread programming are used, to communicate with IXS series X-ray generator of VJ Technologies company. The wrapped C++ class encapsulates the MSCOMM Control and protocol, can setup the voltage, current, open and close the x-ray generator, read and decode the status and error message from the generator, the watch dog timer per 750ms is implemented too. Furthermore, the computer can control multi x-ray generator easily, according to the result of practice, the effect of this design is good.

      Key words: C++Builder; ray generator; RS232; serial communication; MSCOMM

      X射線的產(chǎn)生相對簡單容易,由于其能夠穿透物質(zhì),可以通過測量成像的方法得到物質(zhì)內(nèi)部的信息,因此廣泛應(yīng)用在安檢、探傷、醫(yī)療等領(lǐng)域[1]。X射線光機(jī)是產(chǎn)生X射線的常用設(shè)備,目前的商用X射線光機(jī)功能已非常完善,不僅可以控制光機(jī)的開停,還可以在線設(shè)置能量和束流的大小。

      商業(yè)X射線光機(jī)大都帶有操作和控制軟件,其作用一般用于光機(jī)診斷和調(diào)試。由于光機(jī)提供的操作程序是獨(dú)立的執(zhí)行程序和界面,功能單一,不能和主應(yīng)用程序集成,使用起來很不方便。例如,在安檢應(yīng)用中,當(dāng)用戶按“檢測”按鈕時(shí)需要同時(shí)啟動(dòng)光機(jī)、皮帶電機(jī)、數(shù)據(jù)采集,而不能讓用戶在三個(gè)程序中分別去操作,那樣很麻煩,而且時(shí)間不統(tǒng)一。因此,在實(shí)際應(yīng)用中,需要開發(fā)光機(jī)的通信接口模塊,在主程序中采用通信接口實(shí)現(xiàn)對光機(jī)的控制。

      1 IXS系列X射線光機(jī)

      IXS是VJ Technologies公司的X-Ray Generator系列產(chǎn)品,其技術(shù)在國際上具有領(lǐng)先優(yōu)勢,其光機(jī)運(yùn)行穩(wěn)定、可靠,輸出電流和電壓可以根據(jù)需要進(jìn)行調(diào)節(jié),并且對過流、過壓和溫度過高等現(xiàn)象具有保護(hù)措施[2]。IXS系列X射線光機(jī)自帶有控制器(Controller),上位機(jī)可以通過控制器的RS232接口,獲取光機(jī)的狀態(tài),從而控制光機(jī)的運(yùn)行,達(dá)到實(shí)現(xiàn)與應(yīng)用的緊密耦合。 圖1為扇形束束流的光機(jī)實(shí)物圖[2],圖中右下角為光機(jī)控制器。

      IXS光機(jī)的RS232協(xié)議默認(rèn)通信參數(shù)為“9600,N,8,1”,沒有使用硬件握手和軟件握手,硬件連接只需要RXD,TXD,GND三根信號線,軟件實(shí)現(xiàn)也比較簡單[3]。

      IXS對信息包采用了ASCII編碼,進(jìn)行了簡單的封裝,所有的命令和報(bào)告都以開始,結(jié)束,例如:

      CMDARG

      CMD

      RPT

      其中,為開始符號(0x02),為結(jié)束符號(0x0d),CMD、ARG和RPT分別代表ASCII編碼的命令、參數(shù)和報(bào)告。IXS的部分命令見表 1:

      從表1可看出,光機(jī)控制器收到上位機(jī)信息后會發(fā)生響應(yīng),上位機(jī)讀取響應(yīng)信息,即可知道光機(jī)的運(yùn)行狀態(tài)。例如,發(fā)送‘MON命令,可得到目前的電壓、電流、溫度、燈絲狀態(tài)等編碼信息。

      如果操作不當(dāng),X射線會造成輻射損傷,為保證安全,IXS光機(jī)采用了看門狗機(jī)制,即控制器在收到上位機(jī)的命令后,會啟動(dòng)看門狗計(jì)時(shí)器(Watch dog timer),若在接下來的750ms內(nèi)沒有收到新命令和消息,控制器會自動(dòng)關(guān)閉電壓和電流。所以,為確保X射線光機(jī)正常安全運(yùn)行,上位機(jī)必須在750ms內(nèi)和光機(jī)通信一次,當(dāng)沒有其他命令時(shí),通常定時(shí)發(fā)送WDTE命令。這樣,當(dāng)通信異常,或上位機(jī)出現(xiàn)故障,甚至上位機(jī)斷電時(shí),光機(jī)也會在750ms內(nèi)自動(dòng)關(guān)閉,避免事故的發(fā)生。

      圖2為正常使用時(shí),上位機(jī)和光機(jī)的交互圖,上位機(jī)設(shè)置光機(jī)的電壓和電流后,打開光機(jī),并在750ms內(nèi)重復(fù)發(fā)送看門狗信號,維持光機(jī)的開狀態(tài),使用結(jié)束后關(guān)閉光機(jī),使用期間需要讀取和解析光機(jī)的返回信息,也可以發(fā)送“MON”命令主動(dòng)查詢光機(jī)的狀態(tài)。

      2 軟件設(shè)計(jì)實(shí)現(xiàn)

      要實(shí)現(xiàn)與X射線光機(jī)之間的通信,軟件上需要匹配操作的串口硬件,實(shí)現(xiàn)對串口的雙向讀寫,同時(shí)還要實(shí)現(xiàn)光機(jī)的通信協(xié)議,按協(xié)議要求發(fā)送和解析命令[4]。

      C++ Builder具有豐富的VCL控件庫,可高效開發(fā)界面,對C++語言和COM技術(shù)的支持也很強(qiáng)大,因此我們選用了C++ Builder作為開發(fā)平臺[4-10]。在C++Builder中可以安裝MSCOMM ActiveX控件,實(shí)現(xiàn)對RS232串口的控制,這樣就可以不討論RS232通信的底層實(shí)現(xiàn),而把軟件重點(diǎn)放在協(xié)議的解析和實(shí)現(xiàn)上[5-7]。

      我們在C++ Builder中定義了TVJXRay類,用于封裝MSCOMM控件和光機(jī)通信協(xié)議。其類設(shè)計(jì)見圖3。

      從圖3可以看出,TVJXRay類中持有MSCOMM控件的指針,因此可以在TVJXRay中對串口進(jìn)行操作,TVJXRay類對象在TMainForm的OnCreate()函數(shù)中被創(chuàng)建和初始化,通過其構(gòu)造函數(shù)把MSCOMM控件指針傳遞給了TVJXRay對象。

      當(dāng)然,要在TVJXRay類中創(chuàng)建MSCOMM控件的實(shí)例也是可以的,只是單獨(dú)編寫代碼創(chuàng)建COM控件比較麻煩,我們采用了VCL的控件管理方式,在主窗體中自動(dòng)創(chuàng)建控件[6]。

      從圖3還可看到,TVJXRay類派生自TThread類,這是由于程序需要監(jiān)測串口,為了使串口操作不占用主線程,采用了多線程的方式,需要對Execute()函數(shù)進(jìn)行重載,主要的任務(wù)是解析控制器發(fā)來的命令,以及每750ms內(nèi)重置看門狗通信計(jì)時(shí)器。Execute()函數(shù)的部分實(shí)現(xiàn)代碼如下:

      void __fastcall TVJXray::Execute()

      {AnsiString RBuffer,RcvText;

      if(!pcomm→PortOpen) return;

      RBuffer=pcomm→Input;

      RcvText="";

      do

      {if(pcomm→InBufferCount)

      { RBuffer=pcomm→Input;

      RcvText+=RBuffer;

      Response(RcvText); //Response Process

      }

      if(m_RayOn)

      { pcomm→Output=WDTE;

      Sleep(600); //<750ms

      }

      Sleep(10);

      }while(!Terminated);

      }

      雖然也可以使用MSCOMM控件的OnComm()事件,接收和處理串口的信息,但是那樣的話必須在TMainForm中去處理,增加了TVJXRay類和TMainForm類的耦合,對增加的每個(gè)串口都要分別處理OnComm()消息,不利于多串口的開發(fā)。

      由于采用了C++類實(shí)現(xiàn)方式,封裝了光機(jī)的通信協(xié)議,當(dāng)應(yīng)用中有多個(gè)這樣的光機(jī)時(shí),只需要?jiǎng)?chuàng)建一個(gè)新的TVJXRay()實(shí)例就可以了,圖3中就創(chuàng)建了2個(gè)實(shí)例,即一臺上位機(jī)可以控制多臺光機(jī)同時(shí)工作。

      運(yùn)行結(jié)果

      C++ Builder不僅可以快速做出漂亮的界面,而且支持COM控件和多線程機(jī)制,COM控件可以在設(shè)計(jì)時(shí)拖放到主界面上,實(shí)現(xiàn)控件的設(shè)置和初始化;封裝的TThread類也很方便,重載Execute()函數(shù)就實(shí)現(xiàn)了多線程,因此,C++ Builder是一個(gè)不錯(cuò)的基于C++語言的快速開發(fā)平臺[9-10]。

      通過MSCOMM控件,實(shí)現(xiàn)了串口的通信,繼承C++ Builder的Thread類,實(shí)現(xiàn)了多線程,同時(shí),采用類封裝了IXS系列光機(jī)控制器的通信協(xié)議,在應(yīng)用程序中實(shí)現(xiàn)了對IXS系列的射線光機(jī)的控制,可以監(jiān)測其運(yùn)行狀態(tài),實(shí)現(xiàn)看門狗通信,同時(shí)也支持對多臺光機(jī)光機(jī)的控制,從實(shí)際運(yùn)行的結(jié)果看,效果良好。

      參考文獻(xiàn):

      [1] 屠耀元. 射線檢測技術(shù)[M]. 上海: 上海世界圖書出版社, 1997.

      [2] IXS系列X射線光機(jī)[EB/OL]. [2014-10-24]. www.vjt.com.

      [3] 何小海,嚴(yán)華. 微機(jī)原理與接口技術(shù)[M]. 北京: 科學(xué)出版社, 2006.

      [4] 高迎慧. C++Builder實(shí)現(xiàn)RS-232串口通信的研究[J]. 儀器儀表用戶, 2009(6): 37-38.

      [5] 張志明. MSCOMM ActiveX控件在網(wǎng)絡(luò)監(jiān)測系統(tǒng)串行通信編程中的應(yīng)用[J]. 電子質(zhì)量, 2002(10): 25-30.

      [6] 李海燕. 基于ActiveX控件的串口通信技術(shù)[J]. 電腦與電信, 2007(12): 58-60.

      [7] Jan Axleson.串行端口大全[M]. 北京:中國電力出版社,2001.

      [8] Erich Gamma, etc. Design Patterns: Elements of Reusable Object-Oriented Software[M]. Pearson education, Inc. 2002.

      [9] 范逸之. C++ Builder與RS-232串行通信控制[M]. 北京: 清華大學(xué)出版社, 2002.

      [10] 余明興,吳明哲,黃世陽等. Borland C++Builder6程序設(shè)計(jì)經(jīng)典[M] . 北京: 科學(xué)出版社, 2004.

      猜你喜歡
      串口通信
      基于Android的電解質(zhì)分析儀設(shè)計(jì)與實(shí)現(xiàn)
      基于Qt和Flash的嵌入式Linux軟件架構(gòu)設(shè)計(jì)
      串口通信在智能家居監(jiān)控系統(tǒng)中的應(yīng)用
      基于Python實(shí)現(xiàn)設(shè)備控制臺的集中控制和管理
      基于OpenCV的室內(nèi)照明智能控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
      科技視界(2016年13期)2016-06-13 22:01:19
      基于Qt5的MODBUS協(xié)議編程與實(shí)現(xiàn)
      基于MSP430單片機(jī)的窄帶無線數(shù)據(jù)傳輸模塊的設(shè)計(jì)
      便攜式數(shù)傳電臺測試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      基于MFC的AUV多傳感器數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)及測試
      基于LabVIEW的溫度測量系統(tǒng)設(shè)計(jì)
      临沧市| 大渡口区| 陆良县| 高青县| 岳普湖县| 新乡市| 台湾省| 临朐县| 库车县| 大庆市| 洪雅县| 阳高县| 乌拉特中旗| 金阳县| 内丘县| 乌兰浩特市| 东乡县| 红原县| 固原市| 湟源县| 关岭| 昌平区| 林甸县| 布尔津县| 精河县| 措勤县| 防城港市| 栾川县| 五河县| 闻喜县| 曲水县| 桃江县| 齐河县| 平遥县| 永安市| 高清| 饶平县| 嫩江县| 祁连县| 赤壁市| 阳泉市|