FD-110A型涡轮分子泵控制器串口通信的实现与应用

2009-02-24 殷际英,赵永刚 北方工业大学机电工程学院

        在现代工业控制中,串口通信的应用越来越广泛。单片机和PC 机之间的串口通信在进行数据交换时经常被使用。在串行通信时,要求通信双方都采用一个标准接口,RS-232C接口是单片机和PC机进行通信最常用的一种接口。单片机与PC机进行串口通信最简单的三线制法,即接收数据针脚(RxD)与发送数据针脚(TxD)相连,彼此交叉,信号地(GND)对应相接,如图1所示。

RS-232 端接口 

      为了实现单片机和PC机之间的串口通信,采用VC++6.0来实现编程,VC++6.0是一种功能强大的面向对象的Windows 编程开发平台。与以往DOS 下串行通信不同,Windows 不提倡应用程序直接控制硬件,而是通过Windows 系统提供的设备驱动程序来进行数据传递。串口在Win32 中是作为文件来处理的,而不是直接对端口进行操作。本文采用多线程串口编程工具CSerialPort 类来实现PC机与单片机之间的通讯。

1 使用CSerialPort 类实现串行通信

      CSerialPort 类是由Remon Spekreijse 提供的串口类,该类支持线连接(非MODEM)的串口编程操作。

     CSerialPort 类是基于多线程的,其工作流程如下:首先设置好串口参数,再开启串口监测工作线程,串口监测工作线程监测到串口接收到的数据、流控制事件或其他串口事件后;就以消息方式通知主程序,激发消息处理函数来进行数据处理,这是对接收数据而言的;发送数据可直接向串口发送。具体实现如下:

1.1 添加类文件

      (SerialPort.h 和SerialPort.cpp)并定义类对象m_SerialPort,(若要操作多个串口,则要为每个串口均定义一个类对象)。

1.2 串口的初始化

      串口的初始化代码一般在OnInitDialog()函数中实现,下面给出了主要代码以及定义了一个布尔变量m_bSerialPortOpened 用来标志串口是否打开。

if (m_SerialPort.InitPort (this, nPort, 4800,'D',8,1,EV_RXFLAG | EV_RXCHAR,512))

{ m_SerialPort.StartMonitoring(); // 启动监测辅助线程

m_bSerialPortOpened=TRUE;

else

{AfxMessageBox(" 没有发现此串口或被占

用");

m_bSerialPortOpened=FALSE;

}

1.3 接收数据

      接收处理在串口事件消息处理函数OnComm()中实现。并将接收到的字符显示在接收编辑框中,下面代码中,定义了接收数据变量m_ReceiveData,WPARAM、LPARAM 类型是多态数据类型(polymorphic data type), 根据需要自动适应,每当串口接收缓冲区内有一个字符时,就会产生一个WM_COMM_RXCHAR 消息, 触发OnComm()函数这时就转到函数中进行数据处理。

LONG CFD110ADlg::OnComm (WPARAM ch,

LPARAM port)

{ m_ReceiveData+=ch;

UpdateData (FALSE); // 将接收到的字符显示

在接收编辑框中

return 0;

}

1.4 数据发送

if(!m_bSerialPortOpened) return; // 检查串口是

否打开

UpdateData(TRUE); // 读入编辑框中的数据

m_SerialPort.WriteToPort((LPCTSTR) m_strSend-Data ) ; // 发送数据

2 PC 机与单片机之间的相互通信

       FD-110A 型分子泵控制器是供高速无刷直流电动机的电子换向器,其使用51 系列单片机作为控制器。具有4 位LED 数码管显示频率、电压、电流值;3 只键盘用于启动、停止控制,频率、电压、电流显示切换及高、低转速设置;过流、过热、超时声光保护报警;本地线控和远程RS232通讯控制。

2.1 C51 单片机串行口协议

(1) 通讯波特率4800bit/S,格式8.1.1

(2) 命令格式:

 

长度:参数的长度。无参数时填零。

异或效验:从命令码开始。

2.2 PC 机与单片机接通后,PC 机发送以下命令:

AB 80 00 80 分子泵停止工作

AB 81 00 81 分子泵启动工作