APP下载

共焦扫描成像系统中串口通信的C#实现*

2011-05-28

关键词:窗体针孔串口

林 睿

(重庆工商大学计算机科学与信息工程学院,重庆 400067)

共焦扫描成像因为横向分辨率比普通显微系统高并且具有良好的光学层析能力,在三维显微成像中具有独特优势,因此在现代医学、材料学、生物学和半导体芯片检测等亚微米技术领域有着广泛的应用[1-5]。在研制共焦扫描成像系统中,对图像信号进行采集并传输到计算机中进行处理是一项关键技术,由于系统中采集的是静态图像[2],数据处理量不是很高,因而可以采用串行通信作为数据传输通信方式[3]。

在Windows环境下开发串行通信程序[6]可以利用Windows API通信函数或者利用第三方编写的串口类或者利用串口通信组件,如ActiveX控件MSComm。随着.Net Framework的普及,通过.Net Framework平台进行串口设备开发在软件升级过程中起着越来越重要的作用。基于.Net Framework的Visual CJHJ 2008的串口类(SerialPort类)[7]方便地实现了串口通讯所需要的多种功能,能赋予串口通信程序设计较大的灵活性,是今后串口通信的一个重要发展方向。提出了一种利用CJHJ中的SerialPort类进行RS232串口通信的方法,以完成对共焦成像系统的软件升级。

1 共焦扫描成像系统

1.1 共焦扫描成像原理[4]

共焦扫描成像系统(图1)利用放置在光源后的照明针孔和放置在探测器前的探测针孔实现点照明和点探测,来自光源的光通过照明针孔发射出的光聚焦在样品焦平面的某个点上,该点所发射的荧光成像在探测针孔上,照明针孔与探测针孔对被照射点或被探测点来说是共轭的,因此被探测点即共焦点,被探测点所在的平面即共焦平面。如果被探测点不在焦点,那么该点所发射的荧光成像在针孔的前面或后面某个位置,而在针孔所在的探测面上仅仅形成弥散斑,此时通过针孔为探测器探测到的光能量很少,也就是说非焦点信号强度远远低于焦点信号强度。在共焦扫描成像中,只有一个物点参与成像,排除了临近物点的影响,因此分辨率可以突破瑞利衍射极限。计算机以像点的方式将被探测点显示在计算机屏幕上,为了产生一幅完整的图像,由光路中的扫描系统在样品焦平面上扫描(X-Y扫描),从而产生一幅完整的共焦图像。只要载物台沿着Z轴上下移动,将样品新的一个层面移动到共焦平面上,样品的新层面又成像在显示器上,随着Z轴的不断移动,就可得到样品不同层面连续的光切图像。

图1 共焦扫描成像系统

1.2 系统基本结构

共焦扫描成像系统结构[4,5]如图1所示,系统由光学系统、图像数据采集与传输系统、系统扫描控制单元和计算机组成。光学系统主要由激光器、成像(聚光)透镜、光电倍增管PMT组成。图像数据采集和传输系统由计算机(上位机)和单片机(MCU)系统(下位机)组成。系统扫描控制单元利用单片机(MCU)驱动步进电机带动载物台沿预定轨迹运动,实现逐点扫描。计算机(上位机)通过RS232串口即DB9串口实现对下位机(MCU)的控制及图像数据的后期处理。

2 RS232串口通信系统及CJHJ中的串口类

确保计算机与单片机之间具有优良的数据传输通道,对于整个共焦扫描成像系统快速获得物平面高质量的图像至关重要,因此采用成熟的RS232串口技术可确保数据传输的正确性和可靠性。而在串口通信软件升级中采用Visual CJHJ 2008的SerialPort类进行通信软件开发,因为SerialPort类封装了使用RS232开发串口通信软件的细节,做到了.Net Framework与串口设备的无缝连接,因而能实现串口读写数据的可靠性,保证了通信的正确性和可靠性。

2.1 RS232串口的信号线定义及连接方法[6]

