如何通过物联网卡实现通信模块?物联网卡系统开发原理!

2019-05-14 386来源:中亿物联网 分类: 物联网

  在这个万物互联的时代下,物联网卡广泛的应用在我们生活中的方方面面,从共享经济、智慧交通、智慧城市、智能穿戴再到智慧农业等等,都能够看到物联网卡的身影,今天中亿物联网要来跟各位分享和讨论下物联网卡通信模块的开发知识,讲解在物联网系统源码中通信模块是怎么实现的以及开发原理,本文以中国移动CMPP协议为例进行步骤讲解,下面让我们一起来深入了解下吧。


如何通过物联网卡实现通信模块?物联网卡系统开发原理!


  在这个万物互联的时代,物联网应用以及深入到我们生活的方方面面,大到智慧城市、智能交通,小到行车记录仪,各种穿戴设备,智能家居,都有物联网应用的身影,让我们感受到生活品质和档次的提升。

  那么作为程序员的我们,物联网通信到底如何做呢? 

  本系列文章即将带您一起走进物联网系统开发的世界。也希望同行一起分享和讨论物联网相关知识和开发经验。

  首先看一下物联网系统的整体架构,

  本篇将讲解物联网系统中的通信模块实现原理及相关内容

  物联网数据卡系统源码——通信模块
 
  1.通信模块的功能

  系统发送指令信息到物联网卡,物联网卡接收到指令后做相应逻辑处理,并返回信息给系统。

  2.通信模块实现的原理

  一般是通过运营商(移动、联通、电信)提供的短信网关通信协议,来给物联网数据卡发送信息。

  三大运营商使用的协议不同,分别是:中国移动CMPP协议、联通SGIP协议、电信SMGP协议。

  具体的协议介绍这里就不展开了,参考阅读:协议介绍

  3.使用中国移动CMPP协议实现物联网通信模块

  物联网卡选任何一家运营商合作都没有关系(但个人经验,移动的信号是最好的。根据自己情况选择)

  移动使用的是CMPP协议,此协议2001年出了CMPP2.0版,之后持续升级过CMPP2.1,到2002年出了CMPP3.0版之后就未升级过,一直很稳定,能满足各种应用需求。CMPP3.0扩展手机号为32位,增加了号码类型和linkid等字段,做物联网卡当然选择支持扩展更多且最稳定的CMPP3.0版本。

  下面介绍一款程序,此程序为中国移动CMPP协议程序接口,适合在中国移动申请了短信发送端口的公司使用。

  本程序功能包括:

  1、支持Cmpp2.0、3.0协议;

  2、支持一般的短信发送、上行短信接收、状态报告;

  3、支持长短信,包括下发长短信、上行接收长短信;

  4、支持Ms Sql数据库、MySql数据库;

  5、支持普通手机号和物联网卡;

  6、集成了邮件群发功能;

  7、支持扩展号;比如你的发送号码是1008622,可以扩展成100862201、100862202等

  程序适用于Cmpp3.0、Cmpp2.0协议,可用.Net任何版本编译。短信Win服务程序+MsSql/MySql数据库源码,直接配置好win服务并启动,自己只需往数据库里面写入数据就可以发送短信,接收的短信保存在另一张表中,读取即可收到上行短信。

  4.设计原则

  软件设计的基本原则是“高内聚,低耦合”,本模块遵循此原则。

  此类涉及通讯的应用中,短信通信部分本身是可以不带任何业务逻辑的,即只负责短信收发这一单一功能,所以可以设计成独立模块与其他业务处理模块分开,实现松耦合,独立分布式部署。

  短信通讯模块从数据库读取待发送短信数据,然后放入缓存队列进行多线程发送,这样其他模块只需要往数据库插入数据,就可以发送短信,从而实现了跨语言和跨平台。不管业务系统使用JAVA、PHP、C#、Python或者其他语言,也不管业务系统是在Windows还是在Linux系统部署,只要可以远程访问数据库,就可以使用短信通讯模块的短信收发功能。

  通信模块每天的发送量比较大,每时每刻都在持续运行,这就必须能实现独立部署,提高性能,同时也不影响其他业务功能的性能。

  5.程序实现

  程序设计成一个Windows服务的形式,可以安全的驻存在系统中稳定运行,防止人为因数关闭程序。同时设计成支持Sql Server和MySql两种数据库,且可以通过修改配置项来实时切换。

  根据功能不同又可以细分成专门负责实现CMPP协议格式,与移动网关通信的模块,和专门读取数据库数据,处理发送任务的Windows服务模块。

如何通过物联网卡实现通信模块?物联网卡系统开发原理!

  上图代码为短信win服务代码截图,相关代码模块解释:

  Xiaoy.SMS项目:为短信组件源码,负责实现CMPP协议并与短信网关通信.

  SMSWinService项目: 短信服务源码,负责读取数据库待发短信并发送以及上行短信的接收,当然还包括windows服务的安装等功能.

  SMSTest项目:短信测试程序源码,Windows桌面程序,用于短信调试.

如何通过物联网卡实现通信模块?物联网卡系统开发原理!

  上图为短信调试小程序截图。短信程序开发好之后,联调是一个繁琐的工作,因为协议参数就有几十个,任何一个参数填写错误都有可能导致短信发送不成功,这就需要有一款调试工具来帮忙了,有时候不是你的程序编码有问题,而是移动运营商那边没帮你配置好,或者你填的参数输入错误,造成了发送失败。遇到这种情况,可以通过发送后返回的状态(见上图中红色日志)来判断是哪里的问题。
  
  短信发送流程如下:

  第一步:程序发送Submit包到网关,网关会返回SubmitResp包,根据包中的Result的值来判断是否发送成功。

  result=0代表发送成功,其他代表失败,失败的原因可以查询返回码的意义:返回码说明

  这时候只是发送到了网关,至于网关是否成功发送到用户手机或物联网卡,尚不知道。比如用户手机关机,或物联网卡未插入设备中则收不到短信。

  第二步:当短信网关成功发送短信到用户手机卡或物联网卡上时,会返回状态报告给SP端(即本程序)。

  如果状态报告中的结果是DELIVRD,则证明信息已经成功发送到物联网卡,并成功接收到。

  也就是说,当第一步result=0的时候,基本SP的发送任务完成了,如果收不到也是卡的问题(欠费、关机、未插卡等)。

  第二步是更精确的知道卡是否收到信息,但有可能一两天才会返回。要接收状态报告,需要在提交Submit包的时候把“RegisteredDelivery”字段设为1。

如何通过物联网卡实现通信模块?物联网卡系统开发原理!

  中亿物联网(http://www.m2mzy.com/)在本文中主要讲解了物联网卡、通信模块以及物联网系统开发的原理,通过CMPP协议模块的开发实践进行讲解,目前运营商物联网卡的短信协议主要分为中国移动CMPP协议、联通SGIP协议、电信SMGP协议,在配置好后我们能够通过网关返回的SubmitResp包值进行确认是否发送成功,result=0为成功,其余则为失败,失败的具体原因需要根据返回码进行查询。