137 lines
10 KiB
SQL
137 lines
10 KiB
SQL
-- ============================================================================
|
||||
|
|
-- 磨床自动化单元 - 数据库种子数据
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 设备清单:
|
|||
|
|
-- 1. 接驳台-1 Dock-1 42位,工件入线/出线口(面向产线,从左到右编号)
|
|||
|
|
-- 2. 接驳台-2 Dock-2 42位,工件入线/出线口
|
|||
|
|
-- 3. 磨床 Grinder 1位,支持换料协议(exchange=true)
|
|||
|
|
-- 4. 换向机构 TurnTable 1位,支持换料(方形件换向)
|
|||
|
|
-- 5. 清洗 Wash 1位,复用AirBlow信号M2130-M2139
|
|||
|
|
-- 6. 缓存台 Cache 1位,全检台满时暂存
|
|||
|
|
-- 7. 全检台 FullCheck 2位,纯人工检测
|
|||
|
|
-- 8. 机器人 Robot 搬运设备,slotCount=0,双夹持(dualGrip=true),串行互斥
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- 注意:执行本文件前请先执行 signals.sql 初始化信号表
|
|||
|
|
|
|||
|
|
-- 清理旧数据(谨慎执行)
|
|||
|
|
DELETE FROM manual_action;
|
|||
|
|
DELETE FROM event_log;
|
|||
|
|
DELETE FROM job_step_instance;
|
|||
|
|
DELETE FROM task_log;
|
|||
|
|
DELETE FROM task;
|
|||
|
|
DELETE FROM job_step_decision;
|
|||
|
|
DELETE FROM job_step_action;
|
|||
|
|
DELETE FROM job_step_signal;
|
|||
|
|
DELETE FROM job_step_resource;
|
|||
|
|
DELETE FROM job_step;
|
|||
|
|
DELETE FROM job;
|
|||
|
|
DELETE FROM work_order;
|
|||
|
|
DELETE FROM resource_lock;
|
|||
|
|
DELETE FROM equipment_signal;
|
|||
|
|
DELETE FROM equipment_slot;
|
|||
|
|
DELETE FROM equipment;
|
|||
|
|
DELETE FROM equipment_type;
|
|||
|
|
DELETE FROM product_type;
|
|||
|
|
DELETE FROM recipe_step_decision;
|
|||
|
|
DELETE FROM recipe_step_action;
|
|||
|
|
DELETE FROM recipe_step_signal;
|
|||
|
|
DELETE FROM recipe_step_resource;
|
|||
|
|
DELETE FROM recipe_step;
|
|||
|
|
DELETE FROM recipe;
|
|||
|
|
DELETE FROM inspection_image;
|
|||
|
|
|
|||
|
|
-- ========== 1. 设备类型 ==========
|
|||
|
|
INSERT INTO equipment_type (id, code, name, movable, default_capacity) VALUES
|
|||
|
|
(1, 'DOCK', '接驳台', false, 42),
|
|||
|
|
(2, 'GRINDER', '磨床', false, 1),
|
|||
|
|
(3, 'TURN_TABLE', '换向机构', false, 1),
|
|||
|
|
(4, 'AIR_BLOW', '清洗', false, 1),
|
|||
|
|
(5, 'CACHE', '缓存台', false, 1),
|
|||
|
|
(6, 'FULL_CHECK', '全检台', false, 2),
|
|||
|
|
(7, 'ROBOT', '搬运机器人', true, 0);
|
|||
|
|
|
|||
|
|
-- ========== 2. 设备实例 ==========
|
|||
|
|
INSERT INTO equipment (id, name, equipment_type_id, status, slot_count, exchange, batch, dual_grip, ip_address, location, done_signal_name, ng_signal_name, remark) VALUES
|
|||
|
|
(1, '接驳台-1', 1, 'IDLE', 42, false, false, false, '', '入线/出线口(左)', '', '', '接驳台1号,42位'),
|
|||
|
|
(2, 'Grinder-01', 2, 'IDLE', 1, true, false, false, '', '磨削工位', 'GrinderMachiningDone', '', '单工位,支持换料'),
|
|||
|
|
(3, 'TurnTable-01', 3, 'IDLE', 1, true, false, false, '', '换向工位', '', '', '单工位,方形件换向'),
|
|||
|
|
(4, 'AirBlow-01', 4, 'IDLE', 1, false, false, false, '', '清洗工位', 'AirBlowCompleteDone', '', '复用AirBlow信号M2130-M2139'),
|
|||
|
|
(5, 'Cache-01', 5, 'IDLE', 1, false, false, false, '', '缓存区', '', '', '1位缓存,全检台满时暂存'),
|
|||
|
|
(6, 'FullCheck-01', 6, 'IDLE', 2, false, false, false, '', '全检工位', 'FullCheckInspectDone', '', '2位,纯人工检测'),
|
|||
|
|
(7, 'Robot-01', 7, 'IDLE', 0, false, false, true, '', '搬运区', '', '', '搬运机器人,双夹持,串行互斥'),
|
|||
|
|
(8, '接驳台-2', 1, 'IDLE', 42, false, false, false, '', '入线/出线口(右)', '', '', '接驳台2号,42位');
|
|||
|
|
|
|||
|
|
-- ========== 3. 设备槽位 ==========
|
|||
|
|
-- 接驳台-1 (equipment_id=1): 槽位 1-42
|
|||
|
|
-- 接驳台-2 (equipment_id=8): 槽位 1-42
|
|||
|
|
INSERT INTO equipment_slot (id, equipment_id, slot_no, status)
|
|||
|
|
SELECT s, 1, s, 'EMPTY' FROM generate_series(1, 42) AS s;
|
|||
|
|
INSERT INTO equipment_slot (id, equipment_id, slot_no, status)
|
|||
|
|
SELECT s + 42, 8, s, 'EMPTY' FROM generate_series(1, 42) AS s;
|
|||
|
|
INSERT INTO equipment_slot (id, equipment_id, slot_no, status) VALUES
|
|||
|
|
(85, 2, 1, 'EMPTY'), -- Grinder-01
|
|||
|
|
(86, 3, 1, 'EMPTY'), -- TurnTable-01
|
|||
|
|
(87, 4, 1, 'EMPTY'), -- AirBlow-01
|
|||
|
|
(88, 5, 1, 'EMPTY'), -- Cache-01 槽位1(1位缓存)
|
|||
|
|
(89, 6, 1, 'EMPTY'), (90, 6, 2, 'EMPTY'); -- FullCheck-01 槽位1-2(2位全检)
|
|||
|
|
-- Robot-01 无槽位(slotCount=0,搬运设备)
|
|||
|
|
|
|||
|
|
-- ========== 4. 工艺路线 ==========
|
|||
|
|
-- 缸体工艺:OP10接驳台上料 → OP20磨床磨削 → OP30清洗 → OP35全检台容量判断 → OP40全检检测 / OP50缓存暂存 → OP40回流 → OP60接驳台下料
|
|||
|
|
-- 配油盘工艺:OP10接驳台上料 → OP20换向机构换向 → OP25磨床磨削 → OP30清洗 → OP35全检台容量判断 → OP40全检检测 / OP50缓存暂存 → OP40回流 → OP60接驳台下料
|
|||
|
|
-- 全检台满时:OP35 → OP50缓存暂存 → OP35回流判断
|
|||
|
|
INSERT INTO recipe (id, name, code, version, "desc", is_active) VALUES
|
|||
|
|
(1, '缸体工艺', 'GRINDER-RND', 1, '缸体标准工艺流程:接驳台→磨床→清洗→全检台容量判断→全检/缓存→下料', true),
|
|||
|
|
(2, '配油盘工艺', 'GRINDER-SQR', 1, '配油盘标准工艺流程:接驳台→换向机构→磨床→清洗→全检台容量判断→全检/缓存→下料', true);
|
|||
|
|
|
|||
|
|
-- === 缸体 Recipe (id=1) 工艺步骤 ===
|
|||
|
|
-- OP10 接驳台上料(Dock取毛坯)
|
|||
|
|
-- OP20 磨床磨削(直接放入磨床,无需换向机构换向)
|
|||
|
|
-- OP30 工件清洗(放清洗工位→发AirBlowStartReq→等AirBlowCompleteDone→取回)
|
|||
|
|
-- OP35 全检台容量判断(决策步骤:有空位→OP40 全检检测;已满→OP50 缓存暂存)
|
|||
|
|
-- OP40 全检检测(放全检台,等待检测完成信号)
|
|||
|
|
-- OP50 缓存暂存(全检台满时暂存到缓存台,等全检台有空位后回流OP35重新判断)
|
|||
|
|
-- OP60 接驳台下料(成品放回接驳台)
|
|||
|
|
INSERT INTO recipe_step (id, recipe_id, step_id, step_name, step_index, step_type, resource_type, next_step_default, "desc") VALUES
|
|||
|
|
(1, 1, 'OP10', '接驳台上料', 10, 'LOAD_DOCK', 'DOCK', 'OP20', '从接驳台取毛坯'),
|
|||
|
|
(2, 1, 'OP20', '磨床磨削', 20, 'OPERATION', 'GRINDER', 'OP30', '缸体直接放入磨床磨削;有料判断由系统槽位状态决定'),
|
|||
|
|
(3, 1, 'OP30', '工件清洗', 30, 'AIR_BLOW', '', 'OP35', '机器人放料到清洗工位→发AirBlowStartReq→等AirBlowCompleteDone→取回'),
|
|||
|
|
(4, 1, 'OP35', '全检台容量判断', 35, 'DECISION', '', 'OP40', '判断全检台是否有空位:有空位→OP40全检;已满→OP50缓存'),
|
|||
|
|
(5, 1, 'OP40', '全检检测', 40, 'OPERATION', 'FULL_CHECK', 'OP60', '放全检台等待检测完成'),
|
|||
|
|
(6, 1, 'OP50', '缓存暂存', 50, 'BUFFER_STAGE','CACHE', 'OP35', '全检台满时暂存到缓存台;处理完后回流OP35重新判断'),
|
|||
|
|
(7, 1, 'OP60', '接驳台下料', 60, 'UNLOAD_DOCK', 'DOCK', '', '成品放回接驳台');
|
|||
|
|
|
|||
|
|
-- === 配油盘 Recipe (id=2) 工艺步骤 ===
|
|||
|
|
-- 与缸体区别:OP20 换向机构换向后再 OP25 磨床磨削
|
|||
|
|
INSERT INTO recipe_step (id, recipe_id, step_id, step_name, step_index, step_type, resource_type, next_step_default, "desc") VALUES
|
|||
|
|
(8, 2, 'OP10', '接驳台上料', 10, 'LOAD_DOCK', 'DOCK', 'OP20', '从Dock接驳台取毛坯'),
|
|||
|
|
(9, 2, 'OP20', '换向机构换向', 20, 'OPERATION', 'TURN_TABLE', 'OP25', '配油盘放换向机构,PLC自动旋转换向,完成后取回'),
|
|||
|
|
(10, 2, 'OP25', '磨床磨削', 25, 'OPERATION', 'GRINDER', 'OP30', '换向后的配油盘放入磨床磨削;有料判断由系统槽位状态决定'),
|
|||
|
|
(11, 2, 'OP30', '工件清洗', 30, 'AIR_BLOW', '', 'OP35', '机器人放料到清洗工位→发AirBlowStartReq→等AirBlowCompleteDone→取回'),
|
|||
|
|
(12, 2, 'OP35', '全检台容量判断', 35, 'DECISION', '', 'OP40', '判断全检台是否有空位:有空位→OP40全检;已满→OP50缓存'),
|
|||
|
|
(13, 2, 'OP40', '全检检测', 40, 'OPERATION', 'FULL_CHECK', 'OP60', '放全检台等待检测完成'),
|
|||
|
|
(14, 2, 'OP50', '缓存暂存', 50, 'BUFFER_STAGE','CACHE', 'OP35', '全检台满时暂存到缓存台;处理完后回流OP35重新判断'),
|
|||
|
|
(15, 2, 'OP60', '接驳台下料', 60, 'UNLOAD_DOCK', 'DOCK', '', '成品放回接驳台');
|
|||
|
|
|
|||
|
|
-- ========== 5. 产品类型(8种:4个型号 × 2种形状) ==========
|
|||
|
|
-- 缸体(GENERAL):无需换向,关联圆形件工艺
|
|||
|
|
INSERT INTO product_type (id, name, code, category, recipe_id, cnc_machine_ids, temp_slot_quota, is_active, remark) VALUES
|
|||
|
|
(1, '缸体-HD-A6VM107', 'PART-RND-107', '缸体', 1, '[]', 3, true, '缸体 HD-A6VM107,直接磨削无需换向'),
|
|||
|
|
(2, '缸体-HD-A6VM160', 'PART-RND-160', '缸体', 1, '[]', 3, true, '缸体 HD-A6VM160,直接磨削无需换向'),
|
|||
|
|
(3, '缸体-HD-A6VM200', 'PART-RND-200', '缸体', 1, '[]', 3, true, '缸体 HD-A6VM200,直接磨削无需换向'),
|
|||
|
|
(4, '缸体-HD-A6VM215', 'PART-RND-215', '缸体', 1, '[]', 3, true, '缸体 HD-A6VM215,直接磨削无需换向');
|
|||
|
|
-- 配油盘(SQUARE):需换向,关联方形件工艺
|
|||
|
|
INSERT INTO product_type (id, name, code, category, recipe_id, cnc_machine_ids, temp_slot_quota, is_active, remark) VALUES
|
|||
|
|
(5, '配油盘-HD-A6VM107', 'PART-SQR-107', '配油盘', 2, '[]', 3, true, '配油盘 HD-A6VM107,需换向机构换向后再磨削'),
|
|||
|
|
(6, '配油盘-HD-A6VM160', 'PART-SQR-160', '配油盘', 2, '[]', 3, true, '配油盘 HD-A6VM160,需换向机构换向后再磨削'),
|
|||
|
|
(7, '配油盘-HD-A6VM200', 'PART-SQR-200', '配油盘', 2, '[]', 3, true, '配油盘 HD-A6VM200,需换向机构换向后再磨削'),
|
|||
|
|
(8, '配油盘-HD-A6VM215', 'PART-SQR-215', '配油盘', 2, '[]', 3, true, '配油盘 HD-A6VM215,需换向机构换向后再磨削');
|
|||
|
|
|
|||
|
|
-- 重置序列
|
|||
|
|
SELECT setval('equipment_type_id_seq', (SELECT MAX(id) FROM equipment_type));
|
|||
|
|
SELECT setval('equipment_id_seq', (SELECT MAX(id) FROM equipment));
|
|||
|
|
SELECT setval('equipment_slot_id_seq', (SELECT MAX(id) FROM equipment_slot));
|
|||
|
|
SELECT setval('recipe_id_seq', (SELECT MAX(id) FROM recipe));
|
|||
|
|
SELECT setval('recipe_step_id_seq', (SELECT MAX(id) FROM recipe_step));
|
|||
|
|
SELECT setval('product_type_id_seq', (SELECT MAX(id) FROM product_type));
|