9.1 APP 设计

9.1.1 基础结构

APP 的基础结构采用 JSON 格式定义,包含以下核心字段:

{
    "code": "vip.woody.app.test1",
    "name": "测试应用",
    "logo": "",
    "script": "",
    "schema": "",
    "pages": "",
    "config": ""
}
  • 字段说明
字段 类型 必填 说明
code String 应用唯一标识符,相同 code 安装时会覆盖现有应用
name String 应用显示名称
logo String 应用图标,支持 base64 编码或图片 URL
script String Lua 后端脚本,控制应用逻辑,详见 APP后端
schema String 应用定义,经过编码的 JSON 格式
pages String 前端页面定义,经过编码的 JSON 格式
config String 应用安装后的配置信息

9.1.2 应用定义 Schema

9.1.2.1 结构概览

基础结构如下

{
    "data": [
        {
            "name": "products",
            "readable": true,
            "writable": false,
            "type": "table",
            "struct": [
                {
                    "name": "device",
                    "type": "string"
                },
                {
                    "name": "value",
                    "type": "int"
                },
                {
                    "name": "delta",
                    "type": "int"
                },
                {
                    "name": "time",
                    "type": "int"
                }
            ]
        }
    ],
    "input": [
        {
            "class": "cnc1",
            "define": [
                {
                    "code": "products",
                    "name": "产量",
                    "type": "int"
                }      
            ],
            "title": "一类加工机床"
        }
    ]
}

9.1.2.2 data 字段定义

data 字段定义应用的数据存储结构,采用数组格式,每个元素包含以下属性:

属性 类型 说明
name String 数据表名称
readable Boolean 是否可读
writable Boolean 是否可写
type String 数据类型,目前仅支持 table
struct Array 表结构定义
  • 只有自动生成的表格访问API的访问权限受 readable 和 writable 字段控制,后端 Lua 脚本的数据访问不受影响。

9.1.2.3 表结构定义

struct 数组中每个字段包含:

  • name: 字段名称
  • type: 字段类型,支持以下类型:
    • string 字符串类型
    • int 整数类型
    • float 浮点数类型
9.1.2.3.1 自动生成的 API 接口

基于 data 定义,系统会自动暴露以下 RESTful API 接口:

路径参数

  • code: 应用标识符

  • table: 数据表名称

  • id: 记录唯一标识符

  • 数据列表查询

GET /api/app/{code}/data/{table}

查询参数

参数 类型 默认值 说明
_start Number 0 起始记录位置
_limit Number 10 返回记录数量
{field} Any - 等值筛选,如 ?value=1
>{field} Any - 大于等于筛选,如 ?>value=1
<{field} Any - 小于等于筛选,如 ?<value=1
order String - 正序排序,如 ?order=value
-order String - 倒序排序,如 ?-order=value
  • 新增记录

POST /api/app/{code}/data/{table}

  • 单条记录查询

GET /api/app/{code}/data/{table}/{id}

  • 修改记录

PUT /api/app/{code}/data/{table}/{id}

  • 删除记录

DELETE /api/app/{code}/data/{table}/{id}

9.1.2.4 input 字段定义

input 字段定义APP内的设备和设备映射后的字段,设计思路是因为一个App可能会针对多种不同型号的设备,比如各种PLC和各种CNC,有些功能是需要将不同的设备抽象成一类设备的,需要在此定义一个设备类型,用于之后配置时映射:

{
    "class": "cnc1",
    "define": [
        {
            "code": "products",
            "name": "产量",
            "type": "int"
        }      
    ],
    "title": "一类加工机床"
}
属性 类型 说明
class String 设备的类型
title String 设备的类型名称
define Array 变量的定义

变量的定义

属性 类型 说明
code String 变量code
name String 变量名
type String 变量的类型

9.1.3 配置字段 config

config字段用来存储app安装后的配置内容

9.1.3.1 结构概览

基础结构如下

{
    "device": [
        {
            "code": "M06",
            "class": "cnc1",
            "variable": [
                {
                    "dst": "products",
                    "src": "cnc_products",
                }
            ]
        }
    ]
}

9.1.3.2 device 字段定义

device 定义IoTBoX采集的设备到APP内设备的映射,采用数组格式

属性 类型 说明
code String 机床Code
class Boolean App内设备的类型
variable Array 映射变量的定义

映射变量的定义

属性 类型 说明
dst String 原始变量code
src Boolean App内变量code

以上配置的含义是,将IoTBoX内配置的采集设备M06作为一个cnc1类型映射进入App,并且将M06采集到的cnc_products作为cnc1的product变量映射进去.