基于MOXA多串口卡的陀螺稳定平台通信策略研究

2018-01-01 00:00:00李昂雷肖剑
现代信息科技 2018年5期

摘 要:监控系统是数字化陀螺稳定平台的重要组成部分,本文针对稳定平台高波特率、高数据更新率的通信需求,设计了基于MOXA多串口卡的通信策略。介绍了MOXA多串口卡的工作原理及特点,设计了通信程序流程,基于VC++编程实现了串行通信。实验结果表明,监控系统软件工作稳定可靠。

关键词:稳定平台;MOXA;串口通信;VC++

中图分类号:TP273.5 文献标识码:A 文章编号:2096-4706(2018)05-0050-03

Research on Communication Strategy of Gyro Stabilized Platform

Based on MOXA Multi Serial Card

LI Ang,LEI Xiaojian

(Military Delegate Office of Navy in Tianjin District,Beijing 100073,China)

Abstract:The monitoring system is an important part of the digital gyroscope stabilization platform. This paper aiming at the high baud rate and high data update rate of the stable platform,a communication strategy based on MOXA multi serial port card is designed. The working principle and characteristics of MOXA multi serial card are introduced,and the communication program flow is designed. Serial communication is realized based on VC++ programming. The experimental results show that the software of the monitoring system works stably and reliably.

Keywords:stabilized platform;MOXA;serial communication;VC++

0 引 言

陀螺稳定平台是航空、航天、车船和导弹系统工程中的重要设备,在现代军、民用领域中发挥着越来越重要的作用[1-3]。它的主要功能是隔离载体角运动,在载体机动状态下建立稳定基准面,保证安装在平台上的测量设备具有稳定的工作状态,隔离振动等干扰因素对测量或探测的影响,例如现代武器要求具备行进间稳瞄、跟踪、射击能力,载体(飞机、坦克、舰艇等)运动过程中需要使用稳定平台,保持武器系统的姿态基准,从而减小载体运动对武器系统精度的影响[4];另外,在海洋、航空重力测量过程中也需要将重力传感器安装在稳定平台上,从而保证重力传感器始终保持垂直,减小载体角运动对重力测量精度的影响[5]。

陀螺稳定平台数字化控制回路相比于传统的模拟电子系统具有体积小、成本低、可靠性高等优势,而上位机监控系统是陀螺稳定平台控制系统的重要组成部分,其主要功能是实现上位机与稳定平台之间的数据通信,从而实时监控平台状态。上位机与稳定平台之间的通信可以通过串口实现。文献[6,7]介绍了在VC++开发平台下,基于MSComm进行串口编程的方法。MSComm是VC++的一个ActiveX控件,它高度集成化的特点使串口编程更为简单;文献[8]设计了一种永磁同步电机控制器串口通信上位机程序,它基于VC++6.0开发环境,利用Windows API读写串口函数,通过定时器消息响应查询串口来实现数据的接收;文献[9]测试分析了基于Visual Basic中的Active X控件、Visual C++中的Active X控件和Win32 API函数的3种Visual Studio平台上串行通信方法性能。通过对文献的分析可知,在高波特率和高数据更新频率的情况下,用MSComm控件进行串口通信编程,主机CPU的负荷较重,可靠性也不高。本文研究的陀螺稳定平台上位机监控系统需要满足高波特率和高数据更新率的通信需求,鉴于此,本文利用MOXA公司推出的C218Turbo PCI多串口卡以及PComm函数库实现实时通信。使用PComm进行通信编程,较之MSComm32,降低了程序开发难度,缩短了程序开发周期,同时也提高了程序的可靠性。实验证明C218Turbo PCI在高波特率、高数据更新率下通信可靠。

1 C218Turbo PCI多串口卡简介

C218Turbo PCI多串口卡是一款智能MOXA卡[10-12],它专为PCI总线设计,特别适合远程接入、工业控制和办公自动化工程,可用于Windows(2000,XP/2003/Vista x86/x64,9X/ME/NT)、DOS、Linux 2.4/2.6、SCO Open Server 5/6、UnixWare 7和QNX 4操作系统。

C218Turbo采用了MOXA定制ASIC芯片,使电路板面积大大缩小,减少和缩短了系统连线,使该板具有较高的可靠性和较低的功耗,同时系统性能与老产品相比有很大提高,C218Turbo之所以被称为智能MOXA卡,是因为它使用了TMS320BC203 RISC处理器对输入输出数据进行管理,这将会减少主机CPU的通信开销。512KB的On-board双口RAM为输入输出数据提供了较大的缓存区,有效地减少了主机CPU用于通信的开销,较大缓冲区的使用也防止了数据丢失。由于有上述强大的硬件配置,C218Turbo系列可以在8个串口同时工作的情况下,保持高吞吐量,而这只占用主机处理器很少一部分时间。

