Generation working and Compilation of MARTe components
This commit is contained in:
@@ -0,0 +1,463 @@
|
||||
**********
|
||||
* EXAMLE *
|
||||
**********
|
||||
|
||||
State1 // RT application state name
|
||||
==========
|
||||
1. // Numbered GAMs in order of execution
|
||||
if (signal_A == 1) // Execution function of the GAM
|
||||
{
|
||||
set signal_B = 3
|
||||
change state to State2
|
||||
}
|
||||
----------
|
||||
|
||||
|
||||
|
||||
*****************
|
||||
* RT APP STATES *
|
||||
*****************
|
||||
|
||||
WaitStandby
|
||||
==========
|
||||
1. // DONE
|
||||
if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If a Gyrotron is not selected by PLC.
|
||||
{
|
||||
change state to Disabled
|
||||
}
|
||||
----------
|
||||
2. // DONE
|
||||
if (EC-GN-P01-GPF:PLC4110-YTS-ST1R == 1) //If STANDBY signal come from PLC, start Coil&Fil PSs.
|
||||
{
|
||||
// TODO should these signals be set only once every time this state is entered?
|
||||
set signal EC-GN-P01-GAF-MCPS:PSU2120-ACT-SP = 1
|
||||
set signal EC-GN-P01-GAF-GCPS:PSU2130-ACT-SP = 1
|
||||
set signal EC-GN-P01-GAF-FHPS:PSU2610-AUTO-START = 1
|
||||
}
|
||||
----------
|
||||
3. // DONE
|
||||
if (EC-GN-P01-GAF-MCPS:PSU2120-ACT-RB == 1
|
||||
AND
|
||||
EC-GN-P01-GAF-MCPS:PSU2120-CURR-MON > 0
|
||||
AND
|
||||
EC-GN-P01-GAF-FHPS:PSU2610-OUTON-RB == 1
|
||||
AND
|
||||
EC-GN-P01-GAF-FHPS:PSU2610-CURR-RB > 0)
|
||||
{
|
||||
change state to Offline
|
||||
}
|
||||
----------
|
||||
|
||||
|
||||
|
||||
Disabled
|
||||
==========
|
||||
1. // DONE
|
||||
if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 1)
|
||||
{
|
||||
change state to WaitStandby
|
||||
}
|
||||
----------
|
||||
|
||||
|
||||
|
||||
Offline
|
||||
==========
|
||||
1. // DONE
|
||||
if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron selection is turned off.
|
||||
{
|
||||
change state to Disabled
|
||||
}
|
||||
----------
|
||||
2. // DONE
|
||||
// If READY signal come from PLC is equal 1, app starts CCPS.
|
||||
if (EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1
|
||||
AND
|
||||
EC-GN-P01-GAF-CCPS:PLC4110-YON-CCPS1 == 1)
|
||||
{
|
||||
// TODO should this signal be set only once every time this state is entered?
|
||||
set signal EC-GN-P01-GAF-CCPS:PSU2320-OUTON-SP = 1
|
||||
}
|
||||
----------
|
||||
3. // DONE (with a temporary signal that needs to be changed when the record is added)
|
||||
// TODO: Do we also have to check, that GAM 2. executed? So do we also have to check that EC-GN-P01-GPF:PLC4110-YTS-ST2R == 1?
|
||||
if (EC-GN-P01-GAF-CCPS:PSU2320-STAT == 1) // TODO: there is no signal named EC-GN-P01-GAF-CCPS:PSU2320-STAT
|
||||
// MEMO: I need add this record to check whether CCPS in running or stop.
|
||||
{
|
||||
change state to WaitPermit
|
||||
}
|
||||
----------
|
||||
4. // DONE
|
||||
// Wait CSV-LOAD trigger. When the app detect it, save data into the app.
|
||||
if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1)
|
||||
{
|
||||
open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME)
|
||||
load time series data into memory
|
||||
write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF) // TODO do we realy write first data here or do we wait for PreHeating?
|
||||
set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1 // TODO do we write 1 here?
|
||||
If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR. // TODO there is no signal named EC-GN-P01-GAF:STAT-CSV-ERROR
|
||||
}
|
||||
|
||||
|
||||
WaitPermit
|
||||
==========
|
||||
1. // DONE
|
||||
if (EC-GN-P01-GAF:PLC4110-CON-OPGY1 == 0) //If Gyrotron is un-selected.
|
||||
{
|
||||
change state to Disabled
|
||||
}
|
||||
----------
|
||||
2. // DONE
|
||||
if (EC-GN-P01-GAF:STAT-PREP-MODE == 1
|
||||
AND
|
||||
EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1)
|
||||
{
|
||||
change state to PreHeating
|
||||
}
|
||||
----------
|
||||
3. // DONE
|
||||
if (EC-GN-P01-GAF:STAT-PREP-MODE == 0
|
||||
AND
|
||||
EC-GN-P01-GAF:PLC4110-CON-GY1PRM == 1)
|
||||
{
|
||||
change state to WaitReady
|
||||
}
|
||||
----------
|
||||
4. // DONE
|
||||
if (EC-GN-P01-GAF:STAT-CSV-LOAD == 1)
|
||||
{
|
||||
open csv file (file name: EC-GN-P01-GAF:STAT-CSV-NAME)
|
||||
load time series data into memory
|
||||
write data into EPICS waveform PSs.(EC-GN-P01-???:STAT-PREP-WF)
|
||||
set signal EC-GN-P01-GAF:STAT-CSV-LOADED = 1
|
||||
If there is error, write EC-GN-P01-GAF:STAT-CSV-ERROR.
|
||||
}
|
||||
|
||||
PreHeating
|
||||
==========
|
||||
1. // DONE
|
||||
every 10 ms do
|
||||
{
|
||||
else
|
||||
{
|
||||
// TODO do we use float32 for the type of waveform signals?
|
||||
// TODO is this the right order of columns? Time point is in column 1.
|
||||
// TODO on what signal do we write time?
|
||||
set signal EC-GN-P01-PB1F:PSU1000-EREF = setpoint column 2
|
||||
set signal EC-GN-P01-PA1F:PSU3000-EREF = setpoint column 3 // TODO there are two EC-GN-P01-PA1F:PSU3000-EREF signals. One ending with -P and one with -N.
|
||||
set signal EC-GN-P01-GAF-MCPS:PSU2120-TRG-CURR-SET = setpoint column 4
|
||||
set signal EC-GN-P01-GAF-GCPS:PSU2130-TRG-CURR-SET = setpoint column 5
|
||||
set signal EC-GN-P01-GAF-FHPS:PSU2320-EREF = setpoint column 6
|
||||
}
|
||||
}
|
||||
----------
|
||||
2. // DONE
|
||||
if (time == 0)
|
||||
{
|
||||
change state to WaitReady
|
||||
}
|
||||
----------
|
||||
|
||||
|
||||
WaitReady
|
||||
==========
|
||||
1. // DONE
|
||||
if (EC-GN-P01-PB1F:PSU1000-YSTA == 1
|
||||
AND
|
||||
EC-GN-P01-PA1F:PSU3000-YSTA == 1)
|
||||
{
|
||||
change state to WaitHVON
|
||||
}
|
||||
----------
|
||||
|
||||
|
||||
WaitHVON
|
||||
==========
|
||||
1. // DONE
|
||||
if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)// Check ON signal from PLC. This signal come when PLC check the operation operation possible conditions.
|
||||
{
|
||||
change state to HVArming
|
||||
}
|
||||
----------
|
||||
2. // DONE
|
||||
if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 1)
|
||||
{
|
||||
start HVON timer
|
||||
}
|
||||
----------
|
||||
|
||||
|
||||
|
||||
HVArming //HVArming is a state to startup HV generation in APS and BPS.
|
||||
==========
|
||||
1.
|
||||
at specified time // TODO: Where do I get this specified time? And is it a countdown time or what?
|
||||
// MEMO: Time is specified by PVs (EC-GN-P01-PB1F:STAT-DT-HVON). When app detect HVON from PLC, it is t=0.
|
||||
{
|
||||
set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 1
|
||||
}
|
||||
----------
|
||||
2.
|
||||
at specified time // TODO: Where do I get this specified time? And is it a countdown time or what?
|
||||
// MEMO: Time is specified by PVs (EC-GN-P01-PA1F:STAT-DT-HVON)
|
||||
{
|
||||
set signal EC-GN-P01-PA1F:PSU3000-CON-HV = 1
|
||||
}
|
||||
----------
|
||||
3.
|
||||
if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1
|
||||
AND
|
||||
EC-GN-P01-PA1F:PSU3000-CON-HV == 1
|
||||
AND
|
||||
EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) // MEMO: Both HV PVs are 1. i.e.Both PSs are charged HV. and is in async mode.
|
||||
{
|
||||
change state to HVArmed
|
||||
}
|
||||
----------
|
||||
4.
|
||||
if (EC-GN-P01-PB1F:PSU1000-CON-HV == 1
|
||||
AND
|
||||
EC-GN-P01-PA1F:PSU3000-CON-HV == 1
|
||||
AND
|
||||
EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) // MEMO: HVPS HVs are ON and is in SYNC mode.
|
||||
{
|
||||
Change state to HVArmedESDN
|
||||
}
|
||||
----------
|
||||
5.
|
||||
count up elapsed time (time from HVON detection)
|
||||
Write time to EC-GN-P01-GAF:STAT-ELAPSED
|
||||
|
||||
|
||||
HVArmed
|
||||
==========
|
||||
1.
|
||||
if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0) // TODO: when do we go from HVArmed to Offline?
|
||||
// MEMO: move to Offline when ON signal from PLC is turned off.
|
||||
{
|
||||
change state to Offline
|
||||
}
|
||||
----------
|
||||
2.
|
||||
// TODO: "(Entry) Write EC-GN-P01-GAF:PCF4210-YTS-GA1" What does Entry mean? Does it mean to do something
|
||||
// only on the first cycle when we enter this state? What do I write to signal EC-GN-P01-GAF:PCF4210-YTS-GA1?
|
||||
// MEMO: EC-GN-P01-GAF:PCF4210-YTS-GA1 is a PV that fast controller notifies Gyrotron operation state to PLC.
|
||||
// When enter the HVArmed state, App writes 1 to this EPICS PV.
|
||||
----------
|
||||
3.
|
||||
if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionBPS?
|
||||
// MEMO: If MHVPS HV is turned ON first, goto this state.
|
||||
{
|
||||
change state to HVInjectionBPS
|
||||
}
|
||||
----------
|
||||
4.
|
||||
if (EC-GN-P01-PMF:PSU0000-CON-SW == 1) // TODO: when do we go from HVArmed to HVInjectionMHVPS?
|
||||
// MEMO: If BPS HV is turned ON first, goto this state.
|
||||
{
|
||||
change state to HVInjectionMHVPS
|
||||
}
|
||||
----------
|
||||
5.
|
||||
count up elapsed time (time from HVON detection)
|
||||
Write time to EC-GN-P01-GAF:STAT-ELAPSED
|
||||
----------
|
||||
6.
|
||||
if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 1) //When SYNC mode turned ON.
|
||||
{
|
||||
change state to HVArmedESDN
|
||||
}
|
||||
----------
|
||||
|
||||
HVArmedESDN // Start ESDN command, waveform subscription.
|
||||
==========
|
||||
1.
|
||||
if (EC-GN-P01-GPF:PLC4110-YTS-ST3R == 0)
|
||||
{
|
||||
change state to Offline
|
||||
}
|
||||
----------
|
||||
2.
|
||||
if (EC-GN-P01-PB1F:PSU1000-CON-SW == 1)
|
||||
{
|
||||
change state to HVInjectionBPSESDN
|
||||
}
|
||||
----------
|
||||
3.
|
||||
if (EC-GN-P01-PMF:PSU0000-CON-SW == 1)
|
||||
{
|
||||
change state to HVInjectionMHVPSESDN
|
||||
}
|
||||
----------
|
||||
4.
|
||||
count up elapsed time (time from HVON detection)
|
||||
Write time to EC-GN-P01-GAF:STAT-ELAPSED
|
||||
----------
|
||||
6.
|
||||
if (EC-GN-P01-GPF::PLC4110-YSTA-MPSS == 0) //When SYNC mode turned ON.
|
||||
{
|
||||
change state to HVArmed
|
||||
}
|
||||
----------
|
||||
|
||||
HVInjectionBPS
|
||||
==========
|
||||
HVInjectionMHVPS
|
||||
==========
|
||||
1.
|
||||
// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC.
|
||||
Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2.
|
||||
----------
|
||||
// TODO: Following questions/states are for ALL of the above states
|
||||
2. (Exist in HVInjection BPS)
|
||||
set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1 // TODO when do we set this signal
|
||||
// MEMO: Countdown time for EC-GN-P01-PA1F:STAT-DT-SWON
|
||||
----------
|
||||
2. (Exist in HVInjection MHVPS)
|
||||
set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1 // TODO when do we set this signal
|
||||
// MEMO: Countdown time for EC-GN-P01-PB1F:STAT-DT-SWON
|
||||
----------
|
||||
3.
|
||||
set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1 // TODO when do we set this signal
|
||||
// MEMO: Countdown time for EC-GN-P01-PMF:STAT-DT-SWON
|
||||
----------
|
||||
4.
|
||||
// TODO when to switch to RFON?
|
||||
// MEMO: Go to RFON state when All switch PVs are 1. and the mode is async.
|
||||
if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND
|
||||
EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND
|
||||
EC-GN-P01-PMF:PSU0000-CON-SW == 1)
|
||||
{
|
||||
change state to RFON
|
||||
}
|
||||
----------
|
||||
5.
|
||||
count up elapsed time (time from HVON detection)
|
||||
Write time to EC-GN-P01-GAF:STAT-ELAPSED
|
||||
----------
|
||||
|
||||
HVInjectionESDN
|
||||
==========
|
||||
1.
|
||||
// MEMO: Write Gyrotron state PV (HVInjection) to notify PLC.
|
||||
Write 1 to EC-GN-P01-GAF:PCF4210-YTS-GA2.
|
||||
----------
|
||||
2.
|
||||
set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 1
|
||||
// Write 1 when ESDN command give a command.
|
||||
----------
|
||||
3.
|
||||
set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 1
|
||||
// Write 1 when ESDN command give a command.
|
||||
----------
|
||||
4.
|
||||
set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1
|
||||
// Write 1 when ESDN command give a command.
|
||||
----------
|
||||
5.
|
||||
// TODO when to switch to RFONESDN?
|
||||
// MEMO: Go to RFON state when All switch PVs are 1. and the mode is sync.i,e. change from HVInjectionxxxESDN
|
||||
if (EC-GN-P01-PA1F:PSU3000-CON-SW == 1 AND
|
||||
EC-GN-P01-PB1F:PSU1000-CON-SW == 1 AND
|
||||
EC-GN-P01-PMF:PSU0000-CON-SW == 1)
|
||||
{
|
||||
change state to RFONESDN
|
||||
}
|
||||
----------
|
||||
|
||||
RFON
|
||||
==========
|
||||
// TODO is this correct?
|
||||
1.
|
||||
// This only executes on the last cycle before we move to HVArmed
|
||||
if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN)
|
||||
{
|
||||
set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0
|
||||
set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0
|
||||
set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0
|
||||
}
|
||||
----------
|
||||
2.
|
||||
if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= EC-GN-P01-GAF:STAT-DT-SHOTLEN)
|
||||
{
|
||||
change state to HVArmed
|
||||
}
|
||||
----------
|
||||
3.
|
||||
count up elapsed time (time from HVON detection)
|
||||
Write time to EC-GN-P01-GAF:STAT-ELAPSED
|
||||
----------
|
||||
4.
|
||||
When enter the state beam-on timer is set to 0.
|
||||
count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME
|
||||
----------
|
||||
|
||||
|
||||
|
||||
RFONESDN
|
||||
==========
|
||||
// TODO is this correct?
|
||||
// MEMO: In the ESDN sync mode, HVPS turned off by ESDN packet.
|
||||
// In both mode, there is mode_limit which is given by (EC-GN-P01-GPF:PLC4110-YTS-MD1,2,3,4).
|
||||
1.
|
||||
// This only executes on the last cycle before we move to HVArmed
|
||||
if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit?
|
||||
{
|
||||
set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0
|
||||
set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0
|
||||
set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0
|
||||
}
|
||||
----------
|
||||
2.
|
||||
if (EC-GN-P01-GAF:STAT-BEAMON-TIME >= t_mode_limit) // TODO: where do I get t_mode_limit?
|
||||
{
|
||||
change state to HVArmedESDN
|
||||
}
|
||||
----------
|
||||
3.
|
||||
Subscribe ESDN commands. When GAM detect Beam-off command. It turn all HVPS SW OFF.
|
||||
And change state to HVArmedESDN
|
||||
----------
|
||||
4.
|
||||
count up elapsed time (time from HVON detection)
|
||||
Write time to EC-GN-P01-GAF:STAT-ELAPSED
|
||||
----------
|
||||
5.
|
||||
When enter the state beam-on timer is set to 0.
|
||||
count up beam-on time. write the time into EC-GN-P01-GAF:STAT-BEAMON-TIME
|
||||
----------
|
||||
|
||||
|
||||
Error
|
||||
==========
|
||||
1.
|
||||
// Only execute on the first cycle after entering this state
|
||||
if (first)
|
||||
{
|
||||
set first = false
|
||||
|
||||
set signal EC-GN-P01-PA1F:PUS3000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA1F:PUS3000-CON-HV
|
||||
set signal EC-GN-P01-PA1F:PSU3000-CON-SW = 0
|
||||
set signal EC-GN-P01-PB1F:PSU1000-CON-HV = 0
|
||||
set signal EC-GN-P01-PB1F:PSU1000-CON-SW = 0
|
||||
set signal EC-GN-P01-PMF:PSU0000-CON-SW = 0
|
||||
// MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action.
|
||||
set signal EC-GN-P01-PA2F:PUS4000-CON-HV = 0 // TODO: there is no signal named EC-GN-P01-PA2F:PUS4000-CON-HV
|
||||
set signal EC-GN-P01-PA2F:PSU4000-CON-SW = 0 // TODO: signal EC-GN-P01-PA2F:PSU4000-CON-SW missing in configuration file
|
||||
set signal EC-GN-P01-PB2F:PSU2000-CON-HV = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-HV missing in configuration file
|
||||
set signal EC-GN-P01-PB2F:PSU2000-CON-SW = 0 // TODO: signal EC-GN-P01-PB2F:PSU2000-CON-SW missing in configuration file
|
||||
|
||||
set signal EC-GN-P01-PMF:PSU0000-CON-SW = 1
|
||||
set signal EC-GN-P01-PA1F:PSU3000-CTRP = 1
|
||||
set signal EC-GN-P01-PB1F:PSU1000-CTRP = 1
|
||||
// MEMO: PA2F and PB2F are component type for gyrotron B. I will remove following action.
|
||||
set signal EC-GN-P01-PA2F:PSU4000-CTRP = 1 // TODO: signal EC-GN-P01-PA2F:PSU4000-CTRP missing in configuration file
|
||||
set signal EC-GN-P01-PB2F:PSU1000-CTRP = 1 // TODO: there is no signal named EC-GN-P01-PB2F:PSU1000-CTRP
|
||||
}
|
||||
----------
|
||||
2.
|
||||
if (EC-GN-P01-GPF:STAT-RST-FLT == 1 && ) // TODO: when do we go to Offline state?
|
||||
{
|
||||
change state to Offline
|
||||
}
|
||||
----------
|
||||
Reference in New Issue
Block a user