此章只讲通过【BOX配置】新增BOX、添加设备、添加变量、新增报警、边缘计算、协议转发等功能

BOX配置

跳转到BOX配置详情

注意:1.如果不用脚本功能或数据转发功能,建议不用【BOX配置】里面进行编辑,使用ECSManager软件常规编辑即可
2.通过【BOX配置】里面编辑配置后,将不能使用ECSManager软件进行编辑,只能【BOX配置】里面进行编辑或使用新配置软件BOXConfig软件进行编辑

新增BOX

【BOX配置】–【BOX配置】点击【添加BOX】按钮

说明:
1.此处添加BOX时,BOX必须在线(网关指示灯CLD亮),否则不能添加
2.此页面的【网络配置】中不要修改任何参数,主要查看用,上网方式的设置请置硬件手册】–选择型号手册中的【网络设置】查看编辑

image.png

  • 删除设备:如果不需要这个BOX,可以删除BOX(如果绑定了项目,需要先至【项目中心】-【项目配置】-【BOX管理】中移除BOX)
  • 解绑序列号:如果需要释放该序列号供别的BOX或项目使用,解绑即可
  • 更改序列号:如果后期更换模块,可以在此更换序列号
  • 远程重启:点击后,模块会重新启动
  • 升级到新配置软件:升级后,通过ECSManager软件创建的BOX配置将不能通过ECSManager软件进行编辑,切记!!!!!!只能通过在该页面【BOX配置】或下载【客户端BOXConfig】新软件中编辑

    添加设备

【BOX配置】-【变量管理】-【通讯口配置】中新增设备

image.png

  • PLC名称:根据需要自定义
  • 通讯口:根据实际设备口选择,串口选择232或485,网口就选择网口
  • 设备品牌:根据BOX连接的设备品牌选择
  • 设备系列:设备具体型号
  • IP地址:通讯口选择网口,IP地址填写BOX所连接PLC等设备实际IP即可
  • 端口:通讯口选择网口,IP地址填写BOX所连接PLC的协议端口填写即可
  • 高级设置:
    –基本不需要设置,如果遇到某些变量读不上来的情况,可以在此处设置单包变量数为2或别的(根据实际情况调整)

添加变量

通过上一步添加设备后,【BOX配置】-【变量管理】-【默认分组】中可以添加变量,默认存在BOX状态和设备状态变量
image.png

image.png

添加变量时根据变量点表创建即可:

  • PLC名称:选择已添加的设备
  • 读写类型:
    – 读写:该变量可读可写
    – 只读:该变量不支持修改
    – 只写:该变量不上传,只支持修改
  • 变量名称:自定义该变量名称
  • 变量单位:自定义填写
  • 变量地址:根据设备变量点表实际填写
  • 地址偏移:根据设备变量点表实际填写
  • 数据类型:根据设备变量类型实际填写
  • 数据经度:根据设置的精度上传该变量的小数精度
  • 变量描述:如有需要,自定义
  • 更多设置:
    – 线性换算:启用后,可以对该变量进行简单的线性运算,比如缩小10倍、扩大100倍等
    – 有效范围:启用后,该变量值在设定范围内才上传
    – 存储类型:启用后,根据需要选择存储类型,包括周期存储、变化存储、条件存储
    – 安全配置:启用后,该变量的控制权限将和角色的项目权限关联,只有角色有该安全类的才能控制

d注意:如果该BOX没有绑定项目,且【项目中心】-【项目配置】-【项目信息】-【过期时间】未设置或已过期,变量都显示88888888

边缘计算

针对于某些设备需要做些数据处理,开放了边缘计算功能。
BOX固件版本需要3.5X以上
image.png
边缘计算使用LUA语音脚本功能,内置了常用的一些脚本模板:例如次数统计、时长计算、费用计算、报警联动、定时任务、MQTT连接、HTTP连接等等

image.png

  • 案例:此案例为一个时长计算的脚本案例
    – 创建变量:时长变量使用自定义变量,不要使用设备变量
    image.png
--新建脚本:选择时长计算模板

image.png
–脚本代码

-- 计算设备有效运行时长
local status = get_var("运行")
local time = get_var("运行时长")

if (status == 1) then
    set_var("运行时长", time + 1)
end

下载至BOX

所有配置都配置完成后,或者配置有所修改都需要将配置下载至BOX

image.png

脚本块语法

脚本使用LUA,可以参考LUA语法参考

image.png

–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)用法

  • 声明

  • 连接

  • 插入

  • 移除

  • 排序

    lua-字符串(string)用法

  • 声明

  • 转换大小写

  • 替换

  • 查找

  • 反转

  • 计算长度

  • 截取

作者:admin  创建时间:2024-10-23 10:01
最后编辑:admin  更新时间:2024-11-18 14:03