diff --git a/epics/README.md b/epics/README.md index 86d6b73..f68f0e8 100644 --- a/epics/README.md +++ b/epics/README.md @@ -17,12 +17,12 @@ All software stored in IPFN GIT [server](https://git.ipfn.tecnico.ulisboa.pt/sum - **Humberto Figueiredo** (ISTTOK Session Leader) - **Hugo Alves** (ISTTOK Session Leader, State Machine development) - **Tiago Pereira** (dsPIC development, RS232 protocol/ Sensor Interface/ Wiring) -- **Paulo F. Carvalho** ( Epics Applications), CS-S Gui Panels) ## System description -Presently there are two instances of EPICS IOC Server implemented. +Presently there are two/three instances of EPICS IOC Server implemented. One responsible for the Temperature Node. And a second one, installed in a Raspberry Pi, implemented in the new control unit launched at ISTTOK for the remote control of the vacuum pumps, named Central Node. +A third one is dedicated for readind the Vacuum Sensore through the RS484 Interface ### Temperature/Vacuum Node: Temperature Sensors and ELCO Voltage Measurement Systems - Thermocouple Sensor @@ -227,22 +227,45 @@ Process Variables in this IOC Server: | ISTTOK:central:Shot-TorPSCurrentImage"| ai | ch3 | no | ---------- +* Connected to RS485 Bus (Not yet) + +|PV Name |PV Type |Archive| +|:----------|-------|---:| +|ISTTOK:central:RPump1-Pressure | ai | yes | +|ISTTOK:central:RPump2-Pressure | ai | yes | +|ISTTOK:central:TMPump1-PressureAdmission | ai | yes | +|ISTTOK:central:VVessel-Pressure | ai | yes | +---------- + + +### Vacuum Node (temporary) +- Vacuum Pfeiffer Sensors (RS485) + +#### Hardware Platform +1. A Raspberry Pi 3, running a linux distribution.. + * Has a USB/RS485 port for monitoring pressure sensors + +#### Process Variables +Process Variables in this IOC Server: + * Connected to RS485 Bus |PV Name |PV Type |Archive| |:----------|-------|---:| -| ISTTOK:central:RPump1-Pressure | ai | yes | -|ISTTOK:central:RPump2-Pressure | ai | yes | -|ISTTOK:central:TMPump1-PressureAdmission | ai | yes | -ISTTOK:central:VVessel-Pressure | ai | yes +| ISTTOK:vacuum:RPump1-Pressure | ai | yes | +|ISTTOK:vacuum:RPump2-Pressure | ai | yes | +|ISTTOK:vacuum:TMPump1-PressureAdmission | ai | yes | +|ISTTOK:vacuum:VVessel-Pressure | ai | yes | +---------- +#### Software Platform +[//]: # (This may be the most platform independent comment) -##### Start the IOC on power up - 1. Make sure `screen` is installed in Linux - 2. Include following Line in /etc/rc.local - * `screen -dm bash -c "cd [..]/ISTTOKrpi/iocBoot/iocISTTOKrpi; ../../bin/linux-arm/ISTTOKrpi st.cmd"` - 3. To access EPICS console run - * `sudo screen -r` +1. Linux Raspian "buster" (user :pi): + * IP addr: 192.168.1.120 ( ISTTOK private network) + * NTP/timedatectl time conected to IPFN Gps NTP/PPS server IP:10.136.227.237 193.136.136.129 + (this is mandatory, Rpi does not have a Real Time clock see https://www.raspberrypi.org/forums/viewtopic.php?t=178763) + * EPICS 7. To install follow [EPICS Docs](https://docs.epics-controls.org/projects/how-tos/en/latest/getting-started/installation.html) ## Download and configure CS-Studio @@ -266,7 +289,7 @@ ISTTOK:central:VVessel-Pressure | ai | yes ### EPICS Channel Access Configuration ``` -export EPICS_CA_ADDR_LIST="192.168.1.110 192.168.1.152" +export EPICS_CA_ADDR_LIST=""192.168.1.110 192.168.1.120 192.168.1.152" export EPICS_CA_AUTO_ADDR_LIST="NO" ``` diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKmachineControl.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKmachineControl.db index d276c99..ae65576 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKmachineControl.db +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKmachineControl.db @@ -1,8 +1,8 @@ ############################################# ## Project : ISTTOK slow Control ## -## File : -## Description : Records for ISTTOK Control I/O channels connected to 2 Velleman board +## File : +## Description : Records for ISTTOK Control I/O channels connected to 2 Velleman board ## ## ## Author : Bernardo Carvalho (IPFN-IST) @@ -23,108 +23,103 @@ ### 24V commands - Optocoupler Out### ##################################### record(bo, "$(P)$(R)TMPump1-ControllerOn" ) { -# field(DESC,"Sinal p/ TMP 1, Liga a alimentação do controlador, vai a HIGH e depois a LOW") -# field( ZNAM, "Off" )record(bo, "$(P)$(R)TMPControllerOn" ) { - field(ZNAM, "Off" ) - field(ONAM, "Pulse" ) - field(HIGH, "2.5") - field(FLNK, "$(P)$(R)TMPump1-ControllerOnInv" ) - field(VAL,"0") - -# field( FLNK, "$(P)$(R)TMPControllerOnInv" ) + field(DESC,"Signal to TMP 1, goes HIGH and LW") + field(ZNAM, "Off" ) + field(ONAM, "Pulse" ) + field(HIGH, "2.5") + field(FLNK, "$(P)$(R)TMPump1-ControllerOnInv" ) + field(VAL,"0") } -record(calcout, "$(P)$(R)TMPump1-ControllerOnInv" ) { -#record(calcout, "$(P)$(R)TMPControllerOnInv" ) { - field( INPA, "$(P)$(R)TMPControllerOn NPP MS" ) - field( OUT, "$(P)$(R)PCF8574:56:REGISTER.B0 PP MS" ) - field( OOPT, "On Change" ) - field( CALC, "A?0:1" ) +record(calcout, "$(P)$(R)TMPump1-ControllerOnInv") { + field(INPA, "$(P)$(R)TMPump1-ControllerOn NPP MS") + field(OUT, "$(P)$(R)PCF8574:56:REGISTER.B0 PP MS") + field(OOPT, "On Change") + field(CALC, "A?0:1") } record(bo, "$(P)$(R)TMPump1-ControllerOff" ) { # field(DESC," Sinal p/ TMP 1, desliga a alimentação do controlador, LOW->HIGH-> LOW") # record(bo, "$(P)$(R)TMPControllerOff" ) { - field(ZNAM, "Off" ) - field(ONAM, "Pulse" ) - field(HIGH, "2.5") - #field( FLNK, "$(P)$(R)TMPControllerOffInv" ) - field(FLNK, "$(P)$(R)TMPump1-ControllerOffInv" ) - field(VAL,"0") + field(ZNAM, "Off" ) + field(ONAM, "Pulse" ) + field(HIGH, "2.5") + field(FLNK, "$(P)$(R)TMPump1-ControllerOffInv" ) + field(VAL,"0") } record(calcout, "$(P)$(R)TMPump1-ControllerOffInv") { - field( INPA, "$(P)$(R)TMPump1-ControllerOff NPP MS" ) - field( OUT, "$(P)$(R)PCF8574:56:REGISTER.B1 PP MS") - field( OOPT, "On Change" ) - field( CALC, "A?0:1" ) + field(INPA, "$(P)$(R)TMPump1-ControllerOff NPP MS" ) + field(OUT, "$(P)$(R)PCF8574:56:REGISTER.B1 PP MS") + field(OOPT, "On Change") + field(CALC, "A?0:1") } record(bo, "$(P)$(R)TMPump1-MotorOn" ) { - field( ZNAM, "Off") - field( ONAM, "Pulse") - field( HIGH, "2.5") - field( FLNK, "$(P)$(R)TMPump1-MotorOnInv") + field( ZNAM, "Off") + field( ONAM, "Pulse") + field( HIGH, "2.5") + field( FLNK, "$(P)$(R)TMPump1-MotorOnInv") } record(calcout, "$(P)$(R)TMPump1-MotorOnInv" ) { - field( INPA, "$(P)$(R)TMPump1-MotorOn NPP MS") - field( OUT, "$(P)$(R)PCF8574:56:REGISTER.B2 PP MS") - field( OOPT, "On Change") - field( CALC, "A?0:1" ) + field( INPA, "$(P)$(R)TMPump1-MotorOn NPP MS") + field( OUT, "$(P)$(R)PCF8574:56:REGISTER.B2 PP MS") + field( OOPT, "On Change") + field( CALC, "A?0:1" ) } record(bo, "$(P)$(R)TMPump1-MotorOff") { - field( ZNAM, "Off") - field( ONAM, "Pulse") - field( HIGH, "2.5") - field( FLNK, "$(P)$(R)TMPump1-MotorOffInv") - field(VAL,"0") + field( ZNAM, "Off") + field( ONAM, "Pulse") + field( HIGH, "2.5") + field( FLNK, "$(P)$(R)TMPump1-MotorOffInv") + field(VAL,"0") } record(calcout, "$(P)$(R)TMPump1-MotorOffInv") { - field( INPA, "$(P)$(R)TMPump1-MotorOff NPP MS") - field( OUT, "$(P)$(R)PCF8574:56:REGISTER.B3 PP MS") - field( OOPT, "On Change") - field( CALC, "A?0:1") + field( INPA, "$(P)$(R)TMPump1-MotorOff NPP MS") + field( OUT, "$(P)$(R)PCF8574:56:REGISTER.B3 PP MS") + field( OOPT, "On Change") + field( CALC, "A?0:1") } ############################# ### TMP1 Controller inputs### ############################# record(fanout, "$(P)$(R)PCF8574:56:REGISTER:READ:FNOUT"){ - field(LNK1, "$(P)$(R)TMPump1-Power") - field(LNK2, "$(P)$(R)TMPump1-Emergency") - field(LNK3, "$(P)$(R)TMPump1-Acceleration") - field(LNK4, "$(P)$(R)TMPump1-NormalOperation") + field(LNK1, "$(P)$(R)TMPump1-Power") + field(LNK2, "$(P)$(R)TMPump1-Emergency") + field(LNK3, "$(P)$(R)TMPump1-Acceleration") + field(LNK4, "$(P)$(R)TMPump1-NormalOperation") } record(bi , "$(P)$(R)TMPump1-Power" ) { - field(DESC," TMP1 – Alimentada 220V ") - field( INP, "$(P)$(R)PCF8574:56:REGISTER:READ.B4 NPP NMS") - field( ZNAM, "ON" ) - field( ONAM, "OFF" ) + field(DESC," TMP1 – Alimentada 220V ") + field( INP, "$(P)$(R)PCF8574:56:REGISTER:READ.B4 NPP NMS") + field( ZNAM, "ON" ) + field( ONAM, "OFF" ) } record(bi , "$(P)$(R)TMPump1-Emergency") { - field(DESC," TMP1 – Falha ") - field( INP, "$(P)$(R)PCF8574:56:REGISTER:READ.B6 NPP NMS") + field(DESC," TMP1 – Falha ") + field( INP, "$(P)$(R)PCF8574:56:REGISTER:READ.B6 NPP NMS") # field(VAL,"1") - field( ZNAM, "ON" ) - field( ONAM, "OFF" ) - field(ZSV,"MAJOR") + field( ZNAM, "ON" ) + field( ONAM, "OFF" ) + field(ZSV,"MAJOR") } record(bi , "$(P)$(R)TMPump1-Acceleration") { - field(DESC," TMP1 – Motor em aceleração ") - field( INP, "$(P)$(R)PCF8574:56:REGISTER:READ.B5 NPP NMS") - field( ZNAM, "ON" ) - field( ONAM, "OFF" ) - field(ZSV,"MINOR") + field(DESC," TMP1 – Motor em aceleração ") + field( INP, "$(P)$(R)PCF8574:56:REGISTER:READ.B5 NPP NMS") + field( ZNAM, "ON" ) + field( ONAM, "OFF" ) + field(ZSV,"MINOR") } record(bi , "$(P)$(R)TMPump1-NormalOperation" ) { - field(DESC," TMP1 – Operação Normal ") - field( INP, "$(P)$(R)PCF8574:56:REGISTER:READ.B7 NPP NMS") - field( ZNAM, "ON" ) - field(ONAM, "OFF" ) - field(OSV,"MINOR") + field(DESC," TMP1 – Operação Normal ") + field( INP, "$(P)$(R)PCF8574:56:REGISTER:READ.B7 NPP NMS") + field( ZNAM, "ON" ) + field(ONAM, "OFF" ) + field(OSV,"MINOR") } ############### @@ -137,87 +132,87 @@ record(bi , "$(P)$(R)TMPump1-NormalOperation" ) { ### TMP2 Controller Inputs ### ############################## record(fanout, "$(P)$(R)PCF8574:57:REGISTER:READ:FNOUT"){ - field(LNK1, "$(P)$(R)TMPump2-Emergency") - field(LNK2, "$(P)$(R)TMPump2-Acceleration") - field(LNK3, "$(P)$(R)TTSystem-tzero") - field(LNK4, "$(P)$(R)Emergency-PhysButton") + field(LNK1, "$(P)$(R)TMPump2-Emergency") + field(LNK2, "$(P)$(R)TMPump2-Acceleration") + field(LNK3, "$(P)$(R)TTSystem-tzero") + field(LNK4, "$(P)$(R)Emergency-PhysButton") } record(bi , "$(P)$(R)TMPump2-Emergency") { - field(DESC," TMP2 – Falha ") + field(DESC," TMP2 – Falha ") # field(INP, "$(P)$(R)PCF8574:57:REGISTER:READ.B0 NPP NMS") - field(VAL,"1") - field(ZNAM, "ON" ) - field(ONAM, "OFF" ) - field(ZSV,"MAJOR") + field(VAL,"1") + field(ZNAM, "ON" ) + field(ONAM, "OFF" ) + field(ZSV,"MAJOR") } record(bi , "$(P)$(R)TMPump2-Acceleration") { - field(DESC," TMP2 – START until Normal ") - field( INP, "$(P)$(R)PCF8574:57:REGISTER:READ.B1 NPP NMS") - field( ZNAM, "ON" ) - field( ONAM, "OFF" ) + field(DESC," TMP2 – START until Normal ") + field( INP, "$(P)$(R)PCF8574:57:REGISTER:READ.B1 NPP NMS") + field( ZNAM, "ON" ) + field( ONAM, "OFF" ) } #################################### # TIMING TRIGGER ON/OFF # #################################### record(bi , "$(P)$(R)TTSystem-tzero" ) { - field(DESC,"Trigger control 60s before shot") - field(INP, "$(P)$(R)PCF8574:57:REGISTER:READ.B7") + field(DESC,"Trigger control 60s before shot") + field(INP, "$(P)$(R)PCF8574:57:REGISTER:READ.B7") # field(VAL,"1") - field(ZNAM, "OFF" ) - field(ONAM, "ON" ) + field(ZNAM, "OFF" ) + field(ONAM, "ON" ) } ############################### ### TMP2 Controller Outputs ### ############################### record(bo, "$(P)$(R)TMPump2-Motor" ) { - field(DESC," Motor On/Off ") + field(DESC," Motor On/Off ") # record(bo, "$(P)$(R)TMP2MotorOnOff" ) { - field( OUT, "$(P)$(R)PCF8574:57:REGISTER.B2 PP MS") - field( ZNAM, "ON") - field( ONAM, "OFF") + field( OUT, "$(P)$(R)PCF8574:57:REGISTER.B2 PP MS") + field( ZNAM, "ON") + field( ONAM, "OFF") } ############################## # BUZZER ON/OFF # ############################## record(bo, "$(P)$(R)Buzzer" ) { - field(DESC," Lab Buzzer ") - field(ZNAM, "Off" ) - field(ONAM, "Pulse" ) - field(HIGH, "2.5") - field(FLNK, "$(P)$(R)BuzzerInv" ) - field(VAL, "0") + field(DESC," Lab Buzzer ") + field(ZNAM, "Off" ) + field(ONAM, "Pulse" ) + field(HIGH, "2.5") + field(FLNK, "$(P)$(R)BuzzerInv" ) + field(VAL, "0") } record(calcout, "$(P)$(R)BuzzerInv" ) { - field(INPA, "$(P)$(R)Buzzer NPP MS" ) - field(OUT, "$(P)$(R)PCF8574:57:REGISTER.B3 PP MS" ) - field(OOPT, "On Change" ) - field(CALC, "A?0:1" ) + field(INPA, "$(P)$(R)Buzzer NPP MS" ) + field(OUT, "$(P)$(R)PCF8574:57:REGISTER.B3 PP MS" ) + field(OOPT, "On Change" ) + field(CALC, "A?0:1" ) } ############################## # EMERGENCY MODE # ############################## record(bi, "$(P)$(R)Emergency-PhysButton" ) { - field(DESC,"External Physical Emergency Button") - field(INP, "$(P)$(R)PCF8574:57:REGISTER:READ.B4 NPP NMS") - field(ZNAM, "ON") - field(ONAM, "OFF" ) - field(FLNK, "$(P)$(R)Emergency" ) + field(DESC,"External Physical Emergency Button") + field(INP, "$(P)$(R)PCF8574:57:REGISTER:READ.B4 NPP NMS") + field(ZNAM, "ON") + field(ONAM, "OFF" ) + field(FLNK, "$(P)$(R)Emergency" ) } record(bo, "$(P)$(R)Emergency-UserButton" ) { - field(DESC,"Soft User Emergency Button") - field(ZNAM, "OFF" ) - field(ONAM, "ON") - field(FLNK, "$(P)$(R)Emergency" ) + field(DESC,"Soft User Emergency Button") + field(ZNAM, "OFF" ) + field(ONAM, "ON") + field(FLNK, "$(P)$(R)Emergency" ) } record(calc, "$(P)$(R)Emergency" ) { - field(DESC, "Emergency State") - field(INPA, "$(P)$(R)Emergency-PhysButton.RVAL NPP" ) - field(INPB, "$(P)$(R)Emergency-UserButton.RVAL NPP" ) - field(CALC, "A || B" ) # ! Not + field(DESC, "Emergency State") + field(INPA, "$(P)$(R)Emergency-PhysButton.RVAL NPP" ) + field(INPB, "$(P)$(R)Emergency-UserButton.RVAL NPP" ) + field(CALC, "A || B" ) # ! Not } ############ @@ -237,71 +232,71 @@ record(calc, "$(P)$(R)Emergency" ) { # ROTARY1 PUMP # ############################# record( bo, "$(P)$(R)RPump1-Motor" ) { - field(DESC,"Power to Rotatory Pump 1. Relay 5") - field(OUT, "$(P)$(R)PCF8574:60:REGISTER.B0 PP" ) - field(ZNAM, "Off" ) - field(ONAM, "On" ) - field(VAL,"1") - field(ZSV,"MINOR") + field(DESC,"Power to Rotatory Pump 1. Relay 5") + field(OUT, "$(P)$(R)PCF8574:60:REGISTER.B0 PP" ) + field(ZNAM, "Off" ) + field(ONAM, "On" ) + field(VAL,"1") + field(ZSV,"MINOR") } ############################# # ROTARY1 VALVE # ############################# 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" ) - field(ZNAM, "Closed" ) - field(ONAM, "Open" ) - field(VAL,"1") + field(DESC,"Abre a valvula da bomba rot. Relay 4") + field(OUT, "$(P)$(R)PCF8574:60:REGISTER.B1 PP" ) + field(ZNAM, "Closed" ) + field(ONAM, "Open" ) + field(VAL,"1") } ############################# # ROTARY2 PUMP # ############################# record( bo, "$(P)$(R)RPump2-Motor" ) { - field(DESC,"Power On Rotatory Pump 2") - field(OUT, "$(P)$(R)PCF8574:60:REGISTER.B2 PP" ) - field(ZNAM, "Off" ) - field(ONAM, "On" ) - field(VAL,"1") - field(ZSV,"MINOR") + field(DESC,"Power On Rotatory Pump 2") + field(OUT, "$(P)$(R)PCF8574:60:REGISTER.B2 PP" ) + field(ZNAM, "Off" ) + field(ONAM, "On" ) + field(VAL,"1") + field(ZSV,"MINOR") } ############################# # ROTARY2 VALVE # ############################# record( bo, "$(P)$(R)RPump2-Valve" ) { - field(DESC," Abre a valvula da bomba rotatoria 2 ") - field(OUT,"$(P)$(R)PCF8574:60:REGISTER.B3 PP" ) - field(ZNAM,"Closed" ) - field(ONAM,"Open" ) - field(VAL,"1") + field(DESC," Abre a valvula da bomba rotatoria 2 ") + field(OUT,"$(P)$(R)PCF8574:60:REGISTER.B3 PP" ) + field(ZNAM,"Closed" ) + field(ONAM,"Open" ) + field(VAL,"1") } ################################ # FILAMENT ON/OFF # ################################ record(bo, "$(P)$(R)VVessel-Filament" ) { - field(DESC,"Vacuum Vessel Filament power") + field(DESC,"Vacuum Vessel Filament power") # record(bo, "$(P)$(R)FilamentOnOff" ) { - field( OUT, "$(P)$(R)PCF8574:60:REGISTER.B4 PP" ) - field( ZNAM, "On" ) - field( ONAM, "Off" ) - field(VAL,"1") - field(PINI,"YES") + field( OUT, "$(P)$(R)PCF8574:60:REGISTER.B4 PP" ) + field( ZNAM, "On" ) + field( ONAM, "Off" ) + field(VAL,"1") + field(PINI,"YES") } ############################## # LIGHTS ON/OFF # ############################## record(bo, "$(P)$(R)Lab-WarningLight" ) { - field(DESC," Luzes de sinalização, 220V ") + field(DESC," Luzes de sinalização, 220V ") # record(bo, "$(P)$(R)LightsOnOff" ) { - field(OUT, "$(P)$(R)PCF8574:60:REGISTER.B5 PP" ) - field(ZNAM, "On" ) - field(ONAM, "Off" ) - field(VAL,"1") + field(OUT, "$(P)$(R)PCF8574:60:REGISTER.B5 PP" ) + field(ZNAM, "On" ) + field(ONAM, "Off" ) + field(VAL,"1") } ############ @@ -314,10 +309,10 @@ record(bo, "$(P)$(R)Lab-WarningLight" ) { ############################## record(bo, "$(P)$(R)Clean-TorContactor" ) { # field(DESC," Contactor 220V do transformador para a fonte de campo toroidal das descargas de limpeza (500 A) ") - field( OUT, "$(P)$(R)PCF8574:60:REGISTER.B7 PP" ) - field( ZNAM, "On" ) - field( ONAM, "Off" ) - field(VAL,"1") + field( OUT, "$(P)$(R)PCF8574:60:REGISTER.B7 PP" ) + field( ZNAM, "On" ) + field( ONAM, "Off" ) + field(VAL,"1") } ############### @@ -331,34 +326,34 @@ record(bo, "$(P)$(R)Clean-TorContactor" ) { ############################ record(bo, "$(P)$(R)Clean-TorPneuBreaker" ) { ## field(DESC," Interruptor de ar comprimido do transformador para a fonte de campo toroidal das descargas de limpeza (500 A)") - field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B0 PP" ) - field( ZNAM, "On" ) - field( ONAM, "Off" ) - field(VAL,"1") + field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B0 PP" ) + field( ZNAM, "On" ) + field( ONAM, "Off" ) + field(VAL,"1") } record(bo, "$(P)$(R)Shot-TorPSDisable" ) { # field(DESC," É desligado na emergência e em qualquer estado que não seja Process ou Wait Shot.") - field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B1 PP" ) - field( ZNAM, "Off" ) - field( ONAM, "On" ) - field(VAL,"1") + field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B1 PP" ) + field( ZNAM, "Off" ) + field( ONAM, "On" ) + field(VAL,"1") } record(bo, "$(P)$(R)Shot-TorPSTrigger" ) { - field(DESC," Trigger da FRAEP") - field( ZNAM, "Off" ) - field( ONAM, "Pulse" ) - field( HIGH, "2.5") - field( FLNK, "$(P)$(R)Shot-TorPSTriggerInv" ) - field(VAL,"0") + field(DESC," Trigger da FRAEP") + field( ZNAM, "Off" ) + field( ONAM, "Pulse" ) + field( HIGH, "2.5") + field( FLNK, "$(P)$(R)Shot-TorPSTriggerInv" ) + field(VAL,"0") } record(calcout, "$(P)$(R)Shot-TorPSTriggerInv" ) { # field(DESC," $(R)") - field( INPA, "$(P)$(R)ToroidalShotTriggerOnOff NPP MS" ) - field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B2 PP MS" ) - field( OOPT, "On Change" ) - field( CALC, "A?0:1" ) + field( INPA, "$(P)$(R)ToroidalShotTriggerOnOff NPP MS" ) + field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B2 PP MS" ) + field( OOPT, "On Change" ) + field( CALC, "A?0:1" ) } ############################################################ @@ -368,10 +363,10 @@ record(calcout, "$(P)$(R)Shot-TorPSTriggerInv" ) { record(bo, "$(P)$(R)CapBank-Charge" ) { ## field(DESC," Contactor 220V do circuito de carga do banco de condensadores p/ SHOT (ELCO) ") #record(bo, "$(P)$(R)CapBankChargeOnOff" ) { - field(OUT, "$(P)$(R)PCF8574:61:REGISTER.B3 PP" ) - field(ZNAM, "On" ) - field(ONAM, "Off" ) - field(VAL,"1") + field(OUT, "$(P)$(R)PCF8574:61:REGISTER.B3 PP" ) + field(ZNAM, "On" ) + field(ONAM, "Off" ) + field(VAL,"1") } ######################################## @@ -380,10 +375,10 @@ record(bo, "$(P)$(R)CapBank-Charge" ) { record(bo, "$(P)$(R)Clean-PrimContactor" ) { # field(DESC," Contactor 220V do para o primário das descargas de limpeza ") # record(bo, "$(P)$(R)PrimaryCleanContactorOnOff" ) { - field(OUT, "$(P)$(R)PCF8574:61:REGISTER.B4 PP MS" ) - field(ZNAM, "On" ) - field(ONAM, "Off" ) - field(VAL,"1") + field(OUT, "$(P)$(R)PCF8574:61:REGISTER.B4 PP MS" ) + field(ZNAM, "On" ) + field(ONAM, "Off" ) + field(VAL,"1") } #################################### @@ -391,11 +386,11 @@ record(bo, "$(P)$(R)Clean-PrimContactor" ) { #################################### record(bo, "$(P)$(R)Clean-PrimPneuBreaker"){ #record(bo, "$(P)$(R)PrimaryCleanBreakerOnOff"){ - field( DESC, "Primary Cleaning OnOff") - field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B5 PP" ) - field( ZNAM, "On") - field( ONAM, "Off") - field(VAL,"1") + field( DESC, "Primary Cleaning OnOff") + field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B5 PP" ) + field( ZNAM, "On") + field( ONAM, "Off") + field(VAL,"1") } ################################## @@ -404,22 +399,22 @@ record(bo, "$(P)$(R)Clean-PrimPneuBreaker"){ record(bo, "$(P)$(R)GasIS-Valves" ) { # field(DESC," 2 válvulas pneumáticas de corte do sistema de injecção de H/D/Ne/He no TOK, 24V out = deixa passar") # record(bo, "$(P)$(R)GISValvesOnOff" ) { - field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B6 PP" ) - field( ZNAM, "On" ) - field( ONAM, "Off" ) - field(VAL,"1") + field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B6 PP" ) + field( ZNAM, "On" ) + field( ONAM, "Off" ) + field(VAL,"1") } ########################################## # CAP BANK DISCHARGE ON/OFF # ########################################## record(bo, "$(P)$(R)CapBank-Discharge" ) { - field(DESC," Liga o circuito de descarga do ELCO ") + field(DESC," Liga o circuito de descarga do ELCO ") # record(bo, "$(P)$(R)CapBankDischargeOnOff" ) { - field(OUT, "$(P)$(R)PCF8574:61:REGISTER.B7 PP" ) - field(ZNAM, "On" ) - field(ONAM, "Off" ) - field(VAL,"1") + field(OUT, "$(P)$(R)PCF8574:61:REGISTER.B7 PP" ) + field(ZNAM, "On" ) + field(ONAM, "Off" ) + field(VAL,"1") } #record(bo,"$(P)$(R)Primary-PressureCondition"){ @@ -431,9 +426,9 @@ record(bo, "$(P)$(R)CapBank-Discharge" ) { record(ai,"$(P)$(R)TMPump2-Speed"){ # field(DESC," ADC Pump speed 0-10V ") #record(ai,"$(P)$(R)Turbo2_Speed"){ - field(PREC,"3") - field(EGU,"RPM") - field(VAL,"0") + field(PREC,"3") + field(EGU,"RPM") + field(VAL,"0") } ####################### @@ -442,8 +437,8 @@ record(ai,"$(P)$(R)TMPump2-Speed"){ record(bo, "$(P)$(R)TMPump1-ManualValve"){ # field(DESC," $(R)") #record(bo, "$(P)$(R)TMPManualValve"){ - info(autosaveFields, "VAL") - field( DESC, "State of manual valve") - field( ZNAM, "Closed") - field( ONAM, "Open") + info(autosaveFields, "VAL") + field( DESC, "State of manual valve") + field( ZNAM, "Closed") + field( ONAM, "Open") } diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8574.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8574.db index 08c0df5..aa02137 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8574.db +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8574.db @@ -18,20 +18,20 @@ # ### Read/Write pcf8574 address 0x38=56 register ### # ################################################### record( mbboDirect, "$(P)$(R)PCF8574:56:REGISTER") { - field(DTYP, "stream") - field(OUT, "@pcf8574.proto wReg(56) I2C") - field(SHFT, "0") - field(NOBT, "8") - field(VAL, 255) + field(DTYP, "stream") + field(OUT, "@pcf8574.proto wReg(56) $(BUS)") + field(SHFT, "0") + field(NOBT, "8") + field(VAL, 255) # field(PINI,"YES") } record( mbbiDirect, "$(P)$(R)PCF8574:56:REGISTER:READ" ) { - field(DTYP, "stream") - field(INP, "@pcf8574.proto rReg(56) I2C") - field(NOBT, "8") - field(SCAN, "1 second") - field(FLNK, "$(P)$(R)PCF8574:56:REGISTER:READ:FNOUT") + field(DTYP, "stream") + field(INP, "@pcf8574.proto rReg(56) $(BUS)") + field(NOBT, "8") + field(SCAN, "1 second") + field(FLNK, "$(P)$(R)PCF8574:56:REGISTER:READ:FNOUT") } ##################################################### @@ -39,7 +39,7 @@ record( mbbiDirect, "$(P)$(R)PCF8574:56:REGISTER:READ" ) { ################################################### record( mbboDirect, "$(P)$(R)PCF8574:57:REGISTER") { field(DTYP, "stream") - field(OUT, "@pcf8574.proto wReg(57) I2C") + field(OUT, "@pcf8574.proto wReg(57) $(BUS)") field(SHFT, "0") field(NOBT, "8") field(VAL, 255) @@ -48,7 +48,7 @@ record( mbboDirect, "$(P)$(R)PCF8574:57:REGISTER") { record( mbbiDirect, "$(P)$(R)PCF8574:57:REGISTER:READ" ) { field(DTYP, "stream") - field(INP, "@pcf8574.proto rReg(57) I2C") + field(INP, "@pcf8574.proto rReg(57) $(BUS)") field(NOBT, "8") field(SCAN, "1 second") field(FLNK, "$(P)$(R)PCF8574:57:REGISTER:READ:FNOUT") @@ -59,7 +59,7 @@ record( mbbiDirect, "$(P)$(R)PCF8574:57:REGISTER:READ" ) { ################################################### record( mbboDirect, "$(P)$(R)PCF8574:60:REGISTER") { field( DTYP, "stream") - field( OUT, "@pcf8574.proto wReg(60) I2C") + field( OUT, "@pcf8574.proto wReg(60) $(BUS)") field( SHFT, "0") field( NOBT, "8") field(VAL, 255) @@ -68,7 +68,7 @@ record( mbboDirect, "$(P)$(R)PCF8574:60:REGISTER") { record( mbbiDirect, "$(P)$(R)PCF8574:60:REGISTER:READ" ) { field( DTYP, "stream") - field( INP, "@pcf8574.proto rReg(60) I2C") + field( INP, "@pcf8574.proto rReg(60) $(BUS)") field(NOBT, "8") field(SCAN, "1 second") # field(FLNK, "$(P)$(R)PCF8574:60:REGISTER:READ:FNOUT") @@ -80,7 +80,7 @@ record( mbbiDirect, "$(P)$(R)PCF8574:60:REGISTER:READ" ) { ################################################### record( mbboDirect, "$(P)$(R)PCF8574:61:REGISTER") { field( DTYP, "stream") - field( OUT, "@pcf8574.proto wReg(61) I2C") + field( OUT, "@pcf8574.proto wReg(61) $(BUS)") field( SHFT, "0") field( NOBT, "8") field(VAL, 255) @@ -89,7 +89,7 @@ record( mbboDirect, "$(P)$(R)PCF8574:61:REGISTER") { record( mbbiDirect, "$(P)$(R)PCF8574:61:REGISTER:READ" ) { field( DTYP, "stream") - field( INP, "@pcf8574.proto rReg(61) I2C") + field( INP, "@pcf8574.proto rReg(61) $(BUS)") field(NOBT, "8") field(SCAN, "1 second") #field(PINI,"YES") diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db index 00ff57a..304a697 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db @@ -10,25 +10,25 @@ # ### macros: ID I2C address of ADC ### # # ### Description: ### # # ### This DB file is using ### # -# ### stream(asynI2C) to read/write ### # +# ### stream(asynI2C) to read/write ### # # ### an PCF8591 ADDA chip ### # ####################################################### ##################################################### # Read/Write pcf8591 register @ address 0x48=d72 ### # ##################################################### -record( mbboDirect, "$(P)$(R)PCF8591:72:CTRLREGISTER") { - field(DTYP, "stream") - field(OUT, "@pcf8591.proto wReg(72) I2C") - field(SHFT, "0") - field(NOBT, "8") - field(VAL, 255) - field(PINI,"YES") +record(mbboDirect, "$(P)$(R)PCF8591:72:CTRLREGISTER") { + field(DTYP, "stream") + field(OUT, "@pcf8591.proto wReg(72) $(BUS)") + field(SHFT, "0") + field(NOBT, "8") + field(VAL, 255) + field(PINI,"YES") } # Receiving two bytes. last one counts record( longin, "$(P)$(R)PCF8591:72:ADC_CH1" ) { - field(DTYP, "stream") - field(INP, "@pcf8591.proto rConvAdc0(72) I2C") + field(DTYP, "stream") + field(INP, "@pcf8591.proto rConvAdc0(72) $(BUS)") } record( calc, "$(P)$(R)PCF8591:72:BYTE2_CH1" ) { field(INPA, "$(P)$(R)PCF8591:72:ADC_CH1 PP NMS") @@ -37,36 +37,36 @@ record( calc, "$(P)$(R)PCF8591:72:BYTE2_CH1" ) { } record( ai, "$(P)$(R)TMPump2-Speed" ) { - field(DESC, "TMPump2-Speed") - field(DTYP, "Raw Soft Channel" ) - field(INP, "$(P)$(R)PCF8591:72:BYTE2_CH1 PP NMS") - field(SCAN, "1 second") - field(ASLO, "16" ) - field(AOFF, "0" ) - field(EGU, "RPM" ) - field(PREC, "3" ) - field(HOPR, "5000" ) - field(LOPR, "0" ) - field(LOW, "200.0") -# # field(LOLO,"0.0") - field(LSV, "MINOR") -# # field(LLSV,"MAJOR") + field(DESC, "TMPump2-Speed") + field(DTYP, "Raw Soft Channel" ) + field(INP, "$(P)$(R)PCF8591:72:BYTE2_CH1 PP NMS") +# field(SCAN, "1 second") + field(ASLO, "16" ) + field(AOFF, "0" ) + field(EGU, "RPM" ) + field(PREC, "3" ) + field(HOPR, "5000" ) + field(LOPR, "0" ) + field(LOW, "200.0") +# field(LOLO,"0.0") + field(LSV, "MINOR") +# field(LLSV,"MAJOR") } record( longin, "$(P)$(R)PCF8591:72:ADC_CH2" ) { - field(DTYP, "stream") - field(INP, "@pcf8591.proto rConvAdc1(72) I2C") + field(DTYP, "stream") + field(INP, "@pcf8591.proto rConvAdc1(72) $(BUS)") } record( calc, "$(P)$(R)PCF8591:72:BYTE2_CH2" ) { - field(INPA, "$(P)$(R)PCF8591:72:ADC_CH2 PP NMS") + field(INPA, "$(P)$(R)PCF8591:72:ADC_CH2 PP NMS") # LSB i=last byte received - field(CALC, " (A & 255)" ) + field(CALC, "(A & 255)" ) } record( ai, "$(P)$(R)TMPump2-Current" ) { field(DESC, "TMPump2-Current") field(DTYP, "Raw Soft Channel" ) field(INP, "$(P)$(R)PCF8591:72:BYTE2_CH2 PP NMS") - field(SCAN, "1 second") + # field(SCAN, "1 second") field(ASLO, "0.1" ) field(AOFF, "0" ) field(EGU, "mA" ) @@ -82,7 +82,7 @@ record( ai, "$(P)$(R)TMPump2-Current" ) { # Receiving two bytes. last one counts record( longin, "$(P)$(R)PCF8591:72:ADC_CH3" ) { field(DTYP, "stream") - field(INP, "@pcf8591.proto rConvAdc2(72) I2C") + field(INP, "@pcf8591.proto rConvAdc2(72) $(BUS)") } record( calc, "$(P)$(R)PCF8591:72:BYTE2_CH3" ) { field(INPA, "$(P)$(R)PCF8591:72:ADC_CH3 PP NMS") @@ -90,17 +90,17 @@ record( calc, "$(P)$(R)PCF8591:72:BYTE2_CH3" ) { field(CALC, " (A & 255 )" ) } record(ai, "$(P)$(R)Shot-TorPSCurrentImage" ) { - field(DESC, "Toroidal Current Image") - field(DTYP, "Raw Soft Channel" ) - field(INP, "$(P)$(R)PCF8591:72:BYTE2_CH3 PP NMS") - field(SCAN, ".2 second") - field(ASLO, "39.215686275" ) - field(AOFF, "0.0" ) - field(EGU, "A" ) - field(PREC, "3" ) - field(HOPR, "10000" ) - field(LOPR, "0" ) - field(MDEL, "20" ) + field(DESC, "Toroidal Current Image") + field(DTYP, "Raw Soft Channel" ) + field(INP, "$(P)$(R)PCF8591:72:BYTE2_CH3 PP NMS") + field(SCAN, ".2 second") + field(ASLO, "39.215686275" ) + field(AOFF, "0.0" ) + field(EGU, "A" ) + field(PREC, "3" ) + field(HOPR, "10000" ) + field(LOPR, "0" ) + field(MDEL, "20" ) # field(LOW, "200.0") # # field(LOLO,"0.0") # field(LSV, "MINOR") @@ -110,7 +110,7 @@ record(ai, "$(P)$(R)Shot-TorPSCurrentImage" ) { record( longout, "$(P)$(R)PCF8591:72:DAC") { field(DTYP, "stream") - field(OUT, "@pcf8591.proto wDac(72) I2C") + field(OUT, "@pcf8591.proto wDac(72) $(BUS)") field(DRVH, "255" ) field(DRVL, "0" ) field(VAL, 128) diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db index 642729b..b4a2706 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db @@ -92,6 +92,24 @@ record(calc, "$(P)$(R)WSHOTCALCSTATE") { # field(SCAN,"1 second") #} +record(bo, "$(P)$(R)UPS-OnBattery") { + info(autosaveFields, "VAL STAT") + field(DESC, "Main APC UPS On Battery status") + field(VAL, "0") + field(ZNAM, "OFF") + field(ONAM, "ON") + field(OSV, "MAJOR") +} + +record(bo, "$(P)$(R)UPS-Shutdown") { + info(autosaveFields, "VAL STAT") + field(DESC, "Main APC UPS Shutdown request") +# field(VAL, "0") + field(ZNAM, "OFF") + field(ONAM, "ON") + field(OSV, "MAJOR") +} + record(bo, "$(P)$(R)OPREQ") { info(autosaveFields, "VAL") field(DESC, "Pulse Sequence Start/Stop") diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKtda8444.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKtda8444.db index 1977cf6..03d9fa5 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKtda8444.db +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKtda8444.db @@ -7,7 +7,7 @@ # ### ### # # ### Ref 2.0; 2019-10-14 ### # # ### ### # -# ### macros: ID I2C address of ADC ### # +# ### macros: ID I2C address of DAC ### # # ### Description: ### # # ### This DB file is using ### # # ### stream(asynI2C) to write ### # @@ -19,15 +19,15 @@ ##################################################### record( longout, "$(P)$(R)TDA8444:32:DAC_CH0") { field(DTYP, "stream") - field(OUT, "@tda8444.proto wDac0(32) I2C") + field(OUT, "@tda8444.proto wDac0(32) $(BUS)") field(DRVH, "63" ) - field(DRVL, "0" ) + field(DRVL, "0" ) field(VAL, 32) field(PINI,"YES") } record( longout, "$(P)$(R)TDA8444:32:DAC_CH1") { field(DTYP, "stream") - field(OUT, "@tda8444.proto wDac1(32) I2C") + field(OUT, "@tda8444.proto wDac1(32) $(BUS)") field(DRVH, "63" ) field(DRVL, "0" ) field(VAL, 32) @@ -35,7 +35,7 @@ record( longout, "$(P)$(R)TDA8444:32:DAC_CH1") { } record( longout, "$(P)$(R)TDA8444:32:DAC_CH2") { field(DTYP, "stream") - field(OUT, "@tda8444.proto wDac2(32) I2C") + field(OUT, "@tda8444.proto wDac2(32) $(BUS)") field(DRVH, "63" ) field(DRVL, "0" ) field(VAL, 32) @@ -43,7 +43,7 @@ record( longout, "$(P)$(R)TDA8444:32:DAC_CH2") { } record( longout, "$(P)$(R)TDA8444:32:DAC_CH3") { field(DTYP, "stream") - field(OUT, "@tda8444.proto wDac3(32) I2C") + field(OUT, "@tda8444.proto wDac3(32) $(BUS)") field(DRVH, "63" ) field(DRVL, "0" ) field(VAL, 32) @@ -51,7 +51,7 @@ record( longout, "$(P)$(R)TDA8444:32:DAC_CH3") { } record( longout, "$(P)$(R)TDA8444:32:DAC_CH4") { field(DTYP, "stream") - field(OUT, "@tda8444.proto wDac4(32) I2C") + field(OUT, "@tda8444.proto wDac4(32) $(BUS)") field(DRVH, "63" ) field(DRVL, "0" ) field(VAL, 32) @@ -59,7 +59,7 @@ record( longout, "$(P)$(R)TDA8444:32:DAC_CH4") { } record( longout, "$(P)$(R)TDA8444:32:DAC_CH5") { field(DTYP, "stream") - field(OUT, "@tda8444.proto wDac5(32) I2C") + field(OUT, "@tda8444.proto wDac5(32) $(BUS)") field(DRVH, "63" ) field(DRVL, "0" ) field(VAL, 32) @@ -67,7 +67,7 @@ record( longout, "$(P)$(R)TDA8444:32:DAC_CH5") { } record( longout, "$(P)$(R)TDA8444:32:DAC_CH6") { field(DTYP, "stream") - field(OUT, "@tda8444.proto wDac6(32) I2C") + field(OUT, "@tda8444.proto wDac6(32) $(BUS)") field(DRVH, "63" ) field(DRVL, "0" ) field(VAL, 32) @@ -76,7 +76,7 @@ record( longout, "$(P)$(R)TDA8444:32:DAC_CH6") { #record( longout, "$(P)$(R) TDA8444:32:DAC_CH7") { record( longout, "$(P)$(R)Shot-TorPSCurrent") { field(DTYP, "stream") - field(OUT, "@tda8444.proto wDac7(32) I2C") + field(OUT, "@tda8444.proto wDac7(32) $(BUS)") field(DRVH, "63" ) field(DRVL, "0" ) field(VAL, 1) diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile index a72cea7..642dba3 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile @@ -11,6 +11,11 @@ DB += ISTTOKpcf8591.db DB += ISTTOKpfeiffer.db DB += ISTTOKtda8444.db DB += sendmail.db +DB += pcf8591.proto +DB += tda8444.proto +DB += sendmail.proto +DB += pcf8574.proto +DB += pfeiffer.proto # If .db template is not named *.template add # _TEMPLATE = diff --git a/epics/iocs/ISTTOKrpi/protocols/pcf8574.proto b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pcf8574.proto similarity index 94% rename from epics/iocs/ISTTOKrpi/protocols/pcf8574.proto rename to epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pcf8574.proto index db2730b..738bc78 100644 --- a/epics/iocs/ISTTOKrpi/protocols/pcf8574.proto +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pcf8574.proto @@ -8,7 +8,7 @@ ExtraInput = Error; rReg { out ${1}; - in "%.1r"; + in "%01r"; } ## @init { rReg; } diff --git a/epics/iocs/ISTTOKrpi/protocols/pcf8591.proto b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pcf8591.proto similarity index 94% rename from epics/iocs/ISTTOKrpi/protocols/pcf8591.proto rename to epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pcf8591.proto index d136f30..c7765e9 100644 --- a/epics/iocs/ISTTOKrpi/protocols/pcf8591.proto +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pcf8591.proto @@ -1,5 +1,5 @@ Terminator = ""; -LockTimeout = 500; +LockTimeout = 200; ReplyTimeout = 100; ReadTimeout = 100; WriteTimeout = 100; @@ -8,7 +8,7 @@ ExtraInput = Error; rReg { out ${1}; - in "%.1r"; + in "%01r"; } # To read adc write control Byte # Bits 0,1 ADC channel Selection @@ -34,15 +34,14 @@ rConvAdc3 { out ${1} 67; in "%02r"; } - + ## @init { rReg; } ## wReg { out ${1} "%.1r"; } - + wDac { out ${1} 64 "%.1r"; } - diff --git a/epics/iocs/ISTTOKrpi/protocols/pfeiffer.proto b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pfeiffer.proto similarity index 100% rename from epics/iocs/ISTTOKrpi/protocols/pfeiffer.proto rename to epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pfeiffer.proto diff --git a/epics/iocs/ISTTOKrpi/protocols/sendmail.proto b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/sendmail.proto similarity index 100% rename from epics/iocs/ISTTOKrpi/protocols/sendmail.proto rename to epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/sendmail.proto diff --git a/epics/iocs/ISTTOKrpi/protocols/tda8444.proto b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/tda8444.proto similarity index 97% rename from epics/iocs/ISTTOKrpi/protocols/tda8444.proto rename to epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/tda8444.proto index 772d5dd..58991a2 100644 --- a/epics/iocs/ISTTOKrpi/protocols/tda8444.proto +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/tda8444.proto @@ -1,5 +1,5 @@ Terminator = ""; -LockTimeout = 500; +LockTimeout = 200; ReplyTimeout = 100; ReadTimeout = 100; WriteTimeout = 100; diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/ISTTOKrpiMain.cpp b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/ISTTOKrpiMain.cpp index 86751ff..9818be6 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/ISTTOKrpiMain.cpp +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/ISTTOKrpiMain.cpp @@ -13,7 +13,7 @@ int main(int argc,char *argv[]) { - if(argc>=2) { + if(argc>=2) { iocsh(argv[1]); epicsThreadSleep(.2); } diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt index 54c0a5b..55372d9 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt @@ -1,6 +1,7 @@ -/** +/** vim: set filetype=c : + * Use :SyntasticToggleMode * - * Project : ISTTOK slow Control Sequencer + * Project : ISTTOK slow Control Sequencer * Docs: https://www-csr.bessy.de/control/SoftDist/sequencer/ * * File : $Id$ @@ -11,12 +12,14 @@ * Copyright (c) : (IPFN-IST) * * Created 5-Mar-2013 - * Revised 01-07-2019 + * Revised 07-May-2021 * Modified 18-Nov-2019 * **/ - +//%% #include "errlog.h" + program IsttokSeqExec +%{#include "errlog.h"}% /* CONSTANT DECLARATION*/ /*Relays and INPUT (Valleman Board) have negative Logic!*/ short PCF_RELAY_ON = 0; @@ -24,7 +27,7 @@ short PCF_RELAY_OFF= 1; short PCF_INPUT_ON = 0; short PCF_INPUT_OFF= 1; short PCF_PULSE_ON = 1; - + short STRST_NonStarting = 0; short STRST_Starting1 = 1; short STRST_Starting2 = 2; @@ -63,12 +66,12 @@ short STPST_StoppingEnd = 4; short POS_Stopped =0; short POS_Starting=1; -short POS_Process =2; +short POS_Idle =2; short POS_Clean =3; short POS_WaitShot=4; short POS_Stopping=5; short POS_Emergency=6; - + short ON=1; short OFF=0; short START=1; @@ -80,31 +83,31 @@ short MINOR=1; short MAJOR=2; short INVALID=3; -/* PV variables */ +/* PV variables */ short IsttokOPSTATE; assign IsttokOPSTATE to "ISTTOK:central:OPSTATE"; monitor IsttokOPSTATE; - + int PulseNumber; assign PulseNumber to "ISTTOK:central:PULSE-NUMBER"; monitor PulseNumber; - + short IsttokLastOPSTATE; assign IsttokLastOPSTATE to "ISTTOK:central:LASTOPSTATE"; monitor IsttokLastOPSTATE; - + short IsttokOPREQ; assign IsttokOPREQ to "ISTTOK:central:OPREQ"; monitor IsttokOPREQ; - + short IsttokProcMode; assign IsttokProcMode to "ISTTOK:central:PROCESS-MODE"; monitor IsttokProcMode; - + short IsttokProcReq; assign IsttokProcReq to "ISTTOK:central:PROCESS-REQ"; monitor IsttokProcReq; - + short STARTINGSTATE; assign STARTINGSTATE to "ISTTOK:central:STARTINGSTATE"; monitor STARTINGSTATE; @@ -112,69 +115,72 @@ monitor STARTINGSTATE; short CLEANINGSTATE; assign CLEANINGSTATE to "ISTTOK:central:CLEANINGSTATE"; monitor CLEANINGSTATE; - + short CLEANINGMANMODE; assign CLEANINGMANMODE to "ISTTOK:central:CLEANINGMANMODE"; monitor CLEANINGMANMODE; short WSHOTINGSTATE; assign WSHOTINGSTATE to "ISTTOK:central:WSHOTINGSTATE"; - + short STOPPINGSTATE; assign STOPPINGSTATE to "ISTTOK:central:STOPPINGSTATE"; monitor STOPPINGSTATE; short IsttokRPump1_Motor; assign IsttokRPump1_Motor to "ISTTOK:central:RPump1-Motor"; - + short IsttokRPump1_Valve; assign IsttokRPump1_Valve to "ISTTOK:central:RPump1-Valve"; - + short IsttokRPump2_Motor; assign IsttokRPump2_Motor to "ISTTOK:central:RPump2-Motor"; - + short IsttokRPump2_Valve; assign IsttokRPump2_Valve to "ISTTOK:central:RPump2-Valve"; - + short IsttokTMPump1_ControllerOff; assign IsttokTMPump1_ControllerOff to "ISTTOK:central:TMPump1-ControllerOff"; - + short IsttokTMPump1_ControllerOn; assign IsttokTMPump1_ControllerOn to "ISTTOK:central:TMPump1-ControllerOn"; - + short IsttokTMPump1_MotorOff; assign IsttokTMPump1_MotorOff to "ISTTOK:central:TMPump1-MotorOff"; - + short IsttokTMPump1_MotorOn; assign IsttokTMPump1_MotorOn to "ISTTOK:central:TMPump1-MotorOn"; - -short IsttokTMPump2_Motor; -assign IsttokTMPump2_Motor to "ISTTOK:central:TMPump2-Motor"; - + +/*short IsttokTMPump2_Motor;*/ +/*assign IsttokTMPump2_Motor to "ISTTOK:central:TMPump2-Motor";*/ + short TMPump1NormalOperation; assign TMPump1NormalOperation to "ISTTOK:central:TMPump1-NormalOperation"; monitor TMPump1NormalOperation; - + short IsttokTMPump1_Power; assign IsttokTMPump1_Power to "ISTTOK:central:TMPump1-Power"; monitor IsttokTMPump1_Power; - + short IsttokTMPump1_Emergency; assign IsttokTMPump1_Emergency to "ISTTOK:central:TMPump1-Emergency"; monitor IsttokTMPump1_Emergency; - + short IsttokTMPump1_ManualValve; assign IsttokTMPump1_ManualValve to "ISTTOK:central:TMPump1-ManualValve"; monitor IsttokTMPump1_ManualValve; - + +/* short IsttokTMPump2_Emergency; assign IsttokTMPump2_Emergency to "ISTTOK:central:TMPump2-Emergency"; monitor IsttokTMPump2_Emergency; - +*/ + float IsttokRPump1_Pressure; -assign IsttokRPump1_Pressure to "ISTTOK:central:RPump1-Pressure"; +assign IsttokRPump1_Pressure to "ISTTOK:vacuum:RPump1-Pressure"; monitor IsttokRPump1_Pressure; - + +/* float IsttokRPump2_Pressure; assign IsttokRPump2_Pressure to "ISTTOK:central:RPump2-Pressure"; monitor IsttokRPump2_Pressure; @@ -182,61 +188,70 @@ monitor IsttokRPump2_Pressure; float IsttokVVesselTemperature; assign IsttokVVesselTemperature to "ISTTOK:temperature:VVessel-Temperature"; monitor IsttokVVesselTemperature; +*/ short IsttokShotBuzzer; assign IsttokShotBuzzer to "ISTTOK:central:Buzzer"; - + short IsttokShotLab_WarningLight; assign IsttokShotLab_WarningLight to "ISTTOK:central:Lab-WarningLight"; - + short IsttokShotGasIS_Valves; assign IsttokShotGasIS_Valves to "ISTTOK:central:GasIS-Valves"; - + short IsttokShotVVessel_Filament; assign IsttokShotVVessel_Filament to "ISTTOK:central:VVessel-Filament"; - + short IsttokShotCapBank_Charge; assign IsttokShotCapBank_Charge to "ISTTOK:central:CapBank-Charge"; - + short IsttokShotCapBank_Discharge; assign IsttokShotCapBank_Discharge to "ISTTOK:central:CapBank-Discharge"; - + short IsttokShotClean_TorContactor; assign IsttokShotClean_TorContactor to "ISTTOK:central:Clean-TorContactor"; - + short IsttokShotClean_TorPneuBreaker; assign IsttokShotClean_TorPneuBreaker to "ISTTOK:central:Clean-TorPneuBreaker"; - + short IsttokShotShot_TorPSTrigger; assign IsttokShotShot_TorPSTrigger to "ISTTOK:central:Shot-TorPSTrigger"; monitor IsttokShotShot_TorPSTrigger; - + short IsttokShotShot_TorPSDisable; assign IsttokShotShot_TorPSDisable to "ISTTOK:central:Shot-TorPSDisable"; - + short IsttokShotClean_PrimContactor; assign IsttokShotClean_PrimContactor to "ISTTOK:central:Clean-PrimContactor"; - + short IsttokShotClean_PrimPneuBreaker; assign IsttokShotClean_PrimPneuBreaker to "ISTTOK:central:Clean-PrimPneuBreaker"; - + short IsttokShotCountdown; assign IsttokShotCountdown to "ISTTOK:central:COUNTDOWN"; -monitor IsttokShotCountdown; - +monitor IsttokShotCountdown; + string IsttokShotCountdownScan; assign IsttokShotCountdownScan to "ISTTOK:central:COUNTDOWN.SCAN"; - + short IsttokEmergency; assign IsttokEmergency to "ISTTOK:central:Emergency"; monitor IsttokEmergency; - + short IsttokTTSystem_tzero; assign IsttokTTSystem_tzero to "ISTTOK:central:TTSystem-tzero"; monitor IsttokTTSystem_tzero; - + +short IsttokupsBatteryON; +assign IsttokupsBatteryON "{unit}:central:UPS-OnBattery"; +monitor IsttokupsBatteryON; + +short IsttokShutdown; +assign IsttokShutdown "ISTTOK:central:UPS-Shutdown"; +monitor IsttokShutdown; + //string tmp1_stat; - + /* Trace message record limited to 40 characters */ string msg; assign msg to "ISTTOK:central:TraceMessage.VAL"; @@ -252,68 +267,68 @@ ss PulseSequence { strcpy(msg, "INIT: Sequence Entry"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); - + strcpy(msg, "Initializing..."); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); - + IsttokShotCountdown = 160; pvPut(IsttokShotCountdown); - + // IsttokProcMode = OFF; // UPON POWER-DOWN OR FAILURE PREVENT TO ENTER WAITSHOT ON POWER-UP! // pvPut(IsttokProcMode); - + IsttokShotClean_PrimContactor = PCF_RELAY_OFF; pvPut(IsttokShotClean_PrimContactor); - + IsttokShotClean_PrimPneuBreaker = PCF_RELAY_OFF; pvPut(IsttokShotClean_PrimPneuBreaker); - + IsttokShotBuzzer = PCF_RELAY_OFF; pvPut(IsttokShotBuzzer); - + IsttokShotCapBank_Charge = PCF_RELAY_OFF; pvPut(IsttokShotCapBank_Charge); - + IsttokShotCapBank_Discharge = PCF_RELAY_OFF; pvPut(IsttokShotCapBank_Discharge); - + IsttokShotVVessel_Filament = PCF_RELAY_OFF; pvPut(IsttokShotVVessel_Filament); - + IsttokShotGasIS_Valves = PCF_RELAY_OFF; pvPut(IsttokShotGasIS_Valves); - + IsttokShotLab_WarningLight = PCF_RELAY_OFF; pvPut(IsttokShotLab_WarningLight); - + IsttokShotClean_TorPneuBreaker = PCF_RELAY_OFF; pvPut(IsttokShotClean_TorPneuBreaker); - + IsttokShotClean_TorContactor = PCF_RELAY_OFF; pvPut(IsttokShotClean_TorContactor); - + IsttokShotShot_TorPSDisable = PCF_RELAY_OFF; pvPut(IsttokShotShot_TorPSDisable); - + IsttokShotShot_TorPSTrigger= OFF; pvPut(IsttokShotShot_TorPSTrigger); - + IsttokTMPump1_ControllerOff = OFF; pvPut(IsttokTMPump1_ControllerOff); - + IsttokTMPump1_ControllerOn = OFF; pvPut(IsttokTMPump1_ControllerOn); - + IsttokTMPump1_MotorOff = OFF; pvPut(IsttokTMPump1_MotorOff); - + IsttokTMPump1_MotorOn = OFF; pvPut(IsttokTMPump1_MotorOn); - - IsttokTMPump2_Motor = PCF_RELAY_OFF; - pvPut(IsttokTMPump2_Motor); - + + // IsttokTMPump2_Motor = PCF_RELAY_OFF; + //pvPut(IsttokTMPump2_Motor); + if ((IsttokTMPump1_Power == PCF_INPUT_OFF)) { strcpy(msg, "TMP1 Controller is OFF"); pvPut(msg); @@ -331,7 +346,7 @@ ss PulseSequence { /* State change to Stopping */ // IsttokOPSTATE = POS_Stopping; // pvPut(IsttokOPSTATE); - } state Stopping + } state Stopping when (delay(5) && IsttokOPREQ == START ) { strcpy(msg, "State to Starting"); pvPut(msg); @@ -341,12 +356,13 @@ ss PulseSequence { // pvPut(IsttokOPSTATE); } state Starting } - /* State Stopped */ + +/*********** State Stopped ****************** */ state Stopped { - entry{ + entry{ IsttokLastOPSTATE = POS_Stopped; pvPut(IsttokLastOPSTATE); - } + } when(IsttokEmergency == ON){ strcpy(msg, "Emergency from Stopped"); pvPut(msg); @@ -355,19 +371,21 @@ ss PulseSequence { IsttokOPSTATE = POS_Stopped; pvPut(IsttokOPSTATE); } state Emergency - when (IsttokOPREQ == START) { + + when ((IsttokOPREQ == START) && (IsttokupsBatteryON != ON)) { strcpy(msg, "State to Starting"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); /* Pulse state change to Starting */ } state Starting } - /* State Starting */ + +/******** State Starting ***********************/ state Starting { - entry{ + entry{ IsttokOPSTATE = POS_Starting; pvPut(IsttokOPSTATE); - } + } when(IsttokEmergency == ON) { strcpy(msg, "Emergency from Starting"); pvPut(msg); @@ -380,39 +398,53 @@ ss PulseSequence { errlogSevPrintf(MINOR, "%s\n",msg); /* Pulse state change to Stopping */ } state Stopping + when (STARTINGSTATE == STRST_StartingEnd ) { - strcpy(msg, "State to Process"); + strcpy(msg, "State to Idle"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); - /* Pulse state change to Process*/ - } state Process + /* Pulse state change to Idle*/ + } state Idle } - /* State Process */ - state Process { - entry{ - IsttokOPSTATE = POS_Process; + +/********** State Idle ****************************/ + state Idle { + entry{ + IsttokOPSTATE = POS_Idle; pvPut(IsttokOPSTATE); - IsttokLastOPSTATE = POS_Process; + IsttokLastOPSTATE = POS_Idle; pvPut(IsttokLastOPSTATE); IsttokShotShot_TorPSDisable = PCF_RELAY_OFF; pvPut(IsttokShotShot_TorPSDisable); IsttokProcReq = STOP; pvPut(IsttokProcReq); - } + } + when (IsttokupsBatteryON == ON) { + strcpy(msg, "Power Emergency, go to Stopping"); + pvPut(msg); + errlogSevPrintf(MAJOR, "%s\n",msg); + IsttokOPREQ = STOP; + pvPut(IsttokOPREQ); + /* State change to Stopping */ + IsttokOPSTATE = POS_Stopping; + pvPut(IsttokOPSTATE); + } state Stopping + when(IsttokEmergency == ON){ - strcpy(msg, "Emergency from Process"); + strcpy(msg, "Emergency from Idle"); pvPut(msg); errlogSevPrintf(MAJOR, "%s\n",msg); /* Pulse state change to Emergency*/ } state Emergency - when ( pvStatus(IsttokRPump1_Pressure) != pvStatOK || pvStatus(IsttokRPump2_Pressure) != pvStatOK || - pvStatus(IsttokTMPump1_Emergency) != pvStatOK || pvStatus(IsttokTMPump2_Emergency) != pvStatOK) { + when ( pvStatus(IsttokRPump1_Pressure) != pvStatOK || pvStatus(IsttokTMPump1_Emergency) != pvStatOK ) { + //when ( pvStatus(IsttokRPump1_Pressure) != pvStatOK || pvStatus(IsttokRPump2_Pressure) != pvStatOK || + // pvStatus(IsttokTMPump1_Emergency) != pvStatOK || pvStatus(IsttokTMPump2_Emergency) != pvStatOK) { /* Vacuum emergency: Pulse state change to Stopping */ IsttokOPREQ = STOP; pvPut(IsttokOPREQ); - //strcpy(sendMail, "Vacuum Emergency while Process"); - sprintf(sendMail, "R1:%1.1e R2:%.1e T1:%d T2:%d",IsttokRPump1_Pressure,IsttokRPump2_Pressure,IsttokTMPump1_Emergency,IsttokTMPump2_Emergency); + //strcpy(sendMail, "Vacuum Emergency while Idle"); + sprintf(sendMail, "Rpump1:%1.1e TMP1:%d",IsttokRPump1_Pressure,IsttokTMPump1_Emergency); pvPut(sendMail); } state Stopping @@ -439,22 +471,24 @@ ss PulseSequence { /* Pulse state change to WaitShot */ } state WaitShot } - /* State Clean */ + +/******* State Clean ***************************/ state Clean { entry{ IsttokOPSTATE = POS_Clean; pvPut(IsttokOPSTATE); - } + } when ((IsttokProcReq==STOP) && (CLEANINGSTATE == CLNST_NonCleaning)) { - strcpy(msg, "State to Process F Clean"); + strcpy(msg, "State to Idle From Clean"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); - } state Process + } state Idle when (IsttokOPREQ == STOP) {} state Stopping - when ( pvStatus(IsttokTMPump1_Emergency) != pvStatOK || - pvStatus(IsttokTMPump2_Emergency) != pvStatOK) { + when ( pvStatus(IsttokTMPump1_Emergency) != pvStatOK) { + //when ( pvStatus(IsttokTMPump1_Emergency) != pvStatOK || + // pvStatus(IsttokTMPump2_Emergency) != pvStatOK) { /* Vacuum emergency: Pulse state change to Stopping */ IsttokOPREQ = STOP; pvPut(IsttokOPREQ); @@ -470,9 +504,10 @@ ss PulseSequence { /* Pulse state change to Emergency*/ } state Emergency } - /* State WaitShot */ + +/******** State WaitShot *************************/ state WaitShot { - entry{ + entry{ strcpy(msg, "Toroidal Shot Enable"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); @@ -480,7 +515,17 @@ ss PulseSequence { pvPut(IsttokShotShot_TorPSDisable); IsttokOPSTATE = POS_WaitShot; pvPut(IsttokOPSTATE); - } + } + when (IsttokupsBatteryON == ON) { + strcpy(msg, "Power Emergency, go to Stopping"); + pvPut(msg); + errlogSevPrintf(MAJOR, "%s\n",msg); + IsttokOPREQ = STOP; + pvPut(IsttokOPREQ); + /* State change to Stopping */ + IsttokOPSTATE = POS_Stopping; + pvPut(IsttokOPSTATE); + } state Stopping when(IsttokEmergency == ON){ strcpy(msg, "Emergency from WaitShot"); pvPut(msg); @@ -488,17 +533,18 @@ ss PulseSequence { /* Pulse state change to Emergency*/ } state Emergency when (IsttokProcReq==STOP ) { - strcpy(msg, "State to Process"); + strcpy(msg, "State to Idle"); pvPut(msg); errlogSevPrintf(MINOR, "%s\n",msg); - } state Process + } state Idle when (IsttokOPREQ == STOP) { /* Pulse state change to Stopping */ } state Stopping - when ( pvStatus(IsttokTMPump1_Emergency) != pvStatOK || - pvStatus(IsttokTMPump2_Emergency) != pvStatOK) { + when ( pvStatus(IsttokTMPump1_Emergency) != pvStatOK) { + //when ( pvStatus(IsttokTMPump1_Emergency) != pvStatOK || + // pvStatus(IsttokTMPump2_Emergency) != pvStatOK) { /* Vacuum emergency: Pulse state change to Stopping */ IsttokOPREQ = STOP; pvPut(IsttokOPREQ); @@ -507,9 +553,10 @@ ss PulseSequence { errlogSevPrintf(MAJOR, "%s\n",msg); } state Stopping } - /* State Stopping */ + + /* ************** State Stopping *********** */ state Stopping { - entry{ + entry{ /*Just to be sure */ IsttokProcReq = STOP; pvPut(IsttokProcReq); @@ -520,7 +567,7 @@ ss PulseSequence { pvPut(IsttokLastOPSTATE); } - when (IsttokOPREQ == START ) { + when ((IsttokOPREQ == START) && (IsttokupsBatteryON != ON) ) { strcpy(msg, "State to Starting"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); @@ -543,25 +590,25 @@ ss PulseSequence { errlogSevPrintf(MAJOR, "%s\n",msg); IsttokShotShot_TorPSDisable = PCF_RELAY_OFF; pvPut(IsttokShotShot_TorPSDisable); - + strcpy(msg, "EMERGENCY: CAPBANK Charge OFF"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); IsttokShotCapBank_Charge = PCF_RELAY_OFF; pvPut(IsttokShotCapBank_Charge); - + strcpy(msg, "EMERGENCY: CAPBANK CrowBar Close"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); IsttokShotCapBank_Discharge = PCF_RELAY_OFF; pvPut(IsttokShotCapBank_Discharge); - + strcpy(msg, "EMERGENCY: GIS Valves CLOSE"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); IsttokShotGasIS_Valves = PCF_RELAY_OFF; pvPut(IsttokShotGasIS_Valves); - + strcpy(msg, "EMERGENCY: Filament OFF"); pvPut(msg); errlogSevPrintf(MAJOR, "%s\n",msg); @@ -569,23 +616,23 @@ ss PulseSequence { pvPut(IsttokShotVVessel_Filament); } when (delay(1.0) && (IsttokEmergency == OFF) && (IsttokOPSTATE == POS_WaitShot || IsttokOPSTATE==POS_Clean) ){ - /* Pulse state change to Process */ - strcpy(msg, "State to Process"); + /* Pulse state change to Idle */ + strcpy(msg, "State to Idle"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); IsttokProcReq = STOP; pvPut(IsttokProcReq); - IsttokOPSTATE = POS_Process; + IsttokOPSTATE = POS_Idle; pvPut(IsttokOPSTATE); - } state Process - when (delay(1.0) && (IsttokEmergency == OFF) && (IsttokOPSTATE == POS_Process)){ - /* Pulse state change to Process */ - strcpy(msg, "State to Process"); + } state Idle + when (delay(1.0) && (IsttokEmergency == OFF) && (IsttokOPSTATE == POS_Idle)){ + /* Pulse state change to Idle */ + strcpy(msg, "State to Idle"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); - IsttokOPSTATE = POS_Process; + IsttokOPSTATE = POS_Idle; pvPut(IsttokOPSTATE); - } state Process + } state Idle when (delay(1.0) && (IsttokEmergency == OFF) && (IsttokOPSTATE == POS_Starting)){ // TODO Check these 2 transictions strcpy(msg, "State to Stopped"); @@ -599,7 +646,7 @@ ss PulseSequence { } state Stopped when (delay(1.0) && (IsttokEmergency == OFF) && (IsttokOPSTATE == POS_Stopped)){ - + strcpy(msg, "State to Stopped"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); @@ -677,8 +724,9 @@ ss StartingSequence { STARTINGSTATE = STRST_NonStarting; pvPut(STARTINGSTATE); } state NonStarting - when ( (pvStatus(IsttokRPump1_Pressure) == pvStatOK) && (pvStatus(IsttokRPump2_Pressure) == pvStatOK)) { - + //when ( (pvStatus(IsttokRPump1_Pressure) == pvStatOK) && (pvStatus(IsttokRPump2_Pressure) == pvStatOK)) { + when ( pvStatus(IsttokRPump1_Pressure) == pvStatOK) { + strcpy(msg, "TMP1 MotorOn ON" ); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); @@ -687,8 +735,8 @@ ss StartingSequence { strcpy(msg, "TMP2 Motor ON" ); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); - IsttokTMPump2_Motor = PCF_RELAY_ON; - pvPut(IsttokTMPump2_Motor); +// IsttokTMPump2_Motor = PCF_RELAY_ON; +// pvPut(IsttokTMPump2_Motor); STARTINGSTATE = STRST_Starting4; pvPut(STARTINGSTATE); } state Starting4 @@ -701,7 +749,7 @@ ss StartingSequence { //IsttokSTARTINGSTATE = STRST_NonStarting; //pvPut(IsttokSTARTINGSTATE); } state NonStarting - when (TMPump1NormalOperation == PCF_INPUT_ON) { // TODO insert TMP2 Test + when (TMPump1NormalOperation == PCF_INPUT_ON) { // TODO insert TMP2 Test strcpy(msg, "TMP1 operating Normal"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); @@ -721,15 +769,15 @@ ss CleaningSequence{ state NonCleaning{ entry{ strcpy(msg, "GIS Valves CLOSE"); - pvPut(msg); + pvPut(msg); IsttokShotGasIS_Valves = PCF_RELAY_OFF; pvPut(IsttokShotGasIS_Valves); - + strcpy(msg, "Filament OFF"); - pvPut(msg); + pvPut(msg); IsttokShotVVessel_Filament = PCF_RELAY_OFF; pvPut(IsttokShotVVessel_Filament); - + strcpy(msg, "Primary_CT OFF"); pvPut(msg); IsttokShotClean_PrimContactor = PCF_RELAY_OFF; @@ -848,7 +896,7 @@ ss CleaningSequence{ } state Cleaning5{ when (IsttokProcReq==STOP) { -// } state Process +// } state Idle // when(delay(1.0) && IsttokOPSTATE != POS_Clean){ strcpy(msg, "Toroidal-CT OFF"); pvPut(msg); @@ -861,14 +909,16 @@ ss CleaningSequence{ CLEANINGSTATE = CLNST_Cleaning4; pvPut(CLEANINGSTATE); } state Cleaning4 - when (pvSeverity(IsttokVVesselTemperature) >= pvSevrMAJOR) { - /* Temperature Limit Pulse state change to Process */ + /* + when (pvSeverity(IsttokVVesselTemperature) >= pvSevrMAJOR) { + // Temperature Limit Pulse state change to Idle IsttokProcReq = STOP; pvPut(IsttokProcReq); - strcpy(msg, "Temperature Limit-> State to Process"); + strcpy(msg, "Temperature Limit-> State to Idle"); pvPut(msg); errlogSevPrintf(MINOR, "%s\n",msg); } state Cleaning5 +*/ } } @@ -895,7 +945,7 @@ ss ShotSequence { } state ShotEnd } state ShotWaitTrg { - when ((IsttokShotCountdown > 1800) || (IsttokOPSTATE != POS_WaitShot)) { + when ((IsttokShotCountdown > 1800) || (IsttokOPSTATE != POS_WaitShot)) { strcpy(msg, "Shooting Out"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); @@ -921,7 +971,7 @@ ss ShotSequence { strcpy(msg, "Shoting 2 Out"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); - } state ShotWaitTrg + } state ShotWaitTrg when ((IsttokOPSTATE == POS_WaitShot) && (IsttokShotCountdown == -61)) { strcpy(msg, "Buzzer 1-Sound"); pvPut(msg); @@ -947,7 +997,7 @@ ss ShotSequence { strcpy(msg, "Shoting3 Out"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); - } state ShotWaitTrg + } state ShotWaitTrg when (IsttokShotCountdown == -60) { strcpy(msg, "GIS Valves OPEN"); pvPut(msg); @@ -1044,7 +1094,7 @@ ss ShotSequence { errlogSevPrintf(NO_ALARM, "%s\n",msg); // PS Trigger Pulse IsttokShotShot_TorPSTrigger = ON; - pvPut(IsttokShotShot_TorPSTrigger); + pvPut(IsttokShotShot_TorPSTrigger); WSHOTINGSTATE = WSHTST_Shoting9; pvPut(WSHOTINGSTATE); } state Shoting9 @@ -1125,13 +1175,13 @@ ss ShotSequence { } state ShotEnd } state ShotEnd { - when (IsttokShotCountdown > 160 || IsttokOPSTATE != POS_WaitShot) { + when (IsttokShotCountdown > 160 || IsttokOPSTATE != POS_WaitShot) { strcpy(msg, "Terminated"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n", msg); WSHOTINGSTATE = WSHTST_WaitTrg; pvPut(WSHOTINGSTATE); - } state ShotWaitTrg + } state ShotWaitTrg } } @@ -1139,7 +1189,7 @@ ss ShotSequence { ss StoppingSequence { state NonStopping { entry { - STOPPINGSTATE = STPST_NonStopping; + STOPPINGSTATE = STPST_NonStopping; pvPut(STOPPINGSTATE); } when (IsttokOPSTATE == POS_Stopping) { @@ -1150,25 +1200,25 @@ ss StoppingSequence { IsttokTMPump1_MotorOff = ON; pvPut(IsttokTMPump1_MotorOff); - IsttokTMPump2_Motor = PCF_RELAY_OFF; - pvPut(IsttokTMPump2_Motor); + // IsttokTMPump2_Motor = PCF_RELAY_OFF; + // pvPut(IsttokTMPump2_Motor); STOPPINGSTATE = STPST_Stopping1; pvPut(STOPPINGSTATE); - } state Stopping1 + } state Stopping1 } state Stopping1 { - when (IsttokOPSTATE != POS_Stopping ) { } state NonStopping - when (TMPump1NormalOperation == PCF_INPUT_OFF) { // TODO insert TMP2 Test + when (IsttokOPSTATE != POS_Stopping ) { } state NonStopping + when (TMPump1NormalOperation == PCF_INPUT_OFF) { // TODO insert TMP2 Test strcpy(msg, "TMP1 Stopping"); pvPut(msg); errlogSevPrintf(NO_ALARM, "%s\n",msg); STOPPINGSTATE = STPST_Stopping2; pvPut(STOPPINGSTATE); - } state Stopping2 - } + } state Stopping2 + } state Stopping2 { when (IsttokOPSTATE != POS_Stopping ) { - } state NonStopping + } state NonStopping when (delay(5.0) && IsttokTMPump1_ManualValve==OFF) { strcpy(msg, "Manual Valve Closed Checked"); pvPut(msg); @@ -1182,11 +1232,11 @@ ss StoppingSequence { pvPut(IsttokRPump2_Motor); STOPPINGSTATE = STPST_Stopping3; pvPut(STOPPINGSTATE); - } state Stopping3 + } state Stopping3 } state Stopping3 { when (IsttokOPSTATE != POS_Stopping ) { - } state NonStopping + } state NonStopping when (delay(5)) { IsttokRPump1_Valve = PCF_RELAY_ON; pvPut(IsttokRPump1_Valve); @@ -1197,15 +1247,15 @@ ss StoppingSequence { pvPut(IsttokRPump2_Valve); STOPPINGSTATE = STPST_StoppingEnd; pvPut(STOPPINGSTATE); - } state StoppingEnd - } + } state StoppingEnd + } state StoppingEnd { - when (IsttokOPSTATE != POS_Stopping ) { } state NonStopping + when (IsttokOPSTATE != POS_Stopping ) { } state NonStopping } } /**** END PROGRAM ***/ - + /* when (IsttokShotCountdown > 159) { strcpy(msg, "Toroidal Field Recovered" ); pvPut(msg); @@ -1229,12 +1279,12 @@ ss StoppingSequence { // pvPut(IsttokShotCountdownScan); // IsttokShotCountdown = 0; // pvPut(IsttokShotCountdown); - } state ShotWaitTrg + } state ShotWaitTrg } - entry{ + entry{ IsttokRPump1_Motor = PCF_RELAY_ON; pvPut(IsttokRPump1_Motor); strcpy(msg, "Rotary Pumps 1/2 OFF"); @@ -1242,7 +1292,7 @@ ss StoppingSequence { errlogSevPrintf(NO_ALARM, "%s\n",msg); IsttokRPump2_Motor = PCF_RELAY_ON; pvPut(IsttokRPump2_Motor); - //IsttokLastOPSTATE = POS_Process; + //IsttokLastOPSTATE = POS_Idle; //pvPut(IsttokLastOPSTATE); } // } state Stopping diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/Makefile b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/Makefile index 82c5d9c..f4d05bc 100644 --- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/Makefile +++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/Makefile @@ -4,18 +4,38 @@ include $(TOP)/configure/CONFIG #---------------------------------------- # ADD MACRO DEFINITIONS BELOW HERE +# Use typed rset structure (see 3.16.1 release notes) +USR_CPPFLAGS += -DUSE_TYPED_RSET + +# xxxRecord.h will be created from xxxRecord.dbd +#DBDINC += xxxRecord + +# Install xxxSupport.dbd into /dbd +#DBD += xxxSupport.dbd + # Build an IOC support library LIBRARY_IOC += ISTTOKrpiSupport -# Compile and add the code to the support library +# Compile and add code to the support library +#ISTTOKrpiSupport_SRCS += xxxRecord.c +#ISTTOKrpiSupport_SRCS += devXxxSoft.c # Link locally-provided code into the support library, -# rather than directly into the IOC application. -# This is required for Windows DLL builds. +# rather than directly into the IOC application, that +# causes problems on Windows DLL builds +#ISTTOKrpiSupport_SRCS += dbSubExample.c +#ISTTOKrpiSupport_SRCS += devISTTOKrpiVersion.c +#ISTTOKrpiSupport_SRCS += ISTTOKrpiHello.c ISTTOKrpiSupport_SRCS += initTrace.c ISTTOKrpiSupport_LIBS += $(EPICS_BASE_IOC_LIBS) +# Auto-generate a header file containing a version string. +# Version comes from the VCS if available, else date+time. +#GENVERSION = ISTTOKrpiVersion.h +# Macro name +#GENVERSIONMACRO = ISTTOKrpiVERSION + # Build the IOC application PROD_IOC = ISTTOKrpi @@ -27,6 +47,7 @@ ISTTOKrpi_DBD += base.dbd ISTTOKrpi_DBD += initTrace.dbd # Include dbd files from all support applications: ISTTOKrpi_DBD += asyn.dbd +#ISTTOKrpi_DBD += calc.dbd ISTTOKrpi_DBD += stream.dbd ISTTOKrpi_DBD += drvAsynI2C.dbd ISTTOKrpi_DBD += drvAsynSerialPort.dbd @@ -35,6 +56,7 @@ ISTTOKrpi_DBD += asSupport.dbd # Add all the support libraries needed by this IOC ISTTOKrpi_LIBS += asyn +#ISTTOKrpi_LIBS += calc ISTTOKrpi_LIBS += stream ISTTOKrpi_LIBS += drvAsynI2C ISTTOKrpi_LIBS += autosave @@ -52,14 +74,21 @@ ISTTOKrpi_LIBS += ISTTOKrpiSupport # To build SNL programs, SNCSEQ must be defined # in the /configure/RELEASE file ifneq ($(SNCSEQ),) - # Build sncExample into ISTTOKrpiSupport , Safe Mode : +s + # Build sncExample into ISTTOKrpiSupport , Safe Mode : +s IsttokSeqExec_SNCFLAGS += +r +s ISTTOKrpi_DBD += IsttokSeqExec.dbd # A .stt sequence program is *not* pre-processed: ISTTOKrpiSupport_SRCS += IsttokSeqExec.stt ISTTOKrpiSupport_LIBS += seq pv ISTTOKrpi_LIBS += seq pv +endif +# Link QSRV (pvAccess Server) if available +ifdef EPICS_QSRV_MAJOR_VERSION + ISTTOKrpi_LIBS += qsrv + ISTTOKrpi_LIBS += $(EPICS_BASE_PVA_CORE_LIBS) + ISTTOKrpi_DBD += PVAServerRegister.dbd + ISTTOKrpi_DBD += qsrv.dbd endif # Finally link IOC to the EPICS Base libraries @@ -69,3 +98,5 @@ include $(TOP)/configure/RULES #---------------------------------------- # ADD EXTRA GNUMAKE RULES BELOW HERE +# Explicit dependency needed for generated header file +devISTTOKrpiVersion$(DEP): $(COMMON_DIR)/$(GENVERSION) diff --git a/epics/iocs/ISTTOKrpi/bin/linux-arm/ISTTOKrpi b/epics/iocs/ISTTOKrpi/bin/linux-arm/ISTTOKrpi new file mode 100755 index 0000000..78da428 Binary files /dev/null and b/epics/iocs/ISTTOKrpi/bin/linux-arm/ISTTOKrpi differ diff --git a/epics/iocs/ISTTOKrpi/bin/linux-arm/sncProgram b/epics/iocs/ISTTOKrpi/bin/linux-arm/sncProgram new file mode 100755 index 0000000..856e04d Binary files /dev/null and b/epics/iocs/ISTTOKrpi/bin/linux-arm/sncProgram differ diff --git a/epics/iocs/ISTTOKrpi/configure/CONFIG_SITE b/epics/iocs/ISTTOKrpi/configure/CONFIG_SITE index 14d5d5b..212485e 100644 --- a/epics/iocs/ISTTOKrpi/configure/CONFIG_SITE +++ b/epics/iocs/ISTTOKrpi/configure/CONFIG_SITE @@ -23,8 +23,7 @@ CHECK_RELEASE = YES # To install files into a location other than $(TOP) define # INSTALL_LOCATION here. -INSTALL_LOCATION=/opt/epics/iocs/ISTTOKrpi -# +#INSTALL_LOCATION= # Set this when the IOC and build host use different paths # to the install location. This may be needed to boot from diff --git a/epics/iocs/ISTTOKrpi/configure/RELEASE b/epics/iocs/ISTTOKrpi/configure/RELEASE index af7a6c3..3576943 100644 --- a/epics/iocs/ISTTOKrpi/configure/RELEASE +++ b/epics/iocs/ISTTOKrpi/configure/RELEASE @@ -1,13 +1,12 @@ # RELEASE - Location of external support modules # -# IF YOU MAKE ANY CHANGES to this file you must subsequently -# do a "gnumake rebuild" in this application's top level -# directory. +# IF YOU CHANGE ANY PATHS in this file or make API changes to +# any modules it refers to, you should do a "make rebuild" in +# this application's top level directory. # -# The build process does not check dependencies against files -# that are outside this application, thus you should do a -# "gnumake rebuild" in the top level directory after EPICS_BASE -# or any other external module pointed to below is rebuilt. +# The EPICS build process does not check dependencies against +# any files from outside the application, so it is safest to +# rebuild it completely if any modules it depends on change. # # Host- or target-specific settings can be given in files named # RELEASE.$(EPICS_HOST_ARCH).Common @@ -15,7 +14,7 @@ # RELEASE.$(EPICS_HOST_ARCH).$(T_A) # # This file is parsed by both GNUmake and an EPICS Perl script, -# so it can ONLY contain definititions of paths to other support +# so it may ONLY contain definititions of paths to other support # modules, variable definitions that are used in module paths, # and include statements that pull in other RELEASE files. # Variables may be used before their values have been set. @@ -23,25 +22,21 @@ # the CONFIG_SITE file. # Variables and paths to dependent modules: -SUPPORT=$(EPICS_BASE)/../synApps_5_8/support +#MODULES = /path/to/modules +#MYMODULE = $(MODULES)/my-module # If using the sequencer, point SNCSEQ at its top directory: -SNCSEQ = $(SUPPORT)/seq-2-2-1 -ASYN = $(SUPPORT)/asyn-4-26 -STREAM = $(SUPPORT)/stream-2-6a -AUTOSAVE = $(SUPPORT)/autosave-5-6-1 -DRVASYNI2C = $(EPICS_BASE)/../modules/drvAsynI2C +#SNCSEQ = $(MODULES)/seq-ver -# # EPICS_BASE should appear last so earlier modules can override stuff: -EPICS_BASE = /usr/local/epics/base +EPICS_BASE = /home/pi/Apps/epics7/epics-base # Set RULES here if you want to use build rules from somewhere # other than EPICS_BASE: #RULES = $(MODULES)/build-rules -# These allow developers to override the RELEASE variable settings -# without having to modify the configure/RELEASE file itself. +# These lines allow developers to override these RELEASE settings +# without having to modify this file directly. -include $(TOP)/../RELEASE.local +-include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local -include $(TOP)/configure/RELEASE.local - diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/Makefile b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/Makefile index e064d73..e1b9aa4 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/Makefile +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/Makefile @@ -1,4 +1,5 @@ TOP = ../.. include $(TOP)/configure/CONFIG +ARCH = $(EPICS_HOST_ARCH) TARGETS = envPaths include $(TOP)/configure/RULES.ioc diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/access_security.acf b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/access_security.acf index 1892d1c..a94fc6e 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/access_security.acf +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/access_security.acf @@ -1,4 +1,5 @@ -UAG(uag) {pi,opertok,codac-dev,pricardofc} +#UAG(uag) {pi,root,opertok,codac-dev,pricardofc} +UAG(uag) {pi,root,opertok,codac-dev} HAG(hag) {rpi-isttok,opertok-desktop,atca2} ASG(DEFAULT) { RULE(1,READ) diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/envPaths b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/envPaths index 666b481..13171b5 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/envPaths +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/envPaths @@ -1,9 +1,10 @@ epicsEnvSet("IOC","iocISTTOKrpi") epicsEnvSet("TOP","/home/pi/ISTTOK/epics/iocs/ISTTOKrpi") -epicsEnvSet("SUPPORT","/usr/local/epics/base/../synApps_5_8/support") -epicsEnvSet("SNCSEQ","/usr/local/epics/base/../synApps_5_8/support/seq-2-2-1") -epicsEnvSet("ASYN","/usr/local/epics/base/../synApps_5_8/support/asyn-4-26") -epicsEnvSet("STREAM","/usr/local/epics/base/../synApps_5_8/support/stream-2-6a") -epicsEnvSet("AUTOSAVE","/usr/local/epics/base/../synApps_5_8/support/autosave-5-6-1") -epicsEnvSet("DRVASYNI2C","/usr/local/epics/base/../modules/drvAsynI2C") -epicsEnvSet("EPICS_BASE","/usr/local/epics/base") +epicsEnvSet("EPICS_BASE","/home/pi/Apps/epics7/epics-base") +epicsEnvSet("HOME","/home/pi") +epicsEnvSet("SUPPORT","/home/pi/Apps/epics7/support") +epicsEnvSet("ASYN","/home/pi/Apps/epics7/support/asyn") +epicsEnvSet("STREAM","/home/pi/Apps/epics7/support/StreamDevice") +epicsEnvSet("AUTOSAVE","/home/pi/Apps/epics7/support/autosave") +epicsEnvSet("DRVASYNI2C","/home/pi/Apps/epics7/support/drvAsynI2C") +epicsEnvSet("SNCSEQ","/home/pi/Apps/epics7/support/seq-2-2") diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req index 9436041..ad20912 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req @@ -9,10 +9,9 @@ ISTTOK:central:CLEANINGMANMODE.VAL ISTTOK:central:Emergency-UserButton.VAL ISTTOK:central:TMPump1-ManualValve.VAL ISTTOK:central:Shot-TorPSCurrent +ISTTOK:central:UPS-Shutdown #ALARM Limits -ISTTOK:central:RPump1-Pressure.HIGH -ISTTOK:central:RPump1-Pressure.HIHI -ISTTOK:central:RPump2-Pressure.HIGH -ISTTOK:central:RPump2-Pressure.HIHI +#ISTTOK:central:RPump2-Pressure.HIGH +#ISTTOK:central:RPump2-Pressure.HIHI diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt index 8514491..a07ec49 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt @@ -1,75 +1,8 @@ -ISTTOK:central:CurrentTime -ISTTOK:central:OPCALCSTATE -ISTTOK:central:STARTCALCSTATE -ISTTOK:central:STOPPINGCALCSTATE -ISTTOK:central:CLEANCALCSTATE -ISTTOK:central:WSHOTCALCSTATE -ISTTOK:central:COUNTDOWN -ISTTOK:central:COUNTER -ISTTOK:central:PCF8591:72:BYTE2_CH1 -ISTTOK:central:PCF8591:72:BYTE2_CH2 -ISTTOK:central:PCF8591:72:BYTE2_CH3 -ISTTOK:central:Emergency -ISTTOK:central:VVessel-Pressure -ISTTOK:central:RPump1-Pressure -ISTTOK:central:TMPump1-PressureAdmission -ISTTOK:central:RPump2-Pressure -ISTTOK:central:TMPump2-Speed -ISTTOK:central:TMPump2-Current -ISTTOK:central:Shot-TorPSCurrentImage -ISTTOK:central:PCF8574:56:REGISTER -ISTTOK:central:PCF8574:57:REGISTER -ISTTOK:central:PCF8574:60:REGISTER -ISTTOK:central:PCF8574:61:REGISTER -ISTTOK:central:PCF8591:72:CTRLREGISTER -ISTTOK:central:PULSE-NUMBER -ISTTOK:central:PCF8591:72:DAC -ISTTOK:central:TDA8444:32:DAC_CH0 -ISTTOK:central:TDA8444:32:DAC_CH1 -ISTTOK:central:TDA8444:32:DAC_CH2 -ISTTOK:central:TDA8444:32:DAC_CH3 -ISTTOK:central:TDA8444:32:DAC_CH4 -ISTTOK:central:TDA8444:32:DAC_CH5 -ISTTOK:central:TDA8444:32:DAC_CH6 -ISTTOK:central:Shot-TorPSCurrent -ISTTOK:SR_0_State -ISTTOK:SR_1_State -ISTTOK:SR_2_State -ISTTOK:SR_3_State -ISTTOK:SR_4_State -ISTTOK:SR_5_State -ISTTOK:SR_6_State -ISTTOK:SR_7_State ISTTOK:central:PCF8591:72:ADC_CH1 ISTTOK:central:PCF8591:72:ADC_CH2 ISTTOK:central:PCF8591:72:ADC_CH3 -ISTTOK:central:P001:M -ISTTOK:central:P001:E -ISTTOK:central:P002:M -ISTTOK:central:P002:E -ISTTOK:central:P003:M -ISTTOK:central:P003:E -ISTTOK:central:P004:M -ISTTOK:central:P004:E -ISTTOK:central:OPSTATE -ISTTOK:central:STARTINGSTATE -ISTTOK:central:CLEANINGSTATE -ISTTOK:central:WSHOTINGSTATE -ISTTOK:central:STOPPINGSTATE -ISTTOK:central:TMPump1-Power -ISTTOK:central:TMPump1-Emergency -ISTTOK:central:TMPump1-Acceleration -ISTTOK:central:TMPump1-NormalOperation -ISTTOK:central:TMPump2-Emergency -ISTTOK:central:TMPump2-Acceleration -ISTTOK:central:TTSystem-tzero -ISTTOK:central:Emergency-PhysButton -ISTTOK:central:TMPump1-ControllerOnInv -ISTTOK:central:TMPump1-ControllerOffInv -ISTTOK:central:TMPump1-MotorOnInv -ISTTOK:central:TMPump1-MotorOffInv -ISTTOK:central:BuzzerInv -ISTTOK:central:Shot-TorPSTriggerInv +ISTTOK:central:UPS-OnBattery +ISTTOK:central:UPS-Shutdown ISTTOK:central:OPREQ ISTTOK:central:CLEANINGMANMODE ISTTOK:central:FSTriggerStart @@ -102,6 +35,45 @@ ISTTOK:central:TMPump1-ManualValve ISTTOK:SR_heartbeat ISTTOK:SR_i_am_alive ISTTOK:SR_deadIfZero +ISTTOK:SR_disable +ISTTOK:central:PULSE-NUMBER +ISTTOK:central:PCF8591:72:DAC +ISTTOK:central:TDA8444:32:DAC_CH0 +ISTTOK:central:TDA8444:32:DAC_CH1 +ISTTOK:central:TDA8444:32:DAC_CH2 +ISTTOK:central:TDA8444:32:DAC_CH3 +ISTTOK:central:TDA8444:32:DAC_CH4 +ISTTOK:central:TDA8444:32:DAC_CH5 +ISTTOK:central:TDA8444:32:DAC_CH6 +ISTTOK:central:Shot-TorPSCurrent +ISTTOK:SR_0_State +ISTTOK:SR_1_State +ISTTOK:SR_2_State +ISTTOK:SR_3_State +ISTTOK:SR_4_State +ISTTOK:SR_5_State +ISTTOK:SR_6_State +ISTTOK:SR_7_State +ISTTOK:SR_disableMaxSecs +ISTTOK:central:PCF8574:56:REGISTER:READ:FNOUT +ISTTOK:central:PCF8574:57:REGISTER:READ:FNOUT +ISTTOK:central:OPCALCSTATE +ISTTOK:central:STARTCALCSTATE +ISTTOK:central:STOPPINGCALCSTATE +ISTTOK:central:CLEANCALCSTATE +ISTTOK:central:WSHOTCALCSTATE +ISTTOK:central:COUNTDOWN +ISTTOK:central:COUNTER +ISTTOK:central:PCF8591:72:BYTE2_CH1 +ISTTOK:central:PCF8591:72:BYTE2_CH2 +ISTTOK:central:PCF8591:72:BYTE2_CH3 +ISTTOK:central:Emergency +ISTTOK:central:TMPump1-ControllerOnInv +ISTTOK:central:TMPump1-ControllerOffInv +ISTTOK:central:TMPump1-MotorOnInv +ISTTOK:central:TMPump1-MotorOffInv +ISTTOK:central:BuzzerInv +ISTTOK:central:Shot-TorPSTriggerInv ISTTOK:central:LASTOPSTATE ISTTOK:SR_rebootStatus ISTTOK:SR_status @@ -113,13 +85,28 @@ ISTTOK:SR_4_Status ISTTOK:SR_5_Status ISTTOK:SR_6_Status ISTTOK:SR_7_Status +ISTTOK:central:TMPump1-Power +ISTTOK:central:TMPump1-Emergency +ISTTOK:central:TMPump1-Acceleration +ISTTOK:central:TMPump1-NormalOperation +ISTTOK:central:TMPump2-Emergency +ISTTOK:central:TMPump2-Acceleration +ISTTOK:central:TTSystem-tzero +ISTTOK:central:Emergency-PhysButton +ISTTOK:central:PCF8574:56:REGISTER +ISTTOK:central:PCF8574:57:REGISTER +ISTTOK:central:PCF8574:60:REGISTER +ISTTOK:central:PCF8574:61:REGISTER +ISTTOK:central:PCF8591:72:CTRLREGISTER ISTTOK:central:PCF8574:56:REGISTER:READ ISTTOK:central:PCF8574:57:REGISTER:READ ISTTOK:central:PCF8574:60:REGISTER:READ ISTTOK:central:PCF8574:61:REGISTER:READ +ISTTOK:central:TMPump2-Speed +ISTTOK:central:TMPump2-Current +ISTTOK:central:Shot-TorPSCurrentImage ISTTOK:central:TraceMessage ISTTOK:central:LogMessage -ISTTOK:central:RS485Debug ISTTOK:central:sendmail ISTTOK:SR_recentlyStr ISTTOK:SR_rebootStatusStr @@ -149,5 +136,9 @@ ISTTOK:SR_6_Time ISTTOK:SR_7_Name ISTTOK:SR_7_StatusStr ISTTOK:SR_7_Time -ISTTOK:central:PCF8574:56:REGISTER:READ:FNOUT -ISTTOK:central:PCF8574:57:REGISTER:READ:FNOUT +ISTTOK:central:OPSTATE +ISTTOK:central:STARTINGSTATE +ISTTOK:central:CLEANINGSTATE +ISTTOK:central:WSHOTINGSTATE +ISTTOK:central:STOPPINGSTATE +ISTTOK:central:CurrentTime diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav index 61ac337..558c939 100644 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav @@ -1,15 +1,12 @@ -# autosave R5.3 Automatically generated - DO NOT MODIFY - 200127-094325 -ISTTOK:central:PULSE-NUMBER.VAL 48422 -ISTTOK:central:LogMessage.VAL Emplastro esteve aqui +# autosave R5.3 Automatically generated - DO NOT MODIFY - 211129-172335 +ISTTOK:central:PULSE-NUMBER.VAL 0 +ISTTOK:central:LogMessage.VAL ISTTOK:central:LASTOPSTATE.VAL 5 -ISTTOK:central:OPREQ 1 +ISTTOK:central:OPREQ 0 ISTTOK:central:PROCESS-MODE.VAL 0 -ISTTOK:central:CLEANINGMANMODE.VAL 1 +ISTTOK:central:CLEANINGMANMODE.VAL 0 ISTTOK:central:Emergency-UserButton.VAL 0 ISTTOK:central:TMPump1-ManualValve.VAL 1 -ISTTOK:central:Shot-TorPSCurrent 34 -ISTTOK:central:RPump1-Pressure.HIGH 0 -ISTTOK:central:RPump1-Pressure.HIHI 0 -ISTTOK:central:RPump2-Pressure.HIGH 0 -ISTTOK:central:RPump2-Pressure.HIHI 0 +ISTTOK:central:Shot-TorPSCurrent 32 +ISTTOK:central:UPS-Shutdown 0 diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd index 280ab44..643fafd 100755 --- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd +++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd @@ -4,9 +4,9 @@ ## everywhere it appears in this file < envPaths -epicsEnvSet( "STREAM_PROTOCOL_PATH", "$(TOP)/protocols" ) +epicsEnvSet( "STREAM_PROTOCOL_PATH", "$(TOP)/db" ) epicsEnvSet( "SAVE_DIR", "$(TOP)/iocBoot/$(IOC)" ) -epicsEnvSet( "EPICS_CA_ADDR_LIST", "localhost 192.168.1.152") +epicsEnvSet( "EPICS_CA_ADDR_LIST", "localhost 192.168.1.120 192.168.1.152") cd "${TOP}" @@ -19,23 +19,24 @@ drvAsynI2CConfigure( "I2C", "/dev/i2c-1", 1 ) ## Load record instances dbLoadRecords("db/ISTTOKstates.db","P=ISTTOK:,R=central:") -dbLoadRecords("db/ISTTOKpcf8574.db","P=ISTTOK:,R=central:") -dbLoadRecords("db/ISTTOKpcf8591.db","P=ISTTOK:,R=central:") -dbLoadRecords("db/ISTTOKtda8444.db","P=ISTTOK:,R=central:") +dbLoadRecords("db/ISTTOKpcf8574.db","P=ISTTOK:,R=central:,BUS=I2C") +dbLoadRecords("db/ISTTOKpcf8591.db","P=ISTTOK:,R=central:,BUS=I2C") +dbLoadRecords("db/ISTTOKtda8444.db","P=ISTTOK:,R=central:,BUS=I2C") dbLoadRecords("db/ISTTOKmachineControl.db","P=ISTTOK:,R=central:") ## Load Serial drivers -drvAsynSerialPortConfigure("RS0","/dev/ttyUSB0") +#drvAsynSerialPortConfigure("RS0","/dev/ttyUSB0") #drvAsynSerialPortConfigure("RS0","/dev/ttyAMA0") -asynSetOption("RS0", 0, "baud", "9600") -asynSetOption("RS0", 0, "bits", "8") -asynSetOption("RS0", 0, "parity", "none") -asynSetOption("RS0", 0, "stop", "1") -asynSetOption("RS0", 0, "clocal", "Y") -asynSetOption("RS0", 0, "crtscts", "N") +#asynSetOption("RS0", 0, "baud", "9600") +#asynSetOption("RS0", 0, "bits", "8") +#asynSetOption("RS0", 0, "parity", "none") +#asynSetOption("RS0", 0, "stop", "1") +#asynSetOption("RS0", 0, "clocal", "Y") +#asynSetOption("RS0", 0, "crtscts", "N") -dbLoadRecords("db/ISTTOKpfeiffer.db","P=ISTTOK:,R=central:,bus=RS0") +# Pfeiffer sensor are connectoed to other RPI /(192.168.1.120) +#dbLoadRecords("db/ISTTOKpfeiffer.db","P=ISTTOK:,R=central:,bus=RS0") # connect to the MAIL server mail.ipfn.tecnico.ulisboa.pt # ,priority,noAutoConnect,noProcessEos @@ -43,10 +44,10 @@ drvAsynIPPortConfigure("L0","193.136.136.3:25",0,1,0) dbLoadRecords("db/sendmail.db", "P=ISTTOK:,PORT=L0,R=central:,L=0,A=0") -# Uncomment to Debug STREAM serial activity +# Uncomment to Debug STREAMDEVICE serial activity #var streamError 1 #var streamDebug 1 -#streamSetLogfile("logfile.txt") +streamSetLogfile("logfile.txt") ## Run this to trace the stages of iocInit #traceIocInit @@ -74,4 +75,4 @@ iocInit create_monitor_set("$(IOC).req", 30) ## Start any sequence programs , use safe mode -seq IsttokSeqExec +seq IsttokSeqExec "unit=ISTTOK" diff --git a/epics/iocs/ISTTOKrpi2/.gitignore b/epics/iocs/ISTTOKrpi2/.gitignore new file mode 100644 index 0000000..c567f5c --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/.gitignore @@ -0,0 +1,6 @@ +O.* +bin/* +iocBoot/iocISTTOKrpi2/save/* +db +dbd +configure diff --git a/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/ISTTOKpfeiffer.db b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/ISTTOKpfeiffer.db new file mode 100644 index 0000000..15d01fd --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/ISTTOKpfeiffer.db @@ -0,0 +1,131 @@ +# 8/5/2021 Only sensor 2 is working. Running with dspIC +# 20/9/2021 sensors 1,2,3 are working. Running with dspIC +record (longin, "$(P)$(R)P001:M") +{ + field (DESC, "getPressure001 $(bus)") + field (DTYP, "stream") + field (INP, "@pfeiffer.proto getPressure001($(P)$(R)P001:E) $(bus)") + field (SCAN, "I/O Intr") +# field (SCAN, "1 second") + field (FLNK, "$(P)$(R)TMPump1-PressureAdmission") +} +record (longin, "$(P)$(R)P001:E") +{ + field (DESC, "Pressure001 exponent $(bus)") +} +record (calc, "$(P)$(R)TMPump1-PressureAdmission") +{ + field(DESC, "ISTTOK:central:TMPump1-PressureAdmission") + field(INPA, "$(P)$(R)P001:M") + field(INPB, "$(P)$(R)P001:E") + field(CALC, "(A*0.001)* 10.0**(B-20)") + field(PREC, "3") + field(EGU, "mBar") + field(HIHI,"1.0e-2") + field(HIGH,"1.0e-3") +# field(LOW, "20.0") +# field(LOLO,"0.0") + field(HHSV,"MAJOR") + field(HSV, "MINOR") +# field(LSV, "MINOR") +# field(LLSV,"MAJOR") +} +record (longin, "$(P)$(R)P002:M") +{ + field (DESC, "getPressure002 $(bus)") + field (DTYP, "stream") + field (INP, "@pfeiffer.proto getPressure002($(P)$(R)P002:E) $(bus)") + field (SCAN, "I/O Intr") +# field (SCAN, "2 second") + field (FLNK, "$(P)$(R)RPump1-Pressure") +} +record (longin, "$(P)$(R)P002:E") +{ + field (DESC, "Pressure002 exponent $(bus)") +} +record (calc, "$(P)$(R)RPump1-Pressure") +{ + field (DESC, "ISTTOK:central:RPump1-Pressure") + field(INPA, "$(P)$(R)P002:M") + field(INPB, "$(P)$(R)P002:E") + field(CALC, "(A*0.001)*10.0**(B-20)") + field(PREC, "3") + field(EGU, "mBar") + field(HIHI,"1.0e-1") + field(HIGH,"5.0e-2") +# field(LOW, "20.0") +# field(LOLO,"0.0") + field(HHSV,"MAJOR") + field(HSV, "MINOR") +# field(LSV, "MINOR") +# field(LLSV,"MAJOR") +} + +record (longin, "$(P)$(R)P003:M") +{ + field (DESC, "getPressure003 Mantissa $(bus)") + field (DTYP, "stream") + field (INP, "@pfeiffer.proto getPressure003($(P)$(R)P003:E) $(bus)") +# field (SCAN, "1 second") + field (SCAN, "I/O Intr") + field (FLNK, "$(P)$(R)VVessel-Pressure") +} + +record (longin, "$(P)$(R)P003:E") +{ + field (DESC, "Pressure003 Exponent $(bus)") +} +record (calc, "$(P)$(R)VVessel-Pressure") +{ + field (DESC, "ISTTOK:central:VVessel-Pressure") + field(INPA, "$(P)$(R)P003:M") + field(INPB, "$(P)$(R)P003:E") + field(CALC, "(A*0.001)*10.0**(B-20)") + field(PREC, "3") + field(EGU, "mBar") + field(HIHI,"1.0e-1") + field(HIGH,"1.0e-2") + field(HHSV,"MAJOR") + field(HSV, "MINOR") +} + + +record (longin, "$(P)$(R)P004:M") +{ + field (DESC, "getPressure004 Mantissa $(bus)") + field (DTYP, "stream") + field (INP, "@pfeiffer.proto getPressure004($(P)$(R)P004:E) $(bus)") +# field (SCAN, "1 second") +# field (SCAN, "I/O Intr") + field (FLNK, "$(P)$(R)RPump2-Pressure") +} +record (longin, "$(P)$(R)P004:E") +{ + field (DESC, "Pressure004 Exponent $(bus)") +} + +record (calc, "$(P)$(R)RPump2-Pressure") +{ + field(DESC, "ISTTOK:central:RPump2-Pressure") + field(INPA, "$(P)$(R)P004:M") + field(INPB, "$(P)$(R)P004:E") + field(CALC, "(A*0.001)* 10.0**(B-20)") + field(PREC, "3") + field(EGU, "mBar") +# field(HIHI,"1.0e-1") +# field(HIGH,"5.0e-3") +# field(LOW, "20.0") +# field(LOLO,"0.0") +# field(HHSV,"MAJOR") +# field(HSV, "MINOR") +# field(LSV, "MINOR") +# field(LLSV,"MAJOR") +} + +record(stringout,"$(P)$(R)RS485Debug") { + field(DESC, "") + field(DTYP, "stream") + field(OUT, "@pfeiffer.proto debug $(bus)") + field(VAL,"") +} + diff --git a/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/Makefile b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/Makefile new file mode 100644 index 0000000..9cb608e --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/Makefile @@ -0,0 +1,20 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +#DB += xxx.db +DB += ISTTOKpfeiffer.db +DB += pfeiffer.proto + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/pfeiffer.proto b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/pfeiffer.proto new file mode 100644 index 0000000..9c118b7 --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/pfeiffer.proto @@ -0,0 +1,45 @@ +Terminator=CR; +MaxInput = 30; +ExtraInput = Ignore; + +# in millisecond +#ReadTimeout = 1500; +#ReplyTimeout = 100; +#PollPeriod = $ReplyTimeout; +#Integer. Affects first in command in I/O Intr mode (see chapter Record Processing). +PollPeriod = 250; + + +# Using redirection to read 2 records, mantissa and exponent +getPressure001 { +# out "0010074002=?106"; + in "0011074006%4u%(\$1)2u%+"; +} +# out "0020074002=?107"; +getPressure002 { + in "0021074006%4u%(\$1)2u%+"; +} +getPressure003 { +# out "0030074002=?108"; + in "0031074006%4u%(\$1)2u%+"; +} +getPressure004 { +# out "0040074002=?109"; + in "0041074006%4u%(\$1)2u%+"; +} +# +# in "0031074006%4u%(\$1)2u%*3u"; +# +#getPressureE003 { +# in "0031074006%*4u%2u%*3u"; +#} + +# Connect a stringout record to this to get +# a generic command interface. +# After processing finishes, the record contains the reply. + +debug { + ExtraInput = Ignore; + out "%s"; in "%39c" +} + diff --git a/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Makefile b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Makefile new file mode 100644 index 0000000..10e0126 --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Makefile @@ -0,0 +1,8 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/ISTTOKrpi2Main.cpp b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/ISTTOKrpi2Main.cpp new file mode 100644 index 0000000..8592f8d --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/ISTTOKrpi2Main.cpp @@ -0,0 +1,23 @@ +/* ISTTOKrpi2Main.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/Makefile b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/Makefile new file mode 100644 index 0000000..d2ea8cb --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/Makefile @@ -0,0 +1,49 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#============================= + +#============================= +# Build the IOC application + +PROD_IOC = ISTTOKrpi2 +# ISTTOKrpi2.dbd will be created and installed +DBD += ISTTOKrpi2.dbd + +# ISTTOKrpi2.dbd will be made up from these files: +ISTTOKrpi2_DBD += base.dbd + +# Include dbd files from all support applications: +#ISTTOKrpi2_DBD += xxx.dbd +ISTTOKrpi2_DBD += asyn.dbd +ISTTOKrpi2_DBD += stream.dbd +ISTTOKrpi2_DBD += drvAsynSerialPort.dbd +ISTTOKrpi2_DBD += asSupport.dbd + +# Add all the support libraries needed by this IOC +#ISTTOKrpi2_LIBS += xxx +ISTTOKrpi2_LIBS += asyn +ISTTOKrpi2_LIBS += stream +ISTTOKrpi2_LIBS += autosave + +# ISTTOKrpi2_registerRecordDeviceDriver.cpp derives from ISTTOKrpi2.dbd +ISTTOKrpi2_SRCS += ISTTOKrpi2_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +ISTTOKrpi2_SRCS_DEFAULT += ISTTOKrpi2Main.cpp +ISTTOKrpi2_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#ISTTOKrpi2_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +# Finally link to the EPICS Base libraries +ISTTOKrpi2_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/epics/iocs/ISTTOKrpi2/Makefile b/epics/iocs/ISTTOKrpi2/Makefile new file mode 100644 index 0000000..19c9068 --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/Makefile @@ -0,0 +1,31 @@ +# Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG + +# Directories to build, any order +DIRS += configure +DIRS += $(wildcard *Sup) +DIRS += $(wildcard *App) +DIRS += $(wildcard *Top) +DIRS += $(wildcard iocBoot) + +# The build order is controlled by these dependency rules: + +# All dirs except configure depend on configure +$(foreach dir, $(filter-out configure, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += configure)) + +# Any *App dirs depend on all *Sup dirs +$(foreach dir, $(filter %App, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS)))) + +# Any *Top dirs depend on all *Sup and *App dirs +$(foreach dir, $(filter %Top, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS)))) + +# iocBoot depends on all *App dirs +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +# Add any additional dependency rules here: + +include $(TOP)/configure/RULES_TOP diff --git a/epics/iocs/ISTTOKrpi2/iocBoot/Makefile b/epics/iocs/ISTTOKrpi2/iocBoot/Makefile new file mode 100644 index 0000000..91e47d0 --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/iocBoot/Makefile @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/Makefile b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/Makefile new file mode 100644 index 0000000..e1b9aa4 --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = $(EPICS_HOST_ARCH) +TARGETS = envPaths +include $(TOP)/configure/RULES.ioc diff --git a/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/envPaths b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/envPaths new file mode 100644 index 0000000..9cb26c0 --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/envPaths @@ -0,0 +1,8 @@ +epicsEnvSet("IOC","iocISTTOKrpi2") +epicsEnvSet("TOP","/home/pi/ISTTOK/epics/iocs/ISTTOKrpi2") +epicsEnvSet("EPICS_BASE","/home/pi/EPICS/epics-base") +epicsEnvSet("HOME","/home/pi") +epicsEnvSet("SUPPORT","/home/pi/EPICS/support") +epicsEnvSet("ASYN","/home/pi/EPICS/support/asyn") +epicsEnvSet("STREAM","/home/pi/EPICS/support/stream") +epicsEnvSet("AUTOSAVE","/home/pi/EPICS/support/autosave") diff --git a/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/iocISTTOKrpi2.req b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/iocISTTOKrpi2.req new file mode 100644 index 0000000..9c5542e --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/iocISTTOKrpi2.req @@ -0,0 +1,4 @@ +#ALARM Limits +ISTTOK:vacuum:RPump1-Pressure.HIGH +ISTTOK:vacuum:RPump1-Pressure.HIHI + diff --git a/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/save/iocISTTOKrpi2.sav b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/save/iocISTTOKrpi2.sav new file mode 100755 index 0000000..8a0fdb4 --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/save/iocISTTOKrpi2.sav @@ -0,0 +1,4 @@ +# autosave R5.3 Automatically generated - DO NOT MODIFY - 211011-110712 +ISTTOK:vacuum:RPump1-Pressure.HIGH 0.05 +ISTTOK:vacuum:RPump1-Pressure.HIHI 0.1 + diff --git a/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/st.cmd b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/st.cmd new file mode 100755 index 0000000..6c0c55d --- /dev/null +++ b/epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/st.cmd @@ -0,0 +1,53 @@ +#!../../bin/linux-arm/ISTTOKrpi2 + +#- You may have to change ISTTOKrpi2 to something else +#- everywhere it appears in this file + +< envPaths +epicsEnvSet( "STREAM_PROTOCOL_PATH", "$(TOP)/db" ) +epicsEnvSet( "SAVE_DIR", "$(TOP)/iocBoot/$(IOC)" ) + +cd "${TOP}" + +## Register all support components +dbLoadDatabase "dbd/ISTTOKrpi2.dbd" +ISTTOKrpi2_registerRecordDeviceDriver pdbbase + +## Load record instances +#dbLoadRecords("db/xxx.db","user=pi") +## Load Serial drivers +drvAsynSerialPortConfigure("RS0","/dev/ttyUSB0") +#drvAsynSerialPortConfigure("RS0","/dev/ttyAMA0") + +asynSetOption("RS0", 0, "baud", "9600") +asynSetOption("RS0", 0, "bits", "8") +asynSetOption("RS0", 0, "parity", "none") +asynSetOption("RS0", 0, "stop", "1") +asynSetOption("RS0", 0, "clocal", "Y") +asynSetOption("RS0", 0, "crtscts", "N") + +dbLoadRecords("db/ISTTOKpfeiffer.db","P=ISTTOK:,R=vacuum:,bus=RS0") +# Uncomment to Debug STREAM serial activity +#var streamError 1 +#var streamDebug 1 +#streamSetLogfile("stream_logfile.txt") + +#save_restoreSet_status_prefix("$(IOC):") +save_restoreSet_status_prefix("ISTTOK:") +set_requestfile_path("$(SAVE_DIR)") +set_savefile_path("$(SAVE_DIR)/save") +save_restoreSet_NumSeqFiles(3) +save_restoreSet_SeqPeriodInSeconds(600) +set_pass0_restoreFile("$(IOC).sav") +set_pass1_restoreFile("$(IOC).sav") +#dbLoadRecords("$(AUTOSAVE)/asApp/Db/save_restoreStatus.db", "P=ISTTOK:") + +cd "${TOP}/iocBoot/${IOC}" +iocInit + +# Create request file and start periodic 'save’ +# makeAutosaveFileFromDbInfo("$(SAVE_DIR)/$(IOC).req", "autosaveFields") +create_monitor_set("$(IOC).req", 30) + +## Start any sequence programs +#seq sncxxx,"user=pi" diff --git a/epics/iocs/RELEASE.local b/epics/iocs/RELEASE.local new file mode 100644 index 0000000..ff879f5 --- /dev/null +++ b/epics/iocs/RELEASE.local @@ -0,0 +1,34 @@ +#RELEASE Location of external products +HOME=/home/pi +SUPPORT=$(HOME)/Apps/epics7/support +# +# +ASYN=$(SUPPORT)/asyn +STREAM=$(SUPPORT)/StreamDevice +#CALC=$(SUPPORT)/calc +AUTOSAVE = $(SUPPORT)/autosave + +## Using this driver in combination with streamDevice +## requires a workaround forbidding read queries with +## a max length of 256 byte. To compile the driver with +## with workaround enabled, uncomment the following line +#in configure/RELEASE +#STREAM_WORKAROUND = 1 +DRVASYNI2C =$(SUPPORT)/drvAsynI2C +SNCSEQ=$(SUPPORT)/seq-2-2 +# +# SEQ is required for testIPServer +#SNCSEQ=$(SUPPORT)/seq-2-2-5 +SNCSEQ= + +## For sCalcout support in asynOctet - applications include asynCalc.dbd +#CALC=$(SUPPORT)/calc-3-7-3 +CALC= +PCRE= + +# If CALC was built with SSCAN support then SSCAN must be defined for testEpicsApp +#SSCAN=$(SUPPORT)/sscan-2-11-3 + +# EPICS_BASE 3.14.6 or later is required +EPICS_BASE=/home/pi/EPICS/epics-base +