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