Загрузка данных


IF GVL.PodLoaded AND (GVL.podveskas[podAtPos0].currentStep = -1) THEN
    IF (Control_HMI.processType = E_RouteType.eTin) OR 
       (Control_HMI.processType = E_RouteType.eSilver) THEN
        // ... (установка типа, xLoaded, currentStep=0) ...

        // Очищаем старые планы перед новой симуляцией
        FOR i := 1 TO 17 DO
            GVL.podveskas[podAtPos0].simStartTime[i] := DT#1970-01-01-00:00:00;
            GVL.podveskas[podAtPos0].simBusyUntil[i] := DT#1970-01-01-00:00:00;
        END_FOR;

        route := GVL.podveskas[podAtPos0].processType;
        firstVat := GetVatFromRecipe(route, 1);

        IF firstVat > 0 THEN
            // *** ГЛАВНОЕ: вызываем симуляцию и проверяем результат ***
            IF EvaluatePodveska(podveska := GVL.podveskas[podAtPos0]) THEN
                // Симуляция успешна – копируем планы и стартуем в линию
                FOR i := 1 TO 17 DO
                    GVL.planVatBusyUntil[i] := MAX(GVL.planVatBusyUntil[i], GVL.podveskas[podAtPos0].simBusyUntil[i]);
                    GVL.planVatStartTime[i] := MAX(GVL.planVatStartTime[i], GVL.podveskas[podAtPos0].simStartTime[i]);
                END_FOR;
                GVL.aoJobSource := 0;
                GVL.aoJobDest := firstVat;
                GVL.candidate := podAtPos0;
                GVL.aoBusy := TRUE;
                RETURN;
            ELSE
                // Симуляция неудачна – отправляем в буфер (или оставляем на позиции 0)
                IF Main.bufferHolds[1] = 0 THEN
                    GVL.aoJobDest := 101;
                ELSIF Main.bufferHolds[2] = 0 THEN
                    GVL.aoJobDest := 102;
                ELSIF Main.bufferHolds[3] = 0 THEN
                    GVL.aoJobDest := 103;
                ELSE
                    GVL.aoJobDest := -1;
                END_IF
                IF GVL.aoJobDest > 0 THEN
                    GVL.aoJobSource := 0;
                    GVL.candidate := podAtPos0;
                    GVL.aoBusy := TRUE;
                    RETURN;
                END_IF
                // Если все буферы заняты, подвеска остаётся на позиции 0
            END_IF
        END_IF
    ELSE
        GVL.PodLoaded := FALSE;
    END_IF
END_IF