当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]引 言许多时候,我们需要了解远距离的某个工作现场的某些工作参数,或者对某些工作指标进行控制(开、关控制)。例如,需要了解远距离无人职守的发射机的功率情况,需要开启或

引 言

许多时候,我们需要了解远距离的某个工作现场的某些工作参数,或者对某些工作指标进行控制(开、关控制)。例如,需要了解远距离无人职守的发射机的功率情况,需要开启或关闭高山上电视塔的灯光,等等。这些一般都是通过基于C/S或者B/S等的网络手段来实现的,需要专门的网络线路和监控端软硬件的支持,构筑这样的应用系统投资一般都比较大,监控方位置的灵活度也被局限于有监控端软硬件的环境中。这里介绍一种在嵌入式WinCE系统下利用GSM Modem,用普通电话(包括手机,下同)就可以实现远程监控的方法。不需要有专用的监控端软硬件的支持和其他专用的网络线路,借助GSM的无线通信网络,投资大大缩小;监控方的位置可以处在任何有电话的地方,方便灵活。监控操作的选择由电话的按键来实现,监测到的参数通过语音的方式反馈到监控方的电话上;可以满足大多数远程监控应用场合的要求。

1 应用系统架构

本系统主要由GSM移动通信网、GSM Modem、以S3C2410为核心的硬件和WinCE系统组成,如图1所示。

需要监测的参数或需要控制的指标通过某种方式与嵌入式系统构成上、下位采集与控制体系。嵌入式系统发出测控指令,可以实现对现场相应数据的采集和控制。采集到的现场数据以数据文件形式保存在嵌入式系统上。目前,有关嵌入式系统对下位现场的具体采集与控制操作介绍的文献很多,这里不再复述。

2 嵌入式系统受监控端软件设计

嵌入式系统中受监控端软件是本监控系统的核心。它一方面管理GSM Modem识别远程电话的控制指令(按键识别)、向电话反馈对应的语音数据,另一方面还要根据远程电话的指令完成对下位现场的测控。

2.1 串行口及GSM Modom的初始化

根据GSM Modem连接的串行口,cornID用

打开该串行口。根据返回句柄hSerial的值,可以判断打开是否成功。由“GetCommState(hSerial,&dcb);”获得comID的状态,同时自动填入不用的DCB结构成员。再用“SetCommState(hSerial,&dcb);”就可以初始化该串口了。之前,&dcb要设置自己的参数,如:

最后用“WriteFile(hSerial,szBuffer,strlen(szBuffer),&dwBytesWritten,&os_w);”向串口写入GSM Modem的

初始化数据(AT命令)。不同的GSM Modem其AT命令可能有所不同(可以从GSM Modem的用户手册中获得)。笔者使用的GSM Modem的初始化数据为“ats0=1+fclass=8”、“at+vsm=128,11025”。

2.2 按键识别

因为监控指令是由远程电话通过电话上的按键发出的,所以在受监控端,正确识别电话的按键是非常关键的。在一个处理线程中,可以用如下程序进行识别:

运行后,有电话拨入并按下567890,执行结果如图2所示。

对于按键组合,可以将单个键的值依次存放到缓冲区。在程序中控制好flag的值就可以实现对按键组合的识别。

2.3 语音传送

将语音数据写入GSM Modem,拨入的电话一端就可以听到相应的语音。在写入语音数据之前,要先用“at+vtx”通知GSM Modem,此后的数据是语音数据。

其中,wavFileName为所传送的语音数据文件。

2.4 嵌入式系统受控端整体程序描述

嵌入式系统受控端整体程序框图如图3所示。

3 语音合成技术(TTS)

将保存在嵌入式系统上从现场采集来的数据转换成对应的语音数据,需要进行语音合成。在语音数据库中存有“ling”、“yi”、“er”、“san”……“dian”和单位名称发音的数据文件。假设要监测的是现场的电流数据,例如,下位采集来的保存到嵌入式系统上的某电流数据为5.12 A,那么就需要将“wu”、“dian”、“yi”、“er”和“an”的语音数据文件合成一个语音数据文件,以便于传送。

