短信/邮件推送WinCC报警消息

发布时间:2024年01月21日

我经常会被客户问到:

能不能把系统的异常状态通过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进行设置:?'"工具" -> "信任中心" -> "编程访问" ->?选择"从不向我发出可疑活动警告"

篇幅关系,先写到这。

博途TIA/WINCC社区VX群

?博途TIA/WINCC社区VX群

文章来源:https://blog.csdn.net/gongkongxiaozhou/article/details/135728480
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。