Solving Idle State glitches
Signed-off-by: Bernardo Carvalho <bernardo.carvalho@tecnico.ulisboa.pt>
This commit is contained in:
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user