Files
ISTTOK/epics/iocs/dsPICtemperature/ISTTOKApp/src/PulseSequenceExecution.stt
2019-11-26 11:20:06 +00:00

137 lines
3.2 KiB
Plaintext

/*======================================================================
*
* Project : ISTTOK slow Control
*
* Description : Pulse sequence State Machine
*
*
* Author : Bernardo Carvalho (IPFN-IST)
*
* Copyright (c) : (IPFN-IST)
* Created 25-Feb-2013
*
* SVN keywords
* $Date: 2013-03-04 12:22:41 +0000 (Mon, 04 Mar 2013) $
* $Revision: 4546 $
* $URL: http://metis.ipfn.ist.utl.pt/svn/cdaq/ISTTOK/Software/EPICS/serialPic/serialPicAPDriverApp/src/serialPicAPDriver.cpp $
*
-======================================================================*/
program PulseSequenceExecution
/* ISTTOK Array of Operating State PV - MBBI records */
short IsttokOPSTATE[1];
assign IsttokOPSTATE to {
"ISTTOK:central:OPSTATE"
};
monitor IsttokOPSTATE;
short POS_Stopped;
short POS_Starting;
short POS_Process;
short POS_Clean;
short POS_Wait-Shot;
short POS_Stopping;
/* ISTTOK Operation Request */
short IsttokOPREQ[1];
assign IsttokOPREQ to {
"ISTTOK:central:OPREQ",
// "45FPSC-0001-POS:AUTHORISATION"
};
monitor IsttokOPREQ;
/* Constants */
short ON;
short OFF;
short START;
short STOP;
short NO_ALARM;
short MINOR;
short MAJOR;
short INVALID;
/* Trace message record limited to 40 characters */
string msg;
assign msg to "ISTTOK:central:TraceMessage.VAL";
monitor msg;
int i;
long j;
/****************************************************************/
/* Pulse sequence State Set */
/****************************************************************/
ss PulseSequence {
/* State Set Init */
state Init {
entry {
/* Initialisation of constants and indexes */
POS_Stopped=0;
POS_Starting=1;
POS_Process=2;
POS_Clean=3;
POS_Wait-Shot=4;
POS_Stopping=5;
ON=1; OFF=0;
START=1; STOP=0;
NO_ALARM=0; MINOR=1; MAJOR=2; INVALID=3;
strcpy(msg, "Pulse Sequence entry");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
}
when (PulseSequenceOPSTATE[0] == POS_Stopped) {
strcpy(msg, "Pulse State is Stopped");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
} state Stopped
when (PulseSequenceOPSTATE[0] == POS_Starting) {
strcpy(msg, "Pulse State is Starting");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
} state Starting
/* State Set Stopped */
state Stopped {
when ((IsttokOPREQ[0]==START)) {
strcpy(msg, "Pulse State Starting");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/* Pulse state change to Starting */
PulseSequenceOPSTATE[0] = POS_Starting;
pvPut(PulseSequenceOPSTATE[0]);
} state Starting
}
/* State Set Starting */
state Starting {
when ((IsttokOPREQ[0]==START)) {
sleep(10);
strcpy(msg, "Pulse State is Stopped");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/* Pulse state change to Stopped */
PulseSequenceOPSTATE[0] = POS_Stopped;
pvPut(PulseSequenceOPSTATE[0]);
} state Stopped
when ((IsttokOPREQ[0]==STOP)) {
strcpy(msg, "Pulse State is Stopped");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/* Pulse state change to Stopped */
PulseSequenceOPSTATE[0] = POS_Stopped;
pvPut(PulseSequenceOPSTATE[0]);
} state Stopped
}
}