FD-110A型渦輪分子泵控制器串口通信的實(shí)現(xiàn)與應(yīng)用

2009-02-24 殷際英,趙永剛 北方工業(yè)大學(xué)機(jī)電工程學(xué)院

        在現(xiàn)代工業(yè)控制中,串口通信的應(yīng)用越來越廣泛。單片機(jī)和PC 機(jī)之間的串口通信在進(jìn)行數(shù)據(jù)交換時(shí)經(jīng)常被使用。在串行通信時(shí),要求通信雙方都采用一個(gè)標(biāo)準(zhǔn)接口,RS-232C接口是單片機(jī)和PC機(jī)進(jìn)行通信最常用的一種接口。單片機(jī)與PC機(jī)進(jìn)行串口通信最簡單的三線制法,即接收數(shù)據(jù)針腳(RxD)與發(fā)送數(shù)據(jù)針腳(TxD)相連,彼此交叉,信號(hào)地(GND)對(duì)應(yīng)相接,如圖1所示。

RS-232 端接口 

      為了實(shí)現(xiàn)單片機(jī)和PC機(jī)之間的串口通信,采用VC++6.0來實(shí)現(xiàn)編程,VC++6.0是一種功能強(qiáng)大的面向?qū)ο蟮腤indows 編程開發(fā)平臺(tái)。與以往DOS 下串行通信不同,Windows 不提倡應(yīng)用程序直接控制硬件,而是通過Windows 系統(tǒng)提供的設(shè)備驅(qū)動(dòng)程序來進(jìn)行數(shù)據(jù)傳遞。串口在Win32 中是作為文件來處理的,而不是直接對(duì)端口進(jìn)行操作。本文采用多線程串口編程工具CSerialPort 類來實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的通訊。

1 使用CSerialPort 類實(shí)現(xiàn)串行通信

      CSerialPort 類是由Remon Spekreijse 提供的串口類,該類支持線連接(非MODEM)的串口編程操作。

     CSerialPort 類是基于多線程的,其工作流程如下:首先設(shè)置好串口參數(shù),再開啟串口監(jiān)測工作線程,串口監(jiān)測工作線程監(jiān)測到串口接收到的數(shù)據(jù)、流控制事件或其他串口事件后;就以消息方式通知主程序,激發(fā)消息處理函數(shù)來進(jìn)行數(shù)據(jù)處理,這是對(duì)接收數(shù)據(jù)而言的;發(fā)送數(shù)據(jù)可直接向串口發(fā)送。具體實(shí)現(xiàn)如下:

1.1 添加類文件

      (SerialPort.h 和SerialPort.cpp)并定義類對(duì)象m_SerialPort,(若要操作多個(gè)串口,則要為每個(gè)串口均定義一個(gè)類對(duì)象)。

1.2 串口的初始化

      串口的初始化代碼一般在OnInitDialog()函數(shù)中實(shí)現(xiàn),下面給出了主要代碼以及定義了一個(gè)布爾變量m_bSerialPortOpened 用來標(biāo)志串口是否打開。

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

{ m_SerialPort.StartMonitoring(); // 啟動(dòng)監(jiān)測輔助線程

m_bSerialPortOpened=TRUE;

else

{AfxMessageBox(" 沒有發(fā)現(xiàn)此串口或被占

用");

m_bSerialPortOpened=FALSE;

}

1.3 接收數(shù)據(jù)

      接收處理在串口事件消息處理函數(shù)OnComm()中實(shí)現(xiàn)。并將接收到的字符顯示在接收編輯框中,下面代碼中,定義了接收數(shù)據(jù)變量m_ReceiveData,WPARAM、LPARAM 類型是多態(tài)數(shù)據(jù)類型(polymorphic data type), 根據(jù)需要自動(dòng)適應(yīng),每當(dāng)串口接收緩沖區(qū)內(nèi)有一個(gè)字符時(shí),就會(huì)產(chǎn)生一個(gè)WM_COMM_RXCHAR 消息, 觸發(fā)OnComm()函數(shù)這時(shí)就轉(zhuǎn)到函數(shù)中進(jìn)行數(shù)據(jù)處理。

LONG CFD110ADlg::OnComm (WPARAM ch,

LPARAM port)

{ m_ReceiveData+=ch;

UpdateData (FALSE); // 將接收到的字符顯示

在接收編輯框中

return 0;

}

1.4 數(shù)據(jù)發(fā)送

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

否打開

UpdateData(TRUE); // 讀入編輯框中的數(shù)據(jù)

m_SerialPort.WriteToPort((LPCTSTR) m_strSend-Data ) ; // 發(fā)送數(shù)據(jù)

2 PC 機(jī)與單片機(jī)之間的相互通信

       FD-110A 型分子泵控制器是供高速無刷直流電動(dòng)機(jī)的電子換向器,其使用51 系列單片機(jī)作為控制器。具有4 位LED 數(shù)碼管顯示頻率、電壓、電流值;3 只鍵盤用于啟動(dòng)、停止控制,頻率、電壓、電流顯示切換及高、低轉(zhuǎn)速設(shè)置;過流、過熱、超時(shí)聲光保護(hù)報(bào)警;本地線控和遠(yuǎn)程RS232通訊控制。

2.1 C51 單片機(jī)串行口協(xié)議

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

(2) 命令格式:

 

長度:參數(shù)的長度。無參數(shù)時(shí)填零。

異或效驗(yàn):從命令碼開始。

2.2 PC 機(jī)與單片機(jī)接通后,PC 機(jī)發(fā)送以下命令:

AB 80 00 80 分子泵停止工作

AB 81 00 81 分子泵啟動(dòng)工作