當前位置:首頁 > 嵌入式 > 嵌入式軟件

在嵌入式WinCE系統(tǒng)下,利用GSM Modem和現(xiàn)有的GSM移動通信網,通過軟件編程手段,實現(xiàn)用普通電話(包括手機)對遠程工業(yè)現(xiàn)場的某些工作參數(shù)的監(jiān)測和控制。

其中的監(jiān)測數(shù)據(jù)以語音形式體現(xiàn)。文中給出了語音合成的具體實現(xiàn)方法。

引言

  許多時候,我們需要了解遠距離的某個工作現(xiàn)場的某些工作參數(shù),或者對某些工作指標進行控制(開、關控制)。例如,需要了解遠距離無人職守的發(fā)射機的功率情況,需要開啟或關閉高山上電視塔的燈光,等等。這些一般都是通過基于C/S或者B/S等的網絡手段來實現(xiàn)的,需要專門的網絡線路和監(jiān)控端軟硬件的支持,構筑這樣的應用系統(tǒng)投資一般都比較大,監(jiān)控方位置的靈活度也被局限于有監(jiān)控端軟硬件的環(huán)境中。這里介紹一種在嵌入式WinCE系統(tǒng)下利用GSM Modem,用普通電話(包括手機,下同)就可以實現(xiàn)遠程監(jiān)控的方法。不需要有專用的監(jiān)控端軟硬件的支持和其他專用的網絡線路,借助GSM的無線通信網絡,投資大大縮小;監(jiān)控方的位置可以處在任何有電話的地方,方便靈活。監(jiān)控操作的選擇由電話的按鍵來實現(xiàn),監(jiān)測到的參數(shù)通過語音的方式反饋到監(jiān)控方的電話上;可以滿足大多數(shù)遠程監(jiān)控應用場合的要求。

1 應用系統(tǒng)架構

  本系統(tǒng)主要由GSM移動通信網、GSM Modem、以S3C2410為核心的硬件和WinCE系統(tǒng)組成,如圖1所示。

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

圖1 系統(tǒng)架構

  需要監(jiān)測的參數(shù)或需要控制的指標通過某種方式與嵌入式系統(tǒng)構成上、下位采集與控制體系。嵌入式系統(tǒng)發(fā)出測控指令,可以實現(xiàn)對現(xiàn)場相應數(shù)據(jù)的采集和控制。采集到的現(xiàn)場數(shù)據(jù)以數(shù)據(jù)文件形式保存在嵌入式系統(tǒng)上。目前,有關嵌入式系統(tǒng)對下位現(xiàn)場的具體采集與控制操作介紹的文獻很多,這里不再復述。

2 嵌入式系統(tǒng)受監(jiān)控端軟件設計

  嵌入式系統(tǒng)中受監(jiān)控端軟件是本監(jiān)控系統(tǒng)的核心。它一方面管理GSM Modem識別遠程電話的控制指令(按鍵識別)、向電話反饋對應的語音數(shù)據(jù),另一方面還要根據(jù)遠程電話的指令完成對下位現(xiàn)場的測控。

2.1 串行口及GSM Modem的初始化

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

打開該串行口。根據(jù)返回句柄hSerial的值,可以判斷打開是否成功。由“GetCommState(hSerial,&dcb);”獲得comID的狀態(tài),同時自動填入不用的DCB結構成員。再用“SetCommState(hSerial,&dcb);”就可以初始化該串口了。之前,&dcb要設置自己的參數(shù),如:

  dcb.BaudRate=115200;
  dcb.ByteSize=8;
  dcb.Parity=NOPARITY;
  dcb.StopBits=ONESTOPBIT;//依次為波特率、數(shù)據(jù)位、奇偶校驗位和停止位
  SetupComm(hSerial,1024,1024);//設置收發(fā)緩沖區(qū)大小//超時控制設置
  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的初始化數(shù)據(jù)(AT命令)。不同的GSM Modem其AT命令可能有所不同(可以從GSM Modem的用戶手冊中獲得)。筆者使用的GSM Modem的初始化數(shù)據(jù)為“ats0=1+fclass=8”、“at+vsm=128,11025”。

2.2 按鍵識別

  因為監(jiān)控指令是由遠程電話通過電話上的按鍵發(fā)出的,所以在受監(jiān)控端,正確識別電話的按鍵是非常關鍵的。在一個處理線程中,可以用如下程序進行識別:

while(flag){//flag為控制值
  WaitCommEvent(hSerial,&dwEvtMask,0);
    if ((dwEvtMask&EV_RXCHAR)==EV_RXCHAR){
      ClearCommError(hSerial,&dwErrorFlags,&ComStat );
        dwLength = ComStat.cbInQue ; //輸入緩沖區(qū)有多少數(shù)據(jù)
        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,執(zhí)行結果如圖2所示。

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

圖2 按鍵識別測試

  對于按鍵組合,可以將單個鍵的值依次存放到緩沖區(qū)。在程序中控制好flag的值就可以實現(xiàn)對按鍵組合的識別。

2.3 語音傳送

  將語音數(shù)據(jù)寫入GSM Modem,撥入的電話一端就可以聽到相應的語音。在寫入語音數(shù)據(jù)之前,要先用“at+vtx”通知GSM Modem,此后的數(shù)據(jù)是語音數(shù)據(jù)。

  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為所傳送的語音數(shù)據(jù)文件。

2.4 嵌入式系統(tǒng)受控端整體程序描述

  嵌入式系統(tǒng)受控端整體程序框圖如圖3所示。

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

圖3 嵌入式系統(tǒng)受控端整體程序框圖

3 語音合成技術(TTS)

  將保存在嵌入式系統(tǒng)上從現(xiàn)場采集來的數(shù)據(jù)轉換成對應的語音數(shù)據(jù),需要進行語音合成。在語音數(shù)據(jù)庫中存有“l(fā)ing”、“yi”、“er”、 “san”……“dian”和單位名稱發(fā)音的數(shù)據(jù)文件。假設要監(jiān)測的是現(xiàn)場的電流數(shù)據(jù),例如,下位采集來的保存到嵌入式系統(tǒng)上的某電流數(shù)據(jù)為5.12 A,那么就需要將“wu”、“dian”、“yi”、“er”和“an”的語音數(shù)據(jù)文件合成一個語音數(shù)據(jù)文件,以便于傳送。

  BitSize位現(xiàn)場數(shù)據(jù)(包括小數(shù)點)語音合成的具體程序描述如下:

  hf=_lopen(DataFileName,0);//打開現(xiàn)場數(shù)據(jù)文件
  _lread(hf,szBuff,bitSize);//讀入到緩沖區(qū)szBuff(數(shù)據(jù)是以ASCII形式存放的)
  _lclose(hf);
  for(I=0;I<bitSize;I++){
    switch (szBuff[I]){
      case 0x2e:
        …//將“dian”的語音數(shù)據(jù)寫入目標語音文件
        break;
      case 0:
        …//將“l(fā)ing”的語音數(shù)據(jù)寫入目標語音文件
        break;
      case 1:
        …//將“yi”的語音數(shù)據(jù)寫入目標語音文件
        break;?
    }//調整目標語音文件指針
  }//將單位名稱的語音數(shù)據(jù)寫入目標語音文件

  需要強調的是,這里用到的語音數(shù)據(jù)必須是“裸”數(shù)據(jù),也就是去掉有關文件頭的純粹的語音數(shù)據(jù)(可以在錄制單個語音文件后處理掉)。各個語音數(shù)據(jù)的大小也要記錄在一個表列中,以便在調整目標語音文件指針時用到。最后生成的目標語音文件也是一個只含有“裸”數(shù)據(jù)的文件,在進行語音傳送時可以直接使用。

結語

  本文介紹的在嵌入式WinCE系統(tǒng)下利用GSM Modem所實現(xiàn)的遠程監(jiān)測與控制的方法,以較小的投資實現(xiàn)了對遠程工業(yè)現(xiàn)場的測控,充分地利用了現(xiàn)有的GSM移動通信網絡資源。在測控距離遠、實時性要求不高的場合都可以選擇使用。

參考文獻

  [1] 陳堅,孫志月. MODEM通信編程技術[M]. 西安:西安電子科技大學出版社,1998.
  [2] 曾志民. 調制解調器原理及其應用[M]. 北京:人民郵電出版社,1995.
  [3] 田澤. ARM9嵌入式開發(fā)實驗與實踐[M]北京:北京航空航天大學出版社,2006.
  [4] 周毓林,寧楊,陸貴強. Windows CE.net內核定制及應用開發(fā)[M]. 北京:電子工業(yè)出版社, 2005.

  武斌(工程師),主要研究方向為廣播電視技術及嵌入式系統(tǒng);
  李建軍(工程師)。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