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(FVVL, "5")
|
||||||
field(SXVL, "6")
|
field(SXVL, "6")
|
||||||
field(SVVL, "7")
|
field(SVVL, "7")
|
||||||
|
field(EIVL, "8")
|
||||||
field(ZRST, "Stopped")
|
field(ZRST, "Stopped")
|
||||||
field(ONST, "Starting")
|
field(ONST, "Starting")
|
||||||
field(TWST, "Idle")
|
field(TWST, "Idle")
|
||||||
@@ -31,6 +32,7 @@ record(mbbo, "$(P)$(R)OPSTATE") {
|
|||||||
field(FVST, "Stopping")
|
field(FVST, "Stopping")
|
||||||
field(SXST, "Emergency")
|
field(SXST, "Emergency")
|
||||||
field(SVST, "UPSEmergency")
|
field(SVST, "UPSEmergency")
|
||||||
|
field(EIST, "IdleLimbo")
|
||||||
field(VAL, "0")
|
field(VAL, "0")
|
||||||
field(FLNK, "$(P)$(R)OPCALCSTATE")
|
field(FLNK, "$(P)$(R)OPCALCSTATE")
|
||||||
#field(PINI, "YES")
|
#field(PINI, "YES")
|
||||||
@@ -46,6 +48,7 @@ record(mbbo, "$(P)$(R)LASTOPSTATE") {
|
|||||||
field(FVVL, "5")
|
field(FVVL, "5")
|
||||||
field(SXVL, "6")
|
field(SXVL, "6")
|
||||||
field(SVVL, "7")
|
field(SVVL, "7")
|
||||||
|
field(EIVL, "8")
|
||||||
field(ZRST, "Stopped")
|
field(ZRST, "Stopped")
|
||||||
field(ONST, "Starting")
|
field(ONST, "Starting")
|
||||||
field(TWST, "Idle")
|
field(TWST, "Idle")
|
||||||
@@ -54,6 +57,7 @@ record(mbbo, "$(P)$(R)LASTOPSTATE") {
|
|||||||
field(FVST, "Stopping")
|
field(FVST, "Stopping")
|
||||||
field(SXST, "Emergency")
|
field(SXST, "Emergency")
|
||||||
field(SVST, "UPSEmergency")
|
field(SVST, "UPSEmergency")
|
||||||
|
field(EIST, "IdleLimbo")
|
||||||
field(PINI, "YES")
|
field(PINI, "YES")
|
||||||
# field(VAL, "0")
|
# field(VAL, "0")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
/** vim: set filetype=c :
|
/**
|
||||||
* Use :SyntasticToggleMode
|
|
||||||
*
|
*
|
||||||
* Project : ISTTOK slow Control Sequencer
|
* Project : ISTTOK slow Control Sequencer
|
||||||
* Docs: https://www-csr.bessy.de/control/SoftDist/sequencer/
|
* Docs: https://www-csr.bessy.de/control/SoftDist/sequencer/
|
||||||
@@ -84,6 +83,7 @@ short POS_Clean =3;
|
|||||||
short POS_WaitShot=4;
|
short POS_WaitShot=4;
|
||||||
short POS_Stopping=5;
|
short POS_Stopping=5;
|
||||||
short POS_Emergency=6;
|
short POS_Emergency=6;
|
||||||
|
short POS_IdleLimbo=8;
|
||||||
//short POS_UPSEmergency=7;
|
//short POS_UPSEmergency=7;
|
||||||
|
|
||||||
short ON=1;
|
short ON=1;
|
||||||
@@ -430,27 +430,27 @@ ss PulseSequence {
|
|||||||
pvPut(IsttokOPSTATE);
|
pvPut(IsttokOPSTATE);
|
||||||
}
|
}
|
||||||
when(IsttokEmergency == ON) {
|
when(IsttokEmergency == ON) {
|
||||||
strcpy(msg, "Emergency from Starting");
|
strcpy(msg, "Starting: ->Emergency");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MAJOR, "%s\n",msg);
|
errlogSevPrintf(MAJOR, "%s\n",msg);
|
||||||
/* Pulse state change to Emergency*/
|
/* Pulse state change to Emergency*/
|
||||||
} state Emergency
|
} state Emergency
|
||||||
when (IsttokupsBatteryON == ON) {
|
when (IsttokupsBatteryON == ON) {
|
||||||
strcpy(msg, "Power UPS OB, Starting to Stopping");
|
strcpy(msg, "Starting: Power UPS OB, Starting to Stopping");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MAJOR, "%s\n",msg);
|
errlogSevPrintf(MAJOR, "%s\n",msg);
|
||||||
IsttokOPREQ = STOP;
|
IsttokOPREQ = STOP;
|
||||||
pvPut(IsttokOPREQ);
|
pvPut(IsttokOPREQ);
|
||||||
} state Stopping
|
} state Stopping
|
||||||
when (IsttokOPREQ == STOP) {
|
when (IsttokOPREQ == STOP) {
|
||||||
strcpy(msg, "State to Stopping");
|
strcpy(msg, "Starting: State to Stopping");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MINOR, "%s\n",msg);
|
errlogSevPrintf(MINOR, "%s\n",msg);
|
||||||
/* Pulse state change to Stopping */
|
/* Pulse state change to Stopping */
|
||||||
} state Stopping
|
} state Stopping
|
||||||
|
|
||||||
when (STARTINGSTATE == STRST_StartingEnd ) {
|
when (STARTINGSTATE == STRST_StartingEnd ) {
|
||||||
strcpy(msg, "State to Idle");
|
strcpy(msg, "Starting: State to Idle");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(NO_ALARM, "%s\n",msg);
|
errlogSevPrintf(NO_ALARM, "%s\n",msg);
|
||||||
/* Pulse state change to Idle*/
|
/* Pulse state change to Idle*/
|
||||||
@@ -470,7 +470,7 @@ ss PulseSequence {
|
|||||||
pvPut(IsttokProcReq);
|
pvPut(IsttokProcReq);
|
||||||
}
|
}
|
||||||
when (IsttokUpsShutdown == ON) {
|
when (IsttokUpsShutdown == ON) {
|
||||||
strcpy(msg, "Power Emergency SD, Idle to Stopping");
|
strcpy(msg, "Idle: UPS Power Emergency Shutdown. -> Stopping");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MAJOR, "%s\n",msg);
|
errlogSevPrintf(MAJOR, "%s\n",msg);
|
||||||
IsttokOPREQ = STOP;
|
IsttokOPREQ = STOP;
|
||||||
@@ -478,52 +478,97 @@ ss PulseSequence {
|
|||||||
} state Stopping
|
} state Stopping
|
||||||
|
|
||||||
when(IsttokEmergency == ON){
|
when(IsttokEmergency == ON){
|
||||||
strcpy(msg, "Emergency from Idle");
|
strcpy(msg, "Idle: ->Emergency");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MAJOR, "%s\n",msg);
|
errlogSevPrintf(MAJOR, "%s\n",msg);
|
||||||
/* Pulse state change to Emergency*/
|
/* Pulse state change to Emergency*/
|
||||||
} state 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) {
|
// pvStatus(IsttokTMPump1_Emergency) != pvStatOK || pvStatus(IsttokTMPump2_Emergency) != pvStatOK) {
|
||||||
/* Vacuum emergency: Pulse state change to Stopping */
|
/* Vacuum emergency: Pulse state change to Stopping */
|
||||||
/*IsttokOPREQ = STOP; State should recover from */
|
/*IsttokOPREQ = STOP; State should recover from */
|
||||||
/*pvPut(IsttokOPREQ);*/
|
/*pvPut(IsttokOPREQ);*/
|
||||||
//strcpy(sendMail, "Vacuum Emergency while Idle");
|
//strcpy(sendMail, "Vacuum Emergency while Idle");
|
||||||
strcpy(msg, "State Idle to Stopping");
|
strcpy(msg, "Idle: -> IdleLimbo");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MINOR, "%s\n", msg);
|
errlogSevPrintf(MINOR, "%s\n", msg);
|
||||||
sprintf(sendMail, "Vacuum Emergency while Idle, Rpump1 Pressure:%1.1e, TMP1 Adm. Pressure:%4.2e, TMP1 Emergency:%d",
|
//sprintf(sendMail, "Vacuum Emergency while Idle, Rpump1 Pressure:%1.1e, TMP1 Adm. Pressure:%4.2e, TMP1 Emergency:%d",
|
||||||
IsttokRPump1_Pressure, IsttokTMPump1_Pressure, IsttokTMPump1_Emergency);
|
// IsttokRPump1_Pressure, IsttokTMPump1_Pressure, IsttokTMPump1_Emergency);
|
||||||
pvPut(sendMail);
|
//pvPut(sendMail);
|
||||||
} state Stopping
|
} state IdleLimbo
|
||||||
|
|
||||||
when (IsttokOPREQ==STOP || IsttokTMPump1_ManualValve == OFF) {
|
when (IsttokOPREQ==STOP || IsttokTMPump1_ManualValve == OFF) {
|
||||||
/*Just to be sure */
|
/*Just to be sure */
|
||||||
// IsttokProcReq = STOP;
|
// IsttokProcReq = STOP;
|
||||||
// pvPut(IsttokProcReq);
|
// pvPut(IsttokProcReq);
|
||||||
|
|
||||||
strcpy(msg, "State to Stopping");
|
strcpy(msg, "Idle: State to Stopping");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MINOR, "%s\n",msg);
|
errlogSevPrintf(MINOR, "%s\n",msg);
|
||||||
/* Pulse state change to Stopping */
|
/* Pulse state change to Stopping */
|
||||||
} state Stopping
|
} state Stopping
|
||||||
|
|
||||||
when (IsttokProcReq==START && IsttokProcMode==CLEAN ) {
|
when (IsttokProcReq==START && IsttokProcMode==CLEAN ) {
|
||||||
strcpy(msg, "State to Clean");
|
strcpy(msg, "Idle: State to Clean");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(NO_ALARM, "%s\n",msg);
|
errlogSevPrintf(NO_ALARM, "%s\n",msg);
|
||||||
/* Pulse state change to Clean */
|
/* Pulse state change to Clean */
|
||||||
} state Clean
|
} state Clean
|
||||||
|
|
||||||
when (IsttokProcReq==START && IsttokProcMode==SHOT ) {
|
when (IsttokProcReq==START && IsttokProcMode==SHOT ) {
|
||||||
strcpy(msg, "State to WaitShot");
|
strcpy(msg, "Idle: State to WaitShot");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(NO_ALARM, "%s\n",msg);
|
errlogSevPrintf(NO_ALARM, "%s\n",msg);
|
||||||
/* Pulse state change to WaitShot */
|
/* Pulse state change to WaitShot */
|
||||||
} state 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 ***************************/
|
||||||
state Clean {
|
state Clean {
|
||||||
entry{
|
entry{
|
||||||
@@ -531,7 +576,7 @@ ss PulseSequence {
|
|||||||
pvPut(IsttokOPSTATE);
|
pvPut(IsttokOPSTATE);
|
||||||
}
|
}
|
||||||
when ((IsttokProcReq==STOP) && (CLEANINGSTATE == CLNST_NonCleaning)) {
|
when ((IsttokProcReq==STOP) && (CLEANINGSTATE == CLNST_NonCleaning)) {
|
||||||
strcpy(msg, "State from Clean to Idle");
|
strcpy(msg, "Clean: State to Idle");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(NO_ALARM, "%s\n",msg);
|
errlogSevPrintf(NO_ALARM, "%s\n",msg);
|
||||||
} state Idle
|
} state Idle
|
||||||
@@ -539,7 +584,7 @@ ss PulseSequence {
|
|||||||
when (IsttokOPREQ == STOP) {} state Stopping
|
when (IsttokOPREQ == STOP) {} state Stopping
|
||||||
|
|
||||||
when (IsttokupsBatteryON == ON) {
|
when (IsttokupsBatteryON == ON) {
|
||||||
strcpy(msg, "Power UPS OB, Clean to Idle");
|
strcpy(msg, "Clean: Power UPS Battery ON, -> Idle");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MAJOR, "%s\n",msg);
|
errlogSevPrintf(MAJOR, "%s\n",msg);
|
||||||
IsttokOPREQ = STOP;
|
IsttokOPREQ = STOP;
|
||||||
@@ -555,13 +600,13 @@ ss PulseSequence {
|
|||||||
/* Vacuum emergency: Pulse state change to Stopping */
|
/* Vacuum emergency: Pulse state change to Stopping */
|
||||||
IsttokOPREQ = STOP;
|
IsttokOPREQ = STOP;
|
||||||
pvPut(IsttokOPREQ);
|
pvPut(IsttokOPREQ);
|
||||||
strcpy(msg, "State to Stopping");
|
strcpy(msg, "Clean: State to Stopping");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MAJOR, "%s\n",msg);
|
errlogSevPrintf(MAJOR, "%s\n",msg);
|
||||||
} state Stopping
|
} state Stopping
|
||||||
|
|
||||||
when(IsttokEmergency == ON){
|
when(IsttokEmergency == ON){
|
||||||
strcpy(msg, "Emergency from Clean");
|
strcpy(msg, "Clean: Emergency from Clean");
|
||||||
pvPut(msg);
|
pvPut(msg);
|
||||||
errlogSevPrintf(MAJOR, "%s\n",msg);
|
errlogSevPrintf(MAJOR, "%s\n",msg);
|
||||||
/* Pulse state change to Emergency*/
|
/* 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
|
# autosave R5.3 Automatically generated - DO NOT MODIFY - 231205-121931
|
||||||
ISTTOK:central:PULSE-NUMBER.VAL 49831
|
ISTTOK:central:PULSE-NUMBER.VAL 51115
|
||||||
ISTTOK:central:LogMessage.VAL
|
ISTTOK:central:LogMessage.VAL
|
||||||
ISTTOK:central:LASTOPSTATE.VAL 0
|
ISTTOK:central:LASTOPSTATE.VAL 5
|
||||||
ISTTOK:central:OPREQ.VAL 0
|
ISTTOK:central:OPREQ.VAL 0
|
||||||
ISTTOK:central:PROCESS-MODE.VAL 1
|
ISTTOK:central:PROCESS-MODE.VAL 1
|
||||||
ISTTOK:central:CLEANINGMANMODE.VAL 1
|
ISTTOK:central:CLEANINGMANMODE.VAL 1
|
||||||
ISTTOK:central:Emergency-UserButton.VAL 0
|
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:Shot-TorPSCurrent 32
|
||||||
ISTTOK:central:RPump1-Pressure.HIGH 0.05
|
ISTTOK:central:RPump1-Pressure.HIGH 0.05
|
||||||
ISTTOK:central:RPump1-Pressure.HIHI 0.1
|
ISTTOK:central:RPump1-Pressure.HIHI 0.1
|
||||||
|
|||||||
Reference in New Issue
Block a user