BOX配置
# 边缘计算
# 边缘计算使用教程
# 边缘计算案例一http转发
边缘计算可以实现http转发,即box将数据从plc端采集过来之后除了正常发到工业云平台之后,还可以通过边缘计算设置将box采集的数据通过http协议转发到客户平台端。这里简单介绍一下如何将box端采集到的数据全部转发到一个不需要认证的http平台(http://developerwulc.uicp.net/uploadVar
),若是用户平台需要认证可以额外做认证编程。
BOX里设置采集的变量如下:
点击边缘计算--新建脚本,选择周期脚本(要求每分钟转发一次就选中每分钟一次),写入以下代码:
require("global")
local vars = get_var_list();
code, data = http_post("http://developerwulc.uicp.net/uploadVar",vars, "application/json", "text", 5)
2
3
保存,下载到box,之后就能在http平台上看到转发过来的数据如下:
# 边缘计算案例二获取天气信息
本案例介绍从中央气象局获取天气信息的方法。
首先,针对想要获取的信息创建变量,变量使用自定义变量。
我们这里一共创建5个变量,分别是天气、温度、湿度、风向、风力,其中天气、风向、风力都是string类型,温度是float32类型,湿度是unit16类型。
创建好变量之后,点击边缘计算--新建脚本,可以选择脚本示例里的天气查询(调用中央气象台接口查询天气),也可以直接创建一个一分钟一次的周期脚本。
创建好之后将以下代码复制进去。若是创建的变量和本案例一样,可不用修改代码,若是变量不同,则将创建的变量分别替换进去即可。
require("global")
-- 获取北京的天气信息
local code, data = http_get("http://www.nmc.cn/rest/weather?stationid=54511", "json", 5)
if code == 200 and data ~= nil then
set_var("天气", data.data.real.weather["info"])
set_var("风向", data.data.real.wind["direct"])
set_var("风力", data.data.real.wind["power"])
set_var("温度", data.data.real.weather["temperature"])
set_var("湿度", data.data.real.weather["humidity"])
end
2
3
4
5
6
7
8
9
10
11
以上代码是获取北京的天气的,若是需要获取其他地方的天气,去中央气象局网站上查询地区对应的stationid替换掉即可。若是除了这几个变量还希望查询其他信息,请联系技术支持。
写好之后保存,下载到box,之后就能查看到天气信息了。这些信息可以在组态里引用显示。
# 边缘计算案例三钉钉报警推送
# 4.1 准备工作
- 钉钉需要企业管理员账号,推送为钉钉的机器人给钉钉群里推送
- 需要下载钉钉PC端的客户端软件
# 4.2 创建自定义机器人
钉钉里点击群设置
点击“群管理”->“机器人”
弹出机器人管理界面后,点击添加机器人
选择自定义
点击添加
安全设置,设置关键字。推送的报警里必须包含关键字才能推送成功,比如:每个报警前都加了关键字“监控报警”
勾选同意条款,点击完成
复制Webhook地址,并完成,这个就是我们要获取的url
如果忘了复制,可以点击机器人设置去复制
# 4.3 边缘计算代码
以上设置完成之后,在云平台上点击边缘计算--新建脚本--报警推送--钉钉,或者新建一个一秒一次的周期脚本也可以,示例代码如下:
内部全员群里推送
require("global") local socket = require("socket") function send_wechat(msg) local url = "https://oapi.dingtalk.com/robot/send?access_token=" --替换刚刚复制的webhook,要定时更新 local data = { msgtype = "text", text = { content = msg } } http_post(url, data, "application/json") end while true do --your code local a = get_var("1") --先获取报警变量值 if (a>35) then --这里加上报警的条件 send_wechat("服务器监控报警:数值异常,请尽快处理")--这里是推送的报警内容 socket.sleep(10); --这是推送报警的间隔 end end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20如果有人屏蔽了消息,@所有人发送消息
require("global") local socket = require("socket") function send_wechat(msg) local url = "https://oapi.dingtalk.com/robot/send?access_token=2e8264c23368498d281a3fb2f5eb539e047a268233bf62e1084ff539a5c23a8c"--这个url要定时更新 local data = { at = {isAtAll = ture},--@所有人的判断 msgtype = "text", text = { content = msg } } http_post(url, data, "application/json") end while true do local a = get_var("SV117") if (a>500) then --这里加上报警的条件 send_wechat("服务器报警:数值异常,请尽快处理")--这里是推送的报警内容 socket.sleep(10); --这是推送报警的间隔 end end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22如果只@某个人
require("global") local socket = require("socket") function send_wechat(msg) local url = "https://oapi.dingtalk.com/robot/send?access_token=2e8264c23368498d281a3fb2f5eb539e047a268233bf62e1084ff539a5c23a8c"--这个url要定时更新 local data = { at = {isAtAll = false,atMobiles={"18606205571"}},--添加要@的人注册钉钉账号的手机号 msgtype = "text", text = { content = msg } } http_post(url, data, "application/json") end while true do local a = get_var("SV117") if (a>500) then --这里加上报警的条件 send_wechat("服务器报警:数值异常,请尽快处理")--这里是推送的报警内容 socket.sleep(10); --这是推送报警的间隔 end end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 数据转发
数据转发是指Box可以将采集到的数据按各种定义好的协议转发出去,转发协议包括MQTT、Modbus、OPC-UA、环保212等。
# MODBUS TCP 协议转发
BOX采集的数据可以通过modbus协议转发到网口或者串口,作为从站给其他设备或者电脑采集。这里以联网宝采集232串口modbus数据转发成modbusTCP协议为例介绍。
设置数据转发
1.1 首先在BOX配置里选择BOX,点击“数据转发”,添加转发协议--新建数据转发,协议类型选择Modbus,转发名称自定义。
1.2 在基础属性里,转发协议设置为TCP,站号和端口可以自定义,然后点保存。值得注意的是,联网宝本身502端口是占用的,所以不要转发到502端口。
1.3 在右侧添加需要转发的变量,可以批量添加,也可以单独添加,寄存器类型根据采集的变量设置,起始地址自己定义。
1.4 添加成功,点右上方的“下载至BOX”
通过MODBUS TCP协议读取BOX数据
用modbus poll软件测试,电脑通过网线连接到联网宝的LAN口,运行modbus Poll软件,添加寄存器和要采集的变量地址,设置要连接的从站的IP,即box的LAN口IP(默认是192.168.10.1)和转发设置的端口就可以通过网口读取数据了。
此外,若是需要远程去读取联网宝转发的数据,可以通过网口通的方式实现,在modbus软件读取的时候输入ip地址为联网宝的远程访问ip(默认是192.168.168.x)就可以了。
# OPC UA 协议转发
BOX支持将采集的串口或者网口的数据通过OPC UA协议从本地网口转发给第三方组态软件采集。
在平台端添加OPC UA转发
1.1 在BOX配置里选择BOX,点击“数据转发”,添加转发协议--新建数据转发,协议类型选择OPC_UA,转发名称自定义。
1.2 在基础属性里,可以设置服务端口,服务路径,是否启用身份验证等,和客户端保持一致即可,这里用默认的配置,点保存。
1.3 在右侧添加需要转发的变量,可以批量添加,也可以单独添加。
1.4 添加成功后需点击要右上角“下载至BOX”。
组态软件通过OPC UA方式读取BOX数据
2.1 以组态王为例,电脑通过网线连接到联网宝的LAN口,运行组态王软件,在左侧设备里选择OPC UA服务器,点新建连接,服务器终端URL里地址设置成联网宝LAN口IP地址(默认是192.168.10.1)端口是平台设置的服务器端口4840,身份认证设置和平台设置保持一致,然后点击连接测试提示成功。
注意:若是需要远程连接联网宝读取数据,可以通过网口通实现,上图第二步骤中填联网宝的远程访问ip即可。
2.2 然后可以选中创建的设备,右键--创建OPC UA变量,或者在数据词典去添加变量,然后绑定到画面就可以显示了。
# 模块防拆
模块防拆是指将PLC内部的某个变量定为防拆变量,设定好参数后定时向PLC的这个变量里写值,通过监控防拆变量的值来判断设备的状态,从而进行下一步操作。
在BOX配置中 -点击更多功能,找到“模块防拆”,选择“启用”。
- 选择变量:作为防拆的变量,此变量不能为bool量
- 写入间隔:设置对防拆变量写值的间隔时间
- 正常状态:包含连接云平台正常,和PLC通讯正常,设置为1则连接云平台和PLC都正常的时候就会每个一个间隔时间往PLC写入一个1
- SIM卡不能识别:如果SIM卡被损坏或者被拔掉,则识别不到SIM卡,设置为2则识别不到SIM卡的时候就会每隔一个间隔时间向PLC写入一个2
- 网络异常状态:若联网宝本地网络无法连接云平台,就是网络异常,设置为3则不能连接云平台的时候每隔一个间隔时间向PLC写入一个3
按照上图示例配置: PLC程序对“防拆”变量进行监测:每5分钟对防拆变量进行一次写值,如果状态正常会对防拆变量写1,延时1s复位,如果sim卡被拔掉或者异常写2,如果是天线被拔掉或者欠费导致网络异常,则写入3。
注意:勾选自动复位,正常状态下写的值会延时复位,异常状态下写的值(如以上示例中的2和3)则不会被复位。
如果长时间为0或者长时间为1(正常状态下对防拆变量写1,需要定时清0),说明BOX被拆掉或者被损坏,则PLC执行对应的防拆操作;如果为2或者3,可以在PLC上执行对应的防拆操作。
配置完成之后需要点“下载至BOX”,将配置下载到联网宝中方可生效。