Ricon组态系统集成说明书

一、概述

1.1 系统简介

Ricon组态系统是一款基于Web技术开发的可视化组态编辑和监控系统,支持拖拽式组件编辑、多种通信协议接入、实时数据展示等功能。系统采用模块化架构设计,易于与第三方系统集成。

1.2 核心特性

特性说明
可视化编辑器支持拖拽组件、配置属性、实时预览
多协议支持WebSocket、MQTT、HTTP三种通信方式
丰富组件库基础组件、图表组件、装饰组件、行业组件
ECharts集成支持仪表盘、折线图、柱状图、散点图、雷达图等20+种图表
模块化架构核心模块解耦,便于扩展和集成
实时数据更新支持数据实时推送和图表动态更新
模板管理支持场景保存为模板,便于复用
导入导出支持场景数据的导入和导出
响应式设计支持多种分辨率画布配置

1.3 技术栈

技术版本用途
jQuery3.xDOM操作、AJAX请求
Layui2.8.xUI框架
Konva5.3.x2D画布渲染
ECharts5.3.2图表渲染
MQTT.js4.xMQTT通信

二、项目结构

2.1 目录结构

ricon/
├── assets/                    # 静态资源
│   ├── css/                   # 样式文件
│   │   ├── common/            # 公共样式
│   │   ├── font/              # 字体文件
│   │   ├── editor.css         # 编辑器样式
│   │   ├── view.css           # 监控页面样式
│   │   └── reset.css          # 样式重置
│   ├── images/                # 图标和图片
│   │   ├── buttons/           # 工具栏按钮图标
│   │   └── icons/             # 通用图标
│   ├── js/                    # JavaScript代码
│   │   ├── core/              # 核心模块
│   │   │   ├── base/          # 基础类
│   │   │   ├── stage/         # 场景相关模块
│   │   │   ├── utils/         # 工具类
│   │   │   ├── config/        # 配置管理
│   │   │   ├── license/       # 授权管理
│   │   │   ├── InitManager.js # 初始化管理器
│   │   │   ├── ModuleManager.js # 模块管理器
│   │   │   ├── DataClient.js  # 统一数据客户端
│   │   │   ├── stageOperation.js # 场景操作核心
│   │   │   ├── moduleAnimation.js # 模块动画处理
│   │   │   ├── webSocketClient.js # WebSocket客户端
│   │   │   ├── mqttClient.js  # MQTT客户端
│   │   │   ├── httpClient.js  # HTTP客户端
│   │   │   └── TimerManager.js # 定时器管理
│   │   ├── modules/           # 业务模块
│   │   │   ├── editor.js      # 编辑器业务逻辑
│   │   │   ├── view.js        # 监控页面业务逻辑
│   │   │   ├── preview.js     # 预览页面业务逻辑
│   │   │   └── echartOption.js # ECharts配置
│   │   ├── libs/              # 第三方库
│   │   │   ├── jquery/        # jQuery
│   │   │   ├── layui-master/  # Layui
│   │   │   ├── konva-master/  # Konva
│   │   │   ├── echart5.3.2/   # ECharts
│   │   │   ├── mqtt/          # MQTT.js
│   │   │   └── zTree_v3/      # zTree
│   │   └── common/            # 工具函数
│   │       ├── tool.js        # 工具函数库
│   │       ├── browserUtils.js # 浏览器工具
│   │       └── provincesData.js # 省份数据
│   ├── json/                  # 组件配置文件
│   │   ├── basic-components.json  # 基础组件配置
│   │   ├── more-components.json   # 更多组件配置
│   │   └── screen-templates.json  # 模板配置
│   └── metagraphs/            # 组件图标资源
│       ├── basic/             # 基础组件图标
│       ├── graphic/           # 装饰图形图标
│       └── echart/            # 图表组件图标
├── config/                    # 配置文件
│   └── apiClient.js           # API客户端配置
├── docs/                      # 文档
├── editor.html                # 组态编辑器入口
├── view.html                  # 组态查看器入口
├── preview.html               # 组态预览入口
└── favicon.svg                # 网站图标

2.2 核心目录说明

