原创 短信控制的低成本监控单元

2009-7-24 15:06 1953 1 1 分类: MCU/ 嵌入式

文章来源:http://www.emtronix.com/case/case2008187.html 


   本文介绍一种低成本的、支持中文短信的SMS远程数采控制方案,系统以英创公司嵌入式主板ETR186为核心,结合ETA205、ETA402、ETA102、ETA401、ETA724、ETA203和西门子GSM模块MC39i组成,配合键盘和液晶以实现数据显示和控制输出等功能,同时提供C++编写的例程。系统实现功能如下:


 


  •         8通道电压采集(A/D)输入。
  •         4路数字信号输入。
  •         4路继电器控制输出。
  •         定时发送SMS短信到指定号码(手机)。
  •         通过手机发送SMS短信(命令)到系统,控制系统中的继电器。
  •         通过手机发送SMS短信(命令)到系统,查询系统当前AD值、端口状态等信息。

200872516127934.jpg


 

图 1:系统组成框图

 

        系统运行时,每秒采集一次AD值和数字IO输入状态,并刷新一次屏幕。每小时向指定号码发送一条短信,短信以中文形式发送(PDU模式),内容包括当前采集的电压值、输入数字电平状态和继电器状态。如果短信发送失败,系统将每隔30S重发短信,重发两次后仍然失败时,系统重启GSM模块,并再次重发。用户可通过发送一条以CR开始的命令到系统,以控制系统中的继电器,或查询系统当前的工作状态。关于CR命令,将在后面的文章中介绍。

 

        从系统框图可以看出,系统硬件组成是一目了然。案例中采用的是英创公司的现成模块,各模块资料可以在英创公司网站上找到,客户在实际开发过程中可直接向英创公司索要此类配套模块的电路原理图,以便进行整体的外围电路设计,实现合理的产品结构。

 

        C++例程采用基于事件驱动(也称消息驱动)的应用程序框架进行编程,客户可以很方便的对例程进行修改,使其成为符合客户自身平台的应用程序。基于事件驱动方式编写的应用程序稳定性高、结构清晰、维护方便,它已成为我们向客户重点推荐的编程方案之一,关于事件驱动的原理介绍请参考英创公司网站文章:《嵌入式系统应用程序方案之一——基于事件驱动的应用程序框架》。本例程中主要事件(消息)和程序如下:

 


  •         CMD_NOP:当系统没有实质性消息时而生成的“空消息”,系统此时调用短信类的   Running()函数,处理GSM 模块和ETR186 模块之间的数据流,完成短信的发送和接收。若接收到短信,程序将生成CMD_SMSARRIVED 消息。
  •         CMD_SEC:该消息每秒由系统产生,或由用户按键生成。消息中调用函数 IOTask.DO()、ADTask.DO()和Display.RefScreen(),分别完成采集输入数字信号状态、采集AD值和刷新LCD显示的功能。
  •         CMD_30SEC:该消息每30S由系统产生,消息主要完成短信发送状态检查和短信发送失败时的自动重发。在本消息中还有一定时发送任务,定时发送时间间隔为1小时。
  •         CMD_SENDSMS:在消息中调用短信类的Send()函数,按指定格式发送一条中文短信到指定号码(手机)。短信内容包括A/D采样值、数字IO状态和继电器状态。
  •         CMD_SMSARRIVED:接收手机发来的控制命令,调用ControlRelay()函数翻译、执行命令,并生成CMD_SENDSMS消息,返回一条短信到指定号码。

 

        中文短信的发送是本案例的核心。短信发送有两种模式:文本模式(Text Mode)和PDU(protocol description unit)Mode。文本模式只能发送普通的ASCII字符,而要发送图片、铃声、其它编码的字符(如中文)就必须采用PDU模式。关于PDU的数据格式,读者可以查阅相关资料,这里不做详细介绍。在程序中,采用C++的类来实现SMS 收发的功能,在SMSManager 类对象中定义了5 个公共函数如下:

 


 


 


 

 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
1
关闭 站长推荐上一条 /3 下一条