chenluhua1980
6 天以前 d400f022161ff47f02cd0ea95a5076d0187ecd4d
SourceCode/Bond/Servo/CCjPage2.cpp
@@ -13,6 +13,40 @@
    IDC_BUTTON_PORT3_PROCESS_START,
    IDC_BUTTON_PORT4_PROCESS_START };
namespace {
    void BuildCassetteCtrlMaps(SERVO::CLoadPort* pPort, short (&jobExistence)[12], short& slotProcess)
    {
        slotProcess = 0;
        bool anyScheduled = false;
        // Prefer hardware scan map for job existence (first 16 slots).
        const short scanMap = pPort->getScanCassetteMap();
        if (scanMap != 0) {
            jobExistence[0] = scanMap;
        }
        const int maxSlots = 12 * 16;
        const int totalSlots = (SLOT_MAX < maxSlots) ? SLOT_MAX : maxSlots;
        for (int slot = 1; slot <= totalSlots; ++slot) {
            SERVO::CGlass* pGlass = pPort->getGlassFromSlot(slot);
            if (pGlass == nullptr) continue;
            const int wordIndex = (slot - 1) / 16;
            const int bitIndex = (slot - 1) % 16;
            jobExistence[wordIndex] = (short)(jobExistence[wordIndex] | (1 << bitIndex));
            if (slot <= 16 && pGlass->isScheduledForProcessing()) {
                slotProcess = (short)(slotProcess | (1 << bitIndex));
                anyScheduled = true;
            }
        }
        if (!anyScheduled) {
            slotProcess = jobExistence[0];
        }
    }
}
// CPjPage1 对话框
IMPLEMENT_DYNAMIC(CCjPage2, CCjPageBase)
@@ -452,7 +486,11 @@
{
    auto& master = theApp.m_model.getMaster();
    auto port = (SERVO::CLoadPort*)master.getEquipment(EQ_ID_LOADPORT1);
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
    if (port == nullptr) return;
    short jobExistence[12] = { 0 };
    short slotProcess = 0;
    BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}
@@ -460,21 +498,33 @@
{
    auto& master = theApp.m_model.getMaster();
    auto port = (SERVO::CLoadPort*)master.getEquipment(EQ_ID_LOADPORT2);
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
    if (port == nullptr) return;
    short jobExistence[12] = { 0 };
    short slotProcess = 0;
    BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}
void CCjPage2::OnBnClickedButtonPort3ProcessStart()
{
    auto& master = theApp.m_model.getMaster();
    auto port = (SERVO::CLoadPort*)master.getEquipment(EQ_ID_LOADPORT3);
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
    if (port == nullptr) return;
    short jobExistence[12] = { 0 };
    short slotProcess = 0;
    BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}
void CCjPage2::OnBnClickedButtonPort4ProcessStart()
{
    auto& master = theApp.m_model.getMaster();
    auto port = (SERVO::CLoadPort*)master.getEquipment(EQ_ID_LOADPORT4);
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
    if (port == nullptr) return;
    short jobExistence[12] = { 0 };
    short slotProcess = 0;
    BuildCassetteCtrlMaps(port, jobExistence, slotProcess);
    port->sendCassetteCtrlCmd(CCC_PROCESS_START, jobExistence, 12, slotProcess, 0, nullptr, nullptr);
}