目录说明
assets/js/core/核心模块,包含初始化、通信、组件管理等
assets/js/modules/业务模块,包含编辑器、查看器、图表配置
assets/js/libs/第三方库,如jQuery、Layui、Konva、ECharts
assets/json/组件配置文件,定义所有可拖拽组件
assets/metagraphs/组件图标资源,SVG/PNG格式
config/系统配置,包含API地址、认证等

三、核心模块说明

3.1 初始化管理器 (InitManager)

文件路径assets/js/core/InitManager.js

负责管理模块的注册和初始化流程,处理模块依赖关系,确保模块按正确顺序初始化。

核心方法

// 注册模块
window.InitManager.registerModule('MyModule', () => {
  console.log('MyModule initialized');
}, ['DependencyModule']);

// 开始初始化
window.InitManager.init(() => {
  console.log('所有模块初始化完成');
});

// 获取模块状态
window.InitManager.getModuleStatus('MyModule');

3.2 模块管理器 (ModuleManager)

文件路径assets/js/core/ModuleManager.js

负责模块的注册、动态加载、卸载和依赖管理,支持按需加载模块以提高性能。

核心方法

// 注册模块
window.ModuleManager.registerModule('MyModule', {
  path: 'path/to/module.js',
  dependencies: ['DependencyModule'],
  initFn: () => {
    return { name: 'MyModule' };
  }
});

// 加载模块
window.ModuleManager.loadModule('MyModule').then(module => {
  console.log('模块加载成功:', module);
});

3.3 统一数据客户端 (DataClient)

文件路径assets/js/core/DataClient.js

统一管理HTTP、MQTT、WebSocket通信,提供一致的数据订阅和发布接口,支持自动重连和错误处理。

客户端类型

类型枚举值说明
HTTPhttpHTTP轮询通信
MQTTmqttMQTT消息通信
WebSocketwebsocketWebSocket实时通信

连接状态

状态枚举值说明
DISCONNECTEDdisconnected未连接
CONNECTINGconnecting连接中
CONNECTEDconnected已连接
RECONNECTINGreconnecting重连中
ERRORerror连接错误

核心方法

// 创建WebSocket客户端
var wsClient = window.DataClient.createWebSocketClient('ws_default', {
  url: 'ws://localhost:8080/ws',
  heartbeat: 30000,
  reconnect: true
});
wsClient.connect();
wsClient.subscribe('data', function(data) {
  console.log('收到数据:', data);
});

// 创建MQTT客户端
var mqttClient = window.DataClient.createMqttClient('mqtt_default', {
  url: 'ws://localhost:9001',
  clientId: 'client_001',
  username: 'user',
  password: 'pass',
  topic: 'device/data'
});
mqttClient.connect();
mqttClient.subscribe('device/data', function(data) {
  console.log('收到MQTT数据:', data);
});

// 创建HTTP客户端
var httpClient = window.DataClient.createHttpClient('http_default', {
  timeout: 30000
});
httpClient.startPolling({
  url: '/api/data',
  interval: 5,
  onMessage: function(data) {
    console.log('轮询数据:', data);
  }
});

3.4 API客户端 (ApiClient)

文件路径config/apiClient.js

提供与后端服务的通信接口,包含场景保存/查询、模板管理、图片管理、硬件数据获取等功能。

系统配置

var SystemConfig = {
  serviceIpPort: "http://www.ricon.cloud:81/prod-api",
  apiPrefix: "/api",
  timeout: 30000,
  retryCount: 3,
  retryDelay: 1000
};

核心方法

方法说明参数
saveStage()保存场景stageDatajson, dataKeyArray, stageBase64, UrlParam
selectStageById()查询场景UrlParam(stageId, token)
saveTemplateStage()保存模板stageDatajson, stageModule_id, stageBase64, stageModuleName, UrlParam
templateStageList()获取模板列表UrlParam
pictureList()获取图片列表UrlParam, classId
getHardwareData()获取硬件数据树UrlParam

四、组件系统

4.1 组件配置文件

组件配置文件定义了所有可拖拽的组件,包含组件名称、图标、JSON配置等信息。

配置文件路径

  • assets/json/basic-components.json - 基础组件
  • assets/json/more-components.json - 更多组件

