首页 > 嵌入式软件 > WinCE

嵌入式WinCE系统下,利用GSM Modem和现有的GSM移动通信网,通过软件编程手段,实现用普通电话(包括手机)对远程工业现场的某些工作参数的监测和控制。

本文引用地址: http://www.21ic.com/embed/software/wince/201810/73004.html

其中的监测数据以语音形式体现。文中给出了语音合成的具体实现方法。

引言

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

1 应用系统架构

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

按此在新窗口浏览图片500)this.width=500" border=0>

图1 系统架构

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

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

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

2.1 串行口及GSM Modem的初始化

  根据GSM Modem连接的串行口,comID用hSerial=CreateFile(TEXT ("comID"),GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL);

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

  dcb.BaudRate=115200;
  dcb.ByteSize=8;
  dcb.Parity=NOPARITY;
  dcb.StopBits=ONESTOPBIT;//依次为波特率、数据位、奇偶校验位和停止位
  SetupComm(hSerial,1024,1024);//设置收发缓冲区大小//超时控制设置
  Timeouts.ReadIntervalTimeout=1;
  Timeouts.ReadTotalTimeoutMultiplier=1;
  Timeouts.ReadTotalTimeoutConstant=10;
  Timeouts.WriteTotalTimeoutMultiplier=1;
  Timeouts.WriteTotalTimeoutConstant=10;
  SetCommTimeouts(hSerial,&Timeouts);
  SetCommMask(hSerial,EV_RXCHAR);//挂接接收事件

  最后用“ 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 按键识别

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

while(flag){//flag为控制值
  WaitCommEvent(hSerial,&dwEvtMask,0);
    if ((dwEvtMask&EV_RXCHAR)==EV_RXCHAR){
      ClearCommError(hSerial,&dwErrorFlags,&ComStat );
        dwLength = ComStat.cbInQue ; //输入缓冲区有多少数据
        if(dwLength>0){
        ReadFile(hSerial,buff,dwLength,&ln,&os_r);
        buff[dwLength]=0;
        if(buff[0]==0x10&&buff[1]==0x52)
        Puts(h,MEMO1,"电话拨入...");
        if(buff[1]==0x52&&buff[4]==‘O‘&&buff[5]==‘K‘)
        Puts(h,MEMO1,"线路接通");
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x31)
        Puts(h,MEMO1,"1");//1键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x32)
        Puts(h,MEMO1,"2");//2键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x33)
        Puts(h,MEMO1,"3");//3键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x34)
        Puts(h,MEMO1,"4");//4键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x35)
        Puts(h,MEMO1,"5");//5键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x36)
        Puts(h,MEMO1,"6");//6键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x37)
        Puts(h,MEMO1,"7");//7键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x38)
        Puts(h,MEMO1,"8");//8键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x39)
        Puts(h,MEMO1,"9");//9键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x30)
        Puts(h,MEMO1,"0");//0键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x23)
        Puts(h,MEMO1,"#");//#键
        if(buff[1]==0x2f&&buff[2]==0x10&&buff[3]==0x2a)
        Puts(h,MEMO1,"*");//*键
        if(buff[0]==0x10&&buff[1]==0x62)
        Puts(h,MEMO1,"拨入方已挂机");
      }
    }
  }

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

500)this.width=500" border=0>

图2 按键识别测试

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

2.3 语音传送

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

  hf=_lopen(wavFileName,0);
  bitSize=GetFileSize((HANDLE)hf,NULL);
  _lclose(hf);
  hf=_lopen(wavFileName,0);
  _lread(hf,aa,bitSize);
  _lclose(hf);
  wsprintf(buffer,"at+vtx");
  buffer[6]=0x0d;
  WriteFile(hSerial,buffer,7,&dwBytesWritten,&os_w);
    for(i=0;i<bitSize;i++){
    buffer[0]=aa[i];
    if(flag) i=bitSize;
    WriteFile(hSerial,buffer,1,&dwBytesWritten,&os_w);
  }

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

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

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

500)this.width=500" border=0>

图3 嵌入式系统受控端整体程序框图

3 语音合成技术(TTS)

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

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

  hf=_lopen(DataFileName,0);//打开现场数据文件
  _lread(hf,szBuff,bitSize);//读入到缓冲区szBuff(数据是以ASCII形式存放的)
  _lclose(hf);
  for(I=0;I<bitSize;I++){
    switch (szBuff[I]){
      case 0x2e:
        …//将“dian”的语音数据写入目标语音文件
        break;
      case 0:
        …//将“ling”的语音数据写入目标语音文件
        break;
      case 1:
        …//将“yi”的语音数据写入目标语音文件
        break;?
    }//调整目标语音文件指针
  }//将单位名称的语音数据写入目标语音文件

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

结语

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

参考文献

  [1] 陈坚,孙志月. MODEM通信编程技术[M]. 西安:西安电子科技大学出版社,1998.
  [2] 曾志民. 调制解调器原理及其应用[M]. 北京:人民邮电出版社,1995.
  [3] 田泽. ARM9嵌入式开发实验与实践[M]北京:北京航空航天大学出版社,2006.
  [4] 周毓林,宁杨,陆贵强. Windows CE.net内核定制及应用开发[M]. 北京:电子工业出版社, 2005.

  武斌(工程师),主要研究方向为广播电视技术及嵌入式系统;
  李建军(工程师)。

换一批

延伸阅读

[行业资讯] 机器人行业新需求迸发新活力 新形势提出更高要求

机器人行业新需求迸发新活力 新形势提出更高要求

机器人被视为“制造业皇冠顶端的明珠”,其研发、制造、应用是衡量一个国家科技创新和高端制造业水平的重要标志。 ......

关键字:机器人 智能系统 工业机器人

[行业资讯] 鼓励外商投资产业目录将出炉,300mm以上大硅片、电子专用材料或入选

鼓励外商投资产业目录将出炉,300mm以上大硅片、电子专用材料或入选

近日,国家发改委、商务部会同有关方面开展了《外商投资产业指导目录》《中西部地区外商投资优势产业目录》修订工作,并在合并两个目录基础上形成了新的《鼓励外商投资产业目录(征求意见稿)》,现向社会公开征求意见。 ......

关键字:集成电路 硅片 处理系统

[行业资讯] 众人拾柴火焰高——2018 RT-Thread深圳开发者大会圆满落幕

众人拾柴火焰高——2018 RT-Thread深圳开发者大会圆满落幕

由睿赛德科技主办的2018 RT-Thread 开发者大会深圳站在南方联合大酒店圆满落幕,RT-Thread官方团队携手合作伙伴NXP、腾讯云、国科微和瑞兴恒方的嘉宾,与参会的近350位工程师汇聚一堂,分享RT-Thread的技术更新、社区......

关键字:RT-Thread深圳开发者大会 OS开发 操作系统

[行业资讯] 北斗三号基本系统星座部署完成,中国北斗迈出关键一步

北斗三号基本系统星座部署完成,中国北斗迈出关键一步

11月19日凌晨,西昌一道冲天火光,北斗再添两颗新星。北斗三号基本系统星座部署圆满完成,中国北斗迈出从国内走向国际、从区域走向全球的“关键一步”。 ......

关键字:北斗 导航系统 原子钟

[行业资讯] 徐州联合武岳峰资本成立规模30亿传感器产业投资基金

徐州联合武岳峰资本成立规模30亿传感器产业投资基金

在16日于徐州举行的2018国际(徐州)传感器与物联网产业峰会上,徐州市宣布联合武岳峰资本,推出总规模30亿元的传感器产业投资基金。 ......

关键字:传感器 徐州 系统集成
条评论

我 要 评 论

网友评论

大家都爱看

  • 扇出型晶圆级封装的优势和挑战!

    我们有能力创造一些能保持前代性能并且更好更小的电子设备,例如今天的可穿戴设备、智能手机或平板电脑,这是由于很多因素超过摩尔定律而快速发展,从而能够从底层的嵌入组件发展到今天把它们封…

    2018-03-29
  • Xilinx推出革命性的新型自适应计算产品

    自适应和智能计算的全球领先企业赛灵思公司(Xilinx, Inc.,(NASDAQ:XLNX)),近日宣布推出一款超越FPGA功能的突破性新型产品,名为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速…

    2018-03-20
  • 赛普拉斯为树莓派3 B+ IoT单板计算机提供强大稳定的无

    先进嵌入式系统解决方案的领导者赛普拉斯(纳斯达克代码:CY)近日宣布其Wi-Fi&#174;和蓝牙&#174;combo解决方案为全新的树莓派 3 B+(Raspberry Pi 3Model B+)IoT单板计算机提供强大稳定的无线连接…

    2018-03-20
  • 观看直播领红包,SEED-A10加速卡助力人工智能

    随着云服务器、云计算的发展,大家对硬件加速的需求越来越多,但是随着设备功耗的上升、性能需求越来越高,常规加速设备以及开始不能满足需求,因此FPGA逐渐在硬件加速中找到了自己的位置,而艾…

    2018-03-19
  • 特朗普:博通不得以任何形式收购高通

    白宫周一(3月12日)晚发出声明,川普(特朗普)总统出于“国家安全”考量、禁止新加坡博通公司(Broadcom)收购美国高通公司(Qualcomm)。

    2018-03-14