最近為一家代價公司做一個軟體,其中需要用到話務系統整合,其餘倒還罷了,就是簡訊貓不好搞,因為賣家居然沒有提供動態連結程式庫的介面,所以沒辦法,就只得寫實現與硬體的互動相關操作的代碼了。首先看看所用到的東西。
第一:at指令
第二:串口通訊,我用的c#,裡面有類支援
其中at指令最麻煩,要是細節搞不好的話,很麻煩的,所以需要一個好的調試器。
我們都知道吧,xp內建了一個超級終端,對了,就是 開始->程式—>附件->通訊->超級終端。
這個的用法很簡單的,建立相對應的針對com連接埠的串連,然後就可以輸入命令了。
這裡不說別的了,就直接說下at指令的注意點
1 執行命令的時候,最後必須要有/r。
2 在傳送簡訊的時候,pud支援漢字最好,所以一般都是pud模式發送。傳送簡訊的格式如下:
AT+CMGS=【pud格式的字串個數】
> 23232 ^z
很多網上的control+z是^z,但是我放在c#中不對,最後沒辦法,根據內碼查出來對應ascall碼值,然後抓換為char類型的,這樣才實現了。語句是:convert.tochar(26)這個放到最後,當然也要一個換行/r
最好在超級終端上把需要功能的命令都調試通了,再放到代碼中。
至於在代碼中注意的就是,一般命令的話,比如擷取簡訊貓品牌,設定傳送簡訊類型【text,pud】的時候一般情況下都是讓線程sleep(1000)後才擷取傳回值,而發簡訊的話,最好sleep(3000)才可以擷取傳回值。
我的解決方案是發送後,不停地掃描緩衝區,直到有正常值,因為也有可能移動或者聯通服務商訊號有問題,導致傳送簡訊時間過長。而寫指定時間擷取的話,這樣很不靈活了。
再看類,完成這個功能只需用兩個類,一個是 操作at指令類,一個是pud產生類【這個是別人提供的,感謝他把我從繁雜的pud格式中解救出來,哈哈哈哈哈哈】,其中pud類最方便,你如果有幸看到pud產生的麻煩,就會有這種感覺。它可以根據簡訊中心號碼,接受號碼,內容,就可以產生發送的pud字串了,你在後面加上結束符convert.tochar(26)和/r。恭喜,你可以傳送簡訊了。
以後我會把相關代碼貼出來,以及超級終端的用法也會貼。但是需要等到項目完成後再說。。。
隨便提一點,這個軟體的設計可真垃圾,當然是我設計的,可維護性是負數級。哈哈。。。