137 lines
3.2 KiB
Plaintext
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
|
|
}
|
|
} |