此章只讲通过【BOX配置】新增BOX、添加设备、添加变量、新增报警、边缘计算、协议转发等功能
BOX配置
注意:1.如果不用脚本功能或数据转发功能,建议不用【BOX配置】里面进行编辑,使用ECSManager软件常规编辑即可
2.通过【BOX配置】里面编辑配置后,将不能使用ECSManager软件进行编辑,只能【BOX配置】里面进行编辑或使用新配置软件BOXConfig软件进行编辑
新增BOX
【BOX配置】–【BOX配置】点击【添加BOX】按钮
说明:
1.此处添加BOX时,BOX必须在线(网关指示灯CLD亮),否则不能添加
2.此页面的【网络配置】中不要修改任何参数,主要查看用,上网方式的设置请置硬件手册】–选择型号手册中的【网络设置】查看编辑
- 删除设备:如果不需要这个BOX,可以删除BOX(如果绑定了项目,需要先至【项目中心】-【项目配置】-【BOX管理】中移除BOX)
- 解绑序列号:如果需要释放该序列号供别的BOX或项目使用,解绑即可
- 更改序列号:如果后期更换模块,可以在此更换序列号
- 远程重启:点击后,模块会重新启动
- 升级到新配置软件:升级后,通过ECSManager软件创建的BOX配置将不能通过ECSManager软件进行编辑,切记!!!!!!只能通过在该页面【BOX配置】或下载【客户端BOXConfig】新软件中编辑
添加设备
【BOX配置】-【变量管理】-【通讯口配置】中新增设备
- PLC名称:根据需要自定义
- 通讯口:根据实际设备口选择,串口选择232或485,网口就选择网口
- 设备品牌:根据BOX连接的设备品牌选择
- 设备系列:设备具体型号
- IP地址:通讯口选择网口,IP地址填写BOX所连接PLC等设备实际IP即可
- 端口:通讯口选择网口,IP地址填写BOX所连接PLC的协议端口填写即可
- 高级设置:
–基本不需要设置,如果遇到某些变量读不上来的情况,可以在此处设置单包变量数为2或别的(根据实际情况调整)
添加变量
通过上一步添加设备后,【BOX配置】-【变量管理】-【默认分组】中可以添加变量,默认存在BOX状态和设备状态变量
添加变量时根据变量点表创建即可:
- PLC名称:选择已添加的设备
- 读写类型:
– 读写:该变量可读可写
– 只读:该变量不支持修改
– 只写:该变量不上传,只支持修改 - 变量名称:自定义该变量名称
- 变量单位:自定义填写
- 变量地址:根据设备变量点表实际填写
- 地址偏移:根据设备变量点表实际填写
- 数据类型:根据设备变量类型实际填写
- 数据经度:根据设置的精度上传该变量的小数精度
- 变量描述:如有需要,自定义
- 更多设置:
– 线性换算:启用后,可以对该变量进行简单的线性运算,比如缩小10倍、扩大100倍等
– 有效范围:启用后,该变量值在设定范围内才上传
– 存储类型:启用后,根据需要选择存储类型,包括周期存储、变化存储、条件存储
– 安全配置:启用后,该变量的控制权限将和角色的项目权限关联,只有角色有该安全类的才能控制
d注意:如果该BOX没有绑定项目,且【项目中心】-【项目配置】-【项目信息】-【过期时间】未设置或已过期,变量都显示88888888
边缘计算
针对于某些设备需要做些数据处理,开放了边缘计算功能。
BOX固件版本需要3.5X以上
边缘计算使用LUA语音脚本功能,内置了常用的一些脚本模板:例如次数统计、时长计算、费用计算、报警联动、定时任务、MQTT连接、HTTP连接等等
- 案例:此案例为一个时长计算的脚本案例
– 创建变量:时长变量使用自定义变量,不要使用设备变量
--新建脚本:选择时长计算模板
–脚本代码
-- 计算设备有效运行时长
local status = get_var("运行")
local time = get_var("运行时长")
if (status == 1) then
set_var("运行时长", time + 1)
end
下载至BOX
所有配置都配置完成后,或者配置有所修改都需要将配置下载至BOX
脚本块语法
脚本使用LUA,可以参考LUA语法参考
–1.该BOX下创建的变量,供编辑代码时使用,在编辑代码时,选择位置后,双击变量即可
–2.帮助:包含了支持的所有语法和开放的功能块
–3.代码编辑器:代码编辑块
–4.测试、问题:调试用
系统线程库
- 多任务代码示例
`
python
require(“global”)
local cnt = 0
–创建一个定时器任务, 每一秒钟执行一次
create_timer(function()
cnt = cnt + 1
log(“task1”, cnt)
end, 1)
–创建一个定时器任务, 每5秒钟执行一次
create_timer(function()
cnt = cnt + 1
log(“task2”, cnt)
end, 5)
–创建一个线程任务
create_thread(function()
while true do
–等待2秒钟
sleep(2)
cnt = cnt + 1
log(“task3”, cnt)
end
end)
–开始同时运行以上所有任务
run()
- 创建定时任务
```python
create_timer(function()
end, interval)
创建一个线程
create_thread(function() end)
启动任务
run()
LUA基础语法
- function (定义函数)
`
python
function func1()
end
- if (条件判断)
```python
if (true) then
end
- if … else (条件判断2)
`
python
if (true) then
else
end
- if ... elseif (条件判断3)
```python
if (true) then
elseif (true) then
else
end
- while … do (条件循环)
`
python
while (true) do
end
- for … i (次数循环)
```python
for i = 1, 10 do
end
- for … in (遍历循环)
for i, v in ipairs(obj) do print(i, v) end
- local (定义变量)
local a = 5
- +-*/ (算术运算符)
`
python
local a = 2
local b = 1
– 加法
local c = a + b
– 减法
c = a - b
– 乘法
c = a * b
– 除法
c = a / b
– 取余
c = a % b
– 乘幂
c = a^2
– 负号
c = -a
- == <= >= (关系运算符)
```python
local a = 2
local b = 1
-- 等于
if (a == b) then
-- 不等于
elseif (a ~= b) then
-- 大于
elseif (a > b) then
-- 小于
elseif (a < b) then
-- 大于等于
elseif (a >= b) then
-- 小于等于
elseif (a <= b) then
end
- and or not (逻辑运算符)
`
python
– 逻辑非
elseif (not a) then
end
### BOX库
天启通过LUA开发的专门读写BOX数据变量的库
- 获取变量值
```python
local var_value = get_var("变量名称");
- 获取所有变量值
--[[ 获取所有变量值 接口名称: get_var_list 参数:无 返回:二维数组,每个元素保存一个变量的 name, id,status,datatype 和 value,比如: { {0, "tag0", false, 5, nil }, { 3, "tag3", true, 8, 789}} 代码示例: ]]-- local vars = get_var_list(); for i, var in pairs(vars) do local id = var[1]; local name = var[2]; local status = var[3]; local datatype = var[4]; local value = var[5]; print(id, name, status, datatype, value); end
- 设置单个变量值
set_var("变量名称", "变量值");
- 设置多个变量的值
--[[ 控制多个变量值 - 通过变量名称 接口名称:set_var_batch 参数: 一维数组,元素下标为变量名称 ]]-- local ctrl_tbl = { tag108 = 36, tag109 = 789.561 }; set_var_batch(ctrl_tbl);
- 打印日志信息
log("");
socket库
- 连接
- 发送
- 接收
- select
- 设置超时
- 休眠
- 引用
可参考lua的socket连接使用
mqtt库
- 创建客户端
- 订阅
- 发布
- 启动mqtt
可参考lua的socket连接使用,案例
require("global")
local config = {
uri = "192.168.1.23:1883",
id = "mqtt-test-05",
username = "admin",
password = "123456",
}
function on_message(topic, payload, qos)
print(topic, payload, qos)
end
function on_event(connected, type, msg)
print(connected, type, msg)
end
local mqtt = create_mqtt_client(config, on_message, on_event)
mqtt:subscribe("luamqtt/#", 0)
mqtt:run()
local i = 0
create_timer(function()
i = i + 1
now = get_time_second()
local a, b = mqtt:publish("luamqtt/spec111", "this is a test message " .. i)
end, 10)
run()
http库
引用
require("global")
get请求
-- data_type: json/text, tiomeout:超时时间为秒 local code, data = http_get(url, data_type, timeout)
post请求
http_post(url, data, content_type, data_type, timeout)
json库
引用
local cjson = require("cjson")
转json
local jsonData = cjson.encode(table)
转数据表
--json转数据 local data = cjson.decode(jsonData)
lua-表(table)用法
最后编辑:admin 更新时间:2024-11-18 14:03