9.1 APP后端

9.1.1 APP内置变量与定义

9.1.1.1 Application 类型

Application类型为App在C++代码内的类型

class Application{
    json ExecSql(string sql);
    bool HasAevice(string code);
    Variable GeVariable(string device_code,string variable_mapped_code);
    string code;
}
9.1.1.1.1 执行SQL语句
  • 定义: ExecSql(sql)

  • 分类: 方法

  • 参数:

    • sql: string 需要执行的sqlite3语句
  • 返回: table sql执行后的结果,key-value组成的map的list,比如[{“id”:1,“name”:“xx”}],如果执行失败则返回空数组[]

  • 示例

    -- 当前APP为app
    -- 查询所有的产品
    local goods = app:ExecSql("select * from goods;")
9.1.1.1.2 是否存在设备

判断当前APP是否映射有某个设备 * 定义: HasAevice(code) * 分类: 方法 * 参数: - code: string 设备Code * 返回: bool 存在返回true,不存在返回false * 示例

```lua
-- 当前APP为app
-- 查询是否有fanuc001设备
local has_fanuc = app:HasAevice("fanuc001")
```
9.1.1.1.3 获得映射后变量的原始变量的指针
  • 定义: GeVariable(device_code, variable_mapped_code)

  • 分类: 方法

  • 参数:

    • device_code: string 设备Code
    • variable_mapped_code: string 映射后的变量名
  • 返回: Variable 原始的采集变量,类型为内置变量的Vairable,不存在返回nil

  • 示例

    -- 当前APP为app
    -- 查找prodiuct变量的原始变量
    local product = app:GeVariable("fanuc001","product")
9.1.1.1.4 变量的名称
  • 定义: code
  • 分类: 属性
  • 类型: string
  • 描述: APP的code

9.1.1.2 HttpRequest 类型

API的请求参数,格式如下

---@class HttpRequest
---@field path_arg table<string, string> PathArg
---@field query table<string, string> Query
---@field body any Body
---@field headers table<string, string> Header
9.1.1.2.1 请求的path参数
  • 定义: path_arg
  • 分类: 属性
  • 类型: table<string, string>
  • 描述: /test_api/<code> 这类PATH里带<>变量的解析结果
9.1.1.2.2 请求的query参数
  • 定义: query
  • 分类: 属性
  • 类型: table<string, string>
  • 描述: /test_api?a=1&b=2 请求里?后面的请求参数
9.1.1.2.3 请求的body参数
  • 定义: body
  • 分类: 属性
  • 类型: any
  • 描述: HTTP post或put请求的body
9.1.1.2.4 请求的body参数
  • 定义: headers
  • 分类: 属性
  • 类型: table<string, string>
  • 描述: HTTP 请求的headers

9.1.1.3 HttpResponse 类型

API的返回内容,格式如下

---@class HttpResponse
---@field code integer StatusCode
---@field body any Body
---@field headers table<string, string> Header
9.1.1.3.1 HTTP返回的status_code
  • 定义: code
  • 分类: 属性
  • 类型: integer
  • 描述: HTTP 返回的code
9.1.1.3.2 HTTP返回的内容
  • 定义: body
  • 分类: 属性
  • 类型: any
  • 描述: HTTP 返回的body
9.1.1.3.3 HTTP返回的Headers
  • 定义: headers
  • 分类: 属性
  • 类型: table<string, string>
  • 描述: HTTP 返回的headers

9.1.1.4 MappedDevice 类型

App内映射的设备,格式如下

---@class MappedDevice
---@field code string Device Code
---@field type string Device Type
---@field class string Device Class
9.1.1.4.1 MappedDevice Code
  • 定义: code
  • 分类: 属性
  • 类型: string
  • 描述: 设备的Code,和基础变量的Device.code对应
9.1.1.4.2 MappedDevice Type
  • 定义: type
  • 分类: 属性
  • 类型: string
  • 描述: 设备的类型,和基础变量的Device.type对应
9.1.1.4.3 MappedDevice Class
  • 定义: class
  • 分类: 属性
  • 类型: string
  • 描述: 设备的分类,为APP内部定义字符串

9.1.1.5 TriggerVariable 类型

App内映射的设备,格式如下

---@class TriggerVariable
---@field current integer | number | string | boolean | table  当前采集值
---@field last integer | number | string | boolean | table  上次采集值
9.1.1.5.1 TriggerVariable current
  • 定义: current
  • 分类: 属性
  • 类型: integer | number | string | boolean | table
  • 描述: 变量当前采集值
9.1.1.5.2 TriggerVariable last
  • 定义: last
  • 分类: 属性
  • 类型: integer | number | string | boolean | table
  • 描述: 变量上次采集值

9.1.2 脚本格式

APP 最简格式如下


--- test_api 测试API
---@param request HttpRequest  -- 请求参数
---@return  HttpResponse    -- 返回参数
local function test_api(request)
    return {}
end



--- Trigger 设备采集后触发函数
---@param device MappedDevice  -- 当前设备
---@param data table<string,TriggerVariable>  -- 映射后的变量code与变量采集值
---@return  table<string,any>    -- 返回参数,更新到最终的设备采集数据
function Trigger(device, data)
    local result = {}
    return result
end


Api = {
    {
        path = "/test_api/<code>",
        method = "GET",
        func = test_api
    },
}

其中定义如下

9.1.2.1 Trigger 函数

映射到APP的应用,每轮数据采集后都会触发Trigger函数,将设备映射的变量传入

  • 定义: Trigger(device, data)
  • 分类: 函数
  • 参数:
    • device: MappedDevice 当前的设备,这个设备
    • data: table<string,TriggerVariable> 映射后的变量code与变量采集值
  • 返回: table<string,any> 返回后的数据会直接更新到设备的采集结果里,只有返回值会修改采集结果,直接操作data不会

9.1.2.2 Api 表

Api表中定义对外暴露的http接口,是一个list嵌套的map

  • 字段:
    • path: string 请求路径,使用<>来设置path参数
    • method: string HTTP请求方法
    • func: function 命中路由后触发的函数
  • 返回: table<string,any> 返回后的数据会直接更新到设备的采集结果里,只有返回值会修改采集结果,直接操作data不会
  • 触发函数
    • 入参: request HttpRequest类型
    • 返回值 HttpResponse类型