短信 (SMS) 推送报警消息
- 方法1:通过串口短信猫 (以西门子MD720-3为例,以AT指令方式发送中英文短信)
A. 在WinCC图形编辑器中选择“对象选项板”的“控件”选项卡,选择“添加/删除”,在“选择OCX控件”对话框中选择“Microsoft Communications Control”进行注册。然后在WinCC画面中添加MSComm 控件;
B. 设置串口通信的波特率、奇偶校验、数据位等参数。
C. 将要发送的报警消息赋值给控件的 Output 属性。注意,发送前先判断串口是否为打开状态(PortOpen 属性)
D. 发送英文短信:
1) MSComm控件发送“AT CMGF=1<CR>”。设定短消息格式为“文本”,仅英文。
2) 返回“OK”。
3) 向串口发送“AT CMGS=”13810000000”<CR>”。手机号码
4) 返回“>”。
5) 向串口发送短信的内容(报警文本), MD720-3将短信发送给设定的手机号码。
6) 返回“OK”,说明短信发送成功。
代码语言:javascript复制set SMsSend = HMIRuntime.screens("Alarm" ).screenItems ("MSComm1")
If SMSSend.PortOpen = True Then
SMSsend.output ="ATEO" & Chr (13)
Do
buffer = buffer & SMssend. Input
Loop Until InStr (buffer, "OK")
buffer - ""
HMIRuntime.Trace( "AT State OK!"&vbCrLf)
SMssend.output -"AT CMGF-1" & chr (13)
Do
buffer = buffer & SMsSend . InputLoop
Until InStr (buffer, "OK")
buffer - ""
HMIRuntime.Trace ( "AT CMGF=1 OK!"& vbCrLf)
SMsSend.output = "AT CMGS=n"" & PhoneNumber & """" & Chr(13)
Do
buffer -buffer & SMsSend. InputLoop Until InStr (buffer, ">")
buffer - ""
HMIRuntime.Trace( "AT CMGs oK!"& vbCrLf)
SMsSend.output = SMS chr (2 6)
Do
buffer = buffer & SMssend.InputLoop
Until InStr(buffer, "OK")
HMIRuntime.Trace ("Finish to send the SMS!" & vbCrLf)
Else
HMIRuntime.Trace ("No port is opened! " & vbCrLf)
End If
E. 发送中文短信:
1) 首先需要设置短信发送方式为 PDU 模式。使用“AT CMGF=0<CR>”命令。
2) 其次要向被叫号码发送 PDU 的长度。例如,使用“AT CMGS=18<CR>”命令。
3) 当 MSComm 控件接收到“>”命令后,向串口发送短信的 PDU 编码字符串。PDU 编码格式如下:
例如发送:
>0001000D91683108214365F700080459296C14<CTRL Z>
- 其中,红色的数字(3108214365F7)代表对方的手机号码,在 PDU 格式中,手机号码每两位需要对调。比如在上面这个例子里,对方的手机号码为13801234567,F用来补充7 后面的空位。
- 蓝色的数字(59296C14)是短消息内容的 Unicode 码,这里5929 代表“天”,6C14 代表“气”。Unicode码同样可以用来表示一般英文字母和数字,方法是在英文或数字的 ASCII 码前加 00。中文对应的unicode以及中文转unicode的程序代码,网上有很多资料,如:https://wenku.baidu.com/view/0a57dc6e650e52ea55189882.html
- 紫色的数字(04)代表短消息文本的长度,它等于其后所有字符个数除以 2。黑色的数字每次发送短消息时都是相同的,使用时可以照抄。 PDU 格式发送短消息时,还必须计算整个 PDU 数据包的长度,PDU 数据包的长度等于(PDU 数据包字符数-2)/2,在上面的例子里:(38-2)/2=18。