Merge branch 'master' of https://git.ipfn.tecnico.ulisboa.pt/r/ISTTOK
This commit is contained in:
@@ -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"
|
||||
```
|
||||
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 <anyname>.db template is not named <anyname>*.template add
|
||||
# <anyname>_TEMPLATE = <templatename>
|
||||
|
||||
@@ -8,7 +8,7 @@ ExtraInput = Error;
|
||||
|
||||
rReg {
|
||||
out ${1};
|
||||
in "%.1r";
|
||||
in "%01r";
|
||||
}
|
||||
|
||||
## @init { rReg; }
|
||||
@@ -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
|
||||
@@ -45,4 +45,3 @@ wDac {
|
||||
out ${1} 64 "%.1r";
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Terminator = "";
|
||||
LockTimeout = 500;
|
||||
LockTimeout = 200;
|
||||
ReplyTimeout = 100;
|
||||
ReadTimeout = 100;
|
||||
WriteTimeout = 100;
|
||||
@@ -1,4 +1,5 @@
|
||||
/**
|
||||
/** vim: set filetype=c :
|
||||
* Use :SyntasticToggleMode
|
||||
*
|
||||
* Project : ISTTOK slow Control Sequencer
|
||||
* Docs: https://www-csr.bessy.de/control/SoftDist/sequencer/
|
||||
@@ -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;
|
||||
@@ -63,7 +66,7 @@ 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;
|
||||
@@ -148,8 +151,8 @@ 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";
|
||||
@@ -167,14 +170,17 @@ 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,6 +188,7 @@ monitor IsttokRPump2_Pressure;
|
||||
float IsttokVVesselTemperature;
|
||||
assign IsttokVVesselTemperature to "ISTTOK:temperature:VVessel-Temperature";
|
||||
monitor IsttokVVesselTemperature;
|
||||
*/
|
||||
|
||||
short IsttokShotBuzzer;
|
||||
assign IsttokShotBuzzer to "ISTTOK:central:Buzzer";
|
||||
@@ -235,6 +242,14 @@ 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 */
|
||||
@@ -311,8 +326,8 @@ ss PulseSequence {
|
||||
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");
|
||||
@@ -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);
|
||||
@@ -481,6 +516,16 @@ ss PulseSequence {
|
||||
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,7 +553,8 @@ ss PulseSequence {
|
||||
errlogSevPrintf(MAJOR, "%s\n",msg);
|
||||
} state Stopping
|
||||
}
|
||||
/* State Stopping */
|
||||
|
||||
/* ************** State Stopping *********** */
|
||||
state Stopping {
|
||||
entry{
|
||||
/*Just to be sure */
|
||||
@@ -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);
|
||||
@@ -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");
|
||||
@@ -677,7 +724,8 @@ 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);
|
||||
@@ -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
|
||||
@@ -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
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1150,8 +1200,8 @@ 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
|
||||
@@ -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
|
||||
|
||||
@@ -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 <top>/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 <top>/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)
|
||||
|
||||
BIN
epics/iocs/ISTTOKrpi/bin/linux-arm/ISTTOKrpi
Executable file
BIN
epics/iocs/ISTTOKrpi/bin/linux-arm/ISTTOKrpi
Executable file
Binary file not shown.
BIN
epics/iocs/ISTTOKrpi/bin/linux-arm/sncProgram
Executable file
BIN
epics/iocs/ISTTOKrpi/bin/linux-arm/sncProgram
Executable file
Binary file not shown.
@@ -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
|
||||
#</absolute/path/to/install/top>
|
||||
#INSTALL_LOCATION=</absolute/path/to/install/top>
|
||||
|
||||
# Set this when the IOC and build host use different paths
|
||||
# to the install location. This may be needed to boot from
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
TOP = ../..
|
||||
include $(TOP)/configure/CONFIG
|
||||
ARCH = $(EPICS_HOST_ARCH)
|
||||
TARGETS = envPaths
|
||||
include $(TOP)/configure/RULES.ioc
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
<END>
|
||||
|
||||
@@ -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"
|
||||
|
||||
6
epics/iocs/ISTTOKrpi2/.gitignore
vendored
Normal file
6
epics/iocs/ISTTOKrpi2/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
O.*
|
||||
bin/*
|
||||
iocBoot/iocISTTOKrpi2/save/*
|
||||
db
|
||||
dbd
|
||||
configure
|
||||
131
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/ISTTOKpfeiffer.db
Normal file
131
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/ISTTOKpfeiffer.db
Normal file
@@ -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,"")
|
||||
}
|
||||
|
||||
20
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/Makefile
Normal file
20
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/Makefile
Normal file
@@ -0,0 +1,20 @@
|
||||
TOP=../..
|
||||
include $(TOP)/configure/CONFIG
|
||||
#----------------------------------------
|
||||
# ADD MACRO DEFINITIONS AFTER THIS LINE
|
||||
|
||||
#----------------------------------------------------
|
||||
# Create and install (or just install) into <top>/db
|
||||
# databases, templates, substitutions like this
|
||||
#DB += xxx.db
|
||||
DB += ISTTOKpfeiffer.db
|
||||
DB += pfeiffer.proto
|
||||
|
||||
#----------------------------------------------------
|
||||
# If <anyname>.db template is not named <anyname>*.template add
|
||||
# <anyname>_template = <templatename>
|
||||
|
||||
include $(TOP)/configure/RULES
|
||||
#----------------------------------------
|
||||
# ADD RULES AFTER THIS LINE
|
||||
|
||||
45
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/pfeiffer.proto
Normal file
45
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Db/pfeiffer.proto
Normal file
@@ -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%+<sum8>";
|
||||
}
|
||||
# out "0020074002=?107";
|
||||
getPressure002 {
|
||||
in "0021074006%4u%(\$1)2u%+<sum8>";
|
||||
}
|
||||
getPressure003 {
|
||||
# out "0030074002=?108";
|
||||
in "0031074006%4u%(\$1)2u%+<sum8>";
|
||||
}
|
||||
getPressure004 {
|
||||
# out "0040074002=?109";
|
||||
in "0041074006%4u%(\$1)2u%+<sum8>";
|
||||
}
|
||||
#
|
||||
# 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"
|
||||
}
|
||||
|
||||
8
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Makefile
Normal file
8
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/Makefile
Normal file
@@ -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
|
||||
|
||||
23
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/ISTTOKrpi2Main.cpp
Normal file
23
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/ISTTOKrpi2Main.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
/* ISTTOKrpi2Main.cpp */
|
||||
/* Author: Marty Kraimer Date: 17MAR2000 */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#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);
|
||||
}
|
||||
49
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/Makefile
Normal file
49
epics/iocs/ISTTOKrpi2/ISTTOKrpi2App/src/Makefile
Normal file
@@ -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
|
||||
|
||||
31
epics/iocs/ISTTOKrpi2/Makefile
Normal file
31
epics/iocs/ISTTOKrpi2/Makefile
Normal file
@@ -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
|
||||
6
epics/iocs/ISTTOKrpi2/iocBoot/Makefile
Normal file
6
epics/iocs/ISTTOKrpi2/iocBoot/Makefile
Normal file
@@ -0,0 +1,6 @@
|
||||
TOP = ..
|
||||
include $(TOP)/configure/CONFIG
|
||||
DIRS += $(wildcard *ioc*)
|
||||
DIRS += $(wildcard as*)
|
||||
include $(CONFIG)/RULES_DIRS
|
||||
|
||||
5
epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/Makefile
Normal file
5
epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/Makefile
Normal file
@@ -0,0 +1,5 @@
|
||||
TOP = ../..
|
||||
include $(TOP)/configure/CONFIG
|
||||
ARCH = $(EPICS_HOST_ARCH)
|
||||
TARGETS = envPaths
|
||||
include $(TOP)/configure/RULES.ioc
|
||||
8
epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/envPaths
Normal file
8
epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/envPaths
Normal file
@@ -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")
|
||||
@@ -0,0 +1,4 @@
|
||||
#ALARM Limits
|
||||
ISTTOK:vacuum:RPump1-Pressure.HIGH
|
||||
ISTTOK:vacuum:RPump1-Pressure.HIHI
|
||||
|
||||
4
epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/save/iocISTTOKrpi2.sav
Executable file
4
epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/save/iocISTTOKrpi2.sav
Executable file
@@ -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
|
||||
<END>
|
||||
53
epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/st.cmd
Executable file
53
epics/iocs/ISTTOKrpi2/iocBoot/iocISTTOKrpi2/st.cmd
Executable file
@@ -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"
|
||||
34
epics/iocs/RELEASE.local
Normal file
34
epics/iocs/RELEASE.local
Normal file
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user