(深圳市保健委員會辦公室綜合門診部信息科,廣東 深圳 518010)
醫(yī)院醫(yī)技科室人員常常需要簡易手柄來實現(xiàn)人與醫(yī)療設(shè)備或者工作站的交互。比如超聲科室,醫(yī)生采集圖像的時候,需要采集手柄,在按下按鍵時候,實現(xiàn)靜態(tài)或者動態(tài)圖像的采集;胃腸鏡室醫(yī)務(wù)人員需要腳踏開關(guān)來實現(xiàn)胃腸鏡的圖像靜態(tài)或動態(tài)采集;TCD也需要手柄來實現(xiàn)人員與設(shè)備的交互。手柄雖然只是較小的一個零配件,但確實能給相關(guān)人員的工作帶來很大便利。介紹一種基于9針串口的簡易制作和相關(guān)的捕獲和調(diào)用按鍵信號的軟件開發(fā)。
串行接口 (Serial Interface) 是指數(shù)據(jù)一位一位地順序傳送,其特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)雙向通信,從而大大降低了成本,特別適用于遠距離通信,但傳送速度較慢。串行通信的距離可以從幾米到幾千米;根據(jù)信息的傳送方向,串行通信可以進一步分為單工、半雙工和全雙工三種。
串口有9針和25針,現(xiàn)在的電腦配備25針的較少,本文介紹的手柄基于常用的9針RS-232串口制作。在沒有串口的電腦上,可以增加com口轉(zhuǎn)換器,從USB擴展出串口。
串口分公口和母口,但針腳含義一樣。
1)數(shù)據(jù)載波檢測DCD 8數(shù)據(jù)載波檢測DCD。
2)接收數(shù)據(jù)RXD 3接收數(shù)據(jù)RXD。
3)發(fā)送數(shù)據(jù)TXD 2發(fā)送數(shù)據(jù)TXD。
4)數(shù)據(jù)終端準(zhǔn)備DTR 20數(shù)據(jù)終端準(zhǔn)備DTR。
5)信號地GND 7信號地GND。
6)數(shù)據(jù)設(shè)備準(zhǔn)備好DSR 6數(shù)據(jù)設(shè)備準(zhǔn)備好DSR。
7)請求發(fā)送RTS 4請求發(fā)送RTS。
8)清除發(fā)送CTS 5清除發(fā)送CTS。
9)振鈴指示RI 22振鈴指示RI。
在做通信的時候,一般三根線連接即可。即2~3交叉,5對5。但串口手柄不是通過傳遞數(shù)據(jù)來捕獲按鍵信息,而是觸發(fā)TTL上升沿或下降沿。所以在連線的時候,只需要連接串口4端和6端,分別和按鍵兩端連接。
電腦端主要是捕獲簡易手柄開關(guān)的上升沿或下降沿TTL信號。串口開發(fā)技術(shù)比較古老,有多種實現(xiàn)方法。在WINDOWS操作系統(tǒng)下,可以用API、MSCOM、第三方串口控件調(diào)用等多種方法。本文采用DELPHI介紹軟件方面的開發(fā),使用第三方控件APRO實現(xiàn)。打開DEPHI,安裝TurboPower Async Professional組件(http://sourceforge.net/projects/tpapro)。APRO用觸發(fā)器(trigger)來觸發(fā)通信會話,有4類觸發(fā)器。
1)Data available trigger(數(shù)據(jù)可用觸發(fā)器)——接收的數(shù)據(jù)是可用的。
2)Data match trigger(數(shù)據(jù)匹配觸發(fā)器)——特殊的字符或者字符串被接收。
3)Status trigger(狀態(tài)觸發(fā)器)——狀態(tài)將被處理。
4)Timer trigger(時間觸發(fā)器)——監(jiān)控時間是否超時。
觸發(fā)器可以添加、激活、修改或者重新激活,我們使用的是狀態(tài)觸發(fā)器。打開DELPHI,點擊“New”,“Application”新建工程。在Form上拖放TApdComPort和TMemo控件。增加變量 FootSwichTimeStart,F(xiàn)ootSwichTimeThresh:integer; //腳踏開關(guān)控制myhandle:THandle; //句柄
bdown : boolean ;//控制按鍵是否按下
fcnt : integer ; //按鍵按下次數(shù),按一次增加一次
在TApdComPort的OnTrigge事件中,雙擊增加捕獲事件。為了防止誤操作或者多次點擊多次響應(yīng)的情況發(fā)生,增加了兩次捕獲時間間隔。只有超過間隔時間,點擊才算有效。在每次有效點擊后,重新激活狀態(tài)觸發(fā)器,等待下次觸發(fā)。
procedure TForm1.ApdComPort1Trigger(CP: TObject;Msg,TriggerHandle
Data: Word)
var
s:string
begin
case msg of
apw_TriggerStatus
begin
//防止誤按,間隔500 * cpu 后才允許再按
if gettickcount()-FootSwichTimeStart>FootSwichTimeThresh then
begin
FootSwichTimeStart:=gettickcount
bdown:=not bdown
if bdown then
begin
ApdComPort1.setStatusTrigger(myhandle,msDSRDelta or msCTSDelta,true)
exit
end
fcnt:=fcnt+1
memo1.lines.add(inttostr(fcnt))
end
ApdComPort1.setStatusTrigger(myhandle,msDSRDelta or msCTSDelta,true)
end
end
end
雙擊窗體頁面,在OnCreate事件中,指定使用的串口號,添加狀態(tài)觸發(fā)器。
procedure TForm1.FormCreate(Sender: TObject)
begin
fcnt:=0; //初始化按鍵次數(shù)為0
//打開腳踏開關(guān)端口
try
if ApdComPort1.Open then ApdComPort1.Open:=false
ApdComPort1.ComNumber:=1 //串口編號
ApdComPort1.Open:=true //打開指定串口
FootSwichTimeStart:=0 //開始時間
FootSwichTimeThresh:=500 //設(shè)置限定時間是500次 X cpu frequency
myhandle:=ApdComPort1.AddStatusTrigger(stModem)
ApdComPort1.setStatusTrigger(myhandle,msDSRDelta or msCTSDelta,true)
bdown:=false
finally
end
end
為了防止誤按,增加了2次按下時間間隔變量。每按一次,文本框顯示的數(shù)據(jù)就累加1次。
筆者介紹了一種用COM串口實現(xiàn)的簡易圖像采集按鍵手柄開關(guān)和相關(guān)捕獲軟件開發(fā),可用于相關(guān)儀器使用。但這種按鍵開關(guān)只是基于簡單的TTL上升沿或者下降沿捕獲,電氣接口過于簡單,在使用中偶爾會出現(xiàn)捕獲不到的情況,需要重新進入軟件系統(tǒng)。但因為便宜簡單,在實際中還是有一定的價值,相關(guān)的代碼也可以在軟件開發(fā)中直接使用。