UART采用TI550C芯片作为异步通信控制器,可支持50b/s到921.6Kb/s的全双工异步通信,TI550C带有16B的片内FIFO和硬件数据流控制部件大大提高了数据吞吐量,同时也减轻了TMS320BC203RISC处理器的通信控制开销。C218Turbo PCI本身只支持RS-232接口规范,通过外接的转换器可支持RS-422和RS-485串口标准。

在使用智能MOXA卡时,需要正确理解驱动缓存和用户缓存的概念。以C218Turbo PCI为例,使用C218Turbo PCI进行串口通信的数据流程如图1所示。

图1 C218Turbo PCI通信原理

对于数据输入的情况,外部数据首先进入UART控制器的FIFO中,然后RISC处理器从FIFO中读取接收到的数据,并将这些数据放入驱动缓存(双端口RAM)中,双端口RAM中的数据由RISC处理器管理。用户通过调用PComm库函数可以将双端口RAM中的数据读入用户缓存。对于数据输出的情况,数据流反向。由于用于驱动缓存的是双端口RAM,双口RAM最大的特点是存储数据共享,它拥有两套独立的地址、数据和控制线,允许两个独立的CPU或控制器同时异步访问存储单元。因此,主机的CPU可以直接访问这一存储单元。这样主机CPU与C218Turbo PCI之间的数据交换速度很快,可将大量数据一次读出或写入,大大减轻了主机用于通信的资源消耗,可以使系统工作效率显著提高。

2 串行通信指标及程序流程

本文中的陀螺稳定平台监控系统的上位机采用工控机,下位机为以陀螺仪和加速度计为核心传感器的稳定平台,下位机主要输出根据陀螺仪和加速度计解算得到的稳定平台的姿态信息以及速度位置信息。上位机实时采集陀螺稳定平台输出的数据,将数据帧解包之后,使用姿态角和角速率信息控制稳定平台,使之实时追踪当地地理水平面。

陀螺稳定平台采用RS-232串口输出导航数据。通信波特率设置为921.6Kbps,数据更新率为500Hz。普通串口或串口卡难以可靠地接收这样高波特率和高更新率的数据,即使能正确接收,通信程序也将占用大量的上位机CPU资源,通信程序运行后,上位机难以可靠地完成其他任务。因此,本文中使用C218Turbo PCI多串口卡实现稳定、可靠、智能化的串口通信。

利用MOXA C218Turbo PCI多串口卡实现陀螺稳定平台与上位机之间通信的程序流程如图2所示。

通信程序采用了多线程技术。主线程主要负责根据用户指令打开通信板卡、创建读数据线程、关闭读数据线程以及关闭通信板卡。子线程主要负责对陀螺稳定平台输出的数据进行处理,包括按协议对数据进行解析、显示数据、保存数据以及转发有用数据。

3 基于VC++的串行通信的实现

在MFC下的32位串口通信程序可以使用两种方法,即利用ActiveX控件和使用API通信函数。MSComm通信控件有一系列的属性和用户接口,使用ActiveX控件,程序实现非常简单,结构清晰,缺点是不够灵活,而使用API通信函数进行串口通信编程的方法比较复杂,需要开设一个辅助线程,用于实时监控串口状态,接收和发送数据。在MFC下的串口通信中,多数使用的是API通信函数。以上两种方法虽然都能用来编写串口通信程序,但程序设计复杂,对编程人员的要求较高,特别是使用API通信函数时更为复杂。

MOXA公司为Windows系统提供了PComm函数库。使用PComm进行通信编程,程序的可靠性较之使用MSComm32控件有明显提高,而相对直接使用Win32 Comm API函数编程,则降低了程序开发难度,缩短了程序开发周期,同时它还支持多进程多线程的串行通信编程,适用于所有的Win32下的串行通信端口。目前该函数库专门应用于Windows2000、WindowsXP/2003/Vista x86/x64和Windows9X/ME/NT,支持多种编程语言,如Visual Basic、C++、Delphi等。

要使用PComm.Dll中的函数,必须在编译选项中指明它所在的路径。在Visual C++环境下使用PComm,需要进行以下操作:

(1)将包含到主程序的源文件中;

(2)将PComm.lib文件导出到连接库列表中;

(3)将PComm.h和PComm.lib文件放到执行路径中。

3.1 PComm串行通信函数

本文主要用到了以下几个PComm.dll库函数:

串口设置函数:sio_ioctl(int port、int baud、int mode)。port表示串口号,baud表示波特率,mode表示数据位、停止位和校验位;

打开串口函数:sio_open(int port)。port表示串口号;

关闭串口函数:sio_close(int port)。port表示串口号;

