26 KiB
天风任务系统 (AMR Task System) 数据库完整分析
1. 系统概述
天风任务模块是一个管理和编排自动化移动机器人(AMR)任务的系统。该系统允许用户创建、调度和监控各种类型的机器人任务,包括物料运输、站点状态管理等。系统采用模块化设计,通过任务模板、任务定义、任务执行记录等组件实现灵活的任务管理。
2. 完整数据库表结构及功能分析
2.1 核心任务定义和执行相关表
vwed_taskdef(任务定义表)
- 功能:定义任务模板,包含任务流程和逻辑
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 任务定义唯一标识label
: VARCHAR(255) - 任务名称标签created_by
: VARCHAR(255) - 创建用户IDversion
: INT - 任务版本号detail
: LONGTEXT - 任务详细定义(JSON格式,包含输入参数、根块配置等)template_name
: VARCHAR(255) - 所使用的模板名称period
: INT NOT NULL DEFAULT 1000 - 周期时间(毫秒)periodic_task
: INT NOT NULL DEFAULT 0 - 是否为周期任务status
: INT DEFAULT 0 - 任务状态if_enable
: INT NOT NULL DEFAULT 0 - 是否启用delay
: INT NOT NULL DEFAULT 3000 - 延迟时间(毫秒)release_sites
: BIT(1) - 释放站点create_date
: DATETIME - 创建日期remark
: VARCHAR(255) - 备注tenant_id
: VARCHAR(255) NOT NULL - 租户ID,用于多租户隔离map_id
: VARCHAR(255) NOT NULL - 地图IDuser_token
: VARCHAR(500) - 用户token值,每次请求需要用到的认证信息created_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)
vwed_taskrecord(任务执行记录表)
- 功能:记录任务的执行情况和结果
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 记录IDdef_id
: VARCHAR(255) - 对应的任务定义IDdef_label
: VARCHAR(150) - 任务标签def_version
: INT - 任务定义版本ended_on
: DATETIME - 结束时间ended_reason
: LONGTEXT - 结束原因status
: INT - 任务状态(1000: 运行成功, 1001: 进行中, 1002: 队列中, 2000: 失败, 2001: 取消, 2002: 暂停)input_params
: LONGTEXT - 输入参数path
: TEXT - 执行路径(记录AGV移动路径)agv_id
: VARCHAR(150) - 执行任务的AGV设备IDparent_task_record_id
: VARCHAR(255) - 父任务记录IDroot_task_record_id
: VARCHAR(255) - 根任务记录IDstate_description
: VARCHAR(255) - 状态描述executor_time
: INT - 执行时间first_executor_time
: DATETIME - 首次执行时间if_have_child_task
: BIT(1) - 是否有子任务periodic_task
: INT NOT NULL DEFAULT 0 - 是否为周期任务priority
: INT NOT NULL DEFAULT 1 - 优先级root_block_state_id
: VARCHAR(255) - 根块状态IDwork_stations
: VARCHAR(255) - 工作站work_types
: VARCHAR(255) - 工作类型task_def_detail
: LONGTEXT - 任务定义详情variables
: LONGTEXT - 变量信息call_work_station
: VARCHAR(255) - 调用工作站call_work_type
: VARCHAR(255) - 调用工作类型source_type
: INT NOT NULL - 任务来源类型(1: 系统调度, 2: 呼叫机, 3: 第三方系统, 4: 手持电脑)source_system
: VARCHAR(100) NOT NULL - 来源系统标识(如:WMS、MES等系统编号)source_user
: VARCHAR(100) - 下达任务的用户ID或账号source_device
: VARCHAR(255) NOT NULL - 下达任务的硬件设备标识(设备ID、MAC地址等)source_ip
: VARCHAR(50) - 下达任务的IP地址source_time
: DATETIME NOT NULL - 任务下达时间source_client_info
: TEXT - 客户端设备信息(用户代理、浏览器、操作系统等)source_remarks
: TEXT - 任务来源备注信息allow_restart_same_location
: BOOLEAN DEFAULT FALSE - 运行状态时相同地址是否可再次启动该任务created_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)
vwed_tasklog(任务日志表)
- 功能:记录任务执行过程中的详细日志信息,用于监控和调试
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 日志记录IDlevel
: INT - 日志级别(1: 信息, 3: 错误等)message
: LONGTEXT - 日志消息内容task_block_id
: INT - 任务块IDtask_id
: VARCHAR(255) - 对应的任务定义IDtask_record_id
: VARCHAR(255) - 对应的任务执行记录IDcreated_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)
vwed_blockrecord(任务块执行记录表)
- 功能:记录任务块的执行情况,一个任务由多个任务块组成
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 记录IDblock_name
: VARCHAR(255) - 块名称block_id
: VARCHAR(255) - 块IDblock_config_id
: VARCHAR(255) - 块配置IDblock_input_params
: LONGTEXT - 块输入参数block_input_params_value
: LONGTEXT - 块输入参数值block_out_params_value
: LONGTEXT - 块输出参数值block_internal_variables
: LONGTEXT - 块内部变量task_id
: VARCHAR(255) - 关联的任务定义IDtask_record_id
: VARCHAR(255) - 关联的任务记录IDstarted_on
: DATETIME - 开始时间ended_on
: DATETIME - 结束时间ended_reason
: LONGTEXT - 结束原因status
: INT - 块执行状态ctrl_status
: INT - 控制状态input_params
: LONGTEXT - 输入参数internal_variables
: LONGTEXT - 内部变量output_params
: LONGTEXT - 输出参数version
: INT - 版本号remark
: LONGTEXT - 备注created_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)
2.2 任务模板和配置相关表
vwed_tasktemplate(任务模板表)
- 功能:定义可用的任务模板类型
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 模板IDtemplate_name
: VARCHAR(255) NOT NULL - 模板名称template_description
: VARCHAR(255) NOT NULL - 模板描述template_if_enable
: INT NOT NULL DEFAULT 0 - 是否启用template_dir
: VARCHAR(255) - 模板目录created_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)
2.3 数据缓存相关表
vwed_datacache(数据缓存表)
- 功能:存储系统配置和临时数据
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 缓存IDdata
: LONGTEXT - 缓存数据(JSON格式)created_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)
vwed_datacachesplit(用户数据缓存表)
- 功能:存储用户特定的缓存数据,支持更高效的数据索引和检索
- 主要字段:
id
: VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL PRIMARY KEY - 缓存记录IDdata_key
: LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL - 数据键名data_value
: LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL - 数据值created_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)- INDEX
dataKeyIndex
(data_key
(768) ASC) USING BTREE - 数据键名索引,提高查询效率
modbus_config(Modbus配置表)
- 功能:存储Modbus通信配置参数,用于PLC等设备的通信连接和数据交换
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 配置记录IDname
: VARCHAR(255) NOT NULL - 配置名称(如"料道信号监控-PLC-1")ip
: VARCHAR(50) NOT NULL - 设备IP地址port
: INT NOT NULL - 通信端口号slave_id
: INT NOT NULL - 从站IDaddress_type
: VARCHAR(10) NOT NULL - 地址类型(如"3x")address_number
: INT NOT NULL - 地址编号task_id
: VARCHAR(255) - 天风任务idtarget_value
: INT - 目标值remark
: VARCHAR(255) - 备注(如"1为货物到位,0为空")status
: INT DEFAULT 0 - 状态(1:启用, 0:禁用)tenant_id
: VARCHAR(255) - 租户IDcreated_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)
2.4 在线脚本相关表
vwed_script(在线脚本表)
- 功能:存储系统中的Python脚本
- 主要字段:
-
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 脚本唯一标识 -
name
: VARCHAR(255) NOT NULL - 脚本名称 -
folder_path
: VARCHAR(255) DEFAULT '/' - 脚本所在目录路径 -
file_name
: VARCHAR(255) NOT NULL - 脚本文件名 -
description
: VARCHAR(500) - 脚本功能描述 -
code
: LONGTEXT NOT NULL - 脚本代码内容 -
version
: INT NOT NULL DEFAULT 1 - 当前版本号 -
status
: INT NOT NULL DEFAULT 1 - 状态(1:启用, 0:禁用) -
is_public
: BIT(1) NOT NULL DEFAULT 1 - 是否公开 -
tags
: VARCHAR(255) - 标签,用于分类查询 -
created_by
: VARCHAR(255) - 创建者 -
updated_by
: VARCHAR(255) - 最后更新者 -
test_params
: LONGTEXT - 测试参数(JSON格式) -
created_at
: DATETIME - 创建时间 -
updated_at
: DATETIME - 更新时间 -
is_deleted
: DATETIME - 是否删除(软删除标记) -
UNIQUE KEY
uk_folder_filename
(folder_path
,file_name
) - 确保同目录下文件名唯一
-
vwed_script_version(脚本版本表)
- 功能:保存脚本历史版本
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 版本记录IDscript_id
: VARCHAR(255) NOT NULL - 关联的脚本IDversion
: INT NOT NULL - 版本号code
: LONGTEXT NOT NULL - 该版本代码change_log
: TEXT - 版本变更说明created_by
: VARCHAR(255) - 创建者created_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)- UNIQUE KEY
uk_script_version
(script_id
,version
) - 确保脚本版本唯一
vwed_script_log(脚本执行日志表)
- 功能:记录脚本执行情况
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 日志IDscript_id
: VARCHAR(255) NOT NULL - 关联的脚本IDversion
: INT NOT NULL - 使用的脚本版本task_record_id
: VARCHAR(255) - 关联的任务记录IDblock_record_id
: VARCHAR(255) - 关联的任务块记录IDinput_params
: LONGTEXT - 输入参数(JSON格式)output_result
: LONGTEXT - 输出结果(JSON格式)status
: INT - 执行状态(1:成功, 0:失败)error_message
: TEXT - 错误信息execution_time
: INT - 执行耗时(毫秒)started_on
: DATETIME - 开始时间ended_on
: DATETIME - 结束时间created_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)
2.5 接口定义相关表
interfacedefhistory(接口定义历史表)
- 功能:存储系统接口的定义和版本历史
- 主要字段:
id
: VARCHAR(255) NOT NULL PRIMARY KEY - 接口定义历史记录IDcreate_date
: DATETIME - 创建日期detail
: LONGTEXT - 接口详细定义(JSON格式)method
: VARCHAR(255) NOT NULL - 请求方法(GET, POST, PUT, DELETE等)project_id
: VARCHAR(255) - 关联的项目IDurl
: VARCHAR(255) NOT NULL - 接口URLversion
: INT - 版本号created_at
: DATETIME - 创建时间updated_at
: DATETIME - 更新时间is_deleted
: DATETIME - 是否删除(软删除标记)- UNIQUE INDEX
uniq
(method
,url
,version
) - 确保接口定义唯一
3. 表关系图
┌─────────────────────────┐ ┌────────────────────────┐ ┌───────────────────────┐
│ t_windtasktemplate │───────▶│ t_windtaskdef │◀───────│ t_wind_script │
│ (任务模板表) │ │ (任务定义表) │ │ (在线脚本表) │
└─────────────────────────┘ └──────────┬─────────────┘ └───────────┬───────────┘
▲ │ │
│ │ │
┌───────────────────────┐│ │ │
│ t_interfacedefhistory|│ │ │
│ (接口定义历史表) │┘ │ │
└───────────────────────┘ │ │
│ │
│ 实例化 │ 版本管理
▼ ▼
┌────────────────────────┐ ┌───────────────────────┐
│ t_windtaskrecord │ │ t_wind_script_version│
│ (任务执行记录表) │ │ (脚本版本表) │
└──────────┬─────────────┘ └───────────────────────┘
│
├────────────────┐
│ │
▼ ▼
┌────────────────────────┐ ┌────────────────────────┐
│ t_windblockrecord │───▶│ t_windtasklog │
│ (任务块执行记录表) │ │ (任务日志表) │
└────┬───────────────────┘ └────────────────────────┘
│
│
▼
┌────────────────────┐ ┌────────────────────┐
│ t_winddatacache │ │ t_modbus_config │
│ (数据缓存表) │ │ (Modbus配置表) │
└────────────────────┘ └────────────────────┘
┌────────────────────────┐ ┌────────────────────┐
│ t_wind_script_log │◀────│ t_wind_script │
│ (脚本执行日志表) │ │ (在线脚本表) │
└────────────────────────┘ └────────────────────┘
4. 简化数据流分析
4.1 任务创建与执行流程
-
任务定义阶段:
- 在
t_windtaskdef
表中创建任务定义 - 任务定义关联到特定的任务模板(
t_windtasktemplate
) - 当任务包含ScriptBp组件时,会在
detail
中引用t_wind_script
表的脚本 - 当任务包含接口调用组件时,会在
detail
中引用t_interfacedefhistory
表的接口 - 定义输入参数、根块配置等详细信息
- 在
-
任务实例化阶段:
- 当任务被触发时,在
t_windtaskrecord
表中创建记录 - 系统根据任务定义的
input_params
传入参数 - 如果是子任务,会记录
parent_task_record_id
- 当任务被触发时,在
-
任务执行阶段:
- 系统解析任务定义中的
detail
字段,确定执行流程 - 任务执行过程中,为每个执行块在
t_windblockrecord
表中创建记录 - 当执行到ScriptBp块时,系统会调用相应的Python脚本执行
- 当任务需要与PLC等设备通信时,会查询
t_modbus_config
表获取通信配置 - 块执行记录包含输入参数、输出参数、状态等信息
- AGV执行路径被记录在任务记录的
path
字段中 - 执行过程中可能需要访问或更新
t_winddatacache
中的数据
- 系统解析任务定义中的
-
任务完成阶段:
- 任务执行完成后,更新
t_windtaskrecord
中的状态、结束时间、结束原因 - 同时更新所有相关块记录的状态
- 任务执行完成后,更新
5. 任务类型分析
从任务模板表(t_windtasktemplate
)和任务定义表(t_windtaskdef
)中,可以看出系统支持以下几种任务类型:
-
流水线生产任务 (Pulsating production line):
- 执行从一个位置到多个目标位置的物料运输
- 适用于生产线场景,需要在多个工位间循环运送物料
-
组装订单任务 (Assemble order):
- 处理从起点到终点的物料运输
- 适用于物料从源头到目的地的直接运输
-
高密度库位任务 (Dense peak bit):
- 用于高密度存储区域的物料移动
- 包括三种子类型:
- lineOne:从密集区到单点
- lineTwo:从单点到密集区
- updateSite:更新站点状态
- 适用于仓库密集货架区域的物料存取
-
用户自定义任务 (userTemplate):
- 允许用户自定义任务流程
- 大部分在系统中的任务使用这种模板
- 提供最大的灵活性,可以组合各种任务块
6. 任务块类型和逻辑分析
6.1 主要任务块类型
从t_windblockrecord
和t_windtaskdef
的详细字段分析,系统使用以下主要任务块类型:
- RootBp:任务根块,所有任务的入口点
- CurrentTimeStampBp:获取当前时间戳
- QueryIdleSiteBp:查询空闲站点
- GetIdleSiteBp:获取空闲站点
- GetIdleCrowdedSiteBp:获取密集区的空闲站点
- SetSiteEmptyBp:设置站点为空
- SetSiteFilledBp:设置站点为已填充
- SetSiteLockedBp:锁定站点
- SetSiteUnlockedBp:解锁站点
- CSelectAgvBp:选择AGV执行任务
- CAgvOperationBp:AGV操作(移动、装卸等)
- SubTaskBp:子任务
- IfBp:条件判断
- IfElseBp:条件分支
- WhileBp:循环
- BatchSettingSiteBp:批量设置站点状态
- IterateListBp:列表迭代
- CombinedOrderBp:组合订单
- NoticeOperatorByUserBp:通知操作员
- CacheDataBp:缓存数据
- PrintBp:打印信息
- SetTaskVariableBp:设置任务变量
- ScriptVariablesBp:脚本变量
- TaskStateBp:任务状态
- SkipToComponent:跳转到组件
- ScriptBp:Python脚本任务块,调用在线脚本执行自定义逻辑
- ApiCallBp:接口调用任务块,调用预定义的API接口
6.2 任务块组合逻辑
任务块之间可以通过以下方式组合:
- 序列执行:一个块执行完后,执行下一个块
- 条件分支:通过
IfBp
和IfElseBp
实现条件判断和分支执行 - 循环执行:通过
WhileBp
和IterateListBp
实现循环和迭代 - 子任务嵌套:通过
SubTaskBp
调用其他任务定义 - 跳转执行:通过
SkipToComponent
实现跳转到指定组件 - 脚本执行:通过
ScriptBp
调用自定义Python脚本,执行复杂逻辑 - 接口调用:通过
ApiCallBp
调用预定义的接口,实现外部系统交互
6.3 典型任务执行流程示例
示例1:WH到PKG的运输任务
1. CurrentTimeStampBp:获取时间戳(用于任务ID)
2. QueryIdleSiteBp:查询起点WH区域的站点状态
3. QueryIdleSiteBp:查询终点PKG区域的站点状态
4. IfElseBp:检查站点状态是否满足要求
5. SetSiteEmptyBp:将起点站点标记为空
6. SetSiteFilledBp:将终点站点标记为已填充
7. TaskStateBp:更新任务状态描述
8. CSelectAgvBp:选择合适的AGV执行运输
9. 完成任务
示例2:高密度库区物料取出任务
1. GetIdleCrowdedSiteBp:从密集区获取有物料的站点
2. SetSiteLockedBp:锁定终点站点
3. CSelectAgvBp:选择合适的AGV
a. CAgvOperationBp:AGV前往前置点
b. GetIdleCrowdedSiteBp:获取实际的起点站点
c. CAgvOperationBp:AGV前往起点站点
d. SetSiteEmptyBp:将起点站点标记为空
e. SetSiteUnlockedBp:解锁起点站点
f. CAgvOperationBp:AGV前往终点站点
g. SetSiteUnlockedBp:解锁终点站点
示例3:使用自定义脚本的任务流程
1. ScriptBp:调用自定义Python脚本,执行数据分析或复杂业务逻辑
a. 输入参数:从任务输入或前序任务块获取
b. 脚本执行:调用t_wind_script表中的Python脚本
c. 输出结果:返回处理结果给任务流程
2. IfElseBp:根据脚本返回结果判断后续流程
3. 根据条件执行不同分支
示例4:使用接口调用的任务流程
1. ApiCallBp:调用预定义的外部系统接口
a. 准备请求参数:从任务变量或前序任务块获取参数
b. 接口执行:调用t_interfacedefhistory表中定义的接口
c. 响应处理:将接口返回的结果映射到任务变量
2. IfElseBp:根据接口返回结果判断后续处理逻辑
3. SubTaskBp:根据需要触发后续子任务
示例5:使用Modbus通信的任务流程
1. ModbusBp:与PLC设备进行Modbus通信
a. 配置获取:从t_modbus_config表获取通信参数(IP, 端口, 从站ID等)
b. 读取操作:读取指定地址类型和地址编号的数据
c. 数据处理:将读取到的数据与目标值比较
2. IfElseBp:根据Modbus返回值判断后续处理逻辑
a. 如返回值=1(料道有物料):
i. CSelectAgvBp:选择合适的AGV
ii. CAgvOperationBp:AGV前往料道位置取料
iii. TaskStateBp:更新任务状态为"取料完成"
b. 如返回值=0(料道无物料):
i. TaskStateBp:更新任务状态为"等待物料"
ii. PrintBp:记录日志"料道暂无物料"
3. ScriptBp:调用Python脚本,更新状态到其他系统
7. 系统特点与设计理念
-
模块化设计:
- 任务被分解为多个可重用的任务块
- 通过组合不同的任务块可以定义复杂的任务流程
- 便于扩展和定制化
-
灵活性:
- 支持多种任务模板适应不同场景
- 任务定义中的JSON配置允许高度定制化
- 用户可以自定义任务流程
- 通过在线Python脚本扩展系统功能
-
层次结构:
- 支持任务嵌套(主任务和子任务)
- 任务块之间可以建立依赖关系
- 支持复杂的业务流程编排
-
状态管理:
- 详细记录任务和任务块的执行状态
- 支持任务恢复和错误处理
- 提供完整的执行历史记录
-
资源协调:
- 通过锁定/解锁站点来避免资源冲突
- AGV选择机制确保任务分配给合适的设备
- 支持多AGV协同工作
-
可编程性:
- 通过在线Python脚本模块,允许用户编写自定义业务逻辑
- 无需修改系统代码即可扩展系统功能
- 支持复杂业务场景的快速实现
-
外部设备集成:
- 通过Modbus配置表,支持与PLC等工业控制设备的通信
- 可监控生产线信号状态,触发相应任务
- 实现生产自动化与物流自动化的无缝衔接
8. 在线脚本和接口与任务系统的关系
8.1 集成机制
-
脚本集成:
- 在任务定义中使用ScriptBp类型任务块
- 在
t_windtaskdef
表的detail
字段配置脚本关联信息 - 脚本执行时会记录在
t_wind_script_log
表,记录与脚本关联但不与任务块执行记录直接关联
-
接口集成:
- 在任务定义中使用ApiCallBp类型任务块
- 在
t_windtaskdef
表的detail
字段引用t_interfacedefhistory
中定义的接口 - 接口定义表仅与任务定义表关联,用于任务设计阶段
-
Modbus集成:
- 在任务定义中使用ModbusBp类型任务块
- 任务块引用
t_modbus_config
表中的配置参数 - 支持PLC信号状态的读取和写入操作
- 可基于PLC信号状态触发任务或更新系统状态
8.2 应用场景
-
脚本应用场景:
- 复杂业务逻辑处理
- 系统集成与数据交互
- 数据分析和报告生成
- 动态业务规则执行
-
接口应用场景:
- 外部系统集成(ERP、WMS等)
- 数据交换和同步
- 远程控制与指令发送
- 消息通知和事件触发
-
Modbus应用场景:
- 生产线料道信号监控
- PLC控制器数据交换
- 设备状态采集与监控
- 自动化生产线与AGV系统联动
- 区域热处理等工艺流程的自动控制
通过脚本、接口和Modbus模块,天风任务系统获得了更高的灵活性和扩展性,能够快速适应不同客户和场景的需求变化,同时能够无缝集成到现有的企业IT生态系统和工业自动化系统中。