diff --git a/epics/README.md b/epics/README.md
index 65e4af4..1abd8ff 100644
--- a/epics/README.md
+++ b/epics/README.md
@@ -114,15 +114,16 @@ Process Value in this IOC Server:
### Central Control/Vacuum Node
- Vacuum Sensors
-- Pffeifer rotatory vacuum pump
+- Pffeifer rotatory vacuum pumpa (*RPump1*)
- Edwards electro valve
-- Seiko Seiki turbomolecular pump and control unit
-- Main State Machine
+- Seiko Seiki turbomolecular pump and control unit (model SCU-400)
+- Main State Machine, see [source](https://git.ipfn.tecnico.ulisboa.pt/blob/ISTTOK.git/master/epics%2Fiocs%2FISTTOKrpi%2FISTTOKrpiApp%2Fsrc%2FIsttokSeqExec.stt)
#### Hardware Platform
-1. A Raspberry Pi 3, running a linux distribution..
+1. A Raspberry Pi running a linux distribution..
+ * Raspberry Pi 2 Model B Rev 1.1 hardware. `# cat /proc/cpuinfo | grep Model`
* Has a USB/RS485 port for monitoring pressure (to be connected soon)
-2. Two Interface Boards, Velleman Model [k8000](https://www.velleman.eu/products/view/?id=9383)..
+2. Two Interface Boards, Velleman Model [k8000](https://www.velleman.eu/products/view/?id=9383)..
* connected to raspberry Pi through I2C interface;
* 8 isolated output connected to the relays (6 relays installed for the rotatory control)
* 4 isolated outputs connected to SEIKO unit controller
@@ -136,15 +137,16 @@ Process Value in this IOC Server:
* IP addr:192.168.1.110 ( 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 v. base-3.15.5 (in /usr/local/epics) including modules:
- * synApps_5_8
- * asyn-4-26
- * seq-2-2-1
- * autosave-5-6-1
- * IOC installed in '/opt/epics/iocs/'
+ * EPICS v7 base-7.0 from epics [github](https://github.com/epics-base)
+ * (in /home/pi/Apps/epics7/epics-base) including modules:
+ * asynDriver [asyn](https://github.com/epics-modules/asyn)
+ * [StreamDevice](https://paulscherrerinstitute.github.io/StreamDevice)
+ * State Notation Language and Sequence v.2.2 [seq](https://www-csr.bessy.de/control/SoftDist/sequencer)
+ * [autosave](https://github.com/epics-modules/autosave)
+ * IOC installed in '/home/pi/ISTTOK/epics/iocs/ISTTOKrpi'
* Running in `screen deamon` (see `/etc/rc.local`)
- For installation EPICS in Rpi see this [link](prjemian.github.io/epicspi)
+ For installation EPICS in Linux/raspian see this [link](https://docs.epics-controls.org/projects/how-tos/en/latest/getting-started/installation.html)
#### Process Variables
Process Variables in this IOC Server:
@@ -161,6 +163,8 @@ Process Variables in this IOC Server:
|ISTTOK:central:COUNTDOWN | mbbi | no |
|ISTTOK:central:PULSE-NUMBER | longout | yes |
|ISTTOK:central:OPSTATE |longout | yes |
+|ISTTOK:central:UPS-OnBattery | bo | no |
+|ISTTOK:central:UPS-Shutdown | bo | no |
|ISTTOK:central:CurrentTime | stringin | no |
|ISTTOK:central:TraceMessage | stringout | yes |
|ISTTOK:central:LogMessage | stringout | yes |
@@ -180,7 +184,7 @@ Process Variables in this IOC Server:
|ISTTOK:central:TMPump1-NormalOperation | bi | 7 |
----------
-* Connected to PCF8574 I2C Address = 57
+* Connected to PCF8574 I2C Address = 57 (Bottom Valleman board)
|PV Name | PV Type | Bit |
|:----------|-------|---:|
@@ -192,7 +196,7 @@ Process Variables in this IOC Server:
|ISTTOK:central:TTSystem-tzero| bi | 7 |
----------
-* Connected to PCF8574 Address = 60 (Top Valleman)
+* Connected to PCF8574 Address = 60 (Top Valleman Board)
|PV Name | PV Type | Bit | Relay #/(NO/NC)|
|:----------|-------|---:|
@@ -205,7 +209,7 @@ Process Variables in this IOC Server:
----------
-* Connected to TDA8444 DAC @ address 0x20=d32 (Bottom Valleman)
+* Connected to TDA8444 DAC @ address 0x20=d32 (Bottom Valleman Board)
|PV Name |PV Type |Archive|
|:----------|-------|---:|
@@ -227,18 +231,28 @@ Process Variables in this IOC Server:
| ISTTOK:central:Shot-TorPSCurrentImage"| ai | ch3 | no |
----------
-* Connected to RS485 Bus (Not yet)
+* Connected to RS485 Bus (Using USB */dev/ttyUSB0*)
-|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 |
+|PV Name |PV Type |Archive| RS485 request command|
+|:----------|-------|---:|---|
+|ISTTOK:central:VVessel-Pressure | ai | yes | out "0010074002=?106"|
+|ISTTOK:central:RPump1-Pressure | ai | yes | out "0020074002=?107" |
+|ISTTOK:central:RPump2-Pressure (Disabled) | ai | yes | |
+|ISTTOK:central:TMPump1-PressureAdmission | ai | yes | out "0030074002=?108" |
----------
+* Connected to [Seeeduino](https://wiki.seeedstudio.com/Grove-4-Channel_SPDT_Relay) Grove - 4-Channel
+SPDT Relay Address = 17
-### Vacuum Node (temporary)
+|PV Name | PV Type | Bit | Relay NO/NC|
+|:----------|-------|---:|
+|ISTTOK:central:GasIS-Valves| bo | 0 | NO |
+|ISTTOK:central:PrimPneuBreaker| bo | 1 | NO |
+|ISTTOK:central:CapBank-Discharge| bo | 2 | NO |
+|ISTTOK:central:Clean-TorPneuBreaker| bo | 3 | NO |
+
+
+### Vacuum Node (**Not used, backup server only**)
- Vacuum Pfeiffer Sensors (RS485)
#### Hardware Platform
@@ -252,10 +266,10 @@ Process Variables in this IOC Server:
|PV Name |PV Type |Archive|
|:----------|-------|---:|
-| ISTTOK:vacuum:RPump1-Pressure | ai | yes |
-|ISTTOK:vacuum:RPump2-Pressure | ai | yes |
-|ISTTOK:vacuum:TMPump1-PressureAdmission | ai | yes |
-|ISTTOK:vacuum:VVessel-Pressure | ai | yes |
+| ISTTOK:vacuum:RPump1-Pressure (not used)| ai | yes |
+|ISTTOK:vacuum:RPump2-Pressure (not used) | ai | yes |
+|ISTTOK:vacuum:TMPump1-PressureAdmission (not used)| ai | yes |
+|ISTTOK:vacuum:VVessel-Pressure (not used) | ai | yes |
----------
#### Software Platform
@@ -290,7 +304,7 @@ openjdk-8-jre linux package
### EPICS Channel Access Configuration
```
-export EPICS_CA_ADDR_LIST="192.168.1.110 192.168.1.120 192.168.1.152"
+export EPICS_CA_ADDR_LIST="192.168.1.110 192.168.1.152"
export EPICS_CA_AUTO_ADDR_LIST="NO"
```
diff --git a/epics/html/wsgi/wsgi_isttok_status.py b/epics/html/wsgi/wsgi_isttok_status.py
index 0f3ce00..d68db9b 100644
--- a/epics/html/wsgi/wsgi_isttok_status.py
+++ b/epics/html/wsgi/wsgi_isttok_status.py
@@ -1,38 +1,63 @@
-# https://tecadmin.net/install-apache-mod-wsgi-on-ubuntu-16-04-xenial
-# Include in /etc/apache2/conf-available/mod-wsgi.conf :
-# WSGIScriptAlias /isttok /var/www/html/wsgi_isttok_status.py
-# and
-# systemctl restart apache2
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# if you change this script "touch" it to reload by apache
+# e.g touch /var/www/html/wsgi_isttok_status.py
+"""
+Created on December 8 16:34:35 2019
+ https://tecadmin.net/install-apache-mod-wsgi-on-ubuntu-16-04-xenial
+
+ Install:
+ Include in /etc/apache2/conf-available/mod-wsgi.conf :
+ WSGIScriptAlias /isttok /var/www/html/wsgi_isttok_status.py
+ and do:
+ systemctl restart apache2
+
+@author: bernardo carvalho@IPFN
+"""
#
-#import epics
from epics import caget, caput, cainfo
import os
+#os.environ['EPICS_CA_ADDR_LIST'] = 'localhost 192.168.1.110 192.168.1.120'
os.environ['EPICS_CA_ADDR_LIST'] = 'localhost 192.168.1.110'
os.environ['EPICS_CA_AUTO_ADDR_LIST'] = 'NO'
def application(environ,start_response):
status = '200 OK'
- RPump1press = caget('ISTTOK:central:RPump1-Pressure')
- RPump2press = caget('ISTTOK:central:RPump2-Pressure')
- TMPump1press = caget('ISTTOK:central:TMPump1-PressureAdmission')
- VVesselpress = caget('ISTTOK:central:VVessel-Pressure')
- rpiCurrentTime = caget('ISTTOK:central:CurrentTime')
- opState = caget('ISTTOK:central:OPSTATE.VAL')
- pulseNum = caget('ISTTOK:central:PULSE-NUMBER')
+ RPump1press = caget('ISTTOK:central:RPump1-Pressure', as_string=True)
+# RPump2press = caget('ISTTOK:central:RPump2-Pressure')
+ TMPump1press = caget('ISTTOK:central:TMPump1-PressureAdmission', as_string=True)
+ VVesselpress = caget('ISTTOK:central:VVessel-Pressure', as_string=True)
+# RPump1press = caget('ISTTOK:vacuum:RPump1-Pressure')
+# RPump2press = caget('ISTTOK:vacuum:RPump2-Pressure')
+# TMPump1press = caget('ISTTOK:vacuum:TMPump1-PressureAdmission')
+# VVesselpress = caget('ISTTOK:vacuum:VVessel-Pressure')
+ rpiCurrentTime = caget('ISTTOK:central:CurrentTime', as_string=True)
+ opState = caget('ISTTOK:central:OPSTATE.VAL', as_string=True)
+ pulseNum = caget('ISTTOK:central:PULSE-NUMBER', as_string=True)
+ OnBattery = caget('ISTTOK:central:UPS-OnBattery', as_string=True)
+# cainfo not working
+ RPump1Info = cainfo("ISTTOK:central:RPump1-Pressure", print_out=False)
html = '\n' \
- '
\n' \
- ' ISTTOK Present Condition
\n'
- html += 'RPump1-Pressure: ' + str(RPump1press) + ' mBar
'
- html += 'RPump2-Pressure: ' + str(RPump2press) + ' mBar
'
- html += 'TMPump1-PressureAdmission: ' + str(TMPump1press) + ' mBar
'
- html += 'VVessel-Pressure: ' + str(VVesselpress) + ' mBar
'
- html += 'OPSTATE: ' + str(opState) + '
'
- html += 'PULSE-NUMBER: ' + str(pulseNum) + '
'
- html += 'Rpi CurrentTime: ' + str(rpiCurrentTime) + '
'
+ ' ISTTOK Status page' \
+ ' ' \
+ '\n ISTTOK Present Condition
\n'
+# html += 'RPump1-Pressure: ' + str(RPump1press) + ' mBar
'
+ html += 'RPump1-Pressure: ' + RPump1press + ' mBar
'
+ # html += 'RPump2-Pressure: ' + str(RPump2press) + ' mBar
'
+ html += 'TMPump1-PressureAdmission: ' + TMPump1press + ' mBar
'
+ html += 'VVessel-Pressure: ' + VVesselpress + ' mBar
'
+ html += 'OPSTATE: ' + opState + ', UPS-OnBattery: '+ OnBattery+ '
'
+ html += 'Note: you can try to login to rpi-isttok machine and do: '
+ html += '
caput ISTTOK:central:OPREQ START
'
+ html += 'PULSE-NUMBER: ' + pulseNum + '
'
+ html += 'Rpi CurrentTime: ' + rpiCurrentTime + '
'
+ html += ' ' + RPump1Info + '
'
html += '\n' \
'\n'
- response_header = [('Content-type','text/html')]
+ response_header = [('Content-type','text/html'),
+ ('Content-Length', str(len(html)))]
start_response(status,response_header)
- html = bytes(html, encoding= 'utf-8')
- return [html]
+ return [html.encode('UTF-8')]
+# html = bytes(html, encoding= 'utf-8')
+# return [html]
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKmachineControl.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKmachineControl.db
index 8165284..d705ea7 100644
--- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKmachineControl.db
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKmachineControl.db
@@ -27,7 +27,8 @@ record(bo, "$(P)$(R)TMPump1-ControllerOn" ) {
field(ZNAM, "Off" )
field(ONAM, "Pulse" )
field(HIGH, "2.5")
- field(FLNK, "$(P)$(R)TMPump1-ControllerOnInv" )
+# Disabled until further notice
+# field(FLNK, "$(P)$(R)TMPump1-ControllerOnInv" )
field(VAL,"0")
}
record(calcout, "$(P)$(R)TMPump1-ControllerOnInv") {
@@ -43,7 +44,8 @@ record(bo, "$(P)$(R)TMPump1-ControllerOff" ) {
field(ZNAM, "Off" )
field(ONAM, "Pulse" )
field(HIGH, "2.5")
- field(FLNK, "$(P)$(R)TMPump1-ControllerOffInv" )
+# Disabled until further notice
+# field(FLNK, "$(P)$(R)TMPump1-ControllerOffInv" )
field(VAL,"0")
}
@@ -321,17 +323,6 @@ record(bo, "$(P)$(R)Clean-TorContactor" ) {
###############
###############
-############################
-# TOR CLEAN BREAKER ON/OFF #
-############################
-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")
-}
-
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" )
@@ -381,17 +372,6 @@ record(bo, "$(P)$(R)Clean-PrimContactor" ) {
field(VAL,"1")
}
-####################################
-### PRIMARY CLEAN BREAKER ON/OFF ###
-####################################
-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")
-}
##################################
# GIS VALVES ON/OFF #
@@ -399,23 +379,12 @@ 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)SEEED4RELAY:17:REGISTER.B0 PP" )
+ field( ZNAM, "OFF" )
+ field( ONAM, "ON" )
+ field(VAL,"0")
}
-##########################################
-# CAP BANK DISCHARGE ON/OFF #
-##########################################
-record(bo, "$(P)$(R)CapBank-Discharge" ) {
- 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")
-}
#record(bo,"$(P)$(R)Primary-PressureCondition"){
# field(ZNAM, "OFF" )
@@ -442,3 +411,57 @@ record(bo, "$(P)$(R)TMPump1-ManualValve"){
field( ZNAM, "Closed")
field( ONAM, "Open")
}
+
+### SEEED 4 RELAY BOARD
+#
+#
+
+##################################
+# GIS VALVES ON/OFF #
+##################################
+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)SEEED4RELAY:17:REGISTER.B0 PP" )
+ field( ZNAM, "OFF" )
+ field( ONAM, "ON" )
+ field(VAL,"0")
+ field(OSV,"MINOR")
+}
+
+####################################
+### PRIMARY CLEAN BREAKER ON/OFF ###
+####################################
+record(bo, "$(P)$(R)Clean-PrimPneuBreaker"){
+#record(bo, "$(P)$(R)PrimaryCleanBreakerOnOff"){
+ field( DESC, "Primary Cleaning OnOff")
+ field( OUT, "$(P)$(R)SEEED4RELAY:17:REGISTER.B1 PP" )
+ field( ZNAM, "OFF" )
+ field( ONAM, "ON" )
+ field(VAL,"0")
+ field(OSV,"MAJOR")
+}
+##########################################
+# CAP BANK DISCHARGE ON/OFF #
+##########################################
+record(bo, "$(P)$(R)CapBank-Discharge" ) {
+ field(DESC,"Liga o circuito de descarga do ELCO ")
+ field( OUT,"$(P)$(R)SEEED4RELAY:17:REGISTER.B2 PP" )
+ field( ZNAM,"OFF" )
+ field( ONAM,"ON" )
+ field( VAL,"0")
+ field(OSV,"MINOR")
+}
+############################
+# TOR CLEAN BREAKER ON/OFF #
+############################
+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)SEEED4RELAY:17:REGISTER.B3 PP" )
+ field(ZNAM,"OFF" )
+ field(ONAM, "ON" )
+ field(VAL,"0")
+ field(OSV,"MAJOR")
+}
+
+
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db
index 304a697..d6bb322 100644
--- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpcf8591.db
@@ -94,6 +94,8 @@ record(ai, "$(P)$(R)Shot-TorPSCurrentImage" ) {
field(DTYP, "Raw Soft Channel" )
field(INP, "$(P)$(R)PCF8591:72:BYTE2_CH3 PP NMS")
field(SCAN, ".2 second")
+#Scan Disable Input Link Value
+ field(DISA, "1")
field(ASLO, "39.215686275" )
field(AOFF, "0.0" )
field(EGU, "A" )
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpfeiffer.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpfeiffer.db
index 1abf55e..997e6aa 100644
--- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpfeiffer.db
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKpfeiffer.db
@@ -1,121 +1,133 @@
+# vim: sta:et:sw=4:ts=4:sts=4
# 8/5/2021 Only sensor 2 is working. Running with dspIC
# 20/9/2021 sensors 1,2,3 are working. Running with dspIC
# 20/9/2021 sensors 1,2,3 are working. Running with tty USB
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")
+ 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(PHAS, "1")
+ field (FLNK, "$(P)$(R)VVessel-Pressure")
}
record (longin, "$(P)$(R)P001:E")
{
- field (DESC, "Pressure001 exponent $(bus)")
+ field (DESC, "Pressure001 exponent $(bus)")
}
-record (calc, "$(P)$(R)TMPump1-PressureAdmission")
+record (calc, "$(P)$(R)VVessel-Pressure")
{
- 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 (DESC, "ISTTOK:central:VVessel-Pressure")
+ # Maximize Status and Severity, MSS propagate all alarms
+ field(INPA, "$(P)$(R)P001:M MSS")
+ 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,"1.0e-9")
+ field(LOLO,"0.5e-9")
# field(LOW, "20.0")
# field(LOLO,"0.0")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
-# field(LSV, "MINOR")
-# field(LLSV,"MAJOR")
+ field(LSV, "MINOR")
+ field(LLSV,"MAJOR")
}
# out "0020074002=?107";
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, "1 second")
- field (FLNK, "$(P)$(R)RPump1-Pressure")
+ field (DESC, "getPressure002 $(bus)")
+ field (DTYP, "stream")
+ field (INP, "@pfeiffer.proto getPressure002($(P)$(R)P002:E) $(bus)")
+# field (SCAN, "I/O Intr")
+ field (SCAN, "1 second")
+ field(PHAS, "0")
+ field (FLNK, "$(P)$(R)RPump1-Pressure")
}
record (longin, "$(P)$(R)P002:E")
{
- field (DESC, "Pressure002 exponent $(bus)")
+ 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 (DESC, "ISTTOK:central:RPump1-Pressure")
+ field(INPA, "$(P)$(R)P002:M MSS")
+ 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")
+# field(LLSV,"MAJOR")
}
# out "0030074002=?108";
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")
+ field (DESC, "getPressure003 Mantissa $(bus)")
+ field (DTYP, "stream")
+ field (INP, "@pfeiffer.proto getPressure003($(P)$(R)P003:E) $(bus)")
+ field (SCAN, "1 second")
+ field(PHAS, "2")
+# field (SCAN, "I/O Intr")
+ field (FLNK, "$(P)$(R)TMPump1-PressureAdmission")
}
record (longin, "$(P)$(R)P003:E")
{
- field (DESC, "Pressure003 Exponent $(bus)")
+ field (DESC, "Pressure003 Exponent $(bus)")
}
-record (calc, "$(P)$(R)VVessel-Pressure")
+
+record (calc, "$(P)$(R)TMPump1-PressureAdmission")
{
- 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")
+ field(DESC, "ISTTOK:central:TMPump1-PressureAdmission")
+ field(INPA, "$(P)$(R)P003:M MSS")
+ 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(LOW,"1.0e-9")
+ field(LOLO,"0.5e-9")
+ field(HHSV,"MAJOR")
+ field(HSV, "MINOR")
+ field(LSV, "MINOR")
+ field(LLSV,"MAJOR")
}
# out "0040074002=?109";
# NOT connected 26/10/2021
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")
+ 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)")
+ 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(DESC, "ISTTOK:central:RPump2-Pressure")
+ field(INPA, "$(P)$(R)P004:M MSS")
+ 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")
@@ -123,13 +135,13 @@ record (calc, "$(P)$(R)RPump2-Pressure")
# field(HHSV,"MAJOR")
# field(HSV, "MINOR")
# field(LSV, "MINOR")
-# field(LLSV,"MAJOR")
+# field(LLSV,"MAJOR")
}
record(stringout,"$(P)$(R)RS485Debug") {
- field(DESC, "")
- field(DTYP, "stream")
- field(OUT, "@pfeiffer.proto debug $(bus)")
- field(VAL,"")
+ field(DESC, "")
+ field(DTYP, "stream")
+ field(OUT, "@pfeiffer.proto debug $(bus)")
+ field(VAL,"")
}
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db
index 02a55c6..1ce0a08 100644
--- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/ISTTOKstates.db
@@ -1,3 +1,4 @@
+# vim: sta:et:sw=4:ts=4:sts=4
#
# Project : ISTTOK slow Control
#
@@ -13,257 +14,279 @@
##
record(mbbi, "$(P)$(R)OPSTATE") {
- field(DESC, "Multiple Pulse Sequence State")
- field(ZRVL, "0")
- field(ONVL, "1")
- field(TWVL, "2")
- field(THVL, "3")
- field(FRVL, "4")
- field(FVVL, "5")
- field(SXVL, "6")
- field(SVVL, "7")
- field(ZRST, "Stopped")
- field(ONST, "Starting")
- field(TWST, "Idle")
- field(THST, "Clean")
- field(FRST, "WaitShot")
- field(FVST, "Stopping")
- field(SXST, "Emergency")
- field(SVST, "UPSEmergency")
- field(VAL, "0")
+ field(DESC, "Multiple Pulse Sequence State")
+ field(ZRVL, "0")
+ field(ONVL, "1")
+ field(TWVL, "2")
+ field(THVL, "3")
+ field(FRVL, "4")
+ field(FVVL, "5")
+ field(SXVL, "6")
+ field(SVVL, "7")
+ field(ZRST, "Stopped")
+ field(ONST, "Starting")
+ field(TWST, "Idle")
+ field(THST, "Clean")
+ field(FRST, "WaitShot")
+ field(FVST, "Stopping")
+ field(SXST, "Emergency")
+ field(SVST, "UPSEmergency")
+ field(VAL, "0")
+ field(FLNK, "$(P)$(R)OPCALCSTATE")
+ #field(PINI, "YES")
}
record(mbbo, "$(P)$(R)LASTOPSTATE") {
- info(autosaveFields, "VAL")
- field(DESC, "Pulse Sequence Last Saved State")
- field(ZRVL, "0")
- field(ONVL, "1")
- field(TWVL, "2")
- field(THVL, "3")
- field(FRVL, "4")
- field(FVVL, "5")
- field(SXVL, "6")
- field(SVVL, "7")
- field(ZRST, "Stopped")
- field(ONST, "Starting")
- field(TWST, "Idle")
- field(THST, "Clean")
- field(FRST, "WaitShot")
- field(FVST, "Stopping")
- field(SXST, "Emergency")
- field(SVST, "UPSEmergency")
-# field(VAL, "0")
+ info(autosaveFields, "VAL")
+ field(DESC, "Pulse Sequence Last Saved State")
+ field(ZRVL, "0")
+ field(ONVL, "1")
+ field(TWVL, "2")
+ field(THVL, "3")
+ field(FRVL, "4")
+ field(FVVL, "5")
+ field(SXVL, "6")
+ field(SVVL, "7")
+ field(ZRST, "Stopped")
+ field(ONST, "Starting")
+ field(TWST, "Idle")
+ field(THST, "Clean")
+ field(FRST, "WaitShot")
+ field(FVST, "Stopping")
+ field(SXST, "Emergency")
+ field(SVST, "UPSEmergency")
+ field(PINI, "YES")
+# field(VAL, "0")
}
+# record for bit leds
record(calc, "$(P)$(R)OPCALCSTATE") {
- field(DESC, "Pulse Calculated State")
- field(CALC,"2^A")
- field(SCAN,"1 second")
- field(INPA,"$(P)$(R)OPSTATE.VAL PP NMS")
+ field(DESC, "Pulse Calculated State")
+ field(CALC,"2^A")
+ #field(SCAN,"1 second")
+ field(INPA,"$(P)$(R)OPSTATE.VAL NPP NMS")
}
record(calc, "$(P)$(R)STARTCALCSTATE") {
- field(DESC, "Start Calculated State")
- field(CALC,"2^A")
- field(SCAN,"1 second")
- field(INPA,"$(P)$(R)STARTINGSTATE.VAL PP NMS")
+ field(DESC, "Start Calculated State")
+ field(CALC,"2^A")
+ field(SCAN,"1 second")
+ field(INPA,"$(P)$(R)STARTINGSTATE.VAL PP NMS")
}
record(calc, "$(P)$(R)STOPPINGCALCSTATE") {
- field(DESC, "Stop Calculated State")
- field(CALC,"2^A")
- field(SCAN,"1 second")
- field(INPA,"$(P)$(R)STOPPINGSTATE.VAL PP NMS")
+ field(DESC, "Stop Calculated State")
+ field(CALC,"2^A")
+ field(SCAN,"1 second")
+ field(INPA,"$(P)$(R)STOPPINGSTATE.VAL PP NMS")
}
record(calc, "$(P)$(R)CLEANCALCSTATE") {
- field(DESC, "Clean Automatic Calculated State")
- field(CALC,"(2^(A+1))-1")
- field(SCAN,"1 second")
- field(INPA,"$(P)$(R)CLEANINGSTATE.VAL PP NMS")
+ field(DESC, "Clean Automatic Calculated State")
+ field(CALC,"(2^(A+1))-1")
+ field(SCAN,"1 second")
+ field(INPA,"$(P)$(R)CLEANINGSTATE.VAL PP NMS")
}
record(calc, "$(P)$(R)WSHOTCALCSTATE") {
- field(DESC, "WaitShot Calculated State")
- field(CALC,"2^A")
- field(SCAN,"1 second")
- field(INPA,"$(P)$(R)WSHOTINGSTATE.VAL PP NMS")
+ field(DESC, "WaitShot Calculated State")
+ field(CALC,"2^A")
+ field(SCAN,"1 second")
+ field(INPA,"$(P)$(R)WSHOTINGSTATE.VAL PP NMS")
}
#record(ai, "$(P)$(R)Temperature_0") {
-# field(DESC, "ISTTOK Temperature 0 Calculated")
-# field(EGU, "C")
-# field(SCAN,"1 second")
+# field(DESC, "ISTTOK Temperature 0 Calculated")
+# field(EGU, "C")
+# 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")
+ info(autosaveFields, "VAL STAT")
+ field(DESC, "Main APC UPS On Battery status")
+ field(VAL, "0")
+ field(PINI, "YES")
+ 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")
+ # info(autosaveFields, "VAL STAT")
+ field(DESC, "Main APC UPS Shutdown request")
+ field(VAL, "0")
+ field(ZNAM, "OFF")
+ field(ONAM, "ON")
field(OSV, "MAJOR")
+ field(PINI, "YES")
}
record(bo, "$(P)$(R)OPREQ") {
- info(autosaveFields, "VAL")
- field(DESC, "Pulse Sequence Start/Stop")
-# field(VAL, "0")
- field(ZNAM, "STOP")
- field(ONAM, "START")
+ info(autosaveFields, "VAL")
+ field(DESC, "Pulse Sequence Start/Stop")
+# field(VAL, "0")
+ field(PINI, "YES")
+ field(ZNAM, "STOP")
+ field(ONAM, "START")
}
record(bo, "$(P)$(R)CLEANINGMANMODE") {
- info(autosaveFields, "VAL")
- field(DESC, "Cleaning Manual/Auto")
- info(autosaveFields, "VAL")
-# field(VAL, "1")
- field(ZNAM, "M")
- field(ONAM, "A")
+ info(autosaveFields, "VAL")
+ field(DESC, "Cleaning Manual/Auto")
+ info(autosaveFields, "VAL")
+# field(VAL, "1")
+ field(ZNAM, "M")
+ field(ONAM, "A")
}
record(bo, "$(P)$(R)FSTriggerStart") {
- field(DESC, "FireSignal Trigger Start")
- field(VAL, "0")
- field(ZNAM, "STOP")
- field(ONAM, "START")
+ field(DESC, "FireSignal Trigger Start")
+ field(VAL, "0")
+ field(PINI, "YES")
+ field(ZNAM, "STOP")
+ field(ONAM, "START")
}
record(bo, "$(P)$(R)PROCESS-MODE") {
- info(autosaveFields, "VAL")
- field(DESC, "Plasma Process Mode")
- #field(VAL, "0")
- field(ZNAM, "CLEAN")
- field(ONAM, "SHOT")
+ info(autosaveFields, "VAL")
+ field(DESC, "Plasma Process Mode")
+ #field(VAL, "0")
+ #field(PINI, "YES")
+ field(ZNAM, "CLEAN")
+ field(ONAM, "SHOT")
}
record(bo, "$(P)$(R)PROCESS-REQ") {
- field(DESC, "Plasma Process sub-states Start/Stop")
- field(VAL, "0")
- field(ZNAM, "STOP")
- field(ONAM, "START")
+ field(DESC, "Plasma Process sub-states Start/Stop")
+ field(VAL, "0")
+ field(PINI, "YES")
+ field(ZNAM, "STOP")
+ field(ONAM, "START")
+ field(SCAN,"Passive")
+ field(FLNK, "$(P)$(R)PULSE-NUMBER")
}
record(bo, "$(P)$(R)AUTHORISATION") {
- field(DESC, "Pulse Sequence Authorisation Start/Abort")
- field(ZNAM, "ABORT")
- field(ONAM, "START")
- field(VAL, "0")
+ field(DESC, "Pulse Sequence Authorisation Start/Abort")
+ field(ZNAM, "ABORT")
+ field(ONAM, "START")
+ field(VAL, "0")
}
-record(longout, "$(P)$(R)PULSE-NUMBER") {
- info(autosaveFields, "VAL")
- field(DESC, "Pulse Number")
+record(calc, "$(P)$(R)PULSE-NUMBER") {
+ info(autosaveFields, "VAL")
+ field(DESC, "Pulse Number")
+ field(INPA, "$(P)$(R)PROCESS-REQ NPP")
+ field(INPB, "$(P)$(R)PULSE-NUMBER")
+ field(INPC, "$(P)$(R)PROCESS-MODE NPP")
+ field(CALC, "(A=1)? B+C :B")
+ field(SCAN,"Passive")
+# field(PINI, "YES")
}
record(calc, "$(P)$(R)COUNTDOWN") {
- field(DESC, "Countdown Increment")
- field(INPA,"$(P)$(R)COUNTDOWN")
- field(SCAN,"Passive")
- field(CALC,"A+1")
- field(VAL, "160")
+ field(DESC, "Countdown Increment")
+ field(INPA,"$(P)$(R)COUNTDOWN")
+ field(DISA,"1")
+ #field(SCAN,"Passive")
+ field(SCAN,"1 second")
+ field(CALC,"A+1")
+ field(VAL, "160")
}
record(calc, "$(P)$(R)COUNTER") {
- field(DESC, "0.1 s counter")
- field(INPA, "$(P)$(R)COUNTER")
- field(SCAN, ".1 second")
- field(CALC, "A + .1")
+ field(DESC, "0.1 s counter")
+ field(INPA, "$(P)$(R)COUNTER")
+ field(SCAN, ".1 second")
+ field(CALC, "A + .1")
}
record(stringin, "$(P)$(R)CurrentTime") {
- field(DESC, "Current Date and Time of the IOC")
- field(SCAN, "1 second")
- field(DTYP, "Soft Timestamp")
- field(PINI, "YES")
- field(INP, "@%d/%m/%Y %H:%M:%S")
+ field(DESC, "Current Date and Time of the IOC")
+ field(SCAN, "1 second")
+ field(DTYP, "Soft Timestamp")
+ #field(PINI, "YES")
+ field(INP, "@%d/%m/%Y %H:%M:%S")
}
record(stringout, "$(P)$(R)TraceMessage") {
- field(DESC, "Trace Message from IOC")
- field(VAL, "Trace mode ON")
+ field(DESC, "Trace Message from IOC")
+ field(VAL, "Trace mode ON")
}
record(stringout, "$(P)$(R)LogMessage") {
- field(DESC, "Log Message ")
-# field(VAL, "Trace mode ON")
+ field(DESC, "Log Message ")
+# field(VAL, "Trace mode ON")
}
record(mbbi, "$(P)$(R)STARTINGSTATE") {
- field(DESC, "Starting State Sequence")
- field(ZRVL, "0")
- field(ONVL, "1")
- field(TWVL, "2")
- field(THVL, "3")
- field(FRVL, "4")
- field(FVVL, "5")
- field(ZRST, "NonStarting")
- field(ONST, "Starting1")
- field(TWST, "WaitManV")
- field(THST, "WaitPress")
- field(FRST, "WaitTMP")
- field(FVST, "StartEnd")
- field(VAL, "0")
+ field(DESC, "Starting State Sequence")
+ field(ZRVL, "0")
+ field(ONVL, "1")
+ field(TWVL, "2")
+ field(THVL, "3")
+ field(FRVL, "4")
+ field(FVVL, "5")
+ field(ZRST, "NonStarting")
+ field(ONST, "Starting1")
+ field(TWST, "WaitManV")
+ field(THST, "WaitPress")
+ field(FRST, "WaitTMP")
+ field(FVST, "StartEnd")
+ field(VAL, "0")
}
record(mbbi, "$(P)$(R)CLEANINGSTATE") {
- field(DESC, "Cleaning State Sequence")
- field(ZRVL, "0")
- field(ONVL, "1")
- field(TWVL, "2")
- field(THVL, "3")
- field(FRVL, "4")
- field(FVVL, "5")
- field(ZRST, "NonCleaning")
- field(ONST, "Cleaning1")
- field(TWST, "Cleaning2")
- field(THST, "Cleaning3")
- field(FRST, "Cleaning4")
- field(FVST, "Cleaning5")
- field(VAL, "0")
+ field(DESC, "Cleaning State Sequence")
+ field(ZRVL, "0")
+ field(ONVL, "1")
+ field(TWVL, "2")
+ field(THVL, "3")
+ field(FRVL, "4")
+ field(FVVL, "5")
+ field(SXVL, "6")
+ field(ZRST, "NonCleaning")
+ field(ONST, "Cleaning1")
+ field(TWST, "Cleaning2")
+ field(THST, "Cleaning3")
+ field(FRST, "Cleaning4")
+ field(FVST, "Cleaning5")
+ field(SXST, "Cleaning6")
+ field(VAL, "0")
}
record(mbbi, "$(P)$(R)WSHOTINGSTATE") {
- field(DESC, "Plasma Shot State Sequence")
- field(ZRVL, "0")
- field(ONVL, "1")
- field(TWVL, "2")
- field(THVL, "3")
- field(FRVL, "4")
- field(FVVL, "5")
- field(SXVL, "6")
- field(SVVL, "7")
- field(EIVL, "8")
- field(NIVL, "9")
- field(TEVL, "10")
- field(ELVL, "11")
- field(TVVL, "12")
- field(TTVL, "13")
- field(ZRST, "NonShooting")
- field(ONST, "ShotWTrig")
- field(TWST, "Shooting2")
- field(THST, "Shooting3")
- field(FRST, "Shooting4")
- field(FVST, "Shooting5")
- field(SXST, "Shooting6")
- field(SVST, "Shooting7")
- field(EIST, "Shooting8")
- field(NIST, "Shooting9")
- field(TEST, "Shooting10")
- field(ELST, "Shooting11")
- field(TVST, "Shooting12")
- field(TTST, "ShotEnd")
- field(VAL, "0")
+ field(DESC, "Plasma Shot State Sequence")
+ field(ZRVL, "0")
+ field(ONVL, "1")
+ field(TWVL, "2")
+ field(THVL, "3")
+ field(FRVL, "4")
+ field(FVVL, "5")
+ field(SXVL, "6")
+ field(SVVL, "7")
+ field(EIVL, "8")
+ field(NIVL, "9")
+ field(TEVL, "10")
+ field(ELVL, "11")
+ field(TVVL, "12")
+ field(TTVL, "13")
+ field(ZRST, "NonShooting")
+ field(ONST, "ShotWTrig")
+ field(TWST, "Shooting2")
+ field(THST, "Shooting3")
+ field(FRST, "Shooting4")
+ field(FVST, "Shooting5")
+ field(SXST, "Shooting6")
+ field(SVST, "Shooting7")
+ field(EIST, "Shooting8")
+ field(NIST, "Shooting9")
+ field(TEST, "Shooting10")
+ field(ELST, "Shooting11")
+ field(TVST, "Shooting12")
+ field(TTST, "ShotEnd")
+ field(VAL, "0")
}
record(mbbi, "$(P)$(R)STOPPINGSTATE") {
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile
index 642dba3..a6074c5 100644
--- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/Makefile
@@ -11,11 +11,13 @@ DB += ISTTOKpcf8591.db
DB += ISTTOKpfeiffer.db
DB += ISTTOKtda8444.db
DB += sendmail.db
+DB += seeed4relay.db
DB += pcf8591.proto
DB += tda8444.proto
DB += sendmail.proto
DB += pcf8574.proto
DB += pfeiffer.proto
+DB += seeed4relay.proto
# If .db template is not named *.template add
# _TEMPLATE =
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pfeiffer.proto b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pfeiffer.proto
index 71ea537..bbc1bb8 100644
--- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pfeiffer.proto
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/pfeiffer.proto
@@ -1,18 +1,18 @@
-Terminator=CR;
+Terminator = CR;
+inTerminator = CR;
# CR and LF are control characters, respectively coded 0x0D (13 decimal) and 0x0A (10 decimal)
-# CR and LF are control characters, respectively coded 0x0D (13 decimal) and 0x0A (10 decimal)
-MaxInput = 30;
+MaxInput = 20;
ExtraInput = Ignore;
# Values in millisecond
-LockTimeout = 1000;
+LockTimeout = 500;
# Affects first out command in a protocol.
# If other records currently use the device, how many milliseconds to wait for
# exclusive access to the device before giving up?
#ReadTimeout = 1500;
-ReplyTimeout = 400;
+ReplyTimeout = 300;
#PollPeriod = $ReplyTimeout;
#Integer. Affects first in command in I/O Intr mode (see chapter Record Processing).
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/seeed4relay.db b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/seeed4relay.db
new file mode 100644
index 0000000..463d463
--- /dev/null
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/seeed4relay.db
@@ -0,0 +1,19 @@
+##############################################################
+# ### Read/Write SEEED Relay Board address 0x11=17 register ##
+#############################################################
+record( mbboDirect, "$(P)$(R)SEEED4RELAY:$(A):REGISTER") {
+#record(longout, "$(P)$(R)SEEED4RELAY:$(A):REGISTER") {
+ field(DTYP, "stream")
+ field(OUT, "@seeed4relay.proto wReg($(A)) I2C")
+# field(DRVH, "15" )
+# field(DRVL, "0" )
+ field(SHFT, "0")
+ field(NOBT, "4")
+ field(VAL, 0)
+# field(PINI,"YES")
+}
+record( mbbiDirect, "$(P)$(R)SEEED4RELAY:$(A):REGISTER:READ") {
+ field(DTYP, "stream")
+ field(INP, "@seeed4relay.proto rReg($(A)) I2C")
+}
+
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/seeed4relay.proto b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/seeed4relay.proto
new file mode 100644
index 0000000..902cc72
--- /dev/null
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/seeed4relay.proto
@@ -0,0 +1,32 @@
+Terminator = "";
+LockTimeout = 500;
+ReplyTimeout = 100;
+ReadTimeout = 100;
+WriteTimeout = 100;
+MaxInput = 1;
+ExtraInput = Error;
+
+
+# IMPORTANT: Compile drvAsynI2C with flag STREAM_WORKAROUND = 1
+
+#define CMD_CHANNEL_CTRL 0x10
+#define CMD_SAVE_I2C_ADDR 0x11
+#define CMD_READ_I2C_ADDR 0x12
+#define CMD_READ_FIRMWARE_VER 0x13
+
+rReg {
+ out ${1} 16;
+ in "%01r";
+}
+
+rFw {
+ out ${1} 18;
+ in "%01r";
+}
+## @init { rReg; }
+##
+wReg {
+ out ${1} 16 "%.1r";
+}
+
+# @init { out ${1}; in "%.1r"; }
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/sendmail.proto b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/sendmail.proto
index 3a7fe99..f4a0d63 100644
--- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/sendmail.proto
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/Db/sendmail.proto
@@ -40,7 +40,7 @@ mail_end {
send {
mail_start;
out "Problem is: %s\n";
- out "Please check: http://epics.ipfn.ist.utl.pt/isttok";
+ out "Please check: http://epics.ipfn.tecnico.ulisboa.pt/isttok";
mail_end;
}
diff --git a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt
index 921f625..0da37e1 100644
--- a/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt
+++ b/epics/iocs/ISTTOKrpi/ISTTOKrpiApp/src/IsttokSeqExec.stt
@@ -27,6 +27,8 @@ short PCF_RELAY_OFF= 1;
short PCF_INPUT_ON = 0;
short PCF_INPUT_OFF= 1;
short PCF_PULSE_ON = 1;
+short SEEED_RELAY_OFF= 0;
+short SEEED_RELAY_ON = 1;
short STRST_NonStarting = 0;
short STRST_Starting1 = 1;
@@ -71,7 +73,7 @@ short POS_Clean =3;
short POS_WaitShot=4;
short POS_Stopping=5;
short POS_Emergency=6;
-short POS_UPSEmergency=7;
+//short POS_UPSEmergency=7;
short ON=1;
short OFF=0;
@@ -192,49 +194,52 @@ assign IsttokVVesselTemperature to "ISTTOK:temperature:VVessel-Temperature";
monitor IsttokVVesselTemperature;
*/
-short IsttokShotBuzzer;
-assign IsttokShotBuzzer to "ISTTOK:central:Buzzer";
+short IsttokBuzzer;
+assign IsttokBuzzer to "ISTTOK:central:Buzzer";
-short IsttokShotLab_WarningLight;
-assign IsttokShotLab_WarningLight to "ISTTOK:central:Lab-WarningLight";
+short IsttokLab_WarningLight;
+assign IsttokLab_WarningLight to "ISTTOK:central:Lab-WarningLight";
-short IsttokShotGasIS_Valves;
-assign IsttokShotGasIS_Valves to "ISTTOK:central:GasIS-Valves";
+short IsttokGasIS_Valves;
+assign IsttokGasIS_Valves to "ISTTOK:central:GasIS-Valves";
-short IsttokShotVVessel_Filament;
-assign IsttokShotVVessel_Filament to "ISTTOK:central:VVessel-Filament";
+short IsttokVVessel_Filament;
+assign IsttokVVessel_Filament to "ISTTOK:central:VVessel-Filament";
-short IsttokShotCapBank_Charge;
-assign IsttokShotCapBank_Charge to "ISTTOK:central:CapBank-Charge";
+short IsttokCapBank_Charge;
+assign IsttokCapBank_Charge to "ISTTOK:central:CapBank-Charge";
-short IsttokShotCapBank_Discharge;
-assign IsttokShotCapBank_Discharge to "ISTTOK:central:CapBank-Discharge";
+short IsttokCapBank_Discharge;
+assign IsttokCapBank_Discharge to "ISTTOK:central:CapBank-Discharge";
-short IsttokShotClean_TorContactor;
-assign IsttokShotClean_TorContactor to "ISTTOK:central:Clean-TorContactor";
+short IsttokClean_TorContactor;
+assign IsttokClean_TorContactor to "ISTTOK:central:Clean-TorContactor";
-short IsttokShotClean_TorPneuBreaker;
-assign IsttokShotClean_TorPneuBreaker to "ISTTOK:central:Clean-TorPneuBreaker";
+short IsttokClean_TorPneuBreaker;
+assign IsttokClean_TorPneuBreaker to "ISTTOK:central:Clean-TorPneuBreaker";
-short IsttokShotShot_TorPSTrigger;
-assign IsttokShotShot_TorPSTrigger to "ISTTOK:central:Shot-TorPSTrigger";
-monitor IsttokShotShot_TorPSTrigger;
+short Isttok_TorPSTrigger;
+assign Isttok_TorPSTrigger to "ISTTOK:central:Shot-TorPSTrigger";
+monitor Isttok_TorPSTrigger;
-short IsttokShotShot_TorPSDisable;
-assign IsttokShotShot_TorPSDisable to "ISTTOK:central:Shot-TorPSDisable";
+short Isttok_TorPSDisable;
+assign Isttok_TorPSDisable to "ISTTOK:central:Shot-TorPSDisable";
-short IsttokShotClean_PrimContactor;
-assign IsttokShotClean_PrimContactor to "ISTTOK:central:Clean-PrimContactor";
+short IsttokClean_PrimContactor;
+assign IsttokClean_PrimContactor to "ISTTOK:central:Clean-PrimContactor";
-short IsttokShotClean_PrimPneuBreaker;
-assign IsttokShotClean_PrimPneuBreaker to "ISTTOK:central:Clean-PrimPneuBreaker";
+short IsttokClean_PrimPneuBreaker;
+assign IsttokClean_PrimPneuBreaker to "ISTTOK:central:Clean-PrimPneuBreaker";
-short IsttokShotCountdown;
-assign IsttokShotCountdown to "ISTTOK:central:COUNTDOWN";
-monitor IsttokShotCountdown;
+short IsttokCountdown;
+assign IsttokCountdown to "ISTTOK:central:COUNTDOWN";
+monitor IsttokCountdown;
-string IsttokShotCountdownScan;
-assign IsttokShotCountdownScan to "ISTTOK:central:COUNTDOWN.SCAN";
+//string IsttokCountdownScan;
+//assign IsttokCountdownScan to "ISTTOK:central:COUNTDOWN.SCAN";
+
+short IsttokCountdownDisa;
+assign IsttokCountdownDisa to "ISTTOK:central:COUNTDOWN.DISA";
short IsttokEmergency;
assign IsttokEmergency to "ISTTOK:central:Emergency";
@@ -248,9 +253,9 @@ short IsttokupsBatteryON;
assign IsttokupsBatteryON "{unit}:central:UPS-OnBattery";
monitor IsttokupsBatteryON;
-short IsttokShutdown;
-assign IsttokShutdown "ISTTOK:central:UPS-Shutdown";
-monitor IsttokShutdown;
+short IsttokUpsShutdown;
+assign IsttokUpsShutdown "ISTTOK:central:UPS-Shutdown";
+monitor IsttokUpsShutdown;
//string tmp1_stat;
@@ -264,6 +269,7 @@ assign sendMail to "ISTTOK:central:sendmail";
/* Main Pulse State Set */
ss PulseSequence {
+/*********** State: init ****************** */
state init {
entry {
strcpy(msg, "INIT: Sequence Entry");
@@ -274,47 +280,47 @@ ss PulseSequence {
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotCountdown = 160;
- pvPut(IsttokShotCountdown);
+ IsttokCountdown = 160;
+ pvPut(IsttokCountdown);
// IsttokProcMode = OFF; // UPON POWER-DOWN OR FAILURE PREVENT TO ENTER WAITSHOT ON POWER-UP!
// pvPut(IsttokProcMode);
- IsttokShotClean_PrimContactor = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_PrimContactor);
+ IsttokClean_PrimContactor = PCF_RELAY_OFF;
+ pvPut(IsttokClean_PrimContactor);
- IsttokShotClean_PrimPneuBreaker = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_PrimPneuBreaker);
+ IsttokClean_PrimPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_PrimPneuBreaker);
- IsttokShotBuzzer = PCF_RELAY_OFF;
- pvPut(IsttokShotBuzzer);
+ IsttokBuzzer = PCF_RELAY_OFF;
+ pvPut(IsttokBuzzer);
- IsttokShotCapBank_Charge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Charge);
+ IsttokCapBank_Charge = PCF_RELAY_OFF;
+ pvPut(IsttokCapBank_Charge);
- IsttokShotCapBank_Discharge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Discharge);
+ IsttokCapBank_Discharge = SEEED_RELAY_OFF;
+ pvPut(IsttokCapBank_Discharge);
- IsttokShotVVessel_Filament = PCF_RELAY_OFF;
- pvPut(IsttokShotVVessel_Filament);
+ IsttokVVessel_Filament = PCF_RELAY_OFF;
+ pvPut(IsttokVVessel_Filament);
- IsttokShotGasIS_Valves = PCF_RELAY_OFF;
- pvPut(IsttokShotGasIS_Valves);
+ IsttokGasIS_Valves = SEEED_RELAY_OFF;
+ pvPut(IsttokGasIS_Valves);
- IsttokShotLab_WarningLight = PCF_RELAY_OFF;
- pvPut(IsttokShotLab_WarningLight);
+ IsttokLab_WarningLight = PCF_RELAY_OFF;
+ pvPut(IsttokLab_WarningLight);
- IsttokShotClean_TorPneuBreaker = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_TorPneuBreaker);
+ IsttokClean_TorPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_TorPneuBreaker);
- IsttokShotClean_TorContactor = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_TorContactor);
+ IsttokClean_TorContactor = PCF_RELAY_OFF;
+ pvPut(IsttokClean_TorContactor);
- IsttokShotShot_TorPSDisable = PCF_RELAY_OFF;
- pvPut(IsttokShotShot_TorPSDisable);
+ Isttok_TorPSDisable = PCF_RELAY_OFF;
+ pvPut(Isttok_TorPSDisable);
- IsttokShotShot_TorPSTrigger= OFF;
- pvPut(IsttokShotShot_TorPSTrigger);
+ Isttok_TorPSTrigger= OFF;
+ pvPut(Isttok_TorPSTrigger);
IsttokTMPump1_ControllerOff = OFF;
pvPut(IsttokTMPump1_ControllerOff);
@@ -349,6 +355,7 @@ ss PulseSequence {
// IsttokOPSTATE = POS_Stopping;
// pvPut(IsttokOPSTATE);
} state Stopping
+
when (delay(5) && IsttokOPREQ == START ) {
strcpy(msg, "State to Starting");
pvPut(msg);
@@ -359,7 +366,7 @@ ss PulseSequence {
} state Starting
}
-/*********** State Stopped ****************** */
+/*********** State: Stopped ****************** */
state Stopped {
entry{
IsttokLastOPSTATE = POS_Stopped;
@@ -375,6 +382,7 @@ ss PulseSequence {
} state Emergency
when ((IsttokOPREQ == START) && (IsttokupsBatteryON != ON)) {
+// && (pvStatus(IsttokRPump1_Pressure) == pvStatOK) && (pvStatus(IsttokTMPump1_Emergency) == pvStatOK)) {
strcpy(msg, "State to Starting");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
@@ -382,18 +390,25 @@ ss PulseSequence {
} 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);
errlogSevPrintf(MAJOR, "%s\n",msg);
/* Pulse state change to Emergency*/
} state Emergency
+ when (IsttokupsBatteryON == ON) {
+ strcpy(msg, "Power UPS OB, Starting to Stopping");
+ pvPut(msg);
+ errlogSevPrintf(MAJOR, "%s\n",msg);
+ IsttokOPREQ = STOP;
+ pvPut(IsttokOPREQ);
+ } state Stopping
when (IsttokOPREQ == STOP) {
strcpy(msg, "State to Stopping");
pvPut(msg);
@@ -409,27 +424,24 @@ ss PulseSequence {
} state Idle
}
-/********** State Idle ****************************/
+/********** State: Idle ****************************/
state Idle {
- entry{
+ entry {
IsttokOPSTATE = POS_Idle;
pvPut(IsttokOPSTATE);
IsttokLastOPSTATE = POS_Idle;
pvPut(IsttokLastOPSTATE);
- IsttokShotShot_TorPSDisable = PCF_RELAY_OFF;
- pvPut(IsttokShotShot_TorPSDisable);
+ Isttok_TorPSDisable = PCF_RELAY_OFF;
+ pvPut(Isttok_TorPSDisable);
IsttokProcReq = STOP;
pvPut(IsttokProcReq);
- }
- when (IsttokupsBatteryON == ON) {
- strcpy(msg, "Power Emergency, go to Stopping");
+ }
+ when (IsttokUpsShutdown == ON) {
+ strcpy(msg, "Power Emergency SD, Idle to Stopping");
pvPut(msg);
errlogSevPrintf(MAJOR, "%s\n",msg);
IsttokOPREQ = STOP;
pvPut(IsttokOPREQ);
- /* State change to Stopping */
- IsttokOPSTATE = POS_UPSEmergency;
- pvPut(IsttokOPSTATE);
} state Stopping
when(IsttokEmergency == ON){
@@ -439,14 +451,17 @@ ss PulseSequence {
/* Pulse state change to Emergency*/
} state Emergency
- when ( pvStatus(IsttokRPump1_Pressure) != pvStatOK || pvStatus(IsttokTMPump1_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);
+ /*IsttokOPREQ = STOP; State should recover from */
+ /*pvPut(IsttokOPREQ);*/
//strcpy(sendMail, "Vacuum Emergency while Idle");
- sprintf(sendMail, "Rpump1:%1.1e TMP1:%d",IsttokRPump1_Pressure,IsttokTMPump1_Emergency);
+ strcpy(msg, "State Idle to Stopping");
+ pvPut(msg);
+ errlogSevPrintf(MINOR, "%s\n", msg);
+ sprintf(sendMail, "Rpump1 Pressure:%1.1e TMP1 Pressure:%d",IsttokRPump1_Pressure,IsttokTMPump1_Emergency);
pvPut(sendMail);
} state Stopping
@@ -460,12 +475,14 @@ ss PulseSequence {
errlogSevPrintf(MINOR, "%s\n",msg);
/* Pulse state change to Stopping */
} state Stopping
+
when (IsttokProcReq==START && IsttokProcMode==CLEAN ) {
strcpy(msg, "State to Clean");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/* Pulse state change to Clean */
} state Clean
+
when (IsttokProcReq==START && IsttokProcMode==SHOT ) {
strcpy(msg, "State to WaitShot");
pvPut(msg);
@@ -474,7 +491,7 @@ ss PulseSequence {
} state WaitShot
}
-/******* State Clean ***************************/
+/******* State: Clean ***************************/
state Clean {
entry{
IsttokOPSTATE = POS_Clean;
@@ -488,6 +505,17 @@ ss PulseSequence {
when (IsttokOPREQ == STOP) {} state Stopping
+ when (IsttokupsBatteryON == ON) {
+ strcpy(msg, "Power UPS OB, Clean to Idle");
+ pvPut(msg);
+ errlogSevPrintf(MAJOR, "%s\n",msg);
+ IsttokOPREQ = STOP;
+ pvPut(IsttokOPREQ);
+ /* State change to UPSEmergency */
+ /*IsttokOPSTATE = POS_Idle;*/
+ /*pvPut(IsttokOPSTATE);*/
+ } state Idle
+
when ( pvStatus(IsttokTMPump1_Emergency) != pvStatOK) {
//when ( pvStatus(IsttokTMPump1_Emergency) != pvStatOK ||
// pvStatus(IsttokTMPump2_Emergency) != pvStatOK) {
@@ -507,27 +535,27 @@ ss PulseSequence {
} state Emergency
}
-/******** State WaitShot *************************/
+/******** State: WaitShot *************************/
state WaitShot {
entry{
strcpy(msg, "Toroidal Shot Enable");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotShot_TorPSDisable = PCF_RELAY_ON;
- pvPut(IsttokShotShot_TorPSDisable);
+ Isttok_TorPSDisable = PCF_RELAY_ON;
+ pvPut(Isttok_TorPSDisable);
IsttokOPSTATE = POS_WaitShot;
pvPut(IsttokOPSTATE);
}
when (IsttokupsBatteryON == ON) {
- strcpy(msg, "Power Emergency, go to UPSEmergency");
+ strcpy(msg, "Power UPS OB, WaitShot to Idle");
pvPut(msg);
errlogSevPrintf(MAJOR, "%s\n",msg);
IsttokOPREQ = STOP;
pvPut(IsttokOPREQ);
/* State change to UPSEmergency */
- IsttokOPSTATE = POS_UPSEmergency;
- pvPut(IsttokOPSTATE);
- } state UpsEmergency
+ /*IsttokOPSTATE = POS_Idle;*/
+ /*pvPut(IsttokOPSTATE);*/
+ } state Idle
when(IsttokEmergency == ON){
strcpy(msg, "Emergency from WaitShot");
@@ -557,36 +585,37 @@ ss PulseSequence {
} state Stopping
}
- /* ************** State Stopping *********** */
+ /* ************** State: Stopping *********** */
state Stopping {
entry{
+ IsttokOPSTATE = POS_Stopping;
+ pvPut(IsttokOPSTATE);
/*Just to be sure */
- IsttokShotShot_TorPSDisable = PCF_RELAY_OFF;
- pvPut(IsttokShotShot_TorPSDisable);
+ Isttok_TorPSDisable = PCF_RELAY_OFF;
+ pvPut(Isttok_TorPSDisable);
- IsttokShotCapBank_Charge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Charge);
+ IsttokCapBank_Charge = PCF_RELAY_OFF;
+ pvPut(IsttokCapBank_Charge);
- IsttokShotCapBank_Discharge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Discharge);
+ IsttokCapBank_Discharge = SEEED_RELAY_OFF;
+ pvPut(IsttokCapBank_Discharge);
- IsttokShotGasIS_Valves = PCF_RELAY_OFF;
- pvPut(IsttokShotGasIS_Valves);
+ IsttokGasIS_Valves = SEEED_RELAY_OFF;
+ pvPut(IsttokGasIS_Valves);
- IsttokShotVVessel_Filament = PCF_RELAY_OFF;
- pvPut(IsttokShotVVessel_Filament);
+ IsttokVVessel_Filament = PCF_RELAY_OFF;
+ pvPut(IsttokVVessel_Filament);
IsttokProcReq = STOP;
pvPut(IsttokProcReq);
- IsttokOPSTATE = POS_Stopping;
- pvPut(IsttokOPSTATE);
IsttokLastOPSTATE = POS_Stopping;
pvPut(IsttokLastOPSTATE);
}
when ((IsttokOPREQ == START) && (IsttokupsBatteryON != ON) ) {
- strcpy(msg, "State to Starting");
+ //&& (pvStatus(IsttokRPump1_Pressure) == pvStatOK) && (pvStatus(IsttokTMPump1_Emergency) == pvStatOK)) {
+ strcpy(msg, "State Stopping to Starting");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
/* State change to Starting */
@@ -600,38 +629,48 @@ ss PulseSequence {
} state Stopped
}
- /*State Emergency*/
+ /************* State: Emergency ******************/
state Emergency {
entry {
strcpy(msg, "Emergency Toroidal Shot Disable");
pvPut(msg);
errlogSevPrintf(MAJOR, "%s\n",msg);
- IsttokShotShot_TorPSDisable = PCF_RELAY_OFF;
- pvPut(IsttokShotShot_TorPSDisable);
+ Isttok_TorPSDisable = PCF_RELAY_OFF;
+ pvPut(Isttok_TorPSDisable);
strcpy(msg, "EMERGENCY: CAPBANK Charge OFF");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotCapBank_Charge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Charge);
+ IsttokCapBank_Charge = PCF_RELAY_OFF;
+ pvPut(IsttokCapBank_Charge);
strcpy(msg, "EMERGENCY: CAPBANK CrowBar Close");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotCapBank_Discharge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Discharge);
+ IsttokCapBank_Discharge = SEEED_RELAY_OFF;
+ pvPut(IsttokCapBank_Discharge);
+
+ strcpy(msg, "Prim_Pneu_Breaker OFF");
+ pvPut(msg);
+ IsttokClean_PrimPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_PrimPneuBreaker);
+
+ strcpy(msg, "Tor_Pneu_Breaker OFF");
+ pvPut(msg);
+ IsttokClean_TorPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_TorPneuBreaker);
strcpy(msg, "EMERGENCY: GIS Valves CLOSE");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotGasIS_Valves = PCF_RELAY_OFF;
- pvPut(IsttokShotGasIS_Valves);
+ IsttokGasIS_Valves = SEEED_RELAY_OFF;
+ pvPut(IsttokGasIS_Valves);
strcpy(msg, "EMERGENCY: Filament OFF");
pvPut(msg);
errlogSevPrintf(MAJOR, "%s\n",msg);
- IsttokShotVVessel_Filament = PCF_RELAY_OFF;
- pvPut(IsttokShotVVessel_Filament);
+ IsttokVVessel_Filament = PCF_RELAY_OFF;
+ pvPut(IsttokVVessel_Filament);
}
when (delay(1.0) && (IsttokEmergency == OFF) && (IsttokOPSTATE == POS_WaitShot || IsttokOPSTATE==POS_Clean) ){
/* Pulse state change to Idle */
@@ -674,71 +713,59 @@ ss PulseSequence {
} state Stopped
}
- /*State UpsEmergency*/
- state UpsEmergency {
- entry {
- strcpy(msg, "Emergency Toroidal Shot Disable");
- errlogSevPrintf(MAJOR, "%s\n",msg);
- IsttokShotShot_TorPSDisable = PCF_RELAY_OFF;
- pvPut(IsttokShotShot_TorPSDisable);
-
- strcpy(msg, "EMERGENCY: CAPBANK Charge OFF");
- errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotCapBank_Charge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Charge);
-
- strcpy(msg, "EMERGENCY: CAPBANK CrowBar Close");
- errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotCapBank_Discharge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Discharge);
-
- strcpy(msg, "EMERGENCY: GIS Valves CLOSE");
- errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotGasIS_Valves = PCF_RELAY_OFF;
- pvPut(IsttokShotGasIS_Valves);
-
- strcpy(msg, "UPS EMERGENCY: Filament OFF");
- pvPut(msg);
- errlogSevPrintf(MAJOR, "%s\n",msg);
- IsttokShotVVessel_Filament = PCF_RELAY_OFF;
- pvPut(IsttokShotVVessel_Filament);
- }
- when (IsttokupsBatteryON == ON) {
- /* Pulse state change to Stopping */
- strcpy(msg, "State to Stopping");
- pvPut(msg);
- errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokProcReq = STOP;
- pvPut(IsttokProcReq);
- IsttokOPSTATE = POS_Stopping;
- pvPut(IsttokOPSTATE);
- } state Stopping
- when (delay(6.0) && (IsttokupsBatteryON == OFF) && (IsttokOPSTATE == POS_Idle)){
- /* Pulse state change to Idle */
- strcpy(msg, "State to Idle");
- pvPut(msg);
- errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokOPSTATE = POS_Idle;
- pvPut(IsttokOPSTATE);
- } state Idle
- /*
- when (delay(6.0) && (IsttokupsBatteryON == OFF) &&
- ((IsttokOPSTATE == POS_Starting)) || (IsttokOPSTATE == POS_Stopping)){
- // TODO Check these 2 transictions
- strcpy(msg, "State to Stopping");
- pvPut(msg);
- errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokOPREQ = STOP;
- pvPut(IsttokOPREQ);
- // Pulse state change to Stopping
- IsttokOPSTATE = POS_Stopping;
- pvPut(IsttokOPSTATE);
- } state Stopping
- */
- }
+ /***** State: UpsEmergency *****/
+/*
+ * state UpsEmergency {
+ * entry {
+ * strcpy(msg, "Emergency Toroidal Shot Disable");
+ * errlogSevPrintf(MAJOR, "%s\n",msg);
+ * Isttok_TorPSDisable = PCF_RELAY_OFF;
+ * pvPut(Isttok_TorPSDisable);
+ *
+ * strcpy(msg, "EMERGENCY: CAPBANK Charge OFF");
+ * errlogSevPrintf(NO_ALARM, "%s\n",msg);
+ * IsttokCapBank_Charge = PCF_RELAY_OFF;
+ * pvPut(IsttokCapBank_Charge);
+ *
+ * strcpy(msg, "EMERGENCY: CAPBANK CrowBar Close");
+ * errlogSevPrintf(NO_ALARM, "%s\n",msg);
+ * IsttokCapBank_Discharge = SEEED_RELAY_OFF;
+ * pvPut(IsttokCapBank_Discharge);
+ *
+ * strcpy(msg, "EMERGENCY: GIS Valves CLOSE");
+ * errlogSevPrintf(NO_ALARM, "%s\n",msg);
+ * IsttokGasIS_Valves = SEEED_RELAY_OFF;
+ * pvPut(IsttokGasIS_Valves);
+ *
+ * strcpy(msg, "UPS EMERGENCY: Filament OFF");
+ * pvPut(msg);
+ * errlogSevPrintf(MAJOR, "%s\n",msg);
+ * IsttokVVessel_Filament = PCF_RELAY_OFF;
+ * pvPut(IsttokVVessel_Filament);
+ * }
+ * when (IsttokupsBatteryON == ON) {
+ * [> Pulse state change to Stopping <]
+ * strcpy(msg, "State to Stopping");
+ * pvPut(msg);
+ * errlogSevPrintf(NO_ALARM, "%s\n",msg);
+ * IsttokProcReq = STOP;
+ * pvPut(IsttokProcReq);
+ * [>IsttokOPSTATE = POS_Stopping;<]
+ * [>pvPut(IsttokOPSTATE);<]
+ * } state Stopping
+ * when (delay(6.0) && (IsttokupsBatteryON == OFF) && (IsttokOPSTATE == POS_Idle)){
+ * [> Pulse state change to Idle <]
+ * strcpy(msg, "State to Idle");
+ * pvPut(msg);
+ * errlogSevPrintf(NO_ALARM, "%s\n",msg);
+ * IsttokOPSTATE = POS_Idle;
+ * pvPut(IsttokOPSTATE);
+ y
+ * }
+ */
}
-/*********** Starting SUB-State Set ************/
+/*********** SUB-State: StartingSequence Set ************/
ss StartingSequence {
state NonStarting {
entry {
@@ -751,15 +778,16 @@ ss StartingSequence {
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokRPump1_Motor = PCF_RELAY_OFF;
pvPut(IsttokRPump1_Motor);
- strcpy(msg, "Rotary Pump2 ON");
- pvPut(msg);
- errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokRPump2_Motor = PCF_RELAY_OFF;
- pvPut(IsttokRPump2_Motor);
+// strcpy(msg, "Rotary Pump2 ON");
+// pvPut(msg);
+// errlogSevPrintf(NO_ALARM, "%s\n",msg);
+// IsttokRPump2_Motor = PCF_RELAY_OFF;
+// pvPut(IsttokRPump2_Motor);
STARTINGSTATE = STRST_Starting1;
pvPut(STARTINGSTATE);
} state Starting1
}
+
state Starting1 {
when (IsttokOPSTATE != POS_Starting ) {
strcpy(msg, "Starting1 Out");
@@ -772,15 +800,16 @@ ss StartingSequence {
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokRPump1_Valve = PCF_RELAY_OFF;
pvPut(IsttokRPump1_Valve);
- strcpy(msg, "Rotary Valve2 OPEN");
- pvPut(msg);
- errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokRPump2_Valve = PCF_RELAY_OFF;
- pvPut(IsttokRPump2_Valve);
+// strcpy(msg, "Rotary Valve2 OPEN");
+// pvPut(msg);
+// errlogSevPrintf(NO_ALARM, "%s\n",msg);
+// IsttokRPump2_Valve = PCF_RELAY_OFF;
+// pvPut(IsttokRPump2_Valve);
STARTINGSTATE = STRST_Starting2;
pvPut(STARTINGSTATE);
} state Starting2
}
+
state Starting2 {
when (IsttokOPSTATE != POS_Starting ) {
strcpy(msg, "Starting2 Out");
@@ -789,6 +818,7 @@ ss StartingSequence {
STARTINGSTATE = STRST_NonStarting;
pvPut(STARTINGSTATE);
} state NonStarting
+
when (IsttokTMPump1_ManualValve == ON) {
strcpy(msg, "Manual Valve Open Checked");
pvPut(msg);
@@ -797,6 +827,7 @@ ss StartingSequence {
pvPut(STARTINGSTATE);
} state Starting3
}
+
state Starting3 {
when (IsttokOPSTATE != POS_Starting) {
strcpy(msg, "Starting3 Out");
@@ -813,15 +844,16 @@ ss StartingSequence {
errlogSevPrintf(NO_ALARM, "%s\n",msg);
IsttokTMPump1_MotorOn = ON;
pvPut(IsttokTMPump1_MotorOn);
- strcpy(msg, "TMP2 Motor ON" );
- pvPut(msg);
- errlogSevPrintf(NO_ALARM, "%s\n",msg);
+// strcpy(msg, "TMP2 Motor ON" );
+// pvPut(msg);
+// errlogSevPrintf(NO_ALARM, "%s\n",msg);
// IsttokTMPump2_Motor = PCF_RELAY_ON;
// pvPut(IsttokTMPump2_Motor);
- STARTINGSTATE = STRST_Starting4;
- pvPut(STARTINGSTATE);
+ STARTINGSTATE = STRST_Starting4;
+ pvPut(STARTINGSTATE);
} state Starting4
}
+
state Starting4 {
when (IsttokOPSTATE != POS_Starting ) {
strcpy(msg, "Starting4 Out");
@@ -838,6 +870,7 @@ ss StartingSequence {
pvPut(STARTINGSTATE);
} state StartingEnd
}
+
state StartingEnd {
when (IsttokOPSTATE != POS_Starting ) {
STARTINGSTATE = STRST_NonStarting;
@@ -846,50 +879,59 @@ ss StartingSequence {
}
}
+/*********** SUB-State: CleaningSequence Set ************/
ss CleaningSequence{
- state NonCleaning{
+ state NonCleaning {
entry{
strcpy(msg, "GIS Valves CLOSE");
pvPut(msg);
- IsttokShotGasIS_Valves = PCF_RELAY_OFF;
- pvPut(IsttokShotGasIS_Valves);
+ IsttokGasIS_Valves = SEEED_RELAY_OFF;
+ pvPut(IsttokGasIS_Valves);
strcpy(msg, "Filament OFF");
pvPut(msg);
- IsttokShotVVessel_Filament = PCF_RELAY_OFF;
- pvPut(IsttokShotVVessel_Filament);
+ IsttokVVessel_Filament = PCF_RELAY_OFF;
+ pvPut(IsttokVVessel_Filament);
strcpy(msg, "Primary_CT OFF");
pvPut(msg);
- IsttokShotClean_PrimContactor = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_PrimContactor);
+ IsttokClean_PrimContactor = PCF_RELAY_OFF;
+ pvPut(IsttokClean_PrimContactor);
strcpy(msg, "Toroidal_BK OPEN");
pvPut(msg);
- IsttokShotClean_TorPneuBreaker = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_TorPneuBreaker);
+ IsttokClean_TorPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_TorPneuBreaker);
strcpy(msg, "Toroidal_CT OFF");
pvPut(msg);
- IsttokShotClean_TorContactor = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_TorContactor);
+ IsttokClean_TorContactor = PCF_RELAY_OFF;
+ pvPut(IsttokClean_TorContactor);
+
+ strcpy(msg, "Prim_Pneu_Breaker OFF");
+ pvPut(msg);
+ IsttokClean_PrimPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_PrimPneuBreaker);
CLEANINGSTATE = CLNST_NonCleaning;
pvPut(CLEANINGSTATE);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- }
+ }
when(delay(1.0) && CLEANINGMANMODE == 1 && IsttokOPSTATE == POS_Clean){
strcpy(msg, "Initiating Auto Cleaning...");
pvPut(msg);
strcpy(msg, "GIS Valves OPEN");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotGasIS_Valves = PCF_RELAY_ON;
- pvPut(IsttokShotGasIS_Valves);
- CLEANINGSTATE = CLNST_Cleaning1;
- pvPut(CLEANINGSTATE);
+ IsttokGasIS_Valves = SEEED_RELAY_ON;
+ pvPut(IsttokGasIS_Valves);
+ IsttokClean_PrimPneuBreaker = SEEED_RELAY_ON;
+ pvPut(IsttokClean_PrimPneuBreaker);
+
+ CLEANINGSTATE = CLNST_Cleaning1;
+ pvPut(CLEANINGSTATE);
} state Cleaning1
}
state Cleaning1 {
@@ -898,97 +940,99 @@ ss CleaningSequence{
strcpy(msg, "GIS Valves CLOSE");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotGasIS_Valves = PCF_RELAY_OFF;
- pvPut(IsttokShotGasIS_Valves);
+ IsttokClean_PrimPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_PrimPneuBreaker);
+ IsttokGasIS_Valves = SEEED_RELAY_OFF;
+ pvPut(IsttokGasIS_Valves);
} state NonCleaning
when (delay(2.0) && CLEANINGMANMODE == 1 && IsttokOPSTATE == POS_Clean ) {
strcpy(msg, "Filament ON");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotVVessel_Filament = PCF_RELAY_ON;
- pvPut(IsttokShotVVessel_Filament);
+ IsttokVVessel_Filament = PCF_RELAY_ON;
+ pvPut(IsttokVVessel_Filament);
CLEANINGSTATE = CLNST_Cleaning2;
pvPut(CLEANINGSTATE);
} state Cleaning2
}
- state Cleaning2{
+ state Cleaning2 {
when (delay(1.0) && IsttokProcReq==STOP) {
// Reversing Cleaning
strcpy(msg, "Filament OFF");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotVVessel_Filament = PCF_RELAY_OFF;
- pvPut(IsttokShotVVessel_Filament);
- CLEANINGSTATE = CLNST_Cleaning1;
- pvPut(CLEANINGSTATE);
+ IsttokVVessel_Filament = PCF_RELAY_OFF;
+ pvPut(IsttokVVessel_Filament);
+ CLEANINGSTATE = CLNST_Cleaning1;
+ pvPut(CLEANINGSTATE);
} state Cleaning1
when (delay(2.0) && CLEANINGMANMODE == 1 && IsttokOPSTATE == POS_Clean) {
strcpy(msg, "Primary-CT ON");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotClean_PrimContactor = PCF_RELAY_ON;
- pvPut(IsttokShotClean_PrimContactor);
- CLEANINGSTATE = CLNST_Cleaning3;
- pvPut(CLEANINGSTATE);
+ IsttokClean_PrimContactor = PCF_RELAY_ON;
+ pvPut(IsttokClean_PrimContactor);
+ CLEANINGSTATE = CLNST_Cleaning3;
+ pvPut(CLEANINGSTATE);
} state Cleaning3
}
- state Cleaning3{
+ state Cleaning3 {
when(delay(1.0) && IsttokProcReq==STOP){
strcpy(msg, "Primary-CT OFF");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotClean_PrimContactor = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_PrimContactor);
- CLEANINGSTATE = CLNST_Cleaning2;
- pvPut(CLEANINGSTATE);
+ IsttokClean_PrimContactor = PCF_RELAY_OFF;
+ pvPut(IsttokClean_PrimContactor);
+ CLEANINGSTATE = CLNST_Cleaning2;
+ pvPut(CLEANINGSTATE);
} state Cleaning2
when(delay(2.0) && CLEANINGMANMODE == 1 && IsttokOPSTATE == POS_Clean){
strcpy(msg, "Toroidal-BK CLOSE");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotClean_TorPneuBreaker = PCF_RELAY_ON;
- pvPut(IsttokShotClean_TorPneuBreaker);
- CLEANINGSTATE = CLNST_Cleaning4;
- pvPut(CLEANINGSTATE);
+ IsttokClean_TorPneuBreaker = SEEED_RELAY_ON;
+ pvPut(IsttokClean_TorPneuBreaker);
+ CLEANINGSTATE = CLNST_Cleaning4;
+ pvPut(CLEANINGSTATE);
} state Cleaning4
}
- state Cleaning4{
+ state Cleaning4 {
when(delay (1.0) && IsttokProcReq==STOP){
strcpy(msg, "Toroidal-BK OPEN");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotClean_TorPneuBreaker = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_TorPneuBreaker);
- CLEANINGSTATE = CLNST_Cleaning3;
- pvPut(CLEANINGSTATE);
+ IsttokClean_TorPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_TorPneuBreaker);
+ CLEANINGSTATE = CLNST_Cleaning3;
+ pvPut(CLEANINGSTATE);
} state Cleaning3
when (delay(2.0) && CLEANINGMANMODE == 1 && IsttokOPSTATE == POS_Clean){
strcpy(msg, "Toroidal-CT ON");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotClean_TorContactor = PCF_RELAY_ON;
- pvPut(IsttokShotClean_TorContactor);
- CLEANINGSTATE = CLNST_Cleaning5;
- pvPut(CLEANINGSTATE);
+ IsttokClean_TorContactor = PCF_RELAY_ON;
+ pvPut(IsttokClean_TorContactor);
+ CLEANINGSTATE = CLNST_Cleaning5;
+ pvPut(CLEANINGSTATE);
} state Cleaning5
}
- state Cleaning5{
+ state Cleaning5 {
when (IsttokProcReq==STOP) {
// } state Idle
// when(delay(1.0) && IsttokOPSTATE != POS_Clean){
strcpy(msg, "Toroidal-CT OFF");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotClean_TorContactor = PCF_RELAY_OFF;
- pvPut(IsttokShotClean_TorContactor);
+ IsttokClean_TorContactor = PCF_RELAY_OFF;
+ pvPut(IsttokClean_TorContactor);
/* Close GIS to let Pressure down */
- IsttokShotGasIS_Valves = PCF_RELAY_OFF;
- pvPut(IsttokShotGasIS_Valves);
- CLEANINGSTATE = CLNST_Cleaning4;
- pvPut(CLEANINGSTATE);
+ IsttokGasIS_Valves = SEEED_RELAY_OFF;
+ pvPut(IsttokGasIS_Valves);
+ CLEANINGSTATE = CLNST_Cleaning4;
+ pvPut(CLEANINGSTATE);
} state Cleaning4
/*
when (pvSeverity(IsttokVVesselTemperature) >= pvSevrMAJOR) {
@@ -1003,22 +1047,28 @@ ss CleaningSequence{
}
}
+/*********** SUB-State: ShotSequence Set ************/
ss ShotSequence {
state NonShoting {
entry {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
- strcpy(IsttokShotCountdownScan, "Passive");
- pvPut(IsttokShotCountdownScan);
+ IsttokCountdownDisa = 1;
+ pvPut(IsttokCountdownDisa);
+// strcpy(IsttokCountdownScan, "Passive");
+// pvPut(IsttokCountdownScan);
}
when( IsttokOPSTATE == POS_WaitShot ){
//strcpy(msg, "Waiting for Trigger...");
// pvPut(msg);
//errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotCountdown = 0;
- pvPut(IsttokShotCountdown);
- strcpy(IsttokShotCountdownScan, "1 second");
- pvPut(IsttokShotCountdownScan);
+ IsttokCountdown = 0;
+ pvPut(IsttokCountdown);
+ // Enable Counting
+ IsttokCountdownDisa = 0;
+ pvPut(IsttokCountdownDisa);
+// strcpy(IsttokCountdownScan, "1 second");
+// pvPut(IsttokCountdownScan);
WSHOTINGSTATE = WSHTST_ShotEnd;
pvPut(WSHOTINGSTATE);
//WSHOTINGSTATE = WSHTST_WaitTrg;
@@ -1026,7 +1076,7 @@ ss ShotSequence {
} state ShotEnd
}
state ShotWaitTrg {
- when ((IsttokShotCountdown > 1800) || (IsttokOPSTATE != POS_WaitShot)) {
+ when ((IsttokCountdown > 1800) || (IsttokOPSTATE != POS_WaitShot)) {
strcpy(msg, "Shooting Out");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
@@ -1039,8 +1089,8 @@ ss ShotSequence {
when( IsttokTTSystem_tzero == 0 ){
strcpy(msg, "Trigger received...");
pvPut(msg);
- IsttokShotCountdown = -70;
- pvPut(IsttokShotCountdown);
+ IsttokCountdown = -70;
+ pvPut(IsttokCountdown);
WSHOTINGSTATE = WSHTST_Shooting2;
pvPut(WSHOTINGSTATE);
PulseNumber +=1;
@@ -1053,22 +1103,22 @@ ss ShotSequence {
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
} state ShotWaitTrg
- when ((IsttokOPSTATE == POS_WaitShot) && (IsttokShotCountdown == -61)) {
+ when ((IsttokOPSTATE == POS_WaitShot) && (IsttokCountdown == -61)) {
strcpy(msg, "Buzzer 1-Sound");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotBuzzer = 1;
- pvPut(IsttokShotBuzzer);
+ IsttokBuzzer = 1;
+ pvPut(IsttokBuzzer);
strcpy(msg, "CAPBANK Crowbar Open");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotCapBank_Discharge = PCF_RELAY_ON;
- pvPut(IsttokShotCapBank_Discharge);
+ IsttokCapBank_Discharge = SEEED_RELAY_ON;
+ pvPut(IsttokCapBank_Discharge);
strcpy(msg, "Lights ON");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotLab_WarningLight = PCF_RELAY_ON;
- pvPut(IsttokShotLab_WarningLight);
+ IsttokLab_WarningLight = PCF_RELAY_ON;
+ pvPut(IsttokLab_WarningLight);
WSHOTINGSTATE = WSHTST_Shooting3;
pvPut(WSHOTINGSTATE);
} state Shooting3
@@ -1079,12 +1129,12 @@ ss ShotSequence {
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
} state ShotWaitTrg
- when (IsttokShotCountdown == -60) {
+ when (IsttokCountdown == -60) {
strcpy(msg, "GIS Valves OPEN");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotGasIS_Valves = PCF_RELAY_ON;
- pvPut(IsttokShotGasIS_Valves);
+ IsttokGasIS_Valves = SEEED_RELAY_ON;
+ pvPut(IsttokGasIS_Valves);
WSHOTINGSTATE = WSHTST_Shooting4;
pvPut(WSHOTINGSTATE);
} state Shooting4
@@ -1097,7 +1147,7 @@ ss ShotSequence {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown == -59) {
+ when (IsttokCountdown == -59) {
WSHOTINGSTATE = WSHTST_Shooting5;
pvPut(WSHOTINGSTATE);
} state Shooting5
@@ -1110,12 +1160,12 @@ ss ShotSequence {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown == -46) {
+ when (IsttokCountdown == -46) {
strcpy(msg, "CAPBANK Charge ON" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotCapBank_Charge = PCF_RELAY_ON;
- pvPut(IsttokShotCapBank_Charge);
+ IsttokCapBank_Charge = PCF_RELAY_ON;
+ pvPut(IsttokCapBank_Charge);
WSHOTINGSTATE = WSHTST_Shooting6;
pvPut(WSHOTINGSTATE);
} state Shooting6
@@ -1128,12 +1178,12 @@ ss ShotSequence {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown == -16) {
+ when (IsttokCountdown == -16) {
strcpy(msg, "CAPBANK Charge OFF" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
- IsttokShotCapBank_Charge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Charge);
+ IsttokCapBank_Charge = PCF_RELAY_OFF;
+ pvPut(IsttokCapBank_Charge);
WSHOTINGSTATE = WSHTST_Shooting7;
pvPut(WSHOTINGSTATE);
} state Shooting7
@@ -1146,17 +1196,17 @@ ss ShotSequence {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown == -11) {
+ when (IsttokCountdown == -11) {
strcpy(msg, "Buzzer 2-Sound" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
- IsttokShotBuzzer = 1;
- pvPut(IsttokShotBuzzer);
+ IsttokBuzzer = 1;
+ pvPut(IsttokBuzzer);
strcpy(msg, "Filament ON");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokShotVVessel_Filament = PCF_RELAY_ON;
- pvPut(IsttokShotVVessel_Filament);
+ IsttokVVessel_Filament = PCF_RELAY_ON;
+ pvPut(IsttokVVessel_Filament);
WSHOTINGSTATE = WSHTST_Shooting8;
pvPut(WSHOTINGSTATE);
} state Shooting8
@@ -1169,13 +1219,13 @@ ss ShotSequence {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown == -4) {
+ when (IsttokCountdown == -4) {
strcpy(msg, "Toroidal PS Trigger");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
// PS Trigger Pulse
- IsttokShotShot_TorPSTrigger = ON;
- pvPut(IsttokShotShot_TorPSTrigger);
+ Isttok_TorPSTrigger = ON;
+ pvPut(Isttok_TorPSTrigger);
WSHOTINGSTATE = WSHTST_Shooting9;
pvPut(WSHOTINGSTATE);
} state Shooting9
@@ -1188,7 +1238,7 @@ ss ShotSequence {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown == -2) {
+ when (IsttokCountdown == -2) {
strcpy(msg, "Ready for SHOT" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
@@ -1204,12 +1254,12 @@ ss ShotSequence {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown == 0) {
+ when (IsttokCountdown == 0) {
strcpy(msg, "CAPBANK CrowBar Close" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
- IsttokShotCapBank_Discharge = PCF_RELAY_OFF;
- pvPut(IsttokShotCapBank_Discharge);
+ IsttokCapBank_Discharge = SEEED_RELAY_OFF;
+ pvPut(IsttokCapBank_Discharge);
WSHOTINGSTATE = WSHTST_Shooting11;
pvPut(WSHOTINGSTATE);
} state Shooting11
@@ -1222,17 +1272,17 @@ ss ShotSequence {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown == 1) {
+ when (IsttokCountdown == 1) {
strcpy(msg, "GIS Valves CLOSE" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
- IsttokShotGasIS_Valves = 1;
- pvPut(IsttokShotGasIS_Valves);
+ IsttokGasIS_Valves = SEEED_RELAY_OFF;
+ pvPut(IsttokGasIS_Valves);
strcpy(msg, "Filament OFF" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
- IsttokShotVVessel_Filament = 1;
- pvPut(IsttokShotVVessel_Filament);
+ IsttokVVessel_Filament = 1;
+ pvPut(IsttokVVessel_Filament);
WSHOTINGSTATE = WSHTST_Shooting12;
pvPut(WSHOTINGSTATE);
} state Shooting12
@@ -1245,18 +1295,18 @@ ss ShotSequence {
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown == 2) {
+ when (IsttokCountdown == 2) {
strcpy(msg, "Lights OFF and Recovering..." );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
- IsttokShotLab_WarningLight = PCF_RELAY_OFF;
- pvPut(IsttokShotLab_WarningLight);
+ IsttokLab_WarningLight = PCF_RELAY_OFF;
+ pvPut(IsttokLab_WarningLight);
WSHOTINGSTATE = WSHTST_ShotEnd;
pvPut(WSHOTINGSTATE);
} state ShotEnd
}
state ShotEnd {
- when (IsttokShotCountdown > 160 || IsttokOPSTATE != POS_WaitShot) {
+ when (IsttokCountdown > 160 || IsttokOPSTATE != POS_WaitShot) {
strcpy(msg, "Terminated");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
@@ -1266,7 +1316,7 @@ ss ShotSequence {
}
}
-/* Stopping Sub-State Set */
+/*********** SUB-State: StoppingSequence Set ************/
ss StoppingSequence {
state NonStopping {
entry {
@@ -1278,9 +1328,15 @@ ss StoppingSequence {
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokTMPump1_MotorOff = ON;
+ IsttokClean_PrimPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_PrimPneuBreaker);
+
+ IsttokTMPump1_MotorOff = ON;
pvPut(IsttokTMPump1_MotorOff);
+ IsttokClean_TorPneuBreaker = SEEED_RELAY_OFF;
+ pvPut(IsttokClean_TorPneuBreaker);
+
// IsttokTMPump2_Motor = PCF_RELAY_OFF;
// pvPut(IsttokTMPump2_Motor);
STOPPINGSTATE = STPST_Stopping1;
@@ -1298,46 +1354,44 @@ ss StoppingSequence {
} state Stopping2
}
state Stopping2 {
- when (IsttokOPSTATE != POS_Stopping ) {
- } state NonStopping
- when (delay(5.0) && IsttokTMPump1_ManualValve==OFF) {
+ when (IsttokOPSTATE != POS_Stopping ) { } state NonStopping
+ when (delay(5.0) && (IsttokTMPump1_ManualValve == OFF)) {
strcpy(msg, "Manual Valve Closed Checked");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokRPump1_Motor = PCF_RELAY_ON;
- pvPut(IsttokRPump1_Motor);
- strcpy(msg, "Rotary Pumps 1 & 2 OFF");
+// IsttokRPump2_Motor = PCF_RELAY_ON;
+// pvPut(IsttokRPump2_Motor);
+ IsttokRPump1_Valve = PCF_RELAY_ON; // "NO" relay
+ pvPut(IsttokRPump1_Valve);
+ strcpy(msg, "Rotary Valve 1 CLOSE");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokRPump2_Motor = PCF_RELAY_ON;
- pvPut(IsttokRPump2_Motor);
STOPPINGSTATE = STPST_Stopping3;
pvPut(STOPPINGSTATE);
} state Stopping3
}
state Stopping3 {
- when (IsttokOPSTATE != POS_Stopping ) {
- } state NonStopping
+ when (IsttokOPSTATE != POS_Stopping ) { } state NonStopping
when (delay(5)) {
- IsttokRPump1_Valve = PCF_RELAY_ON;
- pvPut(IsttokRPump1_Valve);
- strcpy(msg, "Rotary Valves 1 & 2 CLOSE");
+ // IsttokRPump2_Valve = PCF_RELAY_ON;
+ // pvPut(IsttokRPump2_Valve);
+ IsttokRPump1_Motor = PCF_RELAY_ON; // "NO" Relay
+ pvPut(IsttokRPump1_Motor);
+ strcpy(msg, "Rotary Pump 1 OFF");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n",msg);
- IsttokRPump2_Valve = PCF_RELAY_ON;
- 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) {
+/* when (IsttokCountdown > 159) {
strcpy(msg, "Toroidal Field Recovered" );
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
@@ -1345,21 +1399,21 @@ ss StoppingSequence {
pvPut(WSHOTINGSTATE);
} state Shooting12
state Shooting12 {
- when ((IsttokOPSTATE != POS_WaitShot ) && (IsttokShotCountdown == 160) ) {
+ when ((IsttokOPSTATE != POS_WaitShot ) && (IsttokCountdown == 160) ) {
strcpy(msg, "Shooting12 Out");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
WSHOTINGSTATE = WSHTST_NonShoting;
pvPut(WSHOTINGSTATE);
} state NonShoting
- when (IsttokShotCountdown >= 160) {
+ when (IsttokCountdown >= 160) {
strcpy(msg, "Terminated");
pvPut(msg);
errlogSevPrintf(NO_ALARM, "%s\n", msg);
-// strcpy(IsttokShotCountdownScan, "Passive");
-// pvPut(IsttokShotCountdownScan);
-// IsttokShotCountdown = 0;
-// pvPut(IsttokShotCountdown);
+// strcpy(IsttokCountdownScan, "Passive");
+// pvPut(IsttokCountdownScan);
+// IsttokCountdown = 0;
+// pvPut(IsttokCountdown);
} state ShotWaitTrg
}
diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req
index 3463283..6609f2a 100644
--- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req
+++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/iocISTTOKrpi.req
@@ -1,18 +1,19 @@
-ISTTOK:central:PULSE-NUMBER.VAL
+# P=ISTTOK:,R=central:
+$(P)$(R)PULSE-NUMBER.VAL
ISTTOK:central:LogMessage.VAL
ISTTOK:central:LASTOPSTATE.VAL
-ISTTOK:central:OPREQ
+ISTTOK:central:OPREQ.VAL
ISTTOK:central:PROCESS-MODE.VAL
ISTTOK:central:CLEANINGMANMODE.VAL
ISTTOK:central:Emergency-UserButton.VAL
ISTTOK:central:TMPump1-ManualValve.VAL
ISTTOK:central:Shot-TorPSCurrent
-ISTTOK:central:UPS-Shutdown
+#ISTTOK:central:UPS-Shutdown
#ALARM Limits
-ISTTOK:central:RPump1-Pressure.HIGH
+$(P)$(R)RPump1-Pressure.HIGH
ISTTOK:central:RPump1-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 5b503db..d05bc21 100644
--- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt
+++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/pvList.txt
@@ -1,3 +1,88 @@
+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:OPCALCSTATE
+ISTTOK:central:STARTCALCSTATE
+ISTTOK:central:STOPPINGCALCSTATE
+ISTTOK:central:CLEANCALCSTATE
+ISTTOK:central:WSHOTCALCSTATE
+ISTTOK:central:PULSE-NUMBER
+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: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:TraceMessage
+ISTTOK:central:LogMessage
+ISTTOK:central:RS485Debug
+ISTTOK:central:sendmail
+ISTTOK:SR_recentlyStr
+ISTTOK:SR_rebootStatusStr
+ISTTOK:SR_rebootTime
+ISTTOK:SR_statusStr
+ISTTOK:SR_0_Name
+ISTTOK:SR_0_StatusStr
+ISTTOK:SR_0_Time
+ISTTOK:SR_1_Name
+ISTTOK:SR_1_StatusStr
+ISTTOK:SR_1_Time
+ISTTOK:SR_2_Name
+ISTTOK:SR_2_StatusStr
+ISTTOK:SR_2_Time
+ISTTOK:SR_3_Name
+ISTTOK:SR_3_StatusStr
+ISTTOK:SR_3_Time
+ISTTOK:SR_4_Name
+ISTTOK:SR_4_StatusStr
+ISTTOK:SR_4_Time
+ISTTOK:SR_5_Name
+ISTTOK:SR_5_StatusStr
+ISTTOK:SR_5_Time
+ISTTOK:SR_6_Name
+ISTTOK:SR_6_StatusStr
+ISTTOK:SR_6_Time
+ISTTOK:SR_7_Name
+ISTTOK:SR_7_StatusStr
+ISTTOK:SR_7_Time
+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:TMPump1-Power
ISTTOK:central:TMPump1-Emergency
ISTTOK:central:TMPump1-Acceleration
@@ -6,6 +91,26 @@ ISTTOK:central:TMPump2-Emergency
ISTTOK:central:TMPump2-Acceleration
ISTTOK:central:TTSystem-tzero
ISTTOK:central:Emergency-PhysButton
+ISTTOK:central:LASTOPSTATE
+ISTTOK:SR_rebootStatus
+ISTTOK:SR_status
+ISTTOK:SR_0_Status
+ISTTOK:SR_1_Status
+ISTTOK:SR_2_Status
+ISTTOK:SR_3_Status
+ISTTOK:SR_4_Status
+ISTTOK:SR_5_Status
+ISTTOK:SR_6_Status
+ISTTOK:SR_7_Status
+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:SEEED4RELAY:17:REGISTER:READ
+ISTTOK:central:CurrentTime
+ISTTOK:central:TMPump2-Speed
+ISTTOK:central:TMPump2-Current
+ISTTOK:central:Shot-TorPSCurrentImage
ISTTOK:central:UPS-OnBattery
ISTTOK:central:UPS-Shutdown
ISTTOK:central:OPREQ
@@ -41,117 +146,14 @@ ISTTOK:SR_heartbeat
ISTTOK:SR_i_am_alive
ISTTOK:SR_deadIfZero
ISTTOK:SR_disable
-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:PCF8574:56:REGISTER:READ:FNOUT
-ISTTOK:central:PCF8574:57:REGISTER:READ:FNOUT
-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: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-PressureAdmission
-ISTTOK:central:RPump1-Pressure
-ISTTOK:central:VVessel-Pressure
-ISTTOK:central:RPump2-Pressure
-ISTTOK:central:TMPump2-Speed
-ISTTOK:central:TMPump2-Current
-ISTTOK:central:Shot-TorPSCurrentImage
-ISTTOK:central:OPSTATE
-ISTTOK:central:STARTINGSTATE
-ISTTOK:central:CLEANINGSTATE
-ISTTOK:central:WSHOTINGSTATE
-ISTTOK:central:STOPPINGSTATE
-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:LASTOPSTATE
-ISTTOK:SR_rebootStatus
-ISTTOK:SR_status
-ISTTOK:SR_0_Status
-ISTTOK:SR_1_Status
-ISTTOK:SR_2_Status
-ISTTOK:SR_3_Status
-ISTTOK:SR_4_Status
-ISTTOK:SR_5_Status
-ISTTOK:SR_6_Status
-ISTTOK:SR_7_Status
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:CurrentTime
-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:TraceMessage
-ISTTOK:central:LogMessage
-ISTTOK:central:RS485Debug
-ISTTOK:central:sendmail
-ISTTOK:SR_recentlyStr
-ISTTOK:SR_rebootStatusStr
-ISTTOK:SR_rebootTime
-ISTTOK:SR_statusStr
-ISTTOK:SR_0_Name
-ISTTOK:SR_0_StatusStr
-ISTTOK:SR_0_Time
-ISTTOK:SR_1_Name
-ISTTOK:SR_1_StatusStr
-ISTTOK:SR_1_Time
-ISTTOK:SR_2_Name
-ISTTOK:SR_2_StatusStr
-ISTTOK:SR_2_Time
-ISTTOK:SR_3_Name
-ISTTOK:SR_3_StatusStr
-ISTTOK:SR_3_Time
-ISTTOK:SR_4_Name
-ISTTOK:SR_4_StatusStr
-ISTTOK:SR_4_Time
-ISTTOK:SR_5_Name
-ISTTOK:SR_5_StatusStr
-ISTTOK:SR_5_Time
-ISTTOK:SR_6_Name
-ISTTOK:SR_6_StatusStr
-ISTTOK:SR_6_Time
-ISTTOK:SR_7_Name
-ISTTOK:SR_7_StatusStr
-ISTTOK:SR_7_Time
+ISTTOK:central:SEEED4RELAY:17:REGISTER
+ISTTOK:central:OPSTATE
+ISTTOK:central:STARTINGSTATE
+ISTTOK:central:CLEANINGSTATE
+ISTTOK:central:WSHOTINGSTATE
+ISTTOK:central:STOPPINGSTATE
diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav
index b4f1cc0..7768bb5 100644
--- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav
+++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/save/iocISTTOKrpi.sav
@@ -1,14 +1,13 @@
-# autosave R5.3 Automatically generated - DO NOT MODIFY - 211214-141949
-ISTTOK:central:PULSE-NUMBER.VAL 0
+# autosave R5.3 Automatically generated - DO NOT MODIFY - 211215-181848
+ISTTOK:central:PULSE-NUMBER.VAL 49461
ISTTOK:central:LogMessage.VAL
-ISTTOK:central:LASTOPSTATE.VAL 5
-ISTTOK:central:OPREQ 0
+ISTTOK:central:LASTOPSTATE.VAL 2
+ISTTOK:central:OPREQ.VAL 1
ISTTOK:central:PROCESS-MODE.VAL 0
ISTTOK:central:CLEANINGMANMODE.VAL 0
ISTTOK:central:Emergency-UserButton.VAL 0
ISTTOK:central:TMPump1-ManualValve.VAL 1
ISTTOK:central:Shot-TorPSCurrent 32
-ISTTOK:central:UPS-Shutdown 0
ISTTOK:central:RPump1-Pressure.HIGH 0.05
ISTTOK:central:RPump1-Pressure.HIHI 0.1
diff --git a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd
index 5ff2d50..036fd57 100755
--- a/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd
+++ b/epics/iocs/ISTTOKrpi/iocBoot/iocISTTOKrpi/st.cmd
@@ -15,6 +15,7 @@ dbLoadDatabase "dbd/ISTTOKrpi.dbd"
ISTTOKrpi_registerRecordDeviceDriver pdbbase
## Load I2C drivers
+# *** IMPORTANT: Compile drvAsynI2C with flag STREAM_WORKAROUND = 1
drvAsynI2CConfigure( "I2C", "/dev/i2c-1", 1 )
## Load record instances
@@ -23,6 +24,8 @@ 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:")
+## SEEED RELAY BOARD
+dbLoadRecords("db/seeed4relay.db","P=ISTTOK:,R=central:,A=17")
## Load Serial drivers
#drvAsynSerialPortConfigure("RS0","/dev/ttyAMA0")
@@ -48,8 +51,8 @@ dbLoadRecords("db/sendmail.db", "P=ISTTOK:,PORT=L0,R=central:,L=0,A=0")
# 2021/12/14 13:11:50.019969 RS0 ISTTOK:central:P002:M: No reply within 200 ms to "0020074002=?107<0d>
#var streamError 1
#with this no errors on pfeiffer bus
-var streamDebug 1
-streamSetLogfile("logfile.txt")
+#var streamDebug 1
+#streamSetLogfile("logfile.txt")
## Run this to trace the stages of iocInit
#traceIocInit
@@ -70,11 +73,11 @@ asSetFilename("${TOP}/iocBoot/${IOC}/access_security.acf")
iocInit
-#asInit
+asInit
# Create request file and start periodic 'save’
# makeAutosaveFileFromDbInfo("$(SAVE_DIR)/$(IOC).req", "autosaveFields")
-create_monitor_set("$(IOC).req", 30)
+create_monitor_set("$(IOC).req", 30, "P=ISTTOK:,R=central:")
## Start any sequence programs , use safe mode
seq IsttokSeqExec "unit=ISTTOK"