基于串口的信號(hào)源與解調(diào)器微機(jī)控制系統(tǒng)
摘要:采用通用微機(jī),基于串口,實(shí)現(xiàn)對(duì)遙感衛(wèi)星地面接收系統(tǒng)中二次變頻本振信號(hào)源和衛(wèi)星下行數(shù)據(jù)高速解調(diào)器的控制,替代原有的人工設(shè)置的模式,實(shí)現(xiàn)了對(duì)信號(hào)源和解調(diào)器可靠、靈活、高效的控制。
關(guān)鍵字:信號(hào)源;解調(diào)器;串口;變頻
1 概述
遙感衛(wèi)星地面接收系統(tǒng)的衛(wèi)星下行信號(hào)經(jīng)天線捕獲后,需經(jīng)高速解調(diào)器解調(diào),將衛(wèi)星模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),再通過(guò)控制系統(tǒng)發(fā)送到記錄系統(tǒng)進(jìn)行數(shù)據(jù)的記錄與保存。在天線接收某顆衛(wèi)星數(shù)據(jù)之前,必須對(duì)解調(diào)器進(jìn)行星型設(shè)置,以使解調(diào)器工作頻率匹配此次接收工作對(duì)應(yīng)的衛(wèi)星數(shù)據(jù)頻率。當(dāng)有多個(gè)天線需同時(shí)接收多顆不同種類的衛(wèi)星時(shí),需事先設(shè)置好多臺(tái)解調(diào)器的匹配星型。通常,這項(xiàng)工作采用現(xiàn)場(chǎng)人工設(shè)置模式。
同時(shí),接收系統(tǒng)的衛(wèi)星下行信道要采用二次變頻技術(shù),第一次變頻使用固定本振,第二次變頻本振則需要根據(jù)不同的衛(wèi)星跟蹤頻率做相應(yīng)的變化[1]。目前,在日常接收運(yùn)行工作中,對(duì)衛(wèi)星數(shù)據(jù)的接收必須在接收不同衛(wèi)星時(shí)人工計(jì)算出二次變頻本振頻率(衛(wèi)星跟蹤頻率減去第一次變頻固定頻率),然后手動(dòng)設(shè)置二次變頻本振源輸出,每次跟蹤不同的衛(wèi)星必須到硬件設(shè)備現(xiàn)場(chǎng)直接操作信號(hào)源發(fā)生器。
由于信號(hào)源以及解調(diào)器與衛(wèi)星地面接收控制系統(tǒng)并不在同一機(jī)房,而且信號(hào)源采用的是MARCONI公司的2024/2025信號(hào)源發(fā)生器,其面板和屏幕是全英文界面,操作比較復(fù)雜,所以人工設(shè)置模式下的工作效率低下且容易出錯(cuò),不利于對(duì)衛(wèi)星數(shù)據(jù)的成功接收。
因此,開(kāi)發(fā)了信號(hào)源與解調(diào)器微機(jī)控制系統(tǒng),以使用通用微機(jī)控制代替人工操作,保證衛(wèi)星數(shù)據(jù)可靠、高效、靈活的接收,并提升遙感衛(wèi)星地面站智能化、自動(dòng)化的水平。
2 系統(tǒng)硬件結(jié)構(gòu)
系統(tǒng)硬件由通用微機(jī)、EIA RS-232C標(biāo)準(zhǔn)接口板、EIA RS-232C九針串口電纜接線方式和兩臺(tái)信號(hào)源發(fā)生器以及兩臺(tái)解調(diào)器組成,結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)框圖
其中微機(jī)主要用于運(yùn)行控制軟件,完成對(duì)信號(hào)源和解調(diào)器的控制操作;RS-232C接口板提供串口擴(kuò)展,使得一臺(tái)微機(jī)可以連接控制多臺(tái)硬件設(shè)備,保證硬件結(jié)構(gòu)的可擴(kuò)展性。
因?yàn)橄到y(tǒng)對(duì)數(shù)據(jù)傳輸速率要求不高,且微機(jī)與信號(hào)源發(fā)生器和解調(diào)器的通信距離只有十米,所以通過(guò)EIA RS-232C 九針串口(DB9)接頭進(jìn)行微機(jī)與信號(hào)源發(fā)生器以及解調(diào)器的互相連接即可滿足通信要求,且傳輸電纜無(wú)需外接調(diào)制解調(diào)器(modem)。另外,微機(jī)控制系統(tǒng)需同時(shí)滿足對(duì)多臺(tái)硬件設(shè)備的控制,接頭電纜各針之間要求交叉連接,具體的接線方法如圖2所示。
圖中,采用了RX與TX交叉互連,DCD、DSR與DTR交叉互連,RTS與CTS互連的接線方式,分別表示DCE(數(shù)據(jù)通訊設(shè)備)與DTE(數(shù)據(jù)終端設(shè)備)之間數(shù)據(jù)的傳送與接收,發(fā)送的請(qǐng)求與應(yīng)答,數(shù)據(jù)設(shè)備與終端的準(zhǔn)備情況。
3 系統(tǒng)的軟件結(jié)構(gòu)
{{分頁(yè)}}
3.1 系統(tǒng)的軟件架構(gòu)與界面
系統(tǒng)以通用微機(jī)和Windows操作系統(tǒng)為軟件平臺(tái),采用友好易懂的中文界面;使用時(shí),操作人員只需輸入待接收衛(wèi)星的跟蹤頻率、功率和解調(diào)器星型,也可將所有可接收衛(wèi)星的跟蹤頻率、功率存入微機(jī)文檔,在接收某顆衛(wèi)星時(shí)選擇相應(yīng)的星型,系統(tǒng)自動(dòng)匹配,無(wú)需操作人員手動(dòng)設(shè)置。本振頻率的計(jì)算由控制軟件自動(dòng)完成,本振頻率的輸出設(shè)置,解調(diào)器的星型匹配由微機(jī)與信號(hào)源、解調(diào)器通過(guò)串口通信實(shí)現(xiàn)。串口參數(shù)一般采用默認(rèn)值即可,操作人員無(wú)需更改。系統(tǒng)的控制界面如圖3所示。
圖3 系統(tǒng)運(yùn)行控制界面
3.2 串口通信簡(jiǎn)介
微機(jī)進(jìn)行數(shù)據(jù)傳送的方式通常有兩種:并行和串行。
串行數(shù)據(jù)傳送是指數(shù)據(jù)在單條一位寬的傳輸線上,一位接一位的按順序分時(shí)發(fā)送的數(shù)據(jù)傳送方式。其特點(diǎn)是:數(shù)據(jù)按位傳送,并按位順序進(jìn)行,最少只需一根傳輸線即可完成,成本低。串行數(shù)據(jù)傳送的距離可以從幾米到幾千米。根據(jù)數(shù)據(jù)在傳輸線上的傳輸方向的不同,串行通信可分為單工、半雙工和全雙工三種方式[2]。
在Windows下開(kāi)發(fā)串口通信程序的方法有四種:一種是利用API的方法,即使用文件,串口也是文件;一種是利用Windows的讀寫(xiě)端口函數(shù)或者開(kāi)發(fā)驅(qū)動(dòng)程序直接對(duì)串口進(jìn)行操作;一種是利用第三方或者自己編寫(xiě)的通信類;一種是利用串口通信組件,如ActiveX控件MSComm。
串口的使用主要包括下面幾點(diǎn):
打開(kāi)和關(guān)閉串口:Windows中串口被作為文件處理,串口的打開(kāi)、關(guān)閉、讀寫(xiě)等函數(shù)與操作文件的函數(shù)完全一致。在進(jìn)程中使用串口前,應(yīng)先打開(kāi)通信資源,返回一個(gè)標(biāo)識(shí)該資源的句柄,線程正是通過(guò)使用該有效句柄來(lái)訪問(wèn)相應(yīng)資源。為保證串口通信傳輸?shù)目煽啃?,串口打開(kāi)一般設(shè)為非共享模式和可讀寫(xiě)模式。
設(shè)置串口狀態(tài):打開(kāi)串行通信資源時(shí),系統(tǒng)將根據(jù)上次打開(kāi)資源時(shí)設(shè)置的初始值配置資源,其中包括設(shè)置控制塊(DCB)值和用于I/O操作中的超時(shí)值。大多情況都是在使用串口前進(jìn)行串口的自主配置,包括串口號(hào)、數(shù)據(jù)位、校驗(yàn)位、停止位、發(fā)送與接收緩沖區(qū)大小等。
串口的讀寫(xiě):對(duì)串口的讀寫(xiě)可采用同步、異步、查詢、事件驅(qū)動(dòng)等方式。同步方式是指必須完成了讀寫(xiě)操作函數(shù)才返回,異步方式則在調(diào)用讀寫(xiě)函數(shù)后立即返回,查詢方式是同步方式的一種派生,由線程定時(shí)查詢串口的接收緩沖區(qū),事件驅(qū)動(dòng)方式則是設(shè)置串口事件,當(dāng)有事件發(fā)生時(shí)調(diào)用事件響應(yīng)函數(shù)進(jìn)行處理。
串口的超時(shí)設(shè)置:在串口通信時(shí)如果數(shù)據(jù)傳輸突然中斷,對(duì)串口的讀寫(xiě)操作可能會(huì)進(jìn)入無(wú)限期的等待狀態(tài),為避免這種情況發(fā)生,必須設(shè)置中口讀寫(xiě)操作的等待時(shí)間,等待時(shí)間超過(guò)后,串口的讀寫(xiě)操作將被主動(dòng)放棄,這樣即使數(shù)據(jù)傳輸突然中斷程序也不會(huì)被掛起或阻塞。
3.3 基于串口通信的控制軟件
考慮到控制系統(tǒng)的實(shí)時(shí)性及高可靠性,控制軟件中的串行通信部分沒(méi)有采用功能更強(qiáng)的API方法,而是采用使用更簡(jiǎn)便,封裝性更好,更易于調(diào)試的串口通信組件。這里采用的是MOXA公司的PCOMM庫(kù)。該庫(kù)提供了一系列串口控制函數(shù)[3],使用方便簡(jiǎn)潔高效??刂葡到y(tǒng)中,主要使用單工的通信方式,由控制軟件向信號(hào)源及解調(diào)器發(fā)送控制字,并采用異步串口寫(xiě)方式,在發(fā)送端發(fā)送控制字后立即返回,并通過(guò)設(shè)置串口超時(shí)以及查看硬件設(shè)備面板中的顯示信息來(lái)判斷控制字是否成功發(fā)送。軟件的流程圖如圖4所示。
{{分頁(yè)}}
相應(yīng)的PCOMM庫(kù)的串口函數(shù)如下所示:
sio_open(int port):打開(kāi)一個(gè)串口。
sio_ioctl(int port, int baud, int mode):設(shè)置串口通信參數(shù),主要包括波特率,數(shù)據(jù)位,停止位,校驗(yàn)位。
sio_flush(int port, int func):清空串口的輸入輸出緩沖區(qū)。
sio_SetWriteTimeouts(int port,DWORD TotalTimeouts):設(shè)置串口寫(xiě)操作的超時(shí)。
sio_write(int port, char *buf, int len):使用串口發(fā)送數(shù)據(jù)。
sio_close(int port):關(guān)閉某個(gè)已打開(kāi)的串口。
上述函數(shù)均返回int型數(shù)據(jù),若函數(shù)調(diào)用成功則返回0,否則返回一個(gè)負(fù)整數(shù);
主控制函數(shù)編程部分實(shí)現(xiàn)代碼如下:
void CSignalGenDlg::Send()
{
UpdateData(TRUE); //獲取從程序界面中輸入的串口號(hào),串口參數(shù),超時(shí),頻率,功率,星型
sprintf(m_szWriteBufferFre,"CFRQ:VALUE %sMHZ",m_strFre); //頻率控制字
sprintf(m_szWriteBufferPower,"RFLV:VALUE %sDBM",m_strPower);//功率控制字
sprintf(m_szWriteBufferSat1,"B %s E",m_strSat1);// 解調(diào)器1控制字
sprintf(m_szWriteBufferSat2,"B %s E",m_strSat2);// 解調(diào)器2控制字
int nRes=sio_open(m_Port);//打開(kāi)串口
if(0==nRes)
{
sio_ioctl(m_Port,B9600,P_NONE|BIT_8|STOP_1);//設(shè)置串口通訊參數(shù)
sio_flush(m_Port,2); //清空輸入和輸出緩沖區(qū)
sio_SetWriteTimeouts(m_Port,m_dwTimeouts);//設(shè)置串口寫(xiě)操作的超時(shí)
Sleep(50);
sio_flush(m_Port, 2);
sio_write(m_Port,m_szWriteBufferFre,m_strFre.GetLength());//發(fā)送信號(hào)源頻率控制字
Sleep(100);
sio_flush(m_Port, 2);
sio_write(m_Port,m_szWriteBufferPower,m_strPower.GetLength());//發(fā)送信號(hào)源功率控制字
Sleep(100);
sio_flush(m_Port, 2);
sio_write(m_Port,m_szWriteBufferSat1,m_strSat1.GetLength());//設(shè)置解調(diào)器1的星型
sio_write(m_Port,m_szWriteBufferSat2,m_strSat2.GetLength());//設(shè)置解調(diào)器2的星型
sio_close(m_Port);//關(guān)閉串口
}
else
AfxMessageBox("串口打開(kāi)失敗!");
}
4.小結(jié)
串口是實(shí)現(xiàn)微機(jī)控制的很常用的一種通信接口。信號(hào)源與解調(diào)器微機(jī)控制系統(tǒng)正是基于串口,采用單工方式給信號(hào)源及解調(diào)器發(fā)送控制字,控制信號(hào)源的頻率和功率輸出,設(shè)置解調(diào)器的星型,從而由微機(jī)控制替代了人工操作,極大地提高了衛(wèi)星數(shù)據(jù)接收的成功率和可靠性,在衛(wèi)星地面站日常接收運(yùn)行工作中發(fā)揮了重要作用。
此外,使用串口還能基于雙工方式,自定義串口協(xié)議進(jìn)行數(shù)據(jù)與文件的發(fā)送與接收[4]。遙感衛(wèi)星地面站小天線項(xiàng)目中的衛(wèi)星地面接收控制系統(tǒng)正是基于串口以及子自定義的串口協(xié)議,實(shí)現(xiàn)了對(duì)站控前端機(jī)、數(shù)據(jù)通道開(kāi)關(guān)(DPS)、天線控制單元(ACU)等衛(wèi)星數(shù)據(jù)接收硬件設(shè)備的實(shí)時(shí)反饋控制,從而保證了對(duì)衛(wèi)星數(shù)據(jù)準(zhǔn)確、靈敏、智能化的接收。
參考文獻(xiàn):
[1] Dennis Roddy,衛(wèi)星通信,北京:清華大學(xué)出版社,2003.1
[2] 李強(qiáng),賈云霞,Visual C++項(xiàng)目開(kāi)發(fā)實(shí)踐,北京:中國(guó)鐵道出版社,2003.8
[3] 張友生,遠(yuǎn)程控制編程技術(shù),北京:電子工業(yè)出版社,2002.1
[4] 譚思亮,鄒超群等,Visual C++串口通信工程開(kāi)發(fā)實(shí)例導(dǎo)航,北京:人民郵電出版社,2003.1
模擬信號(hào)相關(guān)文章:什么是模擬信號(hào)
c++相關(guān)文章:c++教程
負(fù)離子發(fā)生器相關(guān)文章:負(fù)離子發(fā)生器原理
評(píng)論