已修改5个文件
44 ■■■■ 文件已修改
SourceCode/Bond/Servo/CMaster.cpp 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.h 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ProcessJob.cpp 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ProcessJob.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp
@@ -234,7 +234,7 @@
        readCache();
        loadState();
        if (m_listener.onControlJobChanged) {
            m_listener.onControlJobChanged(this);
            notifyControlJobChanged();
        }
@@ -2896,7 +2896,7 @@
        this->saveState();
        if (m_listener.onControlJobChanged) {
            m_listener.onControlJobChanged(this);
            notifyControlJobChanged();
        }
        return (int)m_processJobs.size();
@@ -2956,7 +2956,7 @@
        m_pControlJob->setPJs(temps);
        this->saveState();
        if (m_listener.onControlJobChanged) {
            m_listener.onControlJobChanged(this);
            notifyControlJobChanged();
        }
@@ -3077,7 +3077,7 @@
        }
        if (pausedAny && m_listener.onControlJobChanged) {
            // 通知应用层刷新 UI/按钮状态
            m_listener.onControlJobChanged(this);
            notifyControlJobChanged();
        }
        if (pausedAny && !m_bPauseAlarmRaised) {
            std::string desc = CToolUnits::formatString("<PauseEvent CEID=%u>", ceid);
@@ -3392,7 +3392,7 @@
        saveState();
        if (m_listener.onControlJobChanged) {
            m_listener.onControlJobChanged(this);
            notifyControlJobChanged();
        }
        return true;
@@ -3429,7 +3429,7 @@
        saveState();
        if (m_listener.onControlJobChanged) {
            m_listener.onControlJobChanged(this);
            notifyControlJobChanged();
        }
        return true;
SourceCode/Bond/Servo/CMaster.h
@@ -296,5 +296,10 @@
    private:
        Collector* m_pCollector = nullptr;
        void CreateDAQBridgeServer();
        inline void notifyControlJobChanged() {
            if (m_listener.onControlJobChanged) {
                m_listener.onControlJobChanged(this);
            }
        }
    };
}
SourceCode/Bond/Servo/Model.cpp
@@ -354,6 +354,23 @@
        for (auto p : pjs) {
            LOGI("<Model>onPRJobMultiCreate %s %s", p->id().c_str(), p->recipeSpec().c_str());
        }
        auto rejectAll = [&](uint32_t code, const std::string& msg) -> int {
            LOGW("<Model>onPRJobMultiCreate rejected: %s", msg.c_str());
            for (auto p : pjs) {
                if (p != nullptr) p->addIssue(code, msg);
            }
            return -1;
        };
        // 单 PJ 模式:只接受 1 条且当前无在制 PJ
        if (pjs.size() != 1) {
            return rejectAll(1200, "Only 1 ProcessJob supported (single-PJ mode)");
        }
        if (!m_master.isProcessJobsEmpty()) {
            return rejectAll(1201, "ProcessJob exists, cannot create new in single-PJ mode");
        }
        int nRet = m_master.setProcessJobs(pjs);
        auto processJobs = m_master.getProcessJobs();
        std::vector<SERVO::CVariable> vars;
SourceCode/Bond/Servo/ProcessJob.cpp
@@ -75,6 +75,11 @@
        return m_issues;
    }
    void CProcessJob::addIssue(uint32_t code, const std::string& msg)
    {
        m_issues.push_back({ code, msg });
    }
    bool CProcessJob::validate(const IResourceView& rv)
    {
        m_issues.clear();
@@ -83,10 +88,6 @@
        auto add = [&](uint32_t code, std::string msg) {
            m_issues.push_back({ code, std::move(msg) });
        };
        if (!rv.isProcessJobsEmpty()) {
            add(1000, "ProcessJobs Conflict!");
        }
        // —— 基本 / 标识 ——
        if (m_pjId.empty())            add(1001, "PJID empty");
SourceCode/Bond/Servo/ProcessJob.h
@@ -133,6 +133,7 @@
        // 返回问题清单(空=通过)
        bool validate(const IResourceView& rv);
        const std::vector<ValidationIssue>& issues() const;
        void addIssue(uint32_t code, const std::string& msg);
        // —— 状态机(带守卫)——
        bool queue();           // NoState -> Queued