码迷,mamicode.com
首页 > 其他好文 > 详细

物联网数据卡系统源码——通信模块

时间:2017-03-24 16:00:00      阅读:1112      评论:0      收藏:0      [点我收藏+]

标签:端口   个人   mss   strong   mst   取数据   任务   2.0   http   

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

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

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

首先看一下物联网系统的整体架构,看上一篇文章:物联网数据卡系统源码——整体架构

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

物联网数据卡系统源码——通信模块

 

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.设计原则

短信通信模块本身是可以不带任何业务逻辑的,所以可以也必须设计成与其他业务处理模块分开,实现松耦合,独立分布式部署。

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

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服务模块的实现,欢迎持续关注。

 

物联网数据卡系统源码——通信模块

标签:端口   个人   mss   strong   mst   取数据   任务   2.0   http   

原文地址:http://www.cnblogs.com/tuyile006/p/6610895.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!