4.2 组件配置结构

{
  "groupName": "交互组件",
  "moduleItem": [
    {
      "moduleName": "变量1",
      "iconBase64": "assets/metagraphs/basic/interactive/bianliang1.png",
      "moduleJson": {
        "attrs": {
          "draggable": true,
          "name": "jyzt_module_group",
          "moduleType": "TextLableValue",
          "dataKey": [{"key": "", "name": ""}],
          "methodCall": "setTextValueNew",
          "moduleAttr": [...]
        },
        "className": "Group",
        "children": [...]
      }
    }
  ]
}

4.3 组件类型说明

组件类型说明示例
TextLableValue文本标签值变量显示
VALUE数值显示数值变量
INPUT_BOX输入框原生DOM输入框,支持接收/发送数据点绑定
STATUSLIGHT状态灯设备状态指示
ELECTRIC电气符号开关、调压符号
SPRINKLING喷灌组件喷灌机
HTML_IFRAME网页嵌入网页组件
ECHART_GAUGE仪表盘仪表盘图表
ECHART_GAUGE_NEW仪表盘新新式仪表盘
ECHART_GAUGE4_NEW仪表盘4新四色仪表盘
ECHART_THERMOMETER温度计温度计图表
ECHART_realTimeLine实时折线图实时数据折线图
ECHART_realTimeLineNew实时折线图新多数据系列折线图
ECHART_realTimeBarGraph实时柱状图实时数据柱状图
ECHART_realTimePieGraph实时饼图实时数据饼图
ECHART_realTimeCircularGraph实时环形图实时数据环形图
ECHART_SCATTER散点图散点图表
ECHART_KLINEK线图K线图表
ECHART_RADAR雷达图雷达图表
ECHART_HEATMAP热力图热力图表
ECHART_BOXPLOT箱线图箱线图表

五、图表系统

5.1 ECharts配置

文件路径assets/js/modules/echartOption.js

定义各种ECharts图表的默认配置选项,支持以下图表类型:

方法名图表类型组件类型
gaugeNew()仪表盘新ECHART_GAUGE_NEW
gauge()仪表盘ECHART_GAUGE
gauge2()仪表盘2-
gauge3()仪表盘3-
gauge4()仪表盘4-
gauge4New()仪表盘4新ECHART_GAUGE4_NEW
gauge5()仪表盘5-
windu()温度计ECHART_THERMOMETER
realTimeLine()实时折线图ECHART_realTimeLine
realTimeLine2()实时折线图2-
realTimeBarGraph()实时柱状图ECHART_realTimeBarGraph
realTimePieGraph()实时饼图ECHART_realTimePieGraph
realTimeCircularGraph()实时环形图ECHART_realTimeCircularGraph
scatter()散点图ECHART_SCATTER
candlestick()K线图ECHART_KLINE
radar()雷达图ECHART_RADAR
boxplot()箱线图ECHART_BOXPLOT
heatmap()热力图ECHART_HEATMAP
graph()关系图-
lines()路径图-
tree()树图-
treemap()矩形树图-
sunburst()旭日图-
parallel()平行坐标系-
sankey()桑基图-
funnel()漏斗图-
pictorialBar()象形柱图-
calendar()日历坐标系-
matrix()矩阵坐标系-

5.2 图表配置格式

在组件配置中引用图表配置:

{
  "moduleName": "散点图",
  "iconBase64": "assets/metagraphs/basic/echart/scatter.svg",
  "moduleJson": {
    "attrs": {
      "draggable": true,
      "name": "jyzt_module_group",
      "moduleType": "ECHART_SCATTER",
      "echartURL": "EchartOption.prototype.scatter",
      "dataKey": [{"key": "", "name": ""}],
      "methodCall": "setEchart_GaugeValue",
      "moduleAttr": [...]
    },
    "className": "Group",
    "children": [...]
  }
}

关键配置项说明

配置项说明示例
moduleType组件类型ECHART_SCATTER
echartURLECharts配置方法路径EchartOption.prototype.scatter
dataKey数据键数组[{"key": "value1", "name": "数值1"}]
methodCall数据更新方法setEchart_GaugeValue

六、通信配置

6.1 通信方式

系统支持三种通信方式,可在编辑器右侧面板"通信"标签页配置:

通信方式用途配置项
WebSocket实时双向通信URL地址、心跳间隔、自动重连
MQTTIoT设备通信MQTT地址、客户端ID、用户名、密码、订阅主题、QoS等级
HTTPREST API调用支持多个HTTP配置项

6.2 通信配置示例

{
  "communicationConfig": {
    "websocket": {
      "enabled": true,
      "url": "ws://localhost:8080/ws",
      "heartbeat": 10,
      "reconnect": "1"
    },
    "mqtt": {
      "enabled": true,
      "url": "ws://localhost:9001",
      "clientId": "client_001",
      "username": "user",
      "password": "pass",
      "topic": "device/data",
      "qos": 1
    },
    "hardwareData": {
      "enabled": true,
      "url": "/api/device/hardware-data",
      "headers": "{\"Content-Type\": \"application/json\"}"
    }
  }
}

6.3 硬件数据获取

硬件数据用于组件的数据点配置,返回树形结构:

[
  {
    "children": [
      {
        "children": [
          {"id": "d1a001", "name": "车辆"},
          {"id": "d1a002", "name": "访客"}
        ],
        "id": "device001a",
        "name": "园区大门"
      }
    ],
    "id": "device001",
    "name": "新智慧园区"
  }
]

七、集成方式

7.1 独立部署

将ricon目录部署到Web服务器即可独立运行:

# 开发模式
cd ruoyi-ui
npm run dev

# 生产构建
npm run build
# 将dist/ricon目录部署到Web服务器

7.2 嵌入第三方系统

通过iframe嵌入到第三方系统:

<!-- 嵌入编辑器 -->
<iframe src="/ricon/editor.html" width="100%" height="800px" frameborder="0"></iframe>

<!-- 嵌入查看器 -->
<iframe src="/ricon/view.html?stageId=1" width="100%" height="800px" frameborder="0"></iframe>

<!-- 嵌入预览 -->
<iframe src="/ricon/preview.html?stageId=1" width="100%" height="800px" frameborder="0"></iframe>

7.3 URL参数

参数说明示例
stageId场景ID?stageId=1
token认证Token?token=abc123

7.4 后端接口集成

系统需要后端提供以下API接口:

接口路径方法说明
/api/saveStagePOST保存场景
/api/selectStageByIdGET查询场景
/api/saveTemplateStagePOST保存模板
/api/templateStageListGET获取模板列表
/api/templateClassListGET获取模板分类
/api/deleteTemplateStageByIdPOST删除模板
/api/pictureClassListGET获取图片分类
/api/pictureListGET获取图片列表
/api/deletePictureByIdPOST删除图片
/api/device/hardware-dataPOST获取硬件数据树

7.5 API接口详细说明

7.5.1 保存场景

接口POST /api/saveStage

请求参数

参数名类型说明必填
stageDatajsonString场景JSON数据
dataKeyArrayArray数据键数组
stageBase64String场景缩略图Base64
stageIdString场景ID(更新时)

响应

{
  "code": 200,
  "message": "操作成功",
  "data": {
    "stageId": "1"
  }
}
7.5.2 查询场景

接口GET /api/selectStageById

请求参数

参数名类型说明必填
stageIdString场景ID

响应

{
  "code": 200,
  "message": "查询成功",
  "data": {
    "stageDatajson": "{...}",
    "dataKeyArray": [...],
    "stageBase64": "data:image/png;base64,..."
  }
}
7.5.3 获取硬件数据

接口POST /api/device/hardware-data

请求参数:无

响应

{
  "code": 200,
  "message": "获取成功",
  "data": [
    {
      "id": "device001",
      "name": "新智慧园区",
      "children": [
        {
          "id": "device001a",
          "name": "园区大门",
          "children": [
            {"id": "d1a001", "name": "车辆"},
            {"id": "d1a002", "name": "访客"}
          ]
        }
      ]
    }
  ]
}

八、自定义开发

8.1 添加新组件

  1. assets/json/basic-components.json中添加组件配置
  2. assets/metagraphs/中添加组件图标
  3. assets/js/core/moduleAnimation.js中添加数据更新方法(如有需要)

