http://www.dragonsoft.net.cn/down/project/tc35_sms.rar TC35 AT /down/book/tc35_at.pdf TC35/TC35i GSM Modem TC35 GSM POS COM SIM DOWN COM E, vbcr AT VB6.0 1)C# http://www.yesky.com/softchannel/72342380468109312/20040523/1800310.shtml, 2) PC http://www.knowsky.com/2944.html 3) VB6.0 http://www.pcbookcn.com/article/3061.htm OUTPUT SM( TC35) TC35 AT 1) OK: OK 2) ERROR 3) ( ) 4) 1 12
TC35 Response AT / AT+CMGF=0<vbCr> : AT+CMGF=0<vbCr><vbCrLf>OK<vbCrLf> SM COM TC35 ATE0<vbCr> OK ERROR ( ATE1<vbCr> ) TC35 4 ' MSCOMM ' ' MSCOMM ' msg ' errmsg ' ischeckresult (True,False ) ' ntimeout ( ischeckresult=true ) ' okretmsg "OK" ' errretmsg "ERROR" ' True \ FALSE ' fasle,errmsg Public Function TC35_OutMsg(MSComm As MSComm, _ ByVal Msg As String, _ errmsg As String, _ Optional ByVal ischeckresult As Boolean = True, _ Optional ByVal ntimeout As Long = 6000, _ Optional ByVal okretmsg As String = "OK", _ Optional ByVal errretmsg As String = "ERROR") As Boolean Dim i As Integer, n As Integer Dim rs As String, StartTime As Long With MSComm ' While.InBufferCount > 0 DoEvents rs =.Input Wend ' Buffer.InBufferCount = 0.OutBufferCount = 0.Output = Msg While.OutBufferCount > 0 ', DoEvents Wend If ischeckresult = True Then ' rs = "" 2 12
StartTime = timegettime Do DoEvents rs = rs &.Input If InStr(1, rs, okretmsg) > 0 Then ' errmsg = " [" & Msg & "], " & rs TC35_OutMsg = True ' If InStr(1, rs, errretmsg) > 0 Then ' errmsg = " [" & Msg & "] " & rs TC35_OutMsg = False ' Loop Until StartTime + ntimeout < timegettime ' errmsg = " [" & Msg & "] " ' TC35_OutMsg = False errmsg = " [" & Msg & "] " TC35_OutMsg = True End With SM 2 OK SM, TC35 AT+CMGF=[0 1]+vbCr PDU Mode text Mode text Mode PDU PDU SMS Block Mode 3 12
SMS Etsi GSM 03.40 GSM 03.38 7-bits 160 ; 8-bit 140 ; 16-bit 70 ( ) Unicode(UCS2) 1 86 2 86+ F 3) BCD 2 138 1234 5678 86 8613812345678 F 8613812345678F 2 86 13 81 23 45 67 8F 68 31 18 32 54 76 F8( ) 68 31 18 32 54 76 F8 ( ) ' Private Function TC35_ChangeTelCode(ByVal Mobile As String) As String Dim l As String Dim r As String Dim rs As String Dim i As Integer Dim n As Integer rs = "" n = Len(Mobile) FOr i = 1 To n Step 2 l = Mid(Mobile, i, 1) If i = n Then ', F r = "F" r = Mid(Mobile, i + 1, 1) rs = rs & r & l ' Next i TC35_ChangeTelCode = rs USC2 VB AscW() Hex() USC2. Private Function TC35_ChangeToUSC2 (ByVal s As String) As String Dim i As Integer 4 12
Dim rs As String Dim n As Integer Dim tn As Integer rs = "" FOr i = 1 To Len(s) n = AscW(Mid(s, i, 1)) tn = Abs(n) If tn >= 16 And tn <= 127 Then rs = rs &"00" If tn > 1 And tn < 16 Then rs = rs & "000" rs = rs & Hex(n) ' Mid(s, i, 1) &"="& Hex(n) &"," Next i TC35_ChangeToUSC2 = rs AT+CMGS= 2 AT / 1 AT+CMGS=<datan> + vbcrlf datan TP-Destination-Address + \2 TC35 >, SM 2 <msg>+ FileEof TC35 MSG+ Ctrl+z +CMGS:<n> OK +CMs ERROR <datan> Hex, ( )/2, MSG Address of the SMSC + TP-Destination-Address + Address of the SMSC TC35 SM ( 2 WORD ) 1 1 08(WORD) 2 1 91 TON/NPI 5 12
3 International/E.164 '+' 91 TC35_ChangeTelCode 7. 13800755500( 86), 8613800755500,( 13 BYTE 86 31 08 70 55 05 F0 7 WORD 08 + 91 + 86 31 08 70 55 05 F0 TP-Destination-Address 1, 11 1 TP-Message-Reference, 00 1 13 ( 86 ), 0D 1 11000D91 ( ) TC35_ChangeTelCode 14 1 TP-PID, 00 1 TP-Data-Coding-Scheme, USC2(16bit), 08 1 TP-VP TP-Valid-Period, 00 1 TP-UDL TP-User-Data-Length /2( Hex ) UC2 TC35_ChangeToUSC2 6 12
AT Const PREX = "0891" Const SUFX = "000800" Const CharTimeDelay = 4 Public Declare Function timegettime Lib "winmm.dll" () As Long ' SM ' ' mscomm ' mobile / ( ) ' errmsg, ' CenterNo ' TRUR false ' False, errmsg Public Function TC35_SendSM(MSComm As MSComm, _ ByVal Mobile As String, _ ByVal Msg As String, _ errmsg As String, _ Optional ByVal CenterNo As String = "13800755500" _ ) As Boolean Dim pmsg As String, length As Integer Dim at As String, pdu As String Dim CenterPart As String, TPPart As String, SMPart As String TC35_SendSM = False length = Len(Msg) * 2 If length > 140 Then errmsg = " 70 " CenterNo = TC35_ToServerMobile(CenterNo, errmsg) ' If CenterNo = "" Then ', Mobile = TC35_ToMobile(Mobile, errmsg) ' If Mobile = "" Then pmsg = TC35_ChangeToUSC2(Msg) ' SM USC2 CenterPart = PREX & TC35_ChangeTelCode(CenterNo) ' ' TPPart = "1100" & TC35_ToHex(Len(Mobile), 2) & "91" & TC35_ChangeTelCode(Mobile) ' SMPart = SUFX & IIf(length < 16, "0", "") & Hex(length) & pmsg ' AT SM "> " 1 at = "AT+CMGS=" & ((Len(TPPart) + Len(SMPart)) \ 2) & vbcr If TC35_OutMsg(MSComm, at, errmsg, True, 1000, "> ") = True Then 7 12
' > ", at = CenterPart & TPPart & SMPart & Chr$(26) TC35_SendSM = TC35_OutMsg(MSComm, at, errmsg) ' n Hex,nbits Private Function TC35_ToHex(ByVal n As Integer, Optional ByVal nbits As Integer = 2) As String Dim s As String Dim i As Integer s = Hex(n) FOr i = Len(s) + 1 To nbits s = "0"& s Next i TC35_ToHex = s ',, errmsg Public Function TC35_ToMobile(ByVal Mobile As String, errmsg As String) As String Dim c As String Dim n As Integer Dim i As Integer TC35_ToMobile = "" n = Len(Mobile) If n <> 11 And n <> 12 Then errmsg = " / [" & Mobile & "] 11, ( ) 11 12 ( )" If Left(Mobile, 2) = "13" Then If n <> 11 Then errmsg = " [" & Mobile & "] 11." FOr i = 1 To 11 c = Mid(Mobile, i, 1) If c < "0" Or c > "9" Then errmsg = " [" & Mobile & "] 11." 8 12
Next i errmsg = "" TC35_ToMobile = "86" & Mobile FOr i = 1 To n c = Mid(Mobile, i, 1) If c < "0" Or c > "9" Then errmsg = " ( ) [" & Mobile & "] 11 12." Next i If Left(Mobile, 1) <> "0" Then errmsg = " ( ) 0 ( )" errmsg = "" TC35_ToMobile = "106" & Mobile Public Function TC35_ToServerMobile(ByVal Mobile As String, errmsg As String) As String Dim c As String Dim n As Integer Dim i As Integer TC35_ToServerMobile = "" n = Len(Mobile) If n <> 11 Then errmsg = " [" & Mobile & "] 11 " If Left(Mobile, 2) <> "13" Then errmsg = " [" & Mobile & "] 11, 13." FOr i = 1 To 11 c = Mid(Mobile, i, 1) If c < "0" Or c > "9" Then errmsg = " [" & Mobile & "] 11." Next i 9 12
errmsg = "" TC35_ToServerMobile = "86" & Mobile ' ' ' mscomm ' errmsg ' commport COM ' TRUR false ' false,errmsg Public Function TC35_Init(MSComm As MSComm, errmsg As String, _ Optional ByVal CommPort As Integer = 1) As Boolean On ErrOr GoTo laberr TC35_Init = False With MSComm If.PortOpen = True Then.PortOpen = False '.CommPort = CommPort ' If.PortOpen = False Then.PortOpen = True '.Settings = "9600,n,8,1" ' If TC35_OutMsg(MSComm, "ATE0" & vbcr, errmsg, True, 1000) = True Then ' T35 TC35_Init = TC35_OutMsg(MSComm, "AT+CMGF=0" & vbcr, errmsg, True, 1000) ' PDU End With laberr: errmsg = ", " & Err.Description ' MSCOMM Public Sub TC35_Destory(MSComm As MSComm) With MSComm If.PortOpen = True Then.PortOpen = False End With 10 12
, If TC35_Init(MSComm, errmsg, Port) = True Then b = TC35_SendSM(MSComm, _ txtmobile.text, _ txtmsg.text, _ errmsg, _ txtcenterno.text) s = " " & IIf(b, " ", " ") msgbox s Option Explicit Dim Port As Integer Private Sub bntcancel_click() Unload Me Private Sub bntsend_click() Dim b As Boolean Dim errmsg As String Dim s As String bntsend.enabled = False If TC35_Init(MSComm, errmsg, Port) = True Then StatusBar.Panels(2).Text = " [" & Port & "]..." & vbcrlf b = TC35_SendSM(MSComm, txtmobile.text, txtmsg.text, errmsg, txtcenterno.text) s = " " & IIf(b, " ", " ") txtrs.text = errmsg 11 12
StatusBar.Panels(2).Text = s s = " [" & Port & "] " StatusBar.Panels(2).Text = s txtrs.text = errmsg MsgBox s, vbokonly Or vbinformation, " " bntsend.enabled = True Private Sub Form_Load() txtmsg.text = " AT PC " Port = 1 txtmsg_change Private Sub Form_Unload(Cancel As Integer) Call TC35_Destory(MSComm) // Private Sub optport_click(index As Integer) Port = Index + 1 // Private Sub txtmsg_change() lablen.caption = " " & Len(txtMsg.Text) i. Siemens Technical Product Information TC35 ii. C# 12 12