写串口函数:sio_write(int port,char*buf,int len)。port表示串口号,buf表示传输缓冲区指针,len表示传输缓冲区的长度;

读串口函数:sio_read(int port,char*buf,int len)。port表示串口号,buf表示传输缓冲区指针,len表示传输缓冲区的长度;

串口中断触发函数:sio_cnt_irq(int port,VOID(CALLBACK *func)(int port),int count)。port表示串口号,func表示中断服务程序的入口地址,count表示数据长度。

3.2 部分程序代码

本文的软件程序中,基于PComm库函数的部分通信程序代码及注释如下:

#define BaudRate2 B115200 // 综控口波特率

#define DataBits BIT_8 // 数据位

#define Parity P_NONE // 效验位

#define StopBits STOP_1 // 停止位

CString a;

GetDlgItemText(IDC_BTN_PORTOPEN,a);

if(!strcmp(a,\"打开综控口\"))

{

if(SIO_OK!=sio_open(1)) // 打开串口1

{

MessageBox(\"串口打开错误\");

}

else

{

sio_ioctl(1,BaudRate2,DataBits | StopBits | Parity);

// 设置串口1的波特率,数据位,停止位和校验位

sio_cnt_irq(1,CntIrq2,1); // 设置串口1的中断触发函数

SetDlgItemText(IDC_BTN_PORTOPEN,\"关闭综控口\");

}

}

else

{

sio_close(1); // 关闭串口1

SetDlgItemText(IDC_BTN_PORTOPEN,\"打开综控口\");

}

……

VOID CALLBACK CntIrq2(int port) // 中断服务程序定义

{

……..

}

通过测试实验,本文研究的基于MOXA C218Turbo PCI多串口卡的陀螺稳定平台监控软件能够实现平台与上位机的高速、稳定通信。

4 结 论

陀螺稳定平台在军、民用领域都有重要应用,上位机监控系统是数字化稳定平台的重要组成部分。要准确监控和分析陀螺稳定平台的状态,需要监控系统能够高速采集和保存稳定平台输出的数据。针对这一问题,本文为数字化陀螺稳定平台设计了一种基于MOXA多串口卡的通信策略,从而实现了高速、稳定、可靠的数据通信。

MOXA C218Turbo PCI是一款智能型多串口卡,它使用了TMS320BC203 RISC处理器对输入输出数据进行管理,这将会减少主机CPU的通信开销,为高速串口实时通信提供了可能性。同时PComm库函数为用户提供了相对简洁,并且高度可靠的串口通信方式,因此可以满足不同用户的工业测量和自动化控制需求。本文利用MOXA多串口卡实现了高波特率和高数据更新率的串行通信,测试试验证明,本文设计的通信策略能够满足陀螺稳定平台的数据通信需求,监控系统软件工作稳定可靠。

参考文献:

[1] 樊苗.船载雷达稳定平台的设计 [D].大连:大连海事大学,2017.

[2] 于丽.机载陀螺稳定平台的自抗扰控制算法研究 [D].长春:长春理工大学,2017.

[3] 孙立志.光电稳定平台视轴稳定技术研究 [D].哈尔滨:哈尔滨工业大学,2017.

[4] 王凌欣.陀螺稳定平台分数阶系统建模及控制方法研究 [D].长春:长春理工大学,2017.

[5] 朱倚娴,陆源,许江宁,等.一种陀螺稳定平台自适应模糊-PID复合控制方法 [J].中国惯性技术学报,2014,22(3):317-321.

[6] 李薇,耿淑琴.基于VC实现MSP430与PC之间的异步串行通信 [J].微型机与应用,2012,31(5):23-25.

[7] 周小刚,单斌,汪立新,等.基于PC104的嵌入式转台控制系统设计 [J].自动化应用,2013(1):62-63+66.

[8] 龚寄,何雅槐.永磁同步电机控制器串口通信上位机软件设计 [J].自动化应用,2016(8):21-23.

[9] 董圣友,肖继学,廖旋,等.Visual Studio中串行通信方法实时性能测试 [J].中国测试,2015,41(2):124-128.

[10] 赵素娟.基于Moxa多串口卡的多串口通信的VC++实现 [J].计算机与现代化,2011(8):117-119+123.

[11] 丁云霞,曾连荪.基于VC++6.0的RS-422串口通信设计 [J].信息技术,2010,34(9):73-75.

[12] 李瑞先.VC++中基于MOXA多串口卡串行通信的实现 [J].通信技术,2009,42(11):63-64+184.

作者简介:李昂(1988-),男,汉族,北京人,助理工程师,硕士。研究方向:惯性导航技术及应用;雷肖剑(1987-),男,畲族,浙江温州人,助理工程师,硕士。研究方向:军事运筹学。