串行通信接口标准经过使用和发展,目前已经有多种,但都是在RS232标准的基础上经过改进而形成的。RS232通信协议适合于数据传输速率在0~200 00 bit/s范围内的通信。由于RS232并未定义连接器的物理特性,因此,出现了DB25(25针)、DB15(15针)和DB9(9针)为主的各种类型的连接器。目前,个人计算机中多以DB9为主要的串行通信接口,因而在共焦扫描成像系统中考虑以DB9为主进行串口通信开发。

RS232通信协议是DTE(数据终端设备)和DCE(数据通信设备)之间的一个接口协议,RS232标准指出DTE应该拥有一个插头(针输出),DCE拥有一个插座(孔输出)。目前的个人计算机的DB9串口为一个9针插头(图2)。各针脚功能分别为:DCD——数据载波检测;RxD——串口数据输入;TxD——串口数据输出;DTR——数据终端就绪;SG——信号地;DSR——数据发送就绪;RTS——发送数据请求;CTS——清除发送;RI——振铃指示。

在通信速率低于20 kb/s时,RS232所直接连接的最大物理距离为15 m。通信双方可以直接连接,这种情况下,只需使用少数几根信号线。最简单的情况,在通信中根本不需要RS232的控制联络信号,只需3根线(发送线、接收线、信号地线)便可实现全双工异步串行通信,如图3(a)所示。用跳线使串口的第2、3针连接,可以在本地计算机上实现串口通信,所以,通过串口的第2、3针的连接可以对程序进行检测,如图3(b)所示。

2.2 CJHJ中的串口类 SerialPort[7]

Visual CJHJ 2008类库包含了SerialPort类,可以方便地实现所需要串口通讯的多种功能,基本技术为:(1)命名空间。System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步 I/O和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入 Using System.IO.Ports。

(2)串口的通讯参数。串口通讯最常用的参数就是通讯端口号及通讯格式即:波特率、数据位长度、停止位和校验位。

a.通讯端口号。在SerialPort类中用PortName属性获取或设置通信端口,包括但不限于所有可用的COM端口,该属性返回类型为String,通常情况下,PortName正常返回的值为COM1、COM2等,SerialPort类最大支持的端口数多于16,方便了用户串口设备的配置。

b.通讯格式。SerialPort类对分别用BaudRate、DataBits、Parity、StopBits属性设置通讯格式中的波特率、数据位长度、奇偶校验检查协议和停止位。BaudRate和DataBits是整型int数据,BaudRate属性的默认值为9600 bps。DataBits属性的值范围是从5到8,默认值为8。Parity和StopBits是枚举类型数据,Parity类型中枚举了Odd、Even、Mark、None、Space,默认值为 None;StopBits枚举了 None、One、OnePointFive、Two,默认值为 One。

(3)串口的操作。

a.通信端口号的获取。SerialPort类中用GetPortNames()方法获取当前计算机的串行端口名称数组。

b.串口的打开和关闭。SerialPort类中用Open()和Close()方法就可以实现串口的打开和关闭。

c.串口数据的发送和的读取。SerialPort类中调用重载的Write()和WriteLine()方法发送数据。WriteLine()可发送字符串并在字符串末尾加入换行符。而用ReadLine()则可以一直读取到输入缓冲区中的NewLine值,属性NewLine定义ReadLine和WriteLine方法的行尾,默认为换行符。

事件。从SerialPort对象接收数据时,将在辅助线程上引发Data

事件。串行接收事件可以由SerialData枚举中的任何项引起,SerialData枚举类型有两个值为Chars(表示接收到了一个字符并将其放入了输入缓冲区)和Eof(表示接收到了文件结束字符并将其放入了输入缓冲区)。DataReceived事件还可以由接收到了由属性ReceivedBytesThreshold设置的输入缓冲区中的字节数引发。

BytesThreshold属性用于获取或设置DataReceived事件发生前内部输入缓冲区中的字节数。

