首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

串口收發短訊 (SMS) 技術問答匯總:PDU 模式、SMSC 處理、Nokia 設備對接

     編輯:關於VC++

核心知識點彙整

1. SMSC 服務中心號碼處理

  • 發送簡訊必須使用 **SIM 卡歸屬地** 的 SMSC 號碼,漫遊時不可變更。
  • PDU 封包中 SCA 欄位可填 00 表示「使用 SIM 卡內預存號碼」,或以 AT+CSCA? 讀取後自動填入。
  • 範例差異:廣州卡在河南發送仍需用廣州 SMSC(0891683108301705... vs 0891683108200005...)。

2. AT+CMGS 發送常見錯誤

  • 長度計算錯誤:長度 = (PDU 總長 - SCA 長度) / 2。SCA 通常佔 10 位元組(20 字元),從 11 (PDU type) 開始算。例:PDU 長 62 字元,SCA 20 字元,實際長度 = (62-20)/2 = 21。
  • 終端換行符:超級終端發送 AT+CMGS=21 後按 Enter,裝置回應 > 時輸入 PDU,**結尾需送 Ctrl+Z (0x1A)**,而非 Enter。超級終端設定「發送新行」需關閉,避免多送 CR+LF。

3. Text Mode vs PDU Mode

  • AT+CMGF=1 文字模式:支援字符集 (AT+CSCS),理論可發中文 (UCS2),但 **國內手機/模組幾乎不支援**,僅歐美機型常用。
  • 建議統一用 PDU Mode (AT+CMGF=0):國內事實標準,支援 7-bit (英數雙倍長度)、UCS2 (中文)、8-bit (透傳資料)。
  • 西門子 TC35/37 文件宣稱支援 AT+CSCS="UCS2",實測為準。

4. 訊息佇列與刪除策略

  • 手機內部以 **物理索引 (Index/Slot)** 管理簡訊,**刪除指令必須指定索引**,不受前序刪除影響(索引不會重排)。
  • 新訊息寫入空閒槽位(可能是被刪除的舊槽或新增槽),讀取時攜帶索引,刪除時按索引刪除,**不會誤刪新訊息**。
  • 大量併發場景下,AT+CMGL 列舉耗時長會阻塞接收,建議啟用 **即時上報模式 (AT+CNMI=2,1,2,2,0)**,訊息直接由 TE 端接收處理,不經 SIM 存儲。

5. Nokia 設備對接陷阱

  • Nokia 手機 **無內建 AT Modem (TA) 介面**,資料線跑專有「Nokia 協議」,需安裝 PC Connectivity SDK 驅動虛擬標準 COM 口。
  • 紅外/藍牙/USB 均需對應驅動;LogoManager 等官方工具直接說「Nokia 協議」故免驅動。
  • 驗證虛擬 COM 口:超級終端連接,送 AT 應回 OK。
  • 開發建議:使用 Nokia PC Connectivity SDK 官方 API,勿嘗試在資料線上直送 AT 指令。

6. 串口讀寫超時設定建議


COMMTIMEOUTS to = {0};
to.ReadIntervalTimeout = 100;      // 字元間最大間隔 100ms
to.ReadTotalTimeoutMultiplier = 1; // 每字元額外 1ms
to.ReadTotalTimeoutConstant = 1000;// 整體讀取超時 1s
to.WriteTotalTimeoutMultiplier = 1;
to.WriteTotalTimeoutConstant = 1000;
SetCommTimeouts(hComm, &to);

發送指令後 **不要立即讀取**,建議 Sleep(200~500) 或用事件驅動 (WaitCommEvent) 等待資料就緒,避免讀到不完整回應。

總結

SMS 開發核心在於:正確構造 PDU(含 SMSC 與長度)、選擇 PDU 模式、採用索引管理訊息、針對設備特性(如 Nokia 專有協議)選擇對接方式。掌握上述要點可規避 90% 常見坑點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved