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

225 lines
5.4 KiB
Plaintext

/*======================================================================
*
* Project : ISTTOK slow Control
*
* File : $Id: IsttokSeqExec.stt 4620 2013-03-19 21:22:02Z gquintal $
* Description : Pulse sequence State Machine
*
*
* Author : Bernardo Carvalho (IPFN-IST)
*
* Copyright (c) : (IPFN-IST)
* Created 5-Mar-2013
*
* SVN keywords
* $Date: 2013-03-19 21:22:02 +0000 (Tue, 19 Mar 2013) $
* $Revision: 4620 $
* $URL: http://metis.ipfn.ist.utl.pt:8888/svn/cdaq/ISTTOK/Software/EPICS/ISTTOKcontrol/branches/quintal/ISTTOKApp/src/IsttokSeqExec.stt $
*
-======================================================================*/
program IsttokSeqExec
double v;
assign v to "{unit}:galium:test_ai";
monitor v;
/* ISTTOK Array of Operating State PV - MBBI records */
short IsttokOPSTATE[1];
assign IsttokOPSTATE to {
"{unit}:central:OPSTATE"
};
monitor IsttokOPSTATE;
/* ISTTOK Operation Request */
short IsttokOPREQ[1];
assign IsttokOPREQ to {
"{unit}:central:OPREQ"
};
monitor IsttokOPREQ;
/* ISTTOK Plasma Process Mode */
short IsttokProcMode;
assign IsttokProcMode to "{unit}:central:PROCESS-MODE";
monitor IsttokProcMode;
/* ISTTOK Plasma Process Request */
short IsttokProcReq;
assign IsttokProcReq to "{unit}:central:PROCESS-REQ";
monitor IsttokProcReq;
short POS_Stopped;
short POS_Starting;
short POS_Process;
short POS_Clean;
short POS_WaitShot;
short POS_Stopping;
/* Constants */
short ON;
short OFF;
short START;
short STOP;
short CLEAN;
short SHOT;
short NO_ALARM;
short MINOR;
short MAJOR;
short INVALID;
/* Trace message record limited to 40 characters */
string msg;
assign msg to "{unit}:central:TraceMessage.VAL";
monitor msg;
ss PulseSequence {
state init {
entry {
/* Initialisation of constants and indexes */
POS_Stopped =0;
POS_Starting=1;
POS_Process =2;
POS_Clean =3;
POS_WaitShot=4;
POS_Stopping=5;
ON=1; OFF=0;
START=1; STOP=0;
SHOT=1; CLEAN=0;
NO_ALARM=0; MINOR=1; MAJOR=2; INVALID=3;
strcpy(msg, "Pulse Sequence entry");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
}
when (delay(5)) {
printf("IsttokSeqExec: Startup delay over\n");
} state Stopped
}
/* 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 */
IsttokOPSTATE[0] = POS_Starting;
pvPut(IsttokOPSTATE[0]);
} state Starting
}
/* State Set Starting */
state Starting {
when ((IsttokOPREQ[0]==STOP)) {
strcpy(msg, "Pulse State to Stopping");
pvPut(msg);
errlogSevPrintf(MINOR, "%s\n",msg);
/* Pulse state change to Stopping */
IsttokOPSTATE[0] = POS_Stopping;
pvPut(IsttokOPSTATE[0]);
} state Stopping
when (delay(5.0)) {
strcpy(msg, "Pulse State to Process");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/* Pulse state change to Stopped */
IsttokOPSTATE[0] = POS_Process;
pvPut(IsttokOPSTATE[0]);
} state Process
}
/* State Set Process */
state Process {
when ((IsttokOPREQ[0]==STOP)) {
strcpy(msg, "Pulse State to Stopping");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/* Pulse state change to Stopping */
IsttokOPSTATE[0] = POS_Stopping;
pvPut(IsttokOPSTATE[0]);
} state Stopping
when ((IsttokProcReq==START) && (IsttokProcMode==CLEAN) ) {
strcpy(msg, "Pulse State to Clean");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/* Pulse state change to Clean */
IsttokOPSTATE[0] = POS_Clean;
pvPut(IsttokOPSTATE[0]);
} state Clean
when ((IsttokProcReq==START) && (IsttokProcMode==SHOT) ) {
strcpy(msg, "Pulse State to WaitShot");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/* Pulse state change to WaitShot */
IsttokOPSTATE[0] = POS_WaitShot;
pvPut(IsttokOPSTATE[0]);
} state WaitShot
}
/* State Set Clean */
state Clean {
when ((IsttokOPREQ[0]==STOP) || (IsttokProcReq==STOP)) {
strcpy(msg, "Pulse State to Process");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/*Just to be sure*/
IsttokProcReq = STOP;
pvPut(IsttokProcReq);
/* Pulse state change to Process */
IsttokOPSTATE[0] = POS_Process;
pvPut(IsttokOPSTATE[0]);
} state Process
}
/* State Set WaitShot */
state WaitShot {
when ((IsttokOPREQ[0]==STOP) || (IsttokProcReq==STOP)) {
strcpy(msg, "Pulse State to Process");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/*Just to be sure*/
IsttokProcReq = STOP;
pvPut(IsttokProcReq);
/* Pulse state change to Process */
IsttokOPSTATE[0] = POS_Process;
pvPut(IsttokOPSTATE[0]);
} state Process
}
/* State Set Stopping */
state Stopping {
when (delay (5.0)) {
strcpy(msg, "Pulse State to Stopped");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokOPREQ[0]=STOP;
pvPut(IsttokOPREQ[0]);
/* Pulse state change to Stopping */
IsttokOPSTATE[0] = POS_Stopping;
pvPut(IsttokOPSTATE[0]);
/* Pulse state change to Stopped */
IsttokOPSTATE[0] = POS_Stopped;
pvPut(IsttokOPSTATE[0]);
} state Stopped
}
}