我手上有个motorola的模块,通过串口用来发报警信息.请问用如何VB写程序.请给出源码!!!!AT+CA短息的信息
应用举例
PDU模式下发送中英文短消息
首先将短信息格式设为PDU 模式:AT+CMGF=0
设置短消息服务中心地址:AT+CSCA=”+86138XXXXXXXX”,145
发送:AT+CMGS= YYY [CR] ;其中YYY 为PDU 的十进制长度
收到[>]响应后再发送
[PDU][ctrl-Z]
[PDU]数据单元格式定义为:
以下例子发送“你好”到13912345678
发送数据是:你好
Unicode译码为:4F60597D
AT+CMGS=019 //15(PDU 规约头固定长度15 字节)+4(报文长度4 个字节)
> 0011000D91683119325476F8000801044F60597D [ctrl-Z]
00 //为SCA预留
11 // FO 设置PDU 类型
00 // MR 发送参考号
0D //DA 目的号码长度
91 //DA 目的号码类型
68 //DA 中国的区号
3119325476F8 //DA 目的号码编码
00 // PID 发送方式
08 //DCS 编码模式
01 //VP 有效期
PDU 中用户数据前的PDU 头的长度是15 字节
04 //UDL 数据长度
4F60597D //UD 数据内容Unicode 译码例子中目的号码是一种内存编码方式,将每两位数据位置互换,余下最后单位的补F
如13912345678 编码为3119325476F8
用户使用PDU 模式发送中文短消息时只需按照上述例子,改变TPDU 的十进制长度、手机
号码编码、报文长度和报文内容Unicode 译码即可。
应用举例
PDU模式下发送中英文短消息
首先将短信息格式设为PDU 模式:AT+CMGF=0
设置短消息服务中心地址:AT+CSCA=”+86138XXXXXXXX”,145
发送:AT+CMGS= YYY [CR] ;其中YYY 为PDU 的十进制长度
收到[>]响应后再发送
[PDU][ctrl-Z]
[PDU]数据单元格式定义为:
以下例子发送“你好”到13912345678
发送数据是:你好
Unicode译码为:4F60597D
AT+CMGS=019 //15(PDU 规约头固定长度15 字节)+4(报文长度4 个字节)
> 0011000D91683119325476F8000801044F60597D [ctrl-Z]
00 //为SCA预留
11 // FO 设置PDU 类型
00 // MR 发送参考号
0D //DA 目的号码长度
91 //DA 目的号码类型
68 //DA 中国的区号
3119325476F8 //DA 目的号码编码
00 // PID 发送方式
08 //DCS 编码模式
01 //VP 有效期
PDU 中用户数据前的PDU 头的长度是15 字节
04 //UDL 数据长度
4F60597D //UD 数据内容Unicode 译码例子中目的号码是一种内存编码方式,将每两位数据位置互换,余下最后单位的补F
如13912345678 编码为3119325476F8
用户使用PDU 模式发送中文短消息时只需按照上述例子,改变TPDU 的十进制长度、手机
号码编码、报文长度和报文内容Unicode 译码即可。
mndsoft(枕善居(http://www.mndsoft.com/) ,看见你的回复等于没说,我很生气后果很严重!!!
有sleep()可以延时的!
如楼上所述,用sleep就可以了在代码顶部加:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
在发指令行间加:
Sleep(1000)'单位毫秒,这个表示延时一秒
Private Sub Command5_Click()
Dim sendPDU1 As String, sendPDU2 As String, sUD As String
Dim Re_SMSinfo As String
If statuGSM = False Then
MsgBox "没有建立连接,请先连接设备!", vbCritical, "提示"
Exit Sub
End If
'00使用SIM卡内短信中心号码
sendPDU1 = "0011"
If Check1.Value Then
'请求状态报告
sendPDU1 = "0031"
End If
If Check2.Value Then
sendPDU2 = "0010"
Else '中文免提
sendPDU2 = "0018"
End If
If ChcekGB(Text4) > 0 Then
sUD = GBChr2UCS(Text4)
If Check2.Value Then
sendPDU2 = "0018" '中文免提
Else
sendPDU2 = "0008"
End If
Else
sUD = Encode7bit(Text4)
If Check2.Value Then
sendPDU2 = "0010" '英文免提
Else
sendPDU2 = "0000"
End If
End If
'81 不用+,91 带+
'Screen.MousePointer = 11
Text6 = sendPDU1 & "00" & "0" & Hex(Len(Text5)) & "81" & SetTelcode(Text5) & sendPDU2 & "A7" & sUD
Call SendAT("AT+CMGS=" & CStr((Len(Text6) - 2) / 2), 5)
Pause 0.3
Re_SMSinfo = SendAT(Text6 & Chr(26), 5)
'发送成功
'Pause 0.1
If (InStr(Re_SMSinfo, "+CMGS") > 0 And InStr(Re_SMSinfo, "OK") > 0) Then
Text6 = "短信发送成功!"
fBeep 659, 300
fBeep 523, 300
fBeep 587, 300
'Screen.MousePointer = 0
'Exit Sub
End If '发送失败
If (InStr(Re_SMSinfo, "+CMS ERROR") > 0) Then
'Text2 = Text2 & DataCOM32
't1 = Split(DataCOM32, " ")(0)
't2 = Split(DataCOM32, " ")(1)
'Text2 = Text2 & ConvertPDU(ReadSMS(Mid(Left(t2, 4), 2, 2), Val(Trim(Mid(DataCOM32, InStr(DataCOM32, ",") + 1, 3))), True))
Text6 = "短信发送失败!"
'Screen.MousePointer = 0
End If
End Sub
下面这样不行吗?
senddata(aa)'假设senddata是发送函数,aa,bb,cc是指令字符串
sleep (2000)
senddata(bb)
sleep (2000)
senddata(cc)
sleep (2000)
unicode怎么编码,以PDU发中文短信??????
关于pdu编码,在csdn文档里有vb代码和编码算法
请问在哪,给个连接!!!!
试试这个函数:
'*/-------------------------------------------------------------
'*/过 程 名:Pause
'*/功 能:暂停函数,延时用
'*/返 回 值:无
'*/参 数:Dauer 延时值
'*/建立日期:2004-12-07 16:00
'*/修改日期:
'*/-------------------------------------------------------------
Sub Pause(Dauer)
Dim start As Long
start = Timer
Do While Timer < start + Dauer
DoEvents
Loop
End Sub
系统没有sleep,这个是apito 楼上:
sleep,不行的,执行该函数,会使系统短暂停滞,会影响数据发送的。
=========================================
你试了不行吗?sleep的目的是为了给串口设备“反应时间”,系统即使停滞也没关系啊to 楼主:
http://www.enet.com.cn/eschool/inforcenter/A20040525311257.html
csdn的我打不开了,这个是转的
'PDU编码,发送的中文内容
Dim si, sb As Integer
Dim stmp As Integer
Dim stemp As String
sb = Len(smsg)
ascg = ""
For si = 1 To sb
stmp = AscW(Mid(smsg, si, 1))
If Abs(stmp) < 127 Then
stemp = "00" & Hex(stmp)
Else
stemp = Hex(stmp)
End If
ascg = ascg & stemp
Next si
ascg = Trim(ascg)
End Function我用了这个函数,那个好像不行!非常写写你!!!!