-- ============================================================================ -- 磨床自动化单元 - 数据库种子数据 -- ============================================================================ -- 设备清单: -- 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));