续上1期的《短信、邮件推送WinCC报警消息》
这期我们聊聊微信和APP推送。
微信推送
先展示一下我们测试视频,以证明我们紧跟时代潮流,没忽悠:)
在WinCC的WebUX客户端上(iPad)上操作触发了“压力低限”和“温度高限”报警
在手机微信app的测试公众号里可以马上收到报警消息,并查询数据。
大致步骤如下:
1. 需要注册一个微信公众号,微信没有开放第三方直接把消息把推送给个人这样的功能,只能通过公众号以“模板消息”的方式推送(这里我们用的是免费的个人订阅号做的测试,有些功能受限,如每天只能群发1条消息,其它服务号、企业号之类的公众号功能更强,但需作企业认证和付费)
2. 微信公众号的通讯机制:①用户通过微信app向公众号发送一条内容,实际是发送到了微信服务器上。②然后,微信服务器就会对内容进行封装,如xml格式,再转发到我们的公众号服务器(必须有能暴露给外界访问的一个公网地址);同样,⑤公众号若要把信息推送或回复给用户,也是要经由微信服务器,⑥再到用户。也就是说,我们自己需部署一个用来接收和响应微信消息和事件的公众号服务器,由这个公众号服务器作为中间商完成微信服务器与WinCC的交互。
3. 部署公众号服务器(我们把WinCC系统和测试用的公众号服务器部署在一台硬件服务器上了,此台服务器有公网固定IP)
在IIS中设定web站点。
(下面的C#代码均发布到此Web站点)
将此台服务器绑定域名http://wechat.wincc.com.cn
(已在公网域名管理服务器中将IP与此域名绑定)
应用池设定,接收WinCC本地应用交互。
完成IIS的基本设定
4. 将公众号服务器注册到微信服务器
在微信公众平台上,将公众号从“编辑模式”切换到“开发者模式”,并输入公众号服务器地址URL (http://wechat.wincc.com.cn)和token(可任意填写,用作生成签名)以及用作消息体加解密密钥EncodingAESKey(由开发者手动填写或随机生成),提交后,微信服务器会发送一个get请求到我们填写的URL上,公众号服务器收到这个消息后,回复内容即可通过微信服务器的验证。即建立关注此公众号的微信用户与公众号服务器之间的关联关系。
5. 在WinCC中封装报警消息并POST到公众号服务器
关于报警事件及报警文本的捕捉,参考前一篇:《短信、邮件推送WinCC报警消息》
在C全局脚本GMsgFunction函数中将报警编号、文本等信息写入WinCC内部变量,并置位Alarm_coming(也是WinCC内部变量)。
通过Alarm_coming这个变量触发下面的VBS全局动作,将报警消息封装成XML格式的字符串(这里我们把报警的MsgType消息类型定义为“alarm”,便于公众号服务器区分信息来源和类别),通过msxml2.xmlhttp对象将这个字符串POST到公众号服务器(wechat.wincc.com.cn)。
6. 公众号服务器识别第三方POST过来的信息,当解析后发现MsgType为“alarm”,即约定为是WinCC推送过来的报警消息。(下面均为C#代码,均需发布到公众号网站上)
然后利用微信提供的接口读取关注此公众号的用户,轮询客户并推送消息到用户端(目前微信规定,即使是采用模板方式推送,也只能到单个客户,不能一次性批量群发)
wxMessageService类展开如下,调用了微信的接口,按微信公众平台预定义的消息模板,向特定用户Post消息。其中access_token是公众号的全局唯一接口调用凭据,公众号调用各种微信接口时都需要(https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html)
其实我个人并不推荐这种方式,因为要接入到互联网,如果信息安全措施不到位,可能会有隐患;另外,正式用的企业公众号还涉及到额外的费用。再另外,涉及太多非传统自动化的IT知识点,有时隔行如隔山。
腾讯官方的微信开发者文档:
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html)
App推送
部署一个PC用作SIMATICNotifier报警信息服务器(需要购买SIMATIC Notifier软件及授权),它可以通过S7,OPC UA通信把WinCC和触摸屏等各种信息源的报警消息,推送到智能手表(支持安卓Android wear 2)或安卓手机的app客户端,效果如下面视频:
特别致谢张占领同学给予本期软文提供技术指导 !
更多WinCC人机交互内容
或关注公众号: 人机常情 WinCC(扫码)
或加入微信群: WinCC 社区(点此链接)