接口说明
万维组态测试后端,提供了万维组态编辑器所需的所有数据接口以及mqtt连接示例;下面我们一一介绍;
1、数据表
1.1、数据点位表
1.1.1、数据点位表结构
数据点位表是存储点位的,数据结构如下:
CREATE TABLE `rc_variable` (
`id` bigint(11) NOT NULL COMMENT '主键',
`name` varchar(255) NOT NULL COMMENT '点位名称',
`dwkey` varchar(50) NOT NULL COMMENT '点位属性',
`templete_id` bigint(11) NOT NULL COMMENT '模版id',
`value_type` tinyint(2) NOT NULL COMMENT '数值类型',
`default_value` varchar(255) NOT NULL COMMENT '默认值',
`sort` int(4) DEFAULT NULL COMMENT '排序',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `unique_temp_var_name_key` (`name`,`dwkey`,`templete_id`) USING BTREE COMMENT '每个模版的变量名称点位属性唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据点位';
1.1.2、数据点位表字段介绍
id: 唯一主键;
name: 点位名称,区别点位用,必须设置,相对于模版唯一;
dwkey:点位属性,用于mqtt/websocket数据通信,必须设置,相对于模版唯一;
templete_id:外键,关联模版表,一个模版有多个点位;
value_type:点位值的数据类型,有整型(0)、浮点型(1)、字符串(2),必须设置;
default_value:点位的默认值,必须设置,不管是整型还是浮点型都用字符串返回;
sort:排序字段;
1.1.3、数据点位表存储例子
比如我们实际场景中又一个数据点是 "阀门开关状态"的点,这个点的实时值为0或者1,我们就在将点位添加到点位表时
name: 阀门开关状态;
dwkey:fmzt;// 注意这个值 下面我们会用到
templete_id: 模版表ID;
value_type: 0;//整型
default_value: '0';//默认值为0
sort: 1;
以上是我们在添加点位时的例子,特别注意的是,在同一个模版中,点位名称name是唯一的,点位属性dwkey也是唯一的, 请勿重复;dwkey是我们在数据通信时重要凭证,例如我们在websocket消息体是如下的json:
{
'fmzt': 1,
// 其他点位键值。。。
}
我们在接收到以上消息后,就会遍历我们添加的点位,用点位的dwkey值获取点位的实时值;例如我们添加的阀门开关状态点位, 它的dwkey字段的值为【fmzt】,我们从收到json消息中就可以匹配到最新的实时值为【1】,这个时候点位【阀门开关状态】对应的实时值就会更新为 1,从而去通知组态图更新受【阀门开关状态】约束的【虚拟变量】的返回值,从而刷新组态图中绑定了这些受影响的虚拟变量的图元;
1.2、数据模版表
1.2.1、数据模版表结构
数据模版表是存储一个数据模版的,数据结构如下:
CREATE TABLE `rc_templete` (
`id` bigint(11) NOT NULL COMMENT '主键',
`name` varchar(255) NOT NULL COMMENT '模版名称',
`content` longtext COMMENT '组态内容',
`virvar_json` longtext COMMENT '虚拟变量JSON',
`edversion` bigint(11) NOT NULL DEFAULT '0' COMMENT '组态编辑内容版本号',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`status` tinyint(4) DEFAULT '0' COMMENT '状态',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='模版';
1.2.2、数据模版表字段介绍
id: 唯一主键;
name: 模版名称,必须设置;
content: 组态内容,存放组态图文件的路径;
virvar_json:存放虚拟变量的json字符串;配置的所有虚拟变量存在这里
edversion:组态编辑提交内的容版本号, 必须设置 默认可以设置为0;
1.2.3、数据模版表解释
数据模版表为什么会存在?主要是为了管理变量及组态内容、虚拟变量等,一个模版可以被多个组态实例使用,也就是说我们只要创建一个模版, 就可以使用到多个组态实际场景中;例如我们有是个污水处理厂,而这些污水处理厂使用的设备都是相同的,假如没有模版,我们要创建组态的话, 就要创建10个,画10次图,并且要绑定10次点位数据,这时,模版就很好的解决了重复工作,我们只需要创建一个模版,这是个组态在创建的时候 只需要引用下这个模版。
1.3、组态表
1.3.1、组态表结构
组态表是存储组态实例的表结构,数据结构如下:
CREATE TABLE `rc_device` (
`id` bigint(11) NOT NULL COMMENT '主键',
`name` varchar(255) NOT NULL COMMENT '组态名称',
`templete_id` bigint(11) NOT NULL COMMENT '模版id',
`thumb` longtext COMMENT '封面',
`slave_url` varchar(255) DEFAULT NULL COMMENT '从机地址',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='组态';
1.3.2、组态表字段介绍
id: 唯一主键;
name: 组态名称;
templete_id: 关联的模版id;
thumb:组态封面;
slave_url:从机地址,就是mqtt/websocket的服务地址;
1.3.3、组态表解释
此处我们终点介绍slave_url,它是我们数据通信的地址,我们在预览组态时,前端会通过此值来连接到消息服务器, 从而前端可以实时接收到点位数据变化的消息,刷新组态图,前端的事件也会通过自这个消息通道把事件发出去; 我们这里就是以MQTT作为消息传输通道,当有点位数据发生变化时,外部就可以通过该通道,将点位值发送到固定的topic上 (topic/preview/subscribe/device/【id】),前端在连接到slave_url指定的消息服务器后,会自动订阅一个topic 这个topic用组态id作为标识,只要时预览这个组态图,就会订阅这个topic,外部在点位数据发生变化后只要将消息下发到这个topic上 订阅这个topic的组态都会被刷新;注意这里又一个反向控制,这个就是前端再触发反向控制事件后会发出消息到消息服务器,事件分为 两种
1、发送修改点位值消息,消息体是:
{
deviceId: 组态id,
clientId: 前端订阅时的设备id,
key: 点位属性名,
value: 点位将要修改的值
}
固定topic是topic/client/changePoint,所以外部要想接收到反向控制修改点位值就必须监听这个topic;
2、发送反向控制指令,指令是我们在绑定事件的时候定义好的,消息体是:定义好的指令,固定topic是:topic/client/command, 所以外部要想接收到反向控制指令就必须监听这个topic;
2、接口
前端在预览时需要初始化,这个时候我们定义了4个外部接入组态时必须实现的接口
2.1、获取组态信息
接口路由:GET/app/none/configuration/【id】,其中id为组态id;
返回值格式为
{
device: {
组态表属性...
},
templete: {
模版表属性...,
rcVariableList: [// 数据点位列表
{点位表属性...},
{点位表属性...}
],
},
}
2.2、保存组态信息
接口路由:POST/app/none/configuration/save
参数:id、 content、edversion、virvarJson
当传入:id、 content、edversion是保存画布信息,也就是组态内容;
当传入:id、 virvarJson是保存虚拟变量信息;
保存完成后返回最新 edversion;具体参照 AppFrontController;
2.3、通用上传单图片
接口路由:POST/app/none/upload/file
返回图片路径
2.4、上传图纸接口(组态画布内容)
接口路由:POST/app/none/upload/content/【deviceId】/【templeteId】, deviceId:组态ID, templeteId:模版ID,
返回图纸存放路径