(深圳市保健委员会办公室综合门诊部信息科,广东 深圳 518010)
医院医技科室人员常常需要简易手柄来实现人与医疗设备或者工作站的交互。比如超声科室,医生采集图像的时候,需要采集手柄,在按下按键时候,实现静态或者动态图像的采集;胃肠镜室医务人员需要脚踏开关来实现胃肠镜的图像静态或动态采集;TCD也需要手柄来实现人员与设备的交互。手柄虽然只是较小的一个零配件,但确实能给相关人员的工作带来很大便利。介绍一种基于9针串口的简易制作和相关的捕获和调用按键信号的软件开发。
串行接口 (Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。串行通信的距离可以从几米到几千米;根据信息的传送方向,串行通信可以进一步分为单工、半双工和全双工三种。
串口有9针和25针,现在的电脑配备25针的较少,本文介绍的手柄基于常用的9针RS-232串口制作。在没有串口的电脑上,可以增加com口转换器,从USB扩展出串口。
串口分公口和母口,但针脚含义一样。
1)数据载波检测DCD 8数据载波检测DCD。
2)接收数据RXD 3接收数据RXD。
3)发送数据TXD 2发送数据TXD。
4)数据终端准备DTR 20数据终端准备DTR。
5)信号地GND 7信号地GND。
6)数据设备准备好DSR 6数据设备准备好DSR。
7)请求发送RTS 4请求发送RTS。
8)清除发送CTS 5清除发送CTS。
9)振铃指示RI 22振铃指示RI。
在做通信的时候,一般三根线连接即可。即2~3交叉,5对5。但串口手柄不是通过传递数据来捕获按键信息,而是触发TTL上升沿或下降沿。所以在连线的时候,只需要连接串口4端和6端,分别和按键两端连接。
电脑端主要是捕获简易手柄开关的上升沿或下降沿TTL信号。串口开发技术比较古老,有多种实现方法。在WINDOWS操作系统下,可以用API、MSCOM、第三方串口控件调用等多种方法。本文采用DELPHI介绍软件方面的开发,使用第三方控件APRO实现。打开DEPHI,安装TurboPower Async Professional组件(http://sourceforge.net/projects/tpapro)。APRO用触发器(trigger)来触发通信会话,有4类触发器。
1)Data available trigger(数据可用触发器)——接收的数据是可用的。
2)Data match trigger(数据匹配触发器)——特殊的字符或者字符串被接收。
3)Status trigger(状态触发器)——状态将被处理。
4)Timer trigger(时间触发器)——监控时间是否超时。
触发器可以添加、激活、修改或者重新激活,我们使用的是状态触发器。打开DELPHI,点击“New”,“Application”新建工程。在Form上拖放TApdComPort和TMemo控件。增加变量 FootSwichTimeStart,FootSwichTimeThresh:integer; //脚踏开关控制myhandle:THandle; //句柄
bdown : boolean ;//控制按键是否按下
fcnt : integer ; //按键按下次数,按一次增加一次
在TApdComPort的OnTrigge事件中,双击增加捕获事件。为了防止误操作或者多次点击多次响应的情况发生,增加了两次捕获时间间隔。只有超过间隔时间,点击才算有效。在每次有效点击后,重新激活状态触发器,等待下次触发。
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事件中,指定使用的串口号,添加状态触发器。
procedure TForm1.FormCreate(Sender: TObject)
begin
fcnt:=0; //初始化按键次数为0
//打开脚踏开关端口
try
if ApdComPort1.Open then ApdComPort1.Open:=false
ApdComPort1.ComNumber:=1 //串口编号
ApdComPort1.Open:=true //打开指定串口
FootSwichTimeStart:=0 //开始时间
FootSwichTimeThresh:=500 //设置限定时间是500次 X cpu frequency
myhandle:=ApdComPort1.AddStatusTrigger(stModem)
ApdComPort1.setStatusTrigger(myhandle,msDSRDelta or msCTSDelta,true)
bdown:=false
finally
end
end
为了防止误按,增加了2次按下时间间隔变量。每按一次,文本框显示的数据就累加1次。
笔者介绍了一种用COM串口实现的简易图像采集按键手柄开关和相关捕获软件开发,可用于相关仪器使用。但这种按键开关只是基于简单的TTL上升沿或者下降沿捕获,电气接口过于简单,在使用中偶尔会出现捕获不到的情况,需要重新进入软件系统。但因为便宜简单,在实际中还是有一定的价值,相关的代码也可以在软件开发中直接使用。