00 表示「使用 SIM 卡內預存號碼」,或以 AT+CSCA? 讀取後自動填入。0891683108301705... vs 0891683108200005...)。11 (PDU type) 開始算。例:PDU 長 62 字元,SCA 20 字元,實際長度 = (62-20)/2 = 21。AT+CMGS=21 後按 Enter,裝置回應 > 時輸入 PDU,**結尾需送 Ctrl+Z (0x1A)**,而非 Enter。超級終端設定「發送新行」需關閉,避免多送 CR+LF。AT+CMGF=1 文字模式:支援字符集 (AT+CSCS),理論可發中文 (UCS2),但 **國內手機/模組幾乎不支援**,僅歐美機型常用。AT+CMGF=0):國內事實標準,支援 7-bit (英數雙倍長度)、UCS2 (中文)、8-bit (透傳資料)。AT+CSCS="UCS2",實測為準。AT+CMGL 列舉耗時長會阻塞接收,建議啟用 **即時上報模式 (AT+CNMI=2,1,2,2,0)**,訊息直接由 TE 端接收處理,不經 SIM 存儲。AT 應回 OK。
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% 常見坑點。