物聯網數據卡系統源碼——通信模塊整體概述


在這個萬物互聯的時代,物聯網應用以及深入到我們生活的方方面面,大到智慧城市、智能交通,小到行車記錄儀,各種穿戴設備,智能家居,都有物聯網應用的身影,讓我們感受到生活品質和檔次的提升。

那么作為程序員的我們,物聯網通信到底如何做呢? 

本系列文章即將帶您一起走進物聯網系統開發的世界。也希望同行一起分享和討論物聯網相關知識和開發經驗。

首先看一下物聯網系統的整體架構,看上一篇文章:物聯網數據卡系統源碼——整體架構

本篇將講解物聯網系統中的通信模塊實現原理及相關內容

物聯網數據卡系統源碼——通信模塊

 

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 271963990

 

提綱

1 物聯網數據卡系統源碼——前篇

1.1 物聯網技術架構圖

1.2 物聯網的主要應用領域

1.3 物聯網傳感器61個應用領域

1.4 物聯網常見通信協議梳理

2 物聯網數據卡系統源碼——通信模塊

2.1 通信模塊整體概述

2.2 協議封裝和實現

2.3 長短信

2.4 粘包的處理

2.5 物聯網通訊與普通短信通訊的區別和要注意的地方

3 物聯網數據卡系統源碼——Windows服務模塊

3.1 Windows服務模塊概述

3.2 Windows服務模塊實現

3.3 高並發回調處理

3.4 部署安裝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM