Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 平台架构
  • 技术选型
  • 开发脚手架
  • UI规范
  • 开发规范
  • 代码分支管理模型
  • 需求分析与管理
  • 权限设计
  • 树形组织设计
  • 协议设计
  • 指令交互
    • 指令设计参考
    • 条件
    • 实现
      • 指令部分
      • 页面部分
  • OTA
  • 规则引擎
  • 数据流转
  • 报告生成与导出
  • 监控设备接入
  • 时序数据库
  • 平台监控
  • 云⛈
  • 接口设计
  • 安全传输
  • CI&CD
  • 缓存
  • 消息处理引擎
  • 性能调优🔥
  • 线上事故🔥
  • 混合式开发记录
  • 推送服务
  • 机器人通信协议
  • 数据分析
  • flink模板工程
  • 实时调度
  • 机器人模块化设计
  • STM32入门
  • 开发日志
Jorgen
2023-02-05
目录

指令交互

# 指令设计

方便用户快捷操作下发指令,需要对提前对下发的指令做准备。

指令大概 协议头 + 版本号 + 指令关键头 + 指令参数 + 校验码 构成。

# 指令设计参考

为了应对不断增加指令的需求,设计了一种指令参数的关系表。如下所示:

CREATE TABLE `device_command` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `command_name` varchar(255) DEFAULT NULL COMMENT '指令名称',
  `command_code` varchar(50) DEFAULT NULL COMMENT '指令编码',
  `resp_code` varchar(255) DEFAULT NULL COMMENT '响应码',
  `command_version` int(10) DEFAULT NULL COMMENT '指令版本',
  `command_type` tinyint(1) DEFAULT NULL COMMENT '指令类型(1- 操作类;2-设置类;3-查询类)',
  `remark` varchar(512) DEFAULT NULL COMMENT '备注'
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='设备指令表';
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `device_command_param` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `command_id` int(10) DEFAULT NULL COMMENT '指令id',
  `param_seq` int(10) DEFAULT NULL COMMENT '参数序号',
  `param_name` varchar(50) DEFAULT NULL COMMENT '参数名称',
  `param_type` tinyint(1) DEFAULT NULL COMMENT '参数类型(1- 数值类;2- 字符类;3- 枚举类)',
  `default_value` varchar(512) DEFAULT NULL COMMENT '默认值',
  `min_value` varchar(512) DEFAULT NULL COMMENT '最小值',
  `max_value` varchar(512) DEFAULT NULL COMMENT '最大值',
  `options_value` varchar(512) DEFAULT NULL COMMENT '枚举值(举例:1-开机,2-关机)',
  `param_unit` varchar(512) DEFAULT NULL COMMENT '参数单位',
  `remark` varchar(512) DEFAULT NULL COMMENT '备注'
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='设备指令参数表';
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 指令队列

  1. 平台支持多指令下发,以创建指令下发的先后顺序排列。
    • 启用指令最大;状态指令包括:启用、入库等,这些指令里面,启用指令最大。
    • 入库指令后不再增加其他指令;
    • 同类指令以最后一次为准;
  2. 指令状态
    • 未下发的指令可以取消;
    • 指令下发时,等待指令响应后再清理;
    • 下发等待超时时间3s;
  3. 新增用户侧页面
    • 新增指令状态页面,用户可操作(查看指令状态、取消缓存指令);
    • 设备状态 - 增加最新指令状态;

# 条件

  1. 激活最前、入库最后;
    • 激活能够覆盖入库; 有激活就不能再下发入库。
    • 当激活、其余指令存在时,执行顺序:激活、xxx、xxx
    • 当入库、其余指令存在时,执行顺序:xxx、xxx、入库
    • 如果存在OTA指令,则先于所有指令先执行。
  2. 通过接口:通过页面操作生成 => 同类指令能被相互覆盖,最新为主
  3. 平台生成的指令:先判断是否存在,如果不存在,则新增;存在,则不生效。用户生成的指令可覆盖平台生成的指令

# 实现

  1. Redis存放待下发的指令;MySQL存放已经下发的指令(携带状态:成功、失败、超时)
  2. key分类:
    • cmd_mark一个key redis--hash key imei value:标识+参数 => [{xx:xx},{xx:xx},{xx:xx}];优先级、用户可见、指令编码、指令名称、参数;
    • full_cmd一个key => redis--hash key imei value:存放完整指令[xxx;xxx;xxx;]
  3. 指令顺序
    • 通过接口下发的接口,重新构建顺序
    • 先后顺序调整后,全量

注意: 用户编辑指令队列时,先将原full_cmd删除。编辑完成后, 再增加。

# 指令部分

  1. 下发过程中,如果设备断开连接,则直接失败
  2. 通过ScheduledThreadPoolExecutor 控制下发速率;每次上报时,更新full_cmd;下发时,重新构建延时队列。
  3. 指令状态:每次指令下发时,都会调用 接口缓存指令记录。在此处进行状态监控。
    • 默认每个指令超时3秒,若超时,则缓存该指定的超时记录状态。
    • 设备响应指令时,取出判定超时线程,取消掉。然后缓存失败或是成功状态。

# 页面部分

  1. 待下发指令 指令

  2. 指令记录 指令

上次更新: 2023/03/02, 15:42:46
协议设计
OTA

← 协议设计 OTA→

最近更新
01
STM32入门
03-09
02
ADB调试
03-09
03
微信小程序学习记录
02-09
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式