基于Windows CE的遥控遥测警报系统的设计

技术分类: 测试与测量  工业电子  | 2008-05-13
来源:电子产品世界 | 颜颐欣 王守利 吕实诚

  WinCE 的制定是在Platform Builder下完成的,在此过程中需要选择特定的开发板支持包BSP和相应的应用程序和服务组件,在选择过程中为了节约硬件资源,使内核在能到达要求的前提下尽可能的小,需要尽量精简应用程序和组件。

  自己编写应用程序后,为了使应用程序也能成为镜像系统的一部分,可以在Platform Builder下创建自己的CEC文件,使其成为新的特性并添加到需制定的系统特性目录中去。

  制定完成的系统经过编译后即可生成系统内核镜像,同时还能生成一个Eboot文件。首先通过JTAG下载Eboot文件,再通过以太网下载系统镜像文件,在这基础上便可以完成对系统同的调试和固化。

  应用程序

  应程序主要是绘制人机交互界面,实现串口通信功能,并具有声音的采集、编码和播放功能。

  应用程序是在Embedded Visual C++的环境下编辑的。Win CE同桌面Windows系统一样也是一个图形界面的操作系统他可以帮助我们设计出丰富的图形界面,Win CE提供了功能强大的图形设备接口(GDI),利用GDI函数可以方便地绘制出点、线、矩形、多边形、椭圆、位图、以及文本等,同时和Visual C++一样embedded Visual C++也提供了许多常用的控件,所以绘制人机交互界面的工作相对简单。

  Windows CE的串行口通信程序

  在Visual C++中实现串口通信可以简单地使用MSCOMM控件,但是在Embedded Visual C++中没有此控件,所以串口的实现相对复杂。但是Win CE提供了丰富的API函数库,在EVC的编辑环境中可以使用API函数来实现嵌入式系统控制器和无线数传模块的通信。具体过程是首先对串口进行初始化,其中包括使用CreateFile函数打开存在且没有被占用的串口资源,设置设备的属性例如波特率,数据位数,校验方式等。然后设置串口的读写时间,指定端口监测的事件集。在串口的读写过程中,因为写是可以控制的,而读的时候无法确定数据什么时候能收到,所以可以在程序的主线程中写数据,同时创建一个辅助线程专门用来读数据,当有数据需要发送时,使用WriteFile函数向已打开的串口写需要发送数据。而在辅助线程中,用WaitCommEvent来检测线路状态,当检测到收到一个字符的事件发生时调用ReadFile函数对串口进行读操作。读取数据后,为了触发事件响应以完成数据处理,可以在辅助线程中使用PostMessageBox函数向应用程序主窗体类邮递一个自定义消息,这样就可以在主线程中完成消息响应过程。

  值得注意的是Win CE操作系统是一种UNICODE环境它只支持UNICODE的应用程序和控件,这也是为什么同样是32位机,具有基本类似的API函数,很多在 Windows下能运行的控件或类在WINCE环境中无法正常工作的原因。所以在进行串口数据发送的时候需要把数据由UNICODE字符串转换为ANSI 字符串,可以使用API函数,WideCharToMulitByte进行转换。

  另外WINCE操作系统中不支持重叠I/O模式,所以在打开串口的时候需要选择以非重叠I/O方式打开,但是在同步方式下如果有一个通讯API 在操作,另一个会被阻塞,直到上一个操作完成,所以当读数据的线程停留在WaitCommEvent的时候,WritFile就无法继续执行。为了解决此问题需要在调用WritFile函数之前使用TerminateThread函数先终止写线程,在发送完数据后再次创建同样的写线程用来等待数据接收事件。因为无线数传模块就是被设计成使用半双工方式进行数据传输的,所以使用非重叠方式是合理的。

  系统进行警报发放时,由控制中心向终端发送数据包,数据包被定义为如下格式:

数据包

  终端接收到数据头后,判断设备地址是否为本机地址,如果是则读取命令,根据命令字,发送不同的警报,如果地址不是本机地址则丢弃数据包。

  Windows CE中声音播放程序的实现

  系统的在检测时需要系统在终端进行声音播放和录入,再通过无线网络把录入的声音文件传送到控制中心。在应用程序中,声音的录入和播放使用波形音频编程接口来实现,通过这个接口可以对音频以脉冲编码调制(pulse code modulation,PCM)的方式进行压缩编码,并能使应用程序精确地控制波形音频的输入输出设备。

  声音的录制过程如下:

  1. 使用waveInOpen函数打开一个音频输入设备;

  2. 使用WAVEHDR结构体分配录制声音时所需的内存,然后调用waveInPrepareHeader函数准备一个音频输入的数据头;

  3. 调用waveInAddBuff函数为音频输入设备准备一个缓存数据块;

  4. 使用 waveInStart函数开始录制音频;

0
0
(请您对文章做出评价)
1】【2】【3
加载中

对文章的评论

更多评论

剩余字数:  

相关在线研讨会

我要参加

工业信号链路解决方案

时间:2008-08-06 10:00:00-12:00:00
简介:工业应用常常需要进行高精度的信号检测和高可靠性的处理。有些应用还要求以非常高的速度来执行精准的信号处理。为了有效地构建整体…

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销

  • 博客推荐

  • 论坛推荐

  • 在线研讨会