簡訊PDU包程式設計快速入門
阿新 • • 發佈:2019-02-04
by Again 2013-12-23 10.55.25
本教程是以已經有看過相關文章,而對PDU程式設計無從入手的編碼苦手寫的,我儘量以最簡單的方法講述PDU格式的快速理解。詳細資料請自行從網上搜索。謝謝。
我使用的是Quectel 的 M50晶片,採用串列埠通訊。傳送的是AT命令。
1.PDU傳送和接收的包不同,不能簡單一段程式碼通用。 2.傳送的時候可以儘可能簡單,一部分由系統來做就好了。 3.能無視的直接無視,取對應的位處理即可。 ////////////////////////////////////////////////////////////////////////////////// 開始: 正常來講,完整的PDU包如下所示。不過太複雜了。 0031000D91683115723512F50008C21C80006D778FD9662F6D4B8BD577ED6D88606F653652308BF7544A77E5 簡單做法 1. 傳送:AT+CMGF=0回車 返回:OK 解析:設定傳送內容為PDU格式 2. 傳送:AT+CSCS="GSM"回車 返回:OK 解析:設定字符集 3. 傳送:AT+CSCA="+8613800200500",145 返回:OK 解析:設定簡訊中心號碼。 4. 以後傳送簡訊傳送這一段即可 傳送:AT+CMGS=長度 返回:> 解析:傳送簡訊命令有效,系統等待後續內容。長度演算法後面介紹,這裡長度是23 傳送:你的PDU<Ctrl+Z> 返回:+CMGS:*** OK 解析:前面CMGS不管,有OK就好,這裡PDU 是0011000D91683106103962F400080108535A4E07901A4FE1,ctrl+z符號的十六進位制碼是0x1A
這裡介紹PDU構造,簡單方法,推薦搜尋“博萬通訊”那個PDU的帖子。
可以得到第二種的輸出格式。
擷取這一段字元串出來,然後做字串處理
0891683108707515F0240D91683161191125F700083121317180242314004F00282229005F22290029004F54C854C8007E
--------------------------____________------------------**________________________________________
取得substring,位置就自己數了吧。
直接取得上面標記的這兩段.(如果標記錯位,請複製到其他編輯器中檢視。)
前面的3161191125F7是來電號碼,後面的14是長度,最後是004F00282229005F22290029004F54C854C8007E PDU包。
直接拉過去,轉換Unicode即可,
好解析完成。
////////////////////////////////////////////////////////////////////////////////////
如果你傳送和接收都成功了,恭喜你入門了。如果還想深究具體位元組到底什麼含義,請在網上尋找。
1.PDU傳送和接收的包不同,不能簡單一段程式碼通用。 2.傳送的時候可以儘可能簡單,一部分由系統來做就好了。 3.能無視的直接無視,取對應的位處理即可。 ////////////////////////////////////////////////////////////////////////////////// 開始: 正常來講,完整的PDU包如下所示。不過太複雜了。 0031000D91683115723512F50008C21C80006D778FD9662F6D4B8BD577ED6D88606F653652308BF7544A77E5 簡單做法 1. 傳送:AT+CMGF=0回車 返回:OK 解析:設定傳送內容為PDU格式 2. 傳送:AT+CSCS="GSM"回車 返回:OK 解析:設定字符集 3. 傳送:AT+CSCA="+8613800200500",145 返回:OK 解析:設定簡訊中心號碼。 4. 以後傳送簡訊傳送這一段即可 傳送:AT+CMGS=長度 返回:> 解析:傳送簡訊命令有效,系統等待後續內容。長度演算法後面介紹,這裡長度是23 傳送:你的PDU<Ctrl+Z> 返回:+CMGS:*** OK 解析:前面CMGS不管,有OK就好,這裡PDU
|----------------30/2=15--------------| |16/2=8、len*2=8 |
0011000D91683106103962F400080108 535A4E07901A4FE1
以上兩段黃色的等價兌換成你的內容即可
3106103962F4 就是兩兩翻轉的電話號碼 13600193264F,F用作補位
08 535A4E07901A4FE1,08是長度,後面總長度除以2或者字元總長度*2.後面的字元按照unicode標準轉換。ASCII碼湊夠4位一個字元
好傳送的到這裡結束。這裡內容是“博萬通訊”
//////////////////////////////////////////////////////////////////////////////////
有了前面傳送的基礎接收的就更簡單了。
1.設定了不列印內容,提示輸出。收到簡訊顯示第一行,再查詢得到第二行
+CMGR: 0,,40(len)
0891683108707515F0240D91683161192125F700083121316122622314004F00282229005F22290029004F54C854C8007E
2.設定了收到直接列印輸出,直接輸出兩行
+CMT: ,40
0891683108707515F0240D91683161192125F700083121317180242314004F00282229005F22290029004F54C854C8007E
收到的內容如上 在初始化裝置的時候 AT+CNMI=2,2,0,0,0