新闻中心

EEPW首页 > 基于串口的信号源与解调器微机控制系统

基于串口的信号源与解调器微机控制系统

——
作者:康灿时间:2008-01-10来源:电子产品世界收藏

摘要:采用通用微机,基于串口,实现对遥感卫星地面接收系统中二次变频本振信号源和卫星下行数据高速解调器的控制,替代原有的人工设置的模式,实现了对信号源和解调器可靠、灵活、高效的控制。

关键字:信号源;解调器;串口;变频

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++教程


负离子发生器相关文章:负离子发生器原理


关键词:

评论


相关推荐

技术专区

关闭