(5)串口对象的初始化。SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用构造函数SerialPort(String,Int32,Parity,Int32,StopBits)指定的端口名称、波特率、奇偶校验位、数据位和停止位初始化SerialPort类的新实例。

3 CJHJ中串口通讯的实现

3.1 软件的设计

串口通讯的工作流程是:首先配置串口参数,再打开串口;然后接收和发送数据,最后关闭串口。

在Visual CJHJ 2008环境下,建立实现本机串口通信测试的主窗体Form1,如图4(a)所示。依照串口通讯的工作流程,窗体上依次放置5个按钮分别是配置串口、打开串口、发送信息、接收信息和关闭串口,其中打开串口、发送信息、接收信息按钮的Enabled属性设置为false,随着配置串口按钮的点击依次将其Enabled属性设置为true。窗体上放置两个文本编辑框textBox1和textBox2,分别显示用于发送和接收到信息的内容。

串口参数的设置在子窗体Form2中进行,在配置串口按钮点击后,子窗体弹出,如图4(b)所示。子窗体Form2上放置3个组合框ComboBox分别设置可用串口、标准停止位和奇偶效验。其中可用串口的下拉列表的值可在Form2显示时的事件中添加如下代码获得:

图4 C#串口通信测试软件界面

ComboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());

为了能将子窗体Form2上的串口参数传到主窗体Form1上,需要在Form1的类定义处添加5个公有静态变量ComName、BaudRate、BitLength、PARITY、STOPBIT分别存放端口名称、波特率、数据位、奇偶校验位和停止位的参数值。在子窗体Form2上的设置完成按钮的Click事件中添加以下代码:

这样即可对主窗体Form1中的串口对象进行设置。

3.2 功能模块的实现

(1)打开串口。在主窗体Form1的类中的串口对象SerialPort1定义为:

System.IO.Ports.SerialPort SerialPort1=new SerialPort();

在打开串口按钮的Click事件中添加以下代码:

(2)发送信息。当发送信息按钮激活后,在主窗体的文本编辑框textBox1中输入要发送的信息,再点击发送信息按钮完成信息向串口的发送,其Click事件代码如下:

private void SendMessage_Click(object sender,EventArgs e)

{SerialPort1.WriteLine(textBox1.Text);//发送一行信息到串口

ReadMessage.Enabled=true;}//激活接收信息按钮

(3)接收信息。当接收信息按钮激活后,点击该按钮,将已送到串口的信息读取到主窗体的textBox2中进行显示,其Click事件代码如下:

(4)关闭串口。关闭串口的代码非常简单,只需要执行SerialPort1.Close()即可。

4 结论

在Visual C#2008中开发的串口通信测试软件能成功地实现串口通信,表明提出的利用CJHJ实现共焦扫描成像系统的串口通信是一个可行的方案,因而利用CJHJ对共焦扫描成像系统进行软件升级是可行的。

[1]杨莉松,王桂英,王建岗,等.共焦扫描成像研究[J].中国激光,1999,26(10):931-934

[2]唐志列,梁瑞生,朱小松,等.偏振共焦扫描激光显微镜的成像特性研究[J].光学学报,1999,19(8):1118-1122

[3]蔡振治,迟泽英,陈文建,等.RS-232串口通信技术在光纤共焦扫描显微成像系统中的应用[J].光电子技术与信息,2004,17(4):58-62

[4]BRAKENHOFF G J.激光共焦显微成像的最新进展及其在生命科学研究中的应用[J].生命科学,2009,21(2):191-197

[5]李海燕,张琢,浦昭邦,等.共焦显微扫描探测技术的发展[J].光学技术,2008,34(1):94-97

[6]李现勇.Visual C++串口通信技术与工程实践[M].北京:人民邮电出版社,2002

猜你喜欢

窗体针孔串口
一起来探案
浅谈AB PLC串口跟RFID传感器的通讯应用
汽车电泳漆膜的缩孔与针孔
试谈Access 2007数据库在林业档案管理中的应用
针孔问题该如何处理
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
决战前夜
巧设WPS窗体控件让表格填写更规范