BitSize位现场数据(包括小数点)语音合成的具体程序描述如下:

需要强调的是,这里用到的语音数据必须是“裸”数据,也就是去掉有关文件头的纯粹的语音数据(可以在录制单个语音文件后处理掉)。各个语音数据的大小也要记录在一个表列中,以便在调整目标语音文件指针时用到。最后生成的目标语音文件也是一个只含有“裸”数据的文件,在进行语音传送时可以直接使用。[!--empirenews.page--]

结 语

本文介绍的在嵌入式WinCE系统下利用GSM Modem所实现的远程监测与控制的方法,以较小的投资实现了对远程工业现场的测控,充分地利用了现有的GSM移动通信网络资源。在测控距离远、实时性要求不高的场合都可以选择使用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在工业物联网设备部署中,Modbus通信故障是导致系统停机的首要原因之一。据统计,超过60%的现场问题源于通信配置错误或数据解析异常。本文从嵌入式系统开发视角,系统阐述Modbus通信调试的方法论,结合实际案例解析如何高...

关键字: 嵌入式系统 Modbus通信

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是保障系统可靠性的核心组件,其初始化时机的选择直接影响系统抗干扰能力和稳定性。本文从硬件架构、软件流程、安全规范三个维度,系统分析看门狗初始化的最佳实践...

关键字: 单片机 看门狗 嵌入式系统

人工智能(AI)和机器学习(ML)是使系统能够从数据中学习、进行推理并随着时间的推移提高性能的关键技术。这些技术通常用于大型数据中心和功能强大的GPU,但在微控制器(MCU)等资源受限的器件上部署这些技术的需求也在不断增...

关键字: 嵌入式系统 人工智能 机器学习

Zephyr开源项目由Linux基金会维护,是一个针对资源受限的嵌入式设备优化的小型、可缩放、多体系结构实时操作系统(RTOS)。近年来,Zephyr RTOS在嵌入式开发中的采用度逐步增加,支持的开发板和传感器不断增加...

关键字: 嵌入式系统 软件开发 实时操作系统 Zephyr项目

在资源受限的嵌入式系统中,代码执行效率和内存占用始终是开发者需要权衡的核心问题。内联函数(inline functions)和宏(macros)作为两种常见的代码展开技术,在性能、可维护性和安全性方面表现出显著差异。本文...

关键字: 内联函数 嵌入式系统

在嵌入式系统和服务器开发中,日志系统是故障排查和运行监控的核心组件。本文基于Linux环境实现一个轻量级C语言日志库,支持DEBUG/INFO/WARN/ERROR四级日志分级,并实现按大小滚动的文件轮转机制。该设计在某...

关键字: C语言 嵌入式系统

在嵌入式系统和底层驱动开发中,C语言因其高效性和可控性成为主流选择,但缺乏原生单元测试支持成为开发痛点。本文提出一种基于宏定义和测试用例管理的轻量级单元测试框架方案,通过自定义断言宏和测试注册机制,实现无需外部依赖的嵌入...

关键字: C语言 嵌入式系统 驱动开发

在嵌入式系统与驱动开发中,内存映射I/O(Memory-Mapped I/O, MMIO)是一种将硬件寄存器映射到处理器地址空间的技术,允许开发者通过指针直接读写寄存器,实现高效、低延迟的硬件控制。本文通过C语言实战案例...

关键字: 内存映射 I/O操作 嵌入式系统

在嵌入式系统开发和多线程编程中,程序崩溃、内存越界等复杂问题常令开发者困扰。GDB作为强大的调试工具,其条件断点和内存查看功能可精准定位隐蔽缺陷。本文通过实际案例演示这些高级功能的应用,帮助开发者提升调试效率。

关键字: GDB 嵌入式系统
关闭