package constants // ============================================================================ // 本文件为磨床自动化单元新项目的常量定义。 // ============================================================================ // === 工件分类(WorkpieceCategory) === // TODO: 根据实际工件类型补充,当前仅占位 type WorkpieceCategory string const ( // TODO: 替换为实际工件分类(如方形件、圆形件等) WorkpieceCategory_General WorkpieceCategory = "GENERAL" // 方形件:需要在转台上换向 WorkpieceCategory_Square WorkpieceCategory = "SQUARE" ) // === 设备类型编码(EquipmentTypeCode) === // 磨床自动化单元设备清单: // - DOCK: 接驳台(左42+右42共84工位,AGV暂不对接,预留HTTP接口) // - GRINDER: 磨床(1台,1工位,支持换料exchange) // - TURN_TABLE: 换向机构(1工位,用于方形件换向) // - AIR_BLOW: 清洗(复用Wash信号M2130-M2139,机器人放料→启动清洗→等待完成→取回) // - FULL_CHECK: 全检台(6工位,纯人工检测,输出"该位置处理完成"通用Done信号) // - CACHE: 缓存台(6工位,全检台满时暂存,等全检台有空位后回流) // // 注意:抽检台即全检台,文档中的"抽检台"是全检台的别名,不单独建模 type EquipmentTypeCode string const ( // EquipmentTypeCode_Dock - 接驳台(Dock),工件入线/出线位置,每个接驳台42工位 EquipmentTypeCode_Dock EquipmentTypeCode = "DOCK" // EquipmentTypeCode_Grinder - 磨床(Grinder),核心加工设备,1工位,支持换料 // 有料用GrinderExchangeReq,无料用GrinderPlaceReq,有料判断由EquipmentSlot.status决定 EquipmentTypeCode_Grinder EquipmentTypeCode = "GRINDER" // EquipmentTypeCode_TurnTable - 换向机构(TurnTable),单工位,用于方形工件换向 // 流程:放换向机构→PLC自动旋转→收到TurnTablePlaceDone信号→取回放入磨床 EquipmentTypeCode_TurnTable EquipmentTypeCode = "TURN_TABLE" // EquipmentTypeCode_AirBlow - 清洗(AirBlow) // 流程:机器人放料→发WashStartReq→等待WashCompleteDone→机器人取回 EquipmentTypeCode_AirBlow EquipmentTypeCode = "AIR_BLOW" // EquipmentTypeCode_Cache - 缓存台(Cache),6工位暂存缓冲位 // 全检台放满时临时放置已磨削未检测工件。 // 缓存台无独立PLC信号,回流由软件逻辑触发:全检台检测完成后,机器人取走已检工件, // 全检台出现空位,调度器将缓存台上的工件重新调度到全检台。 EquipmentTypeCode_Cache EquipmentTypeCode = "CACHE" // EquipmentTypeCode_FullCheck - 全检台(FullCheck),6工位,纯人工检测 // 机器人放料后发 FullCheckPlaceDoneRequestInspect (M2102) 通知PLC可开始检测, // 检测完成后 PLC 发 FullCheckInspectDone (M2098) 通知软件取料。 EquipmentTypeCode_FullCheck EquipmentTypeCode = "FULL_CHECK" // EquipmentTypeCode_Robot - 搬运机器人,串行互斥执行工件搬运,slotCount=0 无加工槽位 EquipmentTypeCode_Robot EquipmentTypeCode = "ROBOT" // EquipmentTypeCode_TempSlot - 夹爪(TempSlot),机器人的持料虚拟位置, // 非物理设备:工件被机器人夹持期间归属此位置,slotCount=0 EquipmentTypeCode_TempSlot EquipmentTypeCode = "TEMP_SLOT" ) // === 槽位状态(SlotStatus) === // 设备/接驳台/缓存台上每个槽位的占用状态。 // 状态机:EMPTY → OCCUPIED(上料/搬运中)→ PROCESSING(加工中,如磨床/全检)→ DONE(完成待取)→ EMPTY type SlotStatus string const ( SlotStatus_Empty SlotStatus = "EMPTY" // 空槽位 SlotStatus_Occupied SlotStatus = "OCCUPIED" // 已占用,工件在槽位上等待/已到位 SlotStatus_Processing SlotStatus = "PROCESSING" // 正在加工/检测中(磨床磨削中、全检检测中、清洗中) SlotStatus_Done SlotStatus = "DONE" // 本工位加工完成,等待机器人取走 ) // === 产线状态(LineStatus,前端 systemStatus.lineStatus 枚举) === type LineStatus string const ( LineStatus_Idle LineStatus = "idle" // 空闲:无运行中工单 LineStatus_Emergency LineStatus = "emergency" // 紧急:有 PROCESSING 槽位(加工/检测中) LineStatus_Paused LineStatus = "paused" // 暂停:有未确认报警或暂停工单 LineStatus_Running LineStatus = "running" // 运行中:有活跃工单 ) // === 旧引擎 job_step 快照状态(新蓝图不复刻,仅终态清理/防御用) === type JobStepStatus string const ( JobStepStatus_Error JobStepStatus = "error" JobStepStatus_Completed JobStepStatus = "completed" ) // === 设备占用标识(OccupiedBy) === // 仅接驳台使用,ROBOT/AGV/MANUAL 互斥占用 type OccupiedBy string const ( OccupiedBy_Robot OccupiedBy = "ROBOT" // 机器人正在取放接驳台工件 OccupiedBy_AGV OccupiedBy = "AGV" // AGV 正在进线 OccupiedBy_Manual OccupiedBy = "MANUAL" // 人工占用(故障排查/维护) ) // === 工序类型(StepType) === // 磨床单元新工艺路线(新流程版): // // OP10 DOCK_LOAD 接驳台上料(机器人取毛坯) // 有料判断由EquipmentSlot.status决定 // OP20 GRIND 磨床磨削 // 有料用GrinderExchangeReq,无料用GrinderPlaceReq // OP30 AIR_BLOW 清洗(机器人放料→发WashStartReq→等WashCompleteDone→取回) // 复用Wash信号M2130-M2139 // OP40 FULL_CHECK 全检台检测(机器人放料→等待检测完成→取回) // 纯人工检测,不区分OK/NG;全检台满时先放缓存台 // OP50 CACHE_STAGE 缓存台暂存(全检台满时暂存,等全检台有空位后软件调度回流) // 缓存台无独立PLC信号,回流由调度器运行时判断 // OP60 DOCK_UNLOAD 接驳台下料(成品放回接驳台) type StepType string const ( // StepType_Operation - 设备加工工序(磨削、清洗、全检等需要设备执行的步骤) StepType_Operation StepType = "OPERATION" // StepType_BufferStage - 缓存台暂存步骤,工件在缓存台等待 StepType_BufferStage StepType = "BUFFER_STAGE" // StepType_Decision - 决策步骤,根据条件分支选择下一工序 StepType_Decision StepType = "DECISION" // StepType_AirBlow - 机器人末端气吹清洁步骤,占用机器人,无设备信号握手 StepType_AirBlow StepType = "AIR_BLOW" // StepType_LoadDock - 从接驳台上料(取毛坯) StepType_LoadDock StepType = "LOAD_DOCK" // StepType_UnloadDock - 下料到接驳台(放回成品) StepType_UnloadDock StepType = "UNLOAD_DOCK" ) // === 工件状态(JobStatus) === // 工件(job)生命周期状态,EventLoop是唯一状态写路径。 type JobStatus string const ( JobStatus_Created JobStatus = "CREATED" // 已创建,尚未上线 JobStatus_InHandling JobStatus = "IN_HANDLING" // 机器人/PLC正在搬运 JobStatus_Processing JobStatus = "PROCESSING" // 设备加工/检测中 JobStatus_WaitingUnload JobStatus = "WAITING_UNLOAD" // 本工序完成,等待取走 JobStatus_OnBuffer JobStatus = "ON_BUFFER" // 在缓存台暂存 JobStatus_WaitingDecision JobStatus = "WAITING_DECISION" // 等待检测判定 JobStatus_WaitingReorient JobStatus = "WAITING_REORIENT" // 等待转台换向 JobStatus_Completed JobStatus = "COMPLETED" // 已完成下线 JobStatus_Scrapped JobStatus = "SCRAPPED" // 已报废/不合格 JobStatus_Suspended JobStatus = "SUSPENDED" // 已暂停 // 以下三个为防御性常量:现行代码不写这些状态,仅用于识别历史数据残留 // (如旧引擎取消工单/异常终态的 job),终态判定时统一拦截防误推进。 JobStatus_Error JobStatus = "ERROR" // 异常终态(历史数据防御) JobStatus_Failed JobStatus = "FAILED" // 失败终态(历史数据防御) JobStatus_Cancelled JobStatus = "CANCELLED" // 取消终态(历史数据防御) ) // === 工单状态(WorkOrderStatus) === type WorkOrderStatus string const ( WorkOrderStatus_Created WorkOrderStatus = "CREATED" // 已创建,尚未启动 WorkOrderStatus_InProgress WorkOrderStatus = "IN_PROGRESS" // 生产中,有活跃Job在运行 WorkOrderStatus_Paused WorkOrderStatus = "PAUSED" // 已暂停,所有Job挂起 WorkOrderStatus_Completed WorkOrderStatus = "COMPLETED" // 已完成,所有Job终态 WorkOrderStatus_Cancelled WorkOrderStatus = "CANCELLED" // 已取消,非终态Job全部报废 WorkOrderStatus_Error WorkOrderStatus = "ERROR" // 异常,需人工介入 WorkOrderStatus_Reported WorkOrderStatus = "REPORTED" // MOM业务:已向MOM报工完成,工单完全结束 ) // === 设备状态(EquipmentStatus) === type EquipmentStatus string const ( EquipmentStatus_Idle EquipmentStatus = "IDLE" // 空闲,无工件在加工 EquipmentStatus_Loading EquipmentStatus = "LOADING" // 机器人正在上料(PLC握手阶段) EquipmentStatus_Processing EquipmentStatus = "PROCESSING" // 设备加工中(磨床磨削中、全检检测中) EquipmentStatus_Unloading EquipmentStatus = "UNLOADING" // 机器人正在下料 EquipmentStatus_Fault EquipmentStatus = "FAULT" // 设备故障,需人工排查 EquipmentStatus_Offline EquipmentStatus = "OFFLINE" // 设备离线,PLC通讯中断 ) // === 位置类型(PositionType) === type PositionType string const ( PositionType_OnEquipment PositionType = "ON_EQUIPMENT" // 设备槽位(磨床/转台/全检/缓存) PositionType_OnDock PositionType = "ON_DOCK" // 接驳台 PositionType_OnCache PositionType = "ON_CACHE" // 缓存台(从ON_BUFFER独立出来) ) // === 任务状态(TaskStatus) === // PLC动作任务状态(发Req→等Done→清信号) type TaskStatus string const ( TaskStatus_Created TaskStatus = "CREATED" // 任务已创建,等待调度 TaskStatus_Dispatched TaskStatus = "DISPATCHED" // 任务已下发到Worker,等待执行 TaskStatus_Running TaskStatus = "RUNNING" // PLC动作执行中(已写Req,等待Done) TaskStatus_Success TaskStatus = "SUCCESS" // 任务执行成功 TaskStatus_Failed TaskStatus = "FAILED" // 任务执行失败 TaskStatus_Timeout TaskStatus = "TIMEOUT" // 任务执行超时 ) // === 工站状态(StationStatus) === type StationStatus string const ( StationStatus_Idle StationStatus = "IDLE" // 工站空闲,可接收新工件 StationStatus_Busy StationStatus = "BUSY" // 工站忙碌,所有槽位已占用/加工中 StationStatus_Waiting StationStatus = "WAITING" // 工站等待,等待机器人或PLC信号 StationStatus_Fault StationStatus = "FAULT" // 工站故障,需人工介入 StationStatus_Offline StationStatus = "OFFLINE" // 工站离线,通讯中断 ) // === 报警等级(AlarmLevel) === type AlarmLevel string const ( AlarmLevel_INFO AlarmLevel = "INFO" //普通信息级报警,仅记录无停机风险 AlarmLevel_WARN AlarmLevel = "WARN" // 警告级报警,轻微异常,产线可继续运行 AlarmLevel_ERROR AlarmLevel = "ERROR" // 错误级报警,设备局部故障,需干预 AlarmLevel_CRITICAL AlarmLevel = "CRITICAL" // 严重故障级报警,整机紧急停机 ) // === 报警状态(AlarmStatus) === type AlarmStatus string const ( AlarmStatus_ACTIVE AlarmStatus = "ACTIVE" // 报警当前持续触发中 AlarmStatus_ACKED AlarmStatus = "ACKED" // 报警已人工确认,但故障未消除 AlarmStatus_CLEARED AlarmStatus = "CLEARED" // 报警故障已消除 ) // === 人工交互类型(ManualActionType) === // 磨床单元需要人工介入的场景 type ManualActionType string const ( // ManualActionType_InspectionDecision - 全检NG,需要人工判定放行/报废 ManualActionType_InspectionDecision ManualActionType = "INSPECTION_DECISION" // ManualActionType_RecoveryRequired - 异常恢复(断电重启后状态不一致) ManualActionType_RecoveryRequired ManualActionType = "RECOVERY_REQUIRED" // ManualActionType_FaultConfirm - 设备故障确认 ManualActionType_FaultConfirm ManualActionType = "FAULT_CONFIRM" ) // === 人工交互状态(ManualActionStatus) === type ManualActionStatus string const ( ManualActionStatus_PENDING ManualActionStatus = "PENDING" // 等待人工处理 ManualActionStatus_RESOLVED ManualActionStatus = "RESOLVED" // 人工操作已完成处置 ManualActionStatus_EXPIRED ManualActionStatus = "EXPIRED" // 人工操作超时未处理 ) // === 恢复决策(RecoveryDecision) === type RecoveryDecision string const ( RecoveryDecision_RESUME RecoveryDecision = "RESUME" // 故障处理完成,恢复自动生产 RecoveryDecision_WAIT_UNLOAD RecoveryDecision = "WAIT_UNLOAD" // 等待取走当前工件后再恢复 RecoveryDecision_SUSPEND RecoveryDecision = "SUSPEND" // 长期暂停产线,等待人工介入 RecoveryDecision_SCRAP RecoveryDecision = "SCRAP" // 当前工件判定报废,清空后重启 ) // === 工单来源(WorkOrderSource) === type WorkOrderSource string const ( WorkOrderSource_Manual WorkOrderSource = "MANUAL" // 工单由操作人员手动创建 WorkOrderSource_MOM WorkOrderSource = "MOM" // 工单由上层 MOM 制造管理系统下发 ) // === PLC信号名称常量(Signal Names) === // 所有PLC信号名称集中在此,避免魔法字符串散落在代码中。 // 信号名称必须与DB signal表中的name字段完全一致。 const ( // --- 相机 Camera (M2020-M2029) --- SigCameraShootReq = "CameraShootReq" SigCameraShootDone = "CameraShootDone" SigCameraShootTray = "CameraShootTray" SigCameraWorkType = "CameraWorkType" // 工件类型(product_type.id),每组动作前必写 // --- 接驳台 Dock (M2000-M2029) --- SigDockFetchReq = "DockFetchReq" SigDockFetchDone = "DockFetchDone" SigDockFetchPos = "DockFetchPos" SigDockFetchTray = "DockFetchTray" SigDockPlaceReq = "DockPlaceReq" SigDockPlaceDone = "DockPlaceDone" SigDockPlacePos = "DockPlacePos" SigDockPlaceTray = "DockPlaceTray" // --- 磨床 Grinder (M2030-M2059) --- SigGrinderFetchReq = "GrinderFetchReq" SigGrinderFetchDone = "GrinderFetchDone" SigGrinderPlaceReq = "GrinderPlaceReq" SigGrinderPlaceDone = "GrinderPlaceDone" SigGrinderExchangeReq = "GrinderExchangeReq" SigGrinderExchangeDone = "GrinderExchangeDone" SigGrinderMachiningDone = "GrinderMachiningDone" // PLC→PC 磨削完成信号 // --- 换向机构 TurnTable (M2060-M2079) --- SigTurnTableFetchReq = "TurnTableFetchReq" SigTurnTableFetchDone = "TurnTableFetchDone" SigTurnTablePlaceReq = "TurnTablePlaceReq" SigTurnTablePlaceDone = "TurnTablePlaceDone" // 换向机构用于方形件换向:放换向机构→PLC自动旋转→TurnTablePlaceDone→取回 // --- 全检台 FullCheck (M2090-M2109) --- SigFullCheckFetchReq = "FullCheckFetchReq" SigFullCheckFetchPos = "FullCheckFetchPos" SigFullCheckInspectDone = "FullCheckInspectDone" // PLC→PC 检测完成在取放料位 SigFullCheckFetchDone = "FullCheckFetchDone" SigFullCheckPlaceReq = "FullCheckPlaceReq" SigFullCheckPlacePos = "FullCheckPlacePos" SigFullCheckPlaceDoneRequestInspect = "FullCheckPlaceDoneRequestInspect" // PC→PLC 放料完成请求人工检验 SigFullCheckDetecting = "FullCheckDetecting" // PLC→PC 人工检验中 SigFullCheckPlaceDone = "FullCheckPlaceDone" // 全检一步换料(PLC M2081 取位置 → M2082 放位置 → M2080 请求 → M2089 完成) SigFullCheckExchangeFetchPos = "FullCheckExchangeFetchPos" SigFullCheckExchangePlacePos = "FullCheckExchangePlacePos" SigFullCheckExchangeReq = "FullCheckExchangeReq" SigFullCheckExchangeDone = "FullCheckExchangeDone" // --- 缓存台 Cache (M2110-M2129) --- SigCacheFetchReq = "CacheFetchReq" SigCacheFetchPos = "CacheFetchPos" SigCacheFetchDone = "CacheFetchDone" SigCachePlaceReq = "CachePlaceReq" SigCachePlacePos = "CachePlacePos" SigCachePlaceDone = "CachePlaceDone" // 缓存台无独立PLC信号,回流由软件调度触发:全检台有空位时从缓存台取料 // --- 气吹清洁 AirBlow (复用Wash信号地址 M2130-M2139) --- // 新流程:气吹清洁机构复用原Wash信号地址,机器人放料→发WashStartReq→等待AirBlowCompleteDone→机器人取回 // 等待信号名必须与 signal 表 name 一致(AirBlowCompleteDone,PLC_清洗完成 M2139), // 信号轮询器按 name 匹配任务等待,旧名 WashCompleteDone 已不在信号表中。 SigAirBlowStartReq = "WashStartReq" // 复用WashStartReq信号(软件_工件清洗 M2130) SigAirBlowCompleteDone = "AirBlowCompleteDone" // 等待信号名,与 signal 表 name 一致(M2139) )