网站首页 > 技术文章 正文
我经常会被客户问到:
能不能把系统的异常状态通过WinCC的报警消息推送给我的手机短信、邮件、微信、
APP……
当然!
可以!
这期简单梳理一下:报警捕捉、短信/邮件推送。
我扔个“砖”,等大家的“玉”,相信有更简单的办法
- 实时捕捉WinCC报警消息
组态报警消息时,激活“triggers action”属性,则WinCC运行时,若有指定消息事件(到来、离开、被确认...)时,就会触发全局函数“GMsgFunction( )”。
函 GMsgFunction的传入参数提供了一系列消息数据,包括消息状态、消息号、时间戳等,具体内容参见帮助文档中结构体 MSG_RTDATA_STRUCT 的定义。
使用函数“MSRTGetMsgCSData”。先判断消息的状态是否为“到来”,根据消息号获取消息的组态数据,具体内容参见结构体 MSG_CSDATA_STRUCT 的定义;再调用”MSRTGetMsgText”函数根据文本库中的文本 ID 得到消息文本内容,可把这些信息传给WinCC的内部变量。
其实,获得了报警文本,跟WinCC本质相关的就到这了。至于短信、邮件、微信推送,无论是哪家的SCADA,无论用什么编程环境,其实都大同小异。
- 短信 (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”,说明短信发送成功。
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。
- 方法2:通过以太网口短信猫
(以西门子路由器M874-3为例,其支持联通的3G 卡,以及移动和联通的2G 卡。据悉此硬件不支持中文短信,所以若需中文,那就考虑第三方硬件,方法类似。)
A. 激活M874-3设置中的“SMS Relay Outgoing”功能。
B. 在WinCC图形编辑器中选择“对象选项板”的“控件”选项卡,选择“添加/删除”,在“选择OCX控件”对话框中选择“Microsoft WinSock Control, version 6.0”进行注册。然后在WinCC画面中添加WinSock 控件;
C. 在GMsgFunction( )全局函数中,置位一个内部变量Alarm_Coming,这个变量作为一个全局动作触发器:建立TCP/IP连接。
D. 在Socket控件的connect事件中发送报警消息
代码如下:
- 邮件推送报警消息
通过VBS代码控制outlook 发送邮件
(个人推荐此方式
省钱; 另外,很多邮箱都可以绑定手机,邮件到达有实时短信提醒)
前提:这台电脑有outlook并能正常发送邮件(已设置好SMTP/POP3服务器, 用户账号等)。WinCC的VBS编程环境中要使能Microsoft Outlook对象库的引用
邮件功能的核心代码如下:
Dim OutlookObj As Object
Dim OutlookNewMail As Object
Set OutlookObj = CreateObject("Outlook.Application")
'创建Outlook应用对象
SetOutlookNewMail = OutlookObj.CreateItem(olMailItem)
'创建Outlook邮件对象
OutlookNewMail.To = To_Addr
'收件人地址
OutlookNewMail.cc = Cc_Addr
'抄送人地址
OutlookNewMail.Body = BodyText
'邮件内容:报警消息文本,嵌入至此
OutlookNewMail.Send
'执行发送动作
采用此方式发送邮件,Outlook会出现“有一个程序正试图以您的名义发送电子邮件”提示,则需对Outlook进行设置: '"工具" -> "信任中心" -> "编程访问" -> 选择"从不向我发出可疑活动警告"
篇幅关系,先写到这。
猜你喜欢
- 2025-06-18 Android 教程:如何在 Gmail 5.0 上登录网易、QQ 邮箱
- 2025-06-18 给心爱的她(他)用java发送一封邮件吧
- 2025-06-18 网络工程师必备的《网络端口大全》,收藏起来这一份就够了
- 2025-06-18 邮件接收协议POP3与IMAP
- 2025-06-18 免费10年VPS-serv00服务器,注册与自动化保号
- 2025-06-18 CWM私有云专属 D-Link DAP-2230无线AP评测
- 2025-06-18 八种基本服务器类型,看这篇完全够了!
- 2025-06-18 2016年上半年 网络工程师 答案详解
- 2025-06-18 [云丰邮箱]企业邮箱使用Foxmail的设置方法
- 2025-06-18 常用邮箱服务器地址及端口
- 06-22Python开发工程师必会的3个设计模式(工厂、单例、适配器)
- 06-22创建型设计模式——工厂模式和抽象工厂模式
- 06-221. 工厂模式详解
- 06-22工厂模式详解
- 06-22设计模式问题:说一说简单工厂模式?
- 06-22深入设计模式:工厂方法
- 06-22C++设计模式——简单工厂模式
- 06-22什么是工厂模式?工厂模式有哪些类型?如何使用它们?
- 最近发表
- 标签列表
-
- axure 注册码 (25)
- exploit db (21)
- mutex_lock (30)
- oracleclient (27)
- think in java (14)
- javascript权威指南 (19)
- nfs (25)
- componentart (17)
- yii框架 (14)
- springbatch (28)
- oracle数据库备份 (25)
- iptables (21)
- 自动化单元测试 (18)
- mvc模式 (13)
- python编写软件 (14)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- dfn (14)
- http error 503 (21)
- pop3服务器 (18)
- 图表组件 (17)