| | |
| | | #include <chrono> |
| | | #include <optional> |
| | | |
| | | |
| | | |
| | | struct PJWarp { |
| | | BOOL addToCj; |
| | | void* pj; |
| | | int port; |
| | | BOOL checkSlot[8]; |
| | | int material[8]; |
| | | }; |
| | | |
| | | namespace SERVO { |
| | | /// PJ 生命周期(贴近 E40 常见状态) |
| | | enum class PJState : uint8_t { |
| | |
| | | } |
| | | */ |
| | | struct CarrierSlotInfo { |
| | | std::string carrierId; // CARRIERID |
| | | std::vector<uint8_t> slots; // SLOTID[] |
| | | std::string carrierId; // CARRIERID |
| | | std::vector<uint8_t> slots; // SLOTID[] |
| | | std::vector<void*> contexts; // Glass |
| | | }; |
| | | |
| | | /// 简单资源视图接口:供 Validate() 查询(由设备端实现者在外部提供) |
| | |
| | | explicit CProcessJob(std::string pjId); |
| | | |
| | | const std::string& id() const noexcept { return m_pjId; } |
| | | void setId(std::string& id); |
| | | const std::string& parentCjId() const noexcept { return m_parentCjId; } |
| | | PJState state() const noexcept { return m_state; } |
| | | StartPolicy startPolicy() const noexcept { return m_startPolicy; } |
| | | RecipeMethod recipeMethod() const noexcept { return m_recipeMethod; } |
| | | const std::string& recipeSpec() const noexcept { return m_recipeSpec; } // PPID 或 Spec |
| | | std::string getStateText(); |
| | | |
| | | // 绑定父 CJ |
| | | void setParentCjId(std::string cjId); |
| | |
| | | }; |
| | | // 返回问题清单(空=通过) |
| | | bool validate(const IResourceView& rv); |
| | | const std::vector<ValidationIssue>& issues(); |
| | | const std::vector<ValidationIssue>& issues() const; |
| | | |
| | | // —— 状态机(带守卫)—— |
| | | bool queue(); // NoState -> Queued |
| | |
| | | bool pause(); // InProcess -> Paused |
| | | bool resume(); // Paused -> InProcess |
| | | bool complete(); // InProcess -> Completed |
| | | bool abort(); // Any (未终态) -> Aborted |
| | | bool abort(std::string reason); // Any (未终态) -> Aborted |
| | | bool fail(std::string reason); // 任意态 -> Failed(记录失败原因) |
| | | |
| | | // —— 访问器(用于上报/查询)—— |
| | |
| | | // 追加一个载具 |
| | | void addCarrier(std::string carrierId, std::vector<uint8_t> slots); |
| | | |
| | | // 设置载具slots和contexts |
| | | bool setCarrierSlotsAndContexts(std::string carrierId, std::vector<uint8_t> slots, std::vector<void*> contexts); |
| | | bool setCarrierContexts(std::string carrierId, std::vector<void*> contexts); |
| | | |
| | | // 访问器 |
| | | const std::vector<CarrierSlotInfo>& carriers() const noexcept { return m_carriers; } |
| | | CarrierSlotInfo* getCarrier(const std::string& strId); |
| | | |
| | | // 判定是否“按载具/卡位”方式 |
| | | bool usesCarrierSlots() const noexcept { return !m_carriers.empty(); } |
| | |
| | | |
| | | // 错误列表 |
| | | std::vector<ValidationIssue> m_issues; |
| | | |
| | | // 新增 |
| | | std::string m_strLotId; |
| | | std::string m_strProductId; |
| | | std::string m_strOperationId; |
| | | PJWarp m_pjWarp; |
| | | |
| | | public: |
| | | void setLotId(std::string strLotId); |
| | | std::string& getLotId(); |
| | | void setProductId(std::string strProductId); |
| | | std::string& getProductId(); |
| | | void setOperationId(std::string strOperationId); |
| | | std::string& getOperationId(); |
| | | void setPjWarp(PJWarp pjWarp); |
| | | PJWarp& getPjWarp(); |
| | | }; |
| | | } |
| | | |