8.2 添加新图表

  1. assets/js/modules/echartOption.js中添加图表配置方法
  2. assets/json/basic-components.json中注册图表组件
  3. 添加图表图标到assets/metagraphs/basic/echart/

示例:添加自定义图表

// 在echartOption.js中添加
EchartOption.prototype.myCustomChart = function() {
  var option = {
    tooltip: {
      trigger: 'axis'
    },
    xAxis: {
      type: 'category',
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
    },
    yAxis: {
      type: 'value'
    },
    series: [{
      type: 'line',
      data: [120, 200, 150, 80, 70]
    }]
  };
  return option;
};

8.3 扩展通信协议

通过DataClient模块扩展新的通信协议:

var CustomClientWrapper = function(id, type, config) {
  this.id = id;
  this.type = type;
  this.config = Object.assign({}, DataClient.defaultConfig, config);
  this.state = ConnectionState.DISCONNECTED;
};

CustomClientWrapper.prototype = {
  connect: function() { /* ... */ },
  disconnect: function() { /* ... */ },
  subscribe: function(topic, callback) { /* ... */ },
  publish: function(topic, message) { /* ... */ }
};

DataClient.createCustomClient = function(id, config) {
  var client = new CustomClientWrapper(id, 'custom', config);
  this._clients[id] = client;
  return client;
};

九、性能优化

9.1 开发模式配置

editor.html中配置开发模式,禁用缓存便于调试:

if (window.JsonLoader) {
  JsonLoader.setConfig({
    isDevMode: true,
    enableCache: false,
    enableServerValidation: false
  });
}

9.2 资源加载优化

系统采用以下优化策略:

  • CSS异步加载(使用preload + onload)
  • 关键资源同步加载,非关键资源异步加载
  • 模板缓存机制
  • 图片懒加载

9.3 缓存配置

配置项说明默认值
isDevMode开发模式,禁用缓存true
enableCache启用缓存false
enableServerValidation启用服务端验证false

十、故障排查

10.1 常见错误

错误信息原因解决方案
ECHART_SCATTER: 无法获取图表配置 EchartOption.prototype.scatterechartURL配置错误确认echartURL格式为EchartOption.prototype.xxx
WebSocket连接失败服务端未启动或地址错误检查WebSocket服务是否正常运行
获取硬件数据失败接口未配置或不可用在通信面板配置硬件数据接口
保存场景失败后端接口错误或权限不足检查后端服务和认证Token
组件拖拽无反应Konva库加载失败检查Konva库是否正确加载
图表不显示ECharts库加载失败检查ECharts库是否正确加载

10.2 调试技巧

  1. 打开浏览器开发者工具(F12)
  2. 查看Console面板的日志信息
  3. 查看Network面板的请求状态
  4. 使用window.Logger输出调试信息
  5. 检查SystemConfig配置是否正确
  6. 验证API接口是否可访问

十一、版本信息

项目版本
Ricon组态系统1.0.0
jQuery3.x
Layui2.8.0-rc6
Konva5.3.x
ECharts5.3.2
MQTT.js4.x

附录:文件路径速查表

文件路径
编辑器入口editor.html
查看器入口view.html
预览入口preview.html
API配置config/apiClient.js
初始化管理器assets/js/core/InitManager.js
模块管理器assets/js/core/ModuleManager.js
数据客户端assets/js/core/DataClient.js
ECharts配置assets/js/modules/echartOption.js
基础组件配置assets/json/basic-components.json
组件图标assets/metagraphs/
场景操作核心assets/js/core/stageOperation.js
模块动画处理assets/js/core/moduleAnimation.js
WebSocket客户端assets/js/core/webSocketClient.js
MQTT客户端assets/js/core/mqttClient.js
HTTP客户端assets/js/core/httpClient.js

附录2:接口响应码说明

响应码说明
200成功
400请求参数错误
401未授权
403权限不足
404资源不存在
500服务器内部错误

文档版本:v1.1.0
创建日期:2026年
更新日期:2026年9月
作者:Ricon组态开发团队

技术文档

👉 演示地址:http://www.ricon.cloud:81
👉 官网地址:http://www.ricon.cloud

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值