Solving Idle State glitches

Signed-off-by: Bernardo Carvalho <bernardo.carvalho@tecnico.ulisboa.pt>
This commit is contained in:
Bernardo Carvalho
2023-12-05 12:27:55 +00:00
parent 128e3c4119
commit b84e2c3cd2
3 changed files with 79 additions and 28 deletions

View File

@@ -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")
}

View File

@@ -1,5 +1,4 @@
/** vim: set filetype=c :
* Use :SyntasticToggleMode
/**
*
* Project : ISTTOK slow Control Sequencer
* Docs: https://www-csr.bessy.de/control/SoftDist/sequencer/
@@ -84,6 +83,7 @@ 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

View File

@@ -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