Create Cyclic.st

1234
This commit is contained in:
2026-03-20 16:09:37 +09:00
parent c346c94839
commit ec9ebcb74b

235
test/Cyclic.st Normal file
View File

@@ -0,0 +1,235 @@
PROGRAM _CYCLIC
(* Insert code here *)
// IV1 Valve Condition Change
IV1_SET_CLOSE;// := gPM.IO.AI.EXH_VG2_MONITOR > 1.33;
//IV7
// Gauge VG1 / V22
gPM.IO.AI.EXH_VG1_MONITOR := ChangeRange(AI_EXH_BOX1[1], 0, 32767.0, 0, 0.4); // P1
gPM.IO.AI.EXH_VG2_MONITOR := ChangeRange(AI_EXH_BOX1[2], 0, 32767.0, 0, 133.0); // P2
gPM.IO.AI.EXH_VG3_MONITOR := ChangeRange(AI_EXH_BOX1[3], 0, 32767.0 ,0, 1.33); // P.SW11
// Read
gAPC[0].Read.Remote := DI_EXH_BOX2[7]; // gPM.IO.DI.EXH_CKD_REMOTE_STATUS; : 1: remote
gAPC[0].Read.Alarm := NOT DI_EXH_BOX2[8]; // gPM.IO.DI.EXH_CKD_ALARM_STATUS; : 1: normal
gAPC[0].Read.Position := ChangeRange(AI_EXH_BOX1[0],0,32767,0,100); (* Change Position : 0~ 100% *)
gAPC[0].Read.Pressure := SEL(gAPC[0].Write.RangeSel = TRUE, gPM.IO.AI.EXH_VG1_MONITOR, gPM.IO.AI.EXH_VG2_MONITOR);
gAPC[0].Write.RangeSel := (gPM.IO.AI.EXH_VG2_MONITOR > 0.4);
// All Reset
gAPC[0].Write.Close := FALSE;
gAPC[0].Write.Open := FALSE;
gAPC[0].Write.SlowVac := FALSE;
gAPC[0].Write.Pressure := FALSE;
gAPC[0].Write.Position := FALSE;
gAPC[0].Write.OpeningHold := FALSE;
CASE gAPC[0].Set.ControlMode OF
0: // CLOSE
gAPC[0].Write.Close := TRUE;
1: // OPEN
gAPC[0].Write.Open := TRUE;
2: // SLOW VAC
gAPC[0].Write.SlowVac := TRUE;
3: // PRESSURE
gAPC[0].Write.Pressure := TRUE;
4: // POSITION
gAPC[0].Write.Position := TRUE;
END_CASE;
DO_EXH_BOX2[0] := NOT gAPC[0].Write.Close; // Close = false , OtherCommand = true
DO_EXH_BOX2[1] := gAPC[0].Write.Open;
DO_EXH_BOX2[2] := gAPC[0].Write.SlowVac;
DO_EXH_BOX2[3] := gAPC[0].Write.Pressure;
DO_EXH_BOX2[9] := gAPC[0].Write.Position;
DO_EXH_BOX2[4] := gAPC[0].Write.RangeSel; // Range Select P1 : false, P2 : true
DO_EXH_BOX2[7] := gAPC[0].Write.OpeningHold;
// Option
// Table Selector
// 1 : 0, 0
// 2 : 1, 0
// 3 : 0, 1
// 4 : 1, 1
TableSelect[0](Index := gAPC[0].Write.TableSelector);
TableSelector[0].First := TableSelect[0].Selector1;
TableSelector[0].Second := TableSelect[0].Selector2;
DO_EXH_BOX2[5] := TableSelector[0].First; // gPM.IO.DV.EXH_CKD_TABLE_SELECT1_CMD;
DO_EXH_BOX2[6] := TableSelector[0].Second; // gPM.IO.DV.EXH_CKD_TABLE_SELECT2_CMD;
// Set Pressure or Position Target
IF gAPC[0].Write.Pressure = TRUE THEN
// Change P1/P2 Setting Range
IF gAPC[0].Write.RangeSel = TRUE THEN
AO_EXH_BOX1[0] := REAL_TO_INT(ChangeRange(gAPC[0].Write.PressureValue,0, 133.0, 0, (32767.0/2.0)));
ELSE
AO_EXH_BOX1[0] := REAL_TO_INT(ChangeRange(gAPC[0].Write.PressureValue,0, 0.4, 0, (32767.0/2.0)));
END_IF
ELSE
IF gAPC[0].Write.Position = TRUE THEN
// Valve Type Old
AO_EXH_BOX1[0] := REAL_TO_INT(ChangeRange(gAPC[0].Write.PositionValue,0, 100.0, 0, (32767.0/2.0)));
// Valve Type New
//AO_EXH_BOX1[2] := REAL_TO_INT(gPM.IO.AV.EXH_CKD_OPE_SET / 100.0 * (32767.0/2.0));
END_IF
END_IF
(* Select 1~20 Torr *)
IF gAPC[0].Write.SlowVacRate < 1 THEN
gAPC[0].Write.SlowVacRate := 1;
ELSIF gAPC[0].Write.SlowVacRate > 20 THEN
gAPC[0].Write.SlowVacRate := 20;
END_IF;
AO_EXH_BOX1[1] := REAL_TO_INT(ChangeRange(gAPC[0].Write.SlowVacRate,0, 20.0, 0, (32767.0/2.0)));
(* ============================================== *)
(* APC Alarm Judgement Loop *)
(* ============================================== *)
FOR i := 0 TO 0 DO
(* ===== 1. Stability Use Parameter ===== *)
JudgeConfig[i].Stab[0].Use := gAPC[i].Set.UsingStability;
JudgeConfig[i].Stab[1].Use := gAPC[i].Set.UsingStability;
(* ===== 2. Pressure Stabilize ===== *)
APC_PressStabilizes[i](
Enable := (gAPC[i].Set.UsingStability AND gAPC[i].Write.Pressure),
SV := gAPC[i].Write.PressureValue,
PV := gAPC[i].Read.Pressure,
Param := JudgeConfig[i].Stab[0],
CycleTime := CycleTime
);
(* ===== 3. Position Stabilize *)
APC_PosStabilizes[i](
Enable := (gAPC[i].Set.UsingStability AND gAPC[i].Write.Position),
SV := gAPC[i].Write.PositionValue,
PV := gAPC[i].Read.Position,
Param := JudgeConfig[i].Stab[1],
CycleTime := CycleTime
);
// 0=Idle, 1=Delay, 2=Stabilizing, 3=Stable
gAPC[i].State.StabStep := APC_PressStabilizes[i].State + APC_PosStabilizes[i].State;
(* Stabilize *)
gAPC[i].State.StabUpperAlarm := APC_PressStabilizes[i].AlarmUpper OR APC_PosStabilizes[i].AlarmUpper;
gAPC[i].State.StabLowerAlarm := APC_PressStabilizes[i].AlarmLower OR APC_PosStabilizes[i].AlarmLower;
(* ===== 4. Judge Use Parameter *)
JudgeConfig[i].Judge[0].Use := gAPC[i].Set.UsingAlarmWatch;
JudgeConfig[i].Judge[1].Use := gAPC[i].Set.UsingAlarmWatch;
JudgeConfig[i].Judge[2].Use := gAPC[i].Set.UsingAlarmWatch;
(* ===== 5. Pressure *)
APC_PressJudges[i](
Enable := (gAPC[i].Set.JudgementType = 0 AND gAPC[i].Write.Pressure),
SV := gAPC[i].Write.PressureValue,
PV := gAPC[i].Read.Pressure,
Param := JudgeConfig[i].Judge[0],
CycleTime := CycleTime
);
(* ===== 6. Position *)
APC_PosJudges[i](
Enable := (gAPC[i].Set.JudgementType = 0 AND gAPC[i].Write.Position),
SV := gAPC[i].Write.PositionValue,
PV := gAPC[i].Read.Position,
Param := JudgeConfig[i].Judge[2],
CycleTime := CycleTime
);
(* ===== 7. Leak ===== *)
(* Enable Condition : JudgeType = Leak AND Valve State = Close *)
APC_LeakJudges[i](
Enable := (gAPC[i].Set.JudgementType = 1 AND gAPC[i].Set.ControlMode = 0),
PV := gAPC[i].Read.Pressure,
Param := JudgeConfig[i].Judge[1],
CycleTime := CycleTime
);
gAPC[i].Read.LeakStartPressure := APC_LeakJudges[i].StartPressure;
gAPC[i].State.JudgeStep := APC_LeakJudges[i].State + APC_PressJudges[i].State + APC_PosJudges[i].State;
(* 8. Warning/Alarm *)
gAPC[i].State.WarningValueState :=
APC_PressJudges[i].WarningHighState OR APC_PressJudges[i].WarningLowState OR
APC_LeakJudges[i].WarningHighState OR APC_LeakJudges[i].WarningLowState OR
APC_PosJudges[i].WarningHighState OR APC_PosJudges[i].WarningLowState;
gAPC[i].State.AlarmValueState :=
APC_PressJudges[i].AlarmHighState OR APC_PressJudges[i].AlarmLowState OR
APC_LeakJudges[i].AlarmHighState OR APC_LeakJudges[i].AlarmLowState OR
APC_PosJudges[i].AlarmHighState OR APC_PosJudges[i].AlarmLowState;
IF APC_PosStabilizes[i].AlarmLower THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 518 + (i*16));
END_IF
IF APC_PosStabilizes[i].AlarmUpper THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 519 + (i*16));
END_IF
IF APC_PressStabilizes[i].AlarmLower THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 520 + (i*16));
END_IF
IF APC_PressStabilizes[i].AlarmUpper THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 521 + (i*16));
END_IF
IF APC_PosJudges[i].WarningLowState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 522 + (i*16));
END_IF
IF APC_PosJudges[i].WarningHighState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 523 + (i*16));
END_IF
IF APC_LeakJudges[i].WarningLowState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 524 + (i*16));
END_IF
IF APC_LeakJudges[i].WarningHighState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 525 + (i*16));
END_IF
IF APC_PressJudges[i].WarningLowState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 526 + (i*16));
END_IF
IF APC_PressJudges[i].WarningHighState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 527 + (i*16));
END_IF
IF APC_PosJudges[i].AlarmLowState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 528 + (i*16));
END_IF
IF APC_PosJudges[i].AlarmHighState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 529 + (i*16));
END_IF
IF APC_LeakJudges[i].AlarmLowState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 530 + (i*16));
END_IF
IF APC_LeakJudges[i].AlarmHighState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 531 + (i*16));
END_IF
IF APC_PressJudges[i].AlarmLowState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 532 + (i*16));
END_IF
IF APC_PressJudges[i].AlarmHighState THEN
PostAlarm(gAlarmManager,gAlarmUseInfo[AlarmTableIndex].UseInfo, 533 + (i*16));
END_IF
END_FOR;
END_PROGRAM