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