物联网数据卡系统源码——通信模块整体概述
在这个万物互联的时代,物联网应用以及深入到我们生活的方方面面,大到智慧城市、智能交通,小到行车记录仪,各种穿戴设备,智能家居,都有物联网应用的身影,让我们感受到生活品质和档次的提升。
那么作为程序员的我们,物联网通信到底如何做呢?
本系列文章即将带您一起走进物联网系统开发的世界。也希望同行一起分享和讨论物联网相关知识和开发经验。
首先看一下物联网系统的整体架构,看上一篇文章:物联网数据卡系统源码——整体架构
本篇将讲解物联网系统中的通信模块实现原理及相关内容
物联网数据卡系统源码——通信模块
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。
上图为短信网关模拟器工具截图。在本地测试需要用到短信网关模拟器。
由于篇幅有限,本文从整体讲解一个大概,未完待续。
本系列文章将继续开新篇讲解CMPP协议模块的实现,和SMSWindows服务模块的实现,欢迎持续关注。小y的QQ
提纲 1 物联网数据卡系统源码——前篇 2 物联网数据卡系统源码——通信模块 2.2 协议封装和实现 3 物联网数据卡系统源码——Windows服务模块 3.1 Windows服务模块概述 3.2 Windows服务模块实现 3.3 高并发回调处理 3.4 部署安装 |