如何通過(guò)物聯(lián)網(wǎng)卡實(shí)現(xiàn)通信模塊?物聯(lián)網(wǎng)卡系統(tǒng)開(kāi)發(fā)原理!
2019-05-14 6354來(lái)源:中億物聯(lián)網(wǎng) 分類:
物聯(lián)網(wǎng)
在這個(gè)萬(wàn)物互聯(lián)的時(shí)代下,物聯(lián)網(wǎng)卡廣泛的應(yīng)用在我們生活中的方方面面,從共享經(jīng)濟(jì)、智慧交通、智慧城市、智能穿戴再到智慧農(nóng)業(yè)等等,都能夠看到物聯(lián)網(wǎng)卡的身影,今天中億物聯(lián)網(wǎng)要來(lái)跟各位分享和討論下物聯(lián)網(wǎng)卡通信模塊的開(kāi)發(fā)知識(shí),講解在物聯(lián)網(wǎng)系統(tǒng)源碼中通信模塊是怎么實(shí)現(xiàn)的以及開(kāi)發(fā)原理,本文以中國(guó)移動(dòng)CMPP協(xié)議為例進(jìn)行步驟講解,下面讓我們一起來(lái)深入了解下吧。
在這個(gè)萬(wàn)物互聯(lián)的時(shí)代,物聯(lián)網(wǎng)應(yīng)用以及深入到我們生活的方方面面,大到智慧城市、智能交通,小到行車記錄儀,各種穿戴設(shè)備,智能家居,都有物聯(lián)網(wǎng)應(yīng)用的身影,讓我們感受到生活品質(zhì)和檔次的提升。
那么作為程序員的我們,物聯(lián)網(wǎng)通信到底如何做呢?
本系列文章即將帶您一起走進(jìn)物聯(lián)網(wǎng)系統(tǒng)開(kāi)發(fā)的世界。也希望同行一起分享和討論物聯(lián)網(wǎng)相關(guān)知識(shí)和開(kāi)發(fā)經(jīng)驗(yàn)。
首先看一下物聯(lián)網(wǎng)系統(tǒng)的整體架構(gòu),
本篇將講解物聯(lián)網(wǎng)系統(tǒng)中的通信模塊實(shí)現(xiàn)原理及相關(guān)內(nèi)容
物聯(lián)網(wǎng)數(shù)據(jù)卡系統(tǒng)源碼——通信模塊
1.通信模塊的功能
系統(tǒng)發(fā)送指令信息到物聯(lián)網(wǎng)卡,物聯(lián)網(wǎng)卡接收到指令后做相應(yīng)邏輯處理,并返回信息給系統(tǒng)。
2.通信模塊實(shí)現(xiàn)的原理
一般是通過(guò)運(yùn)營(yíng)商(移動(dòng)、聯(lián)通、電信)提供的短信網(wǎng)關(guān)通信協(xié)議,來(lái)給物聯(lián)網(wǎng)數(shù)據(jù)卡發(fā)送信息。
三大運(yùn)營(yíng)商使用的協(xié)議不同,分別是:中國(guó)移動(dòng)CMPP協(xié)議、聯(lián)通SGIP協(xié)議、電信SMGP協(xié)議。
具體的協(xié)議介紹這里就不展開(kāi)了,參考閱讀:協(xié)議介紹
3.使用中國(guó)移動(dòng)CMPP協(xié)議實(shí)現(xiàn)物聯(lián)網(wǎng)通信模塊
物聯(lián)網(wǎng)卡選任何一家運(yùn)營(yíng)商合作都沒(méi)有關(guān)系(但個(gè)人經(jīng)驗(yàn),移動(dòng)的信號(hào)是最好的。根據(jù)自己情況選擇)
移動(dòng)使用的是CMPP協(xié)議,此協(xié)議2001年出了CMPP2.0版,之后持續(xù)升級(jí)過(guò)CMPP2.1,到2002年出了CMPP3.0版之后就未升級(jí)過(guò),一直很穩(wěn)定,能滿足各種應(yīng)用需求。CMPP3.0擴(kuò)展手機(jī)號(hào)為32位,增加了號(hào)碼類型和linkid等字段,做物聯(lián)網(wǎng)卡當(dāng)然選擇支持?jǐn)U展更多且最穩(wěn)定的CMPP3.0版本。
下面介紹一款程序,此程序?yàn)橹袊?guó)移動(dòng)CMPP協(xié)議程序接口,適合在中國(guó)移動(dòng)申請(qǐng)了短信發(fā)送端口的公司使用。
本程序功能包括:
1、支持Cmpp2.0、3.0協(xié)議;
2、支持一般的短信發(fā)送、上行短信接收、狀態(tài)報(bào)告;
3、支持長(zhǎng)短信,包括下發(fā)長(zhǎng)短信、上行接收長(zhǎng)短信;
4、支持Ms Sql數(shù)據(jù)庫(kù)、MySql數(shù)據(jù)庫(kù);
5、支持普通手機(jī)號(hào)和物聯(lián)網(wǎng)卡;
6、集成了郵件群發(fā)功能;
7、支持?jǐn)U展號(hào);比如你的發(fā)送號(hào)碼是1008622,可以擴(kuò)展成100862201、100862202等
程序適用于Cmpp3.0、Cmpp2.0協(xié)議,可用.Net任何版本編譯。短信Win服務(wù)程序+MsSql/MySql數(shù)據(jù)庫(kù)源碼,直接配置好win服務(wù)并啟動(dòng),自己只需往數(shù)據(jù)庫(kù)里面寫(xiě)入數(shù)據(jù)就可以發(fā)送短信,接收的短信保存在另一張表中,讀取即可收到上行短信。
4.設(shè)計(jì)原則
軟件設(shè)計(jì)的基本原則是“高內(nèi)聚,低耦合”,本模塊遵循此原則。
此類涉及通訊的應(yīng)用中,短信通信部分本身是可以不帶任何業(yè)務(wù)邏輯的,即只負(fù)責(zé)短信收發(fā)這一單一功能,所以可以設(shè)計(jì)成獨(dú)立模塊與其他業(yè)務(wù)處理模塊分開(kāi),實(shí)現(xiàn)松耦合,獨(dú)立分布式部署。
短信通訊模塊從數(shù)據(jù)庫(kù)讀取待發(fā)送短信數(shù)據(jù),然后放入緩存隊(duì)列進(jìn)行多線程發(fā)送,這樣其他模塊只需要往數(shù)據(jù)庫(kù)插入數(shù)據(jù),就可以發(fā)送短信,從而實(shí)現(xiàn)了跨語(yǔ)言和跨平臺(tái)。不管業(yè)務(wù)系統(tǒng)使用JAVA、PHP、C#、Python或者其他語(yǔ)言,也不管業(yè)務(wù)系統(tǒng)是在Windows還是在Linux系統(tǒng)部署,只要可以遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù),就可以使用短信通訊模塊的短信收發(fā)功能。
通信模塊每天的發(fā)送量比較大,每時(shí)每刻都在持續(xù)運(yùn)行,這就必須能實(shí)現(xiàn)獨(dú)立部署,提高性能,同時(shí)也不影響其他業(yè)務(wù)功能的性能。
5.程序?qū)崿F(xiàn)
程序設(shè)計(jì)成一個(gè)Windows服務(wù)的形式,可以安全的駐存在系統(tǒng)中穩(wěn)定運(yùn)行,防止人為因數(shù)關(guān)閉程序。同時(shí)設(shè)計(jì)成支持Sql Server和MySql兩種數(shù)據(jù)庫(kù),且可以通過(guò)修改配置項(xiàng)來(lái)實(shí)時(shí)切換。
根據(jù)功能不同又可以細(xì)分成專門(mén)負(fù)責(zé)實(shí)現(xiàn)CMPP協(xié)議格式,與移動(dòng)網(wǎng)關(guān)通信的模塊,和專門(mén)讀取數(shù)據(jù)庫(kù)數(shù)據(jù),處理發(fā)送任務(wù)的Windows服務(wù)模塊。
上圖代碼為短信win服務(wù)代碼截圖,相關(guān)代碼模塊解釋:
Xiaoy.SMS項(xiàng)目:為短信組件源碼,負(fù)責(zé)實(shí)現(xiàn)CMPP協(xié)議并與短信網(wǎng)關(guān)通信.
SMSWinService項(xiàng)目: 短信服務(wù)源碼,負(fù)責(zé)讀取數(shù)據(jù)庫(kù)待發(fā)短信并發(fā)送以及上行短信的接收,當(dāng)然還包括windows服務(wù)的安裝等功能.
SMSTest項(xiàng)目:短信測(cè)試程序源碼,Windows桌面程序,用于短信調(diào)試.
上圖為短信調(diào)試小程序截圖。短信程序開(kāi)發(fā)好之后,聯(lián)調(diào)是一個(gè)繁瑣的工作,因?yàn)閰f(xié)議參數(shù)就有幾十個(gè),任何一個(gè)參數(shù)填寫(xiě)錯(cuò)誤都有可能導(dǎo)致短信發(fā)送不成功,這就需要有一款調(diào)試工具來(lái)幫忙了,有時(shí)候不是你的程序編碼有問(wèn)題,而是移動(dòng)運(yùn)營(yíng)商那邊沒(méi)幫你配置好,或者你填的參數(shù)輸入錯(cuò)誤,造成了發(fā)送失敗。遇到這種情況,可以通過(guò)發(fā)送后返回的狀態(tài)(見(jiàn)上圖中紅色日志)來(lái)判斷是哪里的問(wèn)題。
短信發(fā)送流程如下:
第一步:程序發(fā)送Submit包到網(wǎng)關(guān),網(wǎng)關(guān)會(huì)返回SubmitResp包,根據(jù)包中的Result的值來(lái)判斷是否發(fā)送成功。
result=0代表發(fā)送成功,其他代表失敗,失敗的原因可以查詢返回碼的意義:返回碼說(shuō)明
這時(shí)候只是發(fā)送到了網(wǎng)關(guān),至于網(wǎng)關(guān)是否成功發(fā)送到用戶手機(jī)或物聯(lián)網(wǎng)卡,尚不知道。比如用戶手機(jī)關(guān)機(jī),或物聯(lián)網(wǎng)卡未插入設(shè)備中則收不到短信。
第二步:當(dāng)短信網(wǎng)關(guān)成功發(fā)送短信到用戶手機(jī)卡或物聯(lián)網(wǎng)卡上時(shí),會(huì)返回狀態(tài)報(bào)告給SP端(即本程序)。
如果狀態(tài)報(bào)告中的結(jié)果是DELIVRD,則證明信息已經(jīng)成功發(fā)送到物聯(lián)網(wǎng)卡,并成功接收到。
也就是說(shuō),當(dāng)?shù)谝徊絩esult=0的時(shí)候,基本SP的發(fā)送任務(wù)完成了,如果收不到也是卡的問(wèn)題(欠費(fèi)、關(guān)機(jī)、未插卡等)。
第二步是更精確的知道卡是否收到信息,但有可能一兩天才會(huì)返回。要接收狀態(tài)報(bào)告,需要在提交Submit包的時(shí)候把“RegisteredDelivery”字段設(shè)為1。
中億物聯(lián)網(wǎng)(http://www.wejumpwithyou.com/)在本文中主要講解了物聯(lián)網(wǎng)卡、通信模塊以及物聯(lián)網(wǎng)系統(tǒng)開(kāi)發(fā)的原理,通過(guò)CMPP協(xié)議模塊的開(kāi)發(fā)實(shí)踐進(jìn)行講解,目前運(yùn)營(yíng)商物聯(lián)網(wǎng)卡的短信協(xié)議主要分為中國(guó)移動(dòng)CMPP協(xié)議、聯(lián)通SGIP協(xié)議、電信SMGP協(xié)議,在配置好后我們能夠通過(guò)網(wǎng)關(guān)返回的SubmitResp包值進(jìn)行確認(rèn)是否發(fā)送成功,result=0為成功,其余則為失敗,失敗的具體原因需要根據(jù)返回碼進(jìn)行查詢。