From ec9ebcb74b9647c1379b6297050fc7ddaf2bce9e Mon Sep 17 00:00:00 2001 From: Kim_Hyeon_Joong Date: Fri, 20 Mar 2026 16:09:37 +0900 Subject: [PATCH] Create Cyclic.st 1234 --- test/Cyclic.st | 235 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 test/Cyclic.st diff --git a/test/Cyclic.st b/test/Cyclic.st new file mode 100644 index 0000000..a0063da --- /dev/null +++ b/test/Cyclic.st @@ -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