diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db index 7ee84dc..416cace 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db @@ -23,6 +23,7 @@ record(mbbo, "$(P)$(R)OPSTATE") { field(FVVL, "5") field(SXVL, "6") field(SVVL, "7") + field(EIVL, "8") field(ZRST, "Stopped") field(ONST, "Starting") field(TWST, "Idle") @@ -31,6 +32,7 @@ record(mbbo, "$(P)$(R)OPSTATE") { field(FVST, "Stopping") field(SXST, "Emergency") field(SVST, "UPSEmergency") + field(EIST, "IdleLimbo") field(VAL, "0") field(FLNK, "$(P)$(R)OPCALCSTATE") #field(PINI, "YES") @@ -46,6 +48,7 @@ record(mbbo, "$(P)$(R)LASTOPSTATE") { field(FVVL, "5") field(SXVL, "6") field(SVVL, "7") + field(EIVL, "8") field(ZRST, "Stopped") field(ONST, "Starting") field(TWST, "Idle") @@ -54,6 +57,7 @@ record(mbbo, "$(P)$(R)LASTOPSTATE") { field(FVST, "Stopping") field(SXST, "Emergency") field(SVST, "UPSEmergency") + field(EIST, "IdleLimbo") field(PINI, "YES") # field(VAL, "0") } diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt index f0a0f6e..cd40026 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt @@ -1,5 +1,4 @@ -/** vim: set filetype=c : - * Use :SyntasticToggleMode +/** * * Project : ISTTOK slow Control Sequencer * Docs: https://www-csr.bessy.de/control/SoftDist/sequencer/ @@ -77,13 +76,14 @@ short STPST_Stopping3 = 3; short STPST_StoppingEnd = 4; //short STPST_Stopping5 = 5; -short POS_Stopped =0; -short POS_Starting=1; -short POS_Idle =2; +short POS_Stopped = 0; +short POS_Starting = 1; +short POS_Idle =2; short POS_Clean =3; short POS_WaitShot=4; short POS_Stopping=5; short POS_Emergency=6; +short POS_IdleLimbo=8; //short POS_UPSEmergency=7; short ON=1; @@ -430,27 +430,27 @@ ss PulseSequence { pvPut(IsttokOPSTATE); } when(IsttokEmergency == ON) { - strcpy(msg, "Emergency from Starting"); + strcpy(msg, "Starting: ->Emergency"); pvPut(msg); errlogSevPrintf(MAJOR, "%s\n",msg); /* Pulse state change to Emergency*/ } state Emergency when (IsttokupsBatteryON == ON) { - strcpy(msg, "Power UPS OB, Starting to Stopping"); + strcpy(msg, "Starting: Power UPS OB, Starting to Stopping"); pvPut(msg); errlogSevPrintf(MAJOR, "%s\n",msg); IsttokOPREQ = STOP; pvPut(IsttokOPREQ); } state Stopping when (IsttokOPREQ == STOP) { - strcpy(msg, "State to Stopping"); + strcpy(msg, "Starting: State to Stopping"); pvPut(msg); errlogSevPrintf(MINOR, "%s\n",msg); /* Pulse state change to Stopping */ } state Stopping when (STARTINGSTATE == STRST_StartingEnd ) { - strcpy(msg, "State to Idle"); + strcpy(msg, "Starting: State to Idle"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); /* Pulse state change to Idle*/ @@ -470,7 +470,7 @@ ss PulseSequence { pvPut(IsttokProcReq); } when (IsttokUpsShutdown == ON) { - strcpy(msg, "Power Emergency SD, Idle to Stopping"); + strcpy(msg, "Idle: UPS Power Emergency Shutdown. -> Stopping"); pvPut(msg); errlogSevPrintf(MAJOR, "%s\n",msg); IsttokOPREQ = STOP; @@ -478,52 +478,97 @@ ss PulseSequence { } state Stopping when(IsttokEmergency == ON){ - strcpy(msg, "Emergency from Idle"); + strcpy(msg, "Idle: ->Emergency"); pvPut(msg); errlogSevPrintf(MAJOR, "%s\n",msg); /* Pulse state change to Emergency*/ } state Emergency - when ( (pvStatus(IsttokRPump1_Pressure) != pvStatOK) || (pvStatus(IsttokTMPump1_Emergency) != pvStatOK) ) { + when (delay(5.0) && (pvStatus(IsttokRPump1_Pressure) != pvStatOK) || (pvStatus(IsttokTMPump1_Emergency) != pvStatOK) ) { // pvStatus(IsttokTMPump1_Emergency) != pvStatOK || pvStatus(IsttokTMPump2_Emergency) != pvStatOK) { /* Vacuum emergency: Pulse state change to Stopping */ /*IsttokOPREQ = STOP; State should recover from */ /*pvPut(IsttokOPREQ);*/ //strcpy(sendMail, "Vacuum Emergency while Idle"); - strcpy(msg, "State Idle to Stopping"); + strcpy(msg, "Idle: -> IdleLimbo"); pvPut(msg); errlogSevPrintf(MINOR, "%s\n", msg); - sprintf(sendMail, "Vacuum Emergency while Idle, Rpump1 Pressure:%1.1e, TMP1 Adm. Pressure:%4.2e, TMP1 Emergency:%d", - IsttokRPump1_Pressure, IsttokTMPump1_Pressure, IsttokTMPump1_Emergency); - pvPut(sendMail); - } state Stopping + //sprintf(sendMail, "Vacuum Emergency while Idle, Rpump1 Pressure:%1.1e, TMP1 Adm. Pressure:%4.2e, TMP1 Emergency:%d", + // IsttokRPump1_Pressure, IsttokTMPump1_Pressure, IsttokTMPump1_Emergency); + //pvPut(sendMail); + } state IdleLimbo when (IsttokOPREQ==STOP || IsttokTMPump1_ManualValve == OFF) { /*Just to be sure */ // IsttokProcReq = STOP; // pvPut(IsttokProcReq); - strcpy(msg, "State to Stopping"); + strcpy(msg, "Idle: State to Stopping"); pvPut(msg); errlogSevPrintf(MINOR, "%s\n",msg); /* Pulse state change to Stopping */ } state Stopping when (IsttokProcReq==START && IsttokProcMode==CLEAN ) { - strcpy(msg, "State to Clean"); + strcpy(msg, "Idle: State to Clean"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); /* Pulse state change to Clean */ } state Clean when (IsttokProcReq==START && IsttokProcMode==SHOT ) { - strcpy(msg, "State to WaitShot"); + strcpy(msg, "Idle: State to WaitShot"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); /* Pulse state change to WaitShot */ } state WaitShot } +/** State: IdleLimbo ***/ + state IdleLimbo { + entry { + IsttokOPSTATE = POS_IdleLimbo; + pvPut(IsttokOPSTATE); + IsttokLastOPSTATE = POS_IdleLimbo; + pvPut(IsttokLastOPSTATE); + } + when (IsttokUpsShutdown == ON) { + strcpy(msg, "IdleLimbo: Power Emergency. Stopping"); + pvPut(msg); + errlogSevPrintf(MAJOR, "%s\n",msg); + IsttokOPREQ = STOP; + pvPut(IsttokOPREQ); + } state Stopping + + when(IsttokEmergency == ON){ + strcpy(msg, "IdleLimbo: Emergency"); + pvPut(msg); + errlogSevPrintf(MAJOR, "%s\n",msg); + /* Pulse state change to Emergency*/ + } state Emergency + + when ( delay(10.0) && (pvStatus(IsttokRPump1_Pressure) == pvStatOK) && (pvStatus(IsttokTMPump1_Emergency) == pvStatOK) ) { + // pvStatus(IsttokTMPump1_Emergency) != pvStatOK || pvStatus(IsttokTMPump2_Emergency) != pvStatOK) { + strcpy(msg, "IdleLimbo: Returning to Idle."); + pvPut(msg); + errlogSevPrintf(MINOR, "%s\n", msg); + } state Idle + + when ( delay(20.0) && (pvStatus(IsttokRPump1_Pressure) != pvStatOK) || (pvStatus(IsttokTMPump1_Emergency) != pvStatOK) ) { + // pvStatus(IsttokTMPump1_Emergency) != pvStatOK || pvStatus(IsttokTMPump2_Emergency) != pvStatOK) { + /* Vacuum emergency: Pulse state change to Stopping */ + IsttokOPREQ = STOP; + pvPut(IsttokOPREQ); + //strcpy(sendMail, "Vacuum Emergency while Idle"); + strcpy(msg, "IdleLimbo: Stopping"); + pvPut(msg); + errlogSevPrintf(MINOR, "%s\n", msg); + sprintf(sendMail, "Vacuum Emergency while Idle, Rpump1 Pressure:%1.1e, TMP1 Adm. Pressure:%4.2e, TMP1 Emergency:%d", + IsttokRPump1_Pressure, IsttokTMPump1_Pressure, IsttokTMPump1_Emergency); + pvPut(sendMail); + } state Stopping + } + /******* State: Clean ***************************/ state Clean { entry{ @@ -531,7 +576,7 @@ ss PulseSequence { pvPut(IsttokOPSTATE); } when ((IsttokProcReq==STOP) && (CLEANINGSTATE == CLNST_NonCleaning)) { - strcpy(msg, "State from Clean to Idle"); + strcpy(msg, "Clean: State to Idle"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); } state Idle @@ -539,7 +584,7 @@ ss PulseSequence { when (IsttokOPREQ == STOP) {} state Stopping when (IsttokupsBatteryON == ON) { - strcpy(msg, "Power UPS OB, Clean to Idle"); + strcpy(msg, "Clean: Power UPS Battery ON, -> Idle"); pvPut(msg); errlogSevPrintf(MAJOR, "%s\n",msg); IsttokOPREQ = STOP; @@ -555,13 +600,13 @@ ss PulseSequence { /* Vacuum emergency: Pulse state change to Stopping */ IsttokOPREQ = STOP; pvPut(IsttokOPREQ); - strcpy(msg, "State to Stopping"); + strcpy(msg, "Clean: State to Stopping"); pvPut(msg); errlogSevPrintf(MAJOR, "%s\n",msg); } state Stopping when(IsttokEmergency == ON){ - strcpy(msg, "Emergency from Clean"); + strcpy(msg, "Clean: Emergency from Clean"); pvPut(msg); errlogSevPrintf(MAJOR, "%s\n",msg); /* Pulse state change to Emergency*/ @@ -1491,3 +1536,5 @@ exit { */ +// vim: set filetype=c ts=4 sw=4 sts=4 sr et : +// Use: SyntasticToggleMode diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav index dd474e2..f6e0492 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav @@ -1,12 +1,12 @@ -# autosave R5.3 Automatically generated - DO NOT MODIFY - 230220-123101 -ISTTOK:central:PULSE-NUMBER.VAL 49831 +# autosave R5.3 Automatically generated - DO NOT MODIFY - 231205-121931 +ISTTOK:central:PULSE-NUMBER.VAL 51115 ISTTOK:central:LogMessage.VAL -ISTTOK:central:LASTOPSTATE.VAL 0 +ISTTOK:central:LASTOPSTATE.VAL 5 ISTTOK:central:OPREQ.VAL 0 ISTTOK:central:PROCESS-MODE.VAL 1 ISTTOK:central:CLEANINGMANMODE.VAL 1 ISTTOK:central:Emergency-UserButton.VAL 0 -ISTTOK:central:TMPump1-ManualValve.VAL 0 +ISTTOK:central:TMPump1-ManualValve.VAL 1 ISTTOK:central:Shot-TorPSCurrent 32 ISTTOK:central:RPump1-Pressure.HIGH 0.05 ISTTOK:central:RPump1-Pressure.HIHI 0.1