Checking relay output

This commit is contained in:
Bernardo Carvalho
2021-12-09 15:07:43 +00:00
parent 2eeafe3581
commit 3813c99704
6 changed files with 225 additions and 140 deletions

View File

@@ -228,9 +228,9 @@ record(calc, "$(P)$(R)Emergency" ) {
###############
###############
#############################
# ROTARY1 PUMP #
#############################
###################################
# ROTARY1 PUMP Relay 5 NC #
###################################
record( bo, "$(P)$(R)RPump1-Motor" ) {
field(DESC,"Power to Rotatory Pump 1. Relay 5")
field(OUT, "$(P)$(R)PCF8574:60:REGISTER.B0 PP" )
@@ -240,9 +240,9 @@ record( bo, "$(P)$(R)RPump1-Motor" ) {
field(ZSV,"MINOR")
}
#############################
# ROTARY1 VALVE #
#############################
####################################
# ROTARY1 VALVE Relay 4 NC #
####################################
record( bo, "$(P)$(R)RPump1-Valve" ) {
field(DESC,"Abre a valvula da bomba rot. Relay 4")
field(OUT, "$(P)$(R)PCF8574:60:REGISTER.B1 PP" )

View File

@@ -54,9 +54,10 @@ record( mbbiDirect, "$(P)$(R)PCF8574:57:REGISTER:READ" ) {
field(FLNK, "$(P)$(R)PCF8574:57:REGISTER:READ:FNOUT")
}
#####################################################
# ### Read/Write pcf8574 address 0x3c=60 register ### #
###################################################
################################################################
# ### Read/Write pcf8574 address 0x3c=60 register #
# I2C power up with output at 1 (Relay coils are de-energized)#
################################################################
record( mbboDirect, "$(P)$(R)PCF8574:60:REGISTER") {
field( DTYP, "stream")
field( OUT, "@pcf8574.proto wReg(60) $(BUS)")

View File

@@ -21,6 +21,7 @@ record(mbbi, "$(P)$(R)OPSTATE") {
field(FRVL, "4")
field(FVVL, "5")
field(SXVL, "6")
field(SVVL, "7")
field(ZRST, "Stopped")
field(ONST, "Starting")
field(TWST, "Idle")
@@ -28,6 +29,7 @@ record(mbbi, "$(P)$(R)OPSTATE") {
field(FRST, "WaitShot")
field(FVST, "Stopping")
field(SXST, "Emergency")
field(SVST, "UPSEmergency")
field(VAL, "0")
}
record(mbbo, "$(P)$(R)LASTOPSTATE") {
@@ -40,6 +42,7 @@ record(mbbo, "$(P)$(R)LASTOPSTATE") {
field(FRVL, "4")
field(FVVL, "5")
field(SXVL, "6")
field(SVVL, "7")
field(ZRST, "Stopped")
field(ONST, "Starting")
field(TWST, "Idle")
@@ -47,6 +50,7 @@ record(mbbo, "$(P)$(R)LASTOPSTATE") {
field(FRST, "WaitShot")
field(FVST, "Stopping")
field(SXST, "Emergency")
field(SVST, "UPSEmergency")
# field(VAL, "0")
}

View File

@@ -44,17 +44,17 @@ short CLNST_Cleaning5 = 5;
short WSHTST_NonShoting = 0;
short WSHTST_WaitTrg = 1;
short WSHTST_Shoting2 = 2;
short WSHTST_Shoting3 = 3;
short WSHTST_Shoting4 = 4;
short WSHTST_Shoting5 = 5;
short WSHTST_Shoting6 = 6;
short WSHTST_Shoting7 = 7;
short WSHTST_Shoting8 = 8;
short WSHTST_Shoting9 = 9;
short WSHTST_Shoting10 = 10;
short WSHTST_Shoting11 = 11;
short WSHTST_Shoting12 = 12;
short WSHTST_Shooting2 = 2;
short WSHTST_Shooting3 = 3;
short WSHTST_Shooting4 = 4;
short WSHTST_Shooting5 = 5;
short WSHTST_Shooting6 = 6;
short WSHTST_Shooting7 = 7;
short WSHTST_Shooting8 = 8;
short WSHTST_Shooting9 = 9;
short WSHTST_Shooting10 = 10;
short WSHTST_Shooting11 = 11;
short WSHTST_Shooting12 = 12;
short WSHTST_ShotEnd = 13;
short STPST_NonStopping = 0;
@@ -71,6 +71,7 @@ short POS_Clean =3;
short POS_WaitShot=4;
short POS_Stopping=5;
short POS_Emergency=6;
short POS_UPSEmergency=7;
short ON=1;
short OFF=0;
@@ -426,7 +427,7 @@ ss PulseSequence {
IsttokOPREQ = STOP;
pvPut(IsttokOPREQ);
/* State change to Stopping */
IsttokOPSTATE = POS_Stopping;
IsttokOPSTATE = POS_UPSEmergency;
pvPut(IsttokOPSTATE);
} state Stopping
@@ -517,15 +518,16 @@ ss PulseSequence {
pvPut(IsttokOPSTATE);
}
when (IsttokupsBatteryON == ON) {
strcpy(msg, "Power Emergency, go to Stopping");
strcpy(msg, "Power Emergency, go to UPSEmergency");
pvPut(msg);
errlogSevPrintf(MAJOR, "%s\n",msg);
IsttokOPREQ = STOP;
pvPut(IsttokOPREQ);
/* State change to Stopping */
IsttokOPSTATE = POS_Stopping;
/* State change to UPSEmergency */
IsttokOPSTATE = POS_UPSEmergency;
pvPut(IsttokOPSTATE);
} state Stopping
} state UpsEmergency
when(IsttokEmergency == ON){
strcpy(msg, "Emergency from WaitShot");
pvPut(msg);
@@ -558,6 +560,21 @@ ss PulseSequence {
state Stopping {
entry{
/*Just to be sure */
IsttokShotShot_TorPSDisable = PCF_RELAY_OFF;
pvPut(IsttokShotShot_TorPSDisable);
IsttokShotCapBank_Charge = PCF_RELAY_OFF;
pvPut(IsttokShotCapBank_Charge);
IsttokShotCapBank_Discharge = PCF_RELAY_OFF;
pvPut(IsttokShotCapBank_Discharge);
IsttokShotGasIS_Valves = PCF_RELAY_OFF;
pvPut(IsttokShotGasIS_Valves);
IsttokShotVVessel_Filament = PCF_RELAY_OFF;
pvPut(IsttokShotVVessel_Filament);
IsttokProcReq = STOP;
pvPut(IsttokProcReq);
@@ -655,9 +672,72 @@ ss PulseSequence {
pvPut(IsttokOPSTATE);
} state Stopped
}
/*State UpsEmergency*/
state UpsEmergency {
entry {
strcpy(msg, "Emergency Toroidal Shot Disable");
errlogSevPrintf(MAJOR, "%s\n",msg);
IsttokShotShot_TorPSDisable = PCF_RELAY_OFF;
pvPut(IsttokShotShot_TorPSDisable);
strcpy(msg, "EMERGENCY: CAPBANK Charge OFF");
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokShotCapBank_Charge = PCF_RELAY_OFF;
pvPut(IsttokShotCapBank_Charge);
strcpy(msg, "EMERGENCY: CAPBANK CrowBar Close");
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokShotCapBank_Discharge = PCF_RELAY_OFF;
pvPut(IsttokShotCapBank_Discharge);
strcpy(msg, "EMERGENCY: GIS Valves CLOSE");
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokShotGasIS_Valves = PCF_RELAY_OFF;
pvPut(IsttokShotGasIS_Valves);
strcpy(msg, "UPS EMERGENCY: Filament OFF");
pvPut(msg);
errlogSevPrintf(MAJOR, "%s\n",msg);
IsttokShotVVessel_Filament = PCF_RELAY_OFF;
pvPut(IsttokShotVVessel_Filament);
}
when (IsttokupsBatteryON == ON) {
/* Pulse state change to Stopping */
strcpy(msg, "State to Stopping");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokProcReq = STOP;
pvPut(IsttokProcReq);
IsttokOPSTATE = POS_Stopping;
pvPut(IsttokOPSTATE);
} state Stopping
when (delay(6.0) && (IsttokupsBatteryON == OFF) && (IsttokOPSTATE == POS_Idle)){
/* Pulse state change to Idle */
strcpy(msg, "State to Idle");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokOPSTATE = POS_Idle;
pvPut(IsttokOPSTATE);
} state Idle
/*
when (delay(6.0) && (IsttokupsBatteryON == OFF) &&
((IsttokOPSTATE == POS_Starting)) || (IsttokOPSTATE == POS_Stopping)){
// TODO Check these 2 transictions
strcpy(msg, "State to Stopping");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokOPREQ = STOP;
pvPut(IsttokOPREQ);
// Pulse state change to Stopping
IsttokOPSTATE = POS_Stopping;
pvPut(IsttokOPSTATE);
} state Stopping
*/
}
}
/* Starting State Set */
/*********** Starting SUB-State Set ************/
ss StartingSequence {
state NonStarting {
entry {
@@ -960,15 +1040,15 @@ ss ShotSequence {
pvPut(msg);
IsttokShotCountdown = -70;
pvPut(IsttokShotCountdown);
WSHOTINGSTATE = WSHTST_Shoting2;
WSHOTINGSTATE = WSHTST_Shooting2;
pvPut(WSHOTINGSTATE);
PulseNumber +=1;
pvPut(PulseNumber);
} state Shoting2
} state Shooting2
}
state Shoting2 {
state Shooting2 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting 2 Out");
strcpy(msg, "Shooting 2 Out");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
} state ShotWaitTrg
@@ -988,13 +1068,13 @@ ss ShotSequence {
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokShotLab_WarningLight = PCF_RELAY_ON;
pvPut(IsttokShotLab_WarningLight);
WSHOTINGSTATE = WSHTST_Shoting3;
WSHOTINGSTATE = WSHTST_Shooting3;
pvPut(WSHOTINGSTATE);
} state Shoting3
} state Shooting3
}
state Shoting3 {
state Shooting3 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting3 Out");
strcpy(msg, "Shooting3 Out");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
} state ShotWaitTrg
@@ -1004,26 +1084,26 @@ ss ShotSequence {
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokShotGasIS_Valves = PCF_RELAY_ON;
pvPut(IsttokShotGasIS_Valves);
WSHOTINGSTATE = WSHTST_Shoting4;
WSHOTINGSTATE = WSHTST_Shooting4;
pvPut(WSHOTINGSTATE);
} state Shoting4
} state Shooting4
}
state Shoting4 {
state Shooting4 {
when (IsttokOPSTATE != POS_WaitShot ) {
strcpy(msg, "Shoting4 Out");
strcpy(msg, "Shooting4 Out");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
when (IsttokShotCountdown == -59) {
WSHOTINGSTATE = WSHTST_Shoting5;
WSHOTINGSTATE = WSHTST_Shooting5;
pvPut(WSHOTINGSTATE);
} state Shoting5
} state Shooting5
}
state Shoting5 {
state Shooting5 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting5 Out");
strcpy(msg, "Shooting5 Out");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
WSHOTINGSTATE = WSHTST_NonShoting;
@@ -1035,13 +1115,13 @@ ss ShotSequence {
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokShotCapBank_Charge = PCF_RELAY_ON;
pvPut(IsttokShotCapBank_Charge);
WSHOTINGSTATE = WSHTST_Shoting6;
WSHOTINGSTATE = WSHTST_Shooting6;
pvPut(WSHOTINGSTATE);
} state Shoting6
} state Shooting6
}
state Shoting6 {
state Shooting6 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting6 Out");
strcpy(msg, "Shooting6 Out");
pvPut(msg);
errlogSevPrintf(MINOR, "%s\n",msg);
WSHOTINGSTATE = WSHTST_NonShoting;
@@ -1053,13 +1133,13 @@ ss ShotSequence {
errlogSevPrintf(NO_ALARM, "%s\n", msg);
IsttokShotCapBank_Charge = PCF_RELAY_OFF;
pvPut(IsttokShotCapBank_Charge);
WSHOTINGSTATE = WSHTST_Shoting7;
WSHOTINGSTATE = WSHTST_Shooting7;
pvPut(WSHOTINGSTATE);
} state Shoting7
} state Shooting7
}
state Shoting7 {
state Shooting7 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting7 Out");
strcpy(msg, "Shooting7 Out");
pvPut(msg);
errlogSevPrintf(MINOR, "%s\n",msg);
WSHOTINGSTATE = WSHTST_NonShoting;
@@ -1076,13 +1156,13 @@ ss ShotSequence {
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokShotVVessel_Filament = PCF_RELAY_ON;
pvPut(IsttokShotVVessel_Filament);
WSHOTINGSTATE = WSHTST_Shoting8;
WSHOTINGSTATE = WSHTST_Shooting8;
pvPut(WSHOTINGSTATE);
} state Shoting8
} state Shooting8
}
state Shoting8 {
state Shooting8 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting8 Out");
strcpy(msg, "Shooting8 Out");
pvPut(msg);
errlogSevPrintf(MINOR, "%s\n",msg);
WSHOTINGSTATE = WSHTST_NonShoting;
@@ -1095,13 +1175,13 @@ ss ShotSequence {
// PS Trigger Pulse
IsttokShotShot_TorPSTrigger = ON;
pvPut(IsttokShotShot_TorPSTrigger);
WSHOTINGSTATE = WSHTST_Shoting9;
WSHOTINGSTATE = WSHTST_Shooting9;
pvPut(WSHOTINGSTATE);
} state Shoting9
} state Shooting9
}
state Shoting9 {
state Shooting9 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting9 Out");
strcpy(msg, "Shooting9 Out");
pvPut(msg);
errlogSevPrintf(MINOR, "%s\n",msg);
WSHOTINGSTATE = WSHTST_NonShoting;
@@ -1111,13 +1191,13 @@ ss ShotSequence {
strcpy(msg, "Ready for SHOT" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
WSHOTINGSTATE = WSHTST_Shoting10;
WSHOTINGSTATE = WSHTST_Shooting10;
pvPut(WSHOTINGSTATE);
} state Shoting10
} state Shooting10
}
state Shoting10 {
state Shooting10 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting10 Out");
strcpy(msg, "Shooting10 Out");
pvPut(msg);
errlogSevPrintf(MINOR, "%s\n",msg);
WSHOTINGSTATE = WSHTST_NonShoting;
@@ -1129,13 +1209,13 @@ ss ShotSequence {
errlogSevPrintf(NO_ALARM, "%s\n", msg);
IsttokShotCapBank_Discharge = PCF_RELAY_OFF;
pvPut(IsttokShotCapBank_Discharge);
WSHOTINGSTATE = WSHTST_Shoting11;
WSHOTINGSTATE = WSHTST_Shooting11;
pvPut(WSHOTINGSTATE);
} state Shoting11
} state Shooting11
}
state Shoting11 {
state Shooting11 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting11 Out");
strcpy(msg, "Shooting11 Out");
pvPut(msg);
errlogSevPrintf(MINOR, "%s\n",msg);
WSHOTINGSTATE = WSHTST_NonShoting;
@@ -1152,13 +1232,13 @@ ss ShotSequence {
errlogSevPrintf(NO_ALARM, "%s\n", msg);
IsttokShotVVessel_Filament = 1;
pvPut(IsttokShotVVessel_Filament);
WSHOTINGSTATE = WSHTST_Shoting12;
WSHOTINGSTATE = WSHTST_Shooting12;
pvPut(WSHOTINGSTATE);
} state Shoting12
} state Shooting12
}
state Shoting12 {
state Shooting12 {
when (IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Shoting6 Out");
strcpy(msg, "Shooting6 Out");
pvPut(msg);
errlogSevPrintf(MINOR, "%s\n",msg);
WSHOTINGSTATE = WSHTST_NonShoting;
@@ -1185,7 +1265,7 @@ ss ShotSequence {
}
}
/* Stopping State Set */
/* Stopping Sub-State Set */
ss StoppingSequence {
state NonStopping {
entry {
@@ -1260,12 +1340,12 @@ ss StoppingSequence {
strcpy(msg, "Toroidal Field Recovered" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
WSHOTINGSTATE = WSHTST_Shoting12;
WSHOTINGSTATE = WSHTST_Shooting12;
pvPut(WSHOTINGSTATE);
} state Shoting12
state Shoting12 {
} state Shooting12
state Shooting12 {
when ((IsttokOPSTATE != POS_WaitShot ) && (IsttokShotCountdown == 160) ) {
strcpy(msg, "Shoting12 Out");
strcpy(msg, "Shooting12 Out");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
WSHOTINGSTATE = WSHTST_NonShoting;

View File

@@ -1,4 +1,4 @@
# autosave R5.3 Automatically generated - DO NOT MODIFY - 211129-172335
# autosave R5.3 Automatically generated - DO NOT MODIFY - 211209-150038
ISTTOK:central:PULSE-NUMBER.VAL 0
ISTTOK:central:LogMessage.VAL
ISTTOK:central:LASTOPSTATE.VAL 5

View File

@@ -19,7 +19,7 @@ SNCSEQ=$(SUPPORT)/seq-2-2
#
# SEQ is required for testIPServer
#SNCSEQ=$(SUPPORT)/seq-2-2-5
SNCSEQ=
#SNCSEQ=
## For sCalcout support in asynOctet - applications include asynCalc.dbd
#CALC=$(SUPPORT)/calc-3-7-3
@@ -30,5 +30,5 @@ PCRE=
#SSCAN=$(SUPPORT)/sscan-2-11-3
# EPICS_BASE 3.14.6 or later is required
EPICS_BASE=/home/pi/EPICS/epics-base
EPICS_BASE=/home/pi/Apps/epics7/epics-base