国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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í)啟動光機(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ī)的命令后,會啟動看門狗計(jì)時(shí)器(Watch dog timer),若在接下來的750ms內(nèi)沒有收到新命令和消息,控制器會自動關(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)自動關(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”命令主動查詢光機(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的控件管理方式,在主窗體中自動創(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í),只需要創(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è)不錯的基于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ì)
固阳县| 德昌县| 普洱| 揭阳市| 鄂托克旗| 雷山县| 呼伦贝尔市| 卓尼县| 九台市| 万盛区| 通河县| 从化市| 甘洛县| 高雄市| 尤溪县| 利津县| 盐城市| 江都市| 勃利县| 乡宁县| 尉犁县| 项城市| 平山县| 湄潭县| 虹口区| 庆城县| 柘城县| 连南| 宁陵县| 黄龙县| 临武县| 贺兰县| 建阳市| 万山特区| 迁安市| 嫩江县| 六安市| 鸡西市| 灵台县| 乌鲁木齐县| 通渭县|