This commit is contained in:
Sakbe
2022-01-26 17:10:05 +00:00
16 changed files with 994 additions and 783 deletions

View File

@@ -114,15 +114,16 @@ Process Value in this IOC Server:
### Central Control/Vacuum Node ### Central Control/Vacuum Node
- Vacuum Sensors - Vacuum Sensors
- Pffeifer rotatory vacuum pump - Pffeifer rotatory vacuum pumpa (*RPump1*)
- Edwards electro valve - Edwards electro valve
- Seiko Seiki turbomolecular pump and control unit - Seiko Seiki turbomolecular pump and control unit (model SCU-400)
- Main State Machine - Main State Machine, see [source](https://git.ipfn.tecnico.ulisboa.pt/blob/ISTTOK.git/master/epics%2Fiocs%2FISTTOKrpi%2FISTTOKrpiApp%2Fsrc%2FIsttokSeqExec.stt)
#### Hardware Platform #### 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) * 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; * connected to raspberry Pi through I2C interface;
* 8 isolated output connected to the relays (6 relays installed for the rotatory control) * 8 isolated output connected to the relays (6 relays installed for the rotatory control)
* 4 isolated outputs connected to SEIKO unit controller * 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) * 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 * 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) (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: * EPICS v7 base-7.0 from epics [github](https://github.com/epics-base)
* synApps_5_8 * (in /home/pi/Apps/epics7/epics-base) including modules:
* asyn-4-26 * asynDriver [asyn](https://github.com/epics-modules/asyn)
* seq-2-2-1 * [StreamDevice](https://paulscherrerinstitute.github.io/StreamDevice)
* autosave-5-6-1 * State Notation Language and Sequence v.2.2 [seq](https://www-csr.bessy.de/control/SoftDist/sequencer)
* IOC installed in '/opt/epics/iocs/' * [autosave](https://github.com/epics-modules/autosave)
* IOC installed in '/home/pi/ISTTOK/epics/iocs/ISTTOKrpi'
* Running in `screen deamon` (see `/etc/rc.local`) * 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
Process Variables in this IOC Server: Process Variables in this IOC Server:
@@ -161,6 +163,8 @@ Process Variables in this IOC Server:
|ISTTOK:central:COUNTDOWN | mbbi | no | |ISTTOK:central:COUNTDOWN | mbbi | no |
|ISTTOK:central:PULSE-NUMBER | longout | yes | |ISTTOK:central:PULSE-NUMBER | longout | yes |
|ISTTOK:central:OPSTATE |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:CurrentTime | stringin | no |
|ISTTOK:central:TraceMessage | stringout | yes | |ISTTOK:central:TraceMessage | stringout | yes |
|ISTTOK:central:LogMessage | stringout | yes | |ISTTOK:central:LogMessage | stringout | yes |
@@ -180,7 +184,7 @@ Process Variables in this IOC Server:
|ISTTOK:central:TMPump1-NormalOperation | bi | 7 | |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 | |PV Name | PV Type | Bit |
|:----------|-------|---:| |:----------|-------|---:|
@@ -192,7 +196,7 @@ Process Variables in this IOC Server:
|ISTTOK:central:TTSystem-tzero| bi | 7 | |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)| |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| |PV Name |PV Type |Archive|
|:----------|-------|---:| |:----------|-------|---:|
@@ -227,18 +231,28 @@ Process Variables in this IOC Server:
| ISTTOK:central:Shot-TorPSCurrentImage"| ai | ch3 | no | | 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| |PV Name |PV Type |Archive| RS485 request command|
|:----------|-------|---:| |:----------|-------|---:|---|
|ISTTOK:central:RPump1-Pressure | ai | yes | |ISTTOK:central:VVessel-Pressure | ai | yes | out "0010074002=?106"|
|ISTTOK:central:RPump2-Pressure | ai | yes | |ISTTOK:central:RPump1-Pressure | ai | yes | out "0020074002=?107" |
|ISTTOK:central:TMPump1-PressureAdmission | ai | yes | |ISTTOK:central:RPump2-Pressure (Disabled) | ai | yes | |
|ISTTOK:central:VVessel-Pressure | 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) - Vacuum Pfeiffer Sensors (RS485)
#### Hardware Platform #### Hardware Platform
@@ -252,10 +266,10 @@ Process Variables in this IOC Server:
|PV Name |PV Type |Archive| |PV Name |PV Type |Archive|
|:----------|-------|---:| |:----------|-------|---:|
| ISTTOK:vacuum:RPump1-Pressure | ai | yes | | ISTTOK:vacuum:RPump1-Pressure (not used)| ai | yes |
|ISTTOK:vacuum:RPump2-Pressure | ai | yes | |ISTTOK:vacuum:RPump2-Pressure (not used) | ai | yes |
|ISTTOK:vacuum:TMPump1-PressureAdmission | ai | yes | |ISTTOK:vacuum:TMPump1-PressureAdmission (not used)| ai | yes |
|ISTTOK:vacuum:VVessel-Pressure | ai | yes | |ISTTOK:vacuum:VVessel-Pressure (not used) | ai | yes |
---------- ----------
#### Software Platform #### Software Platform
@@ -290,7 +304,7 @@ openjdk-8-jre linux package
### EPICS Channel Access Configuration ### 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" export EPICS_CA_AUTO_ADDR_LIST="NO"
``` ```

View File

@@ -1,38 +1,63 @@
# https://tecadmin.net/install-apache-mod-wsgi-on-ubuntu-16-04-xenial #!/usr/bin/env python3
# Include in /etc/apache2/conf-available/mod-wsgi.conf : # -*- coding: utf-8 -*-
# WSGIScriptAlias /isttok /var/www/html/wsgi_isttok_status.py # if you change this script "touch" it to reload by apache
# and # e.g touch /var/www/html/wsgi_isttok_status.py
# systemctl restart apache2 """
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 from epics import caget, caput, cainfo
import os 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_ADDR_LIST'] = 'localhost 192.168.1.110'
os.environ['EPICS_CA_AUTO_ADDR_LIST'] = 'NO' os.environ['EPICS_CA_AUTO_ADDR_LIST'] = 'NO'
def application(environ,start_response): def application(environ,start_response):
status = '200 OK' status = '200 OK'
RPump1press = caget('ISTTOK:central:RPump1-Pressure') RPump1press = caget('ISTTOK:central:RPump1-Pressure', as_string=True)
RPump2press = caget('ISTTOK:central:RPump2-Pressure') # RPump2press = caget('ISTTOK:central:RPump2-Pressure')
TMPump1press = caget('ISTTOK:central:TMPump1-PressureAdmission') TMPump1press = caget('ISTTOK:central:TMPump1-PressureAdmission', as_string=True)
VVesselpress = caget('ISTTOK:central:VVessel-Pressure') VVesselpress = caget('ISTTOK:central:VVessel-Pressure', as_string=True)
rpiCurrentTime = caget('ISTTOK:central:CurrentTime') # RPump1press = caget('ISTTOK:vacuum:RPump1-Pressure')
opState = caget('ISTTOK:central:OPSTATE.VAL') # RPump2press = caget('ISTTOK:vacuum:RPump2-Pressure')
pulseNum = caget('ISTTOK:central:PULSE-NUMBER') # 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 = '<html>\n' \ html = '<html>\n' \
'<body>\n' \ '<head> <meta charset="UTF-8"/> <title>ISTTOK Status page</title>' \
' <h1> ISTTOK Present Condition </h1> \n' '<meta http-equiv="refresh" content="5"> </head>' \
html += '<p>RPump1-Pressure: ' + str(RPump1press) + ' mBar </p>' '<body>\n <h1> ISTTOK Present Condition </h1> \n'
html += '<p>RPump2-Pressure: ' + str(RPump2press) + ' mBar </p>' # html += '<p>RPump1-Pressure: ' + str(RPump1press) + ' mBar </p>'
html += '<p>TMPump1-PressureAdmission: ' + str(TMPump1press) + ' mBar </p>' html += '<p>RPump1-Pressure: ' + RPump1press + ' mBar </p>'
html += '<p>VVessel-Pressure: ' + str(VVesselpress) + ' mBar </p>' # html += '<p>RPump2-Pressure: ' + str(RPump2press) + ' mBar </p>'
html += '<p>OPSTATE: ' + str(opState) + ' </p>' html += '<p>TMPump1-PressureAdmission: ' + TMPump1press + ' mBar </p>'
html += '<p>PULSE-NUMBER: ' + str(pulseNum) + ' </p>' html += '<p>VVessel-Pressure: ' + VVesselpress + ' mBar </p>'
html += '<p>Rpi CurrentTime: ' + str(rpiCurrentTime) + ' </p>' html += '<p>OPSTATE: ' + opState + ', UPS-OnBattery: '+ OnBattery+ '</p>'
html += '<p>Note: you can try to login to rpi-isttok machine and do: '
html += '<pre>caput ISTTOK:central:OPREQ START</pre> </p>'
html += '<p>PULSE-NUMBER: ' + pulseNum + ' </p>'
html += '<p>Rpi CurrentTime: ' + rpiCurrentTime + ' </p>'
html += '<pre> ' + RPump1Info + '</pre>'
html += '</body>\n' \ html += '</body>\n' \
'</html>\n' '</html>\n'
response_header = [('Content-type','text/html')] response_header = [('Content-type','text/html'),
('Content-Length', str(len(html)))]
start_response(status,response_header) start_response(status,response_header)
html = bytes(html, encoding= 'utf-8') return [html.encode('UTF-8')]
return [html] # html = bytes(html, encoding= 'utf-8')
# return [html]

View File

@@ -27,7 +27,8 @@ record(bo, "$(P)$(R)TMPump1-ControllerOn" ) {
field(ZNAM, "Off" ) field(ZNAM, "Off" )
field(ONAM, "Pulse" ) field(ONAM, "Pulse" )
field(HIGH, "2.5") field(HIGH, "2.5")
field(FLNK, "$(P)$(R)TMPump1-ControllerOnInv" ) # Disabled until further notice
# field(FLNK, "$(P)$(R)TMPump1-ControllerOnInv" )
field(VAL,"0") field(VAL,"0")
} }
record(calcout, "$(P)$(R)TMPump1-ControllerOnInv") { record(calcout, "$(P)$(R)TMPump1-ControllerOnInv") {
@@ -43,7 +44,8 @@ record(bo, "$(P)$(R)TMPump1-ControllerOff" ) {
field(ZNAM, "Off" ) field(ZNAM, "Off" )
field(ONAM, "Pulse" ) field(ONAM, "Pulse" )
field(HIGH, "2.5") field(HIGH, "2.5")
field(FLNK, "$(P)$(R)TMPump1-ControllerOffInv" ) # Disabled until further notice
# field(FLNK, "$(P)$(R)TMPump1-ControllerOffInv" )
field(VAL,"0") 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" ) { 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(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( OUT, "$(P)$(R)PCF8574:61:REGISTER.B1 PP" )
@@ -381,17 +372,6 @@ record(bo, "$(P)$(R)Clean-PrimContactor" ) {
field(VAL,"1") 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 # # GIS VALVES ON/OFF #
@@ -399,23 +379,12 @@ record(bo, "$(P)$(R)Clean-PrimPneuBreaker"){
record(bo, "$(P)$(R)GasIS-Valves" ) { 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") # 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" ) { # record(bo, "$(P)$(R)GISValvesOnOff" ) {
field( OUT, "$(P)$(R)PCF8574:61:REGISTER.B6 PP" ) field( OUT, "$(P)$(R)SEEED4RELAY:17:REGISTER.B0 PP" )
field( ZNAM, "On" ) field( ZNAM, "OFF" )
field( ONAM, "Off" ) field( ONAM, "ON" )
field(VAL,"1") 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"){ #record(bo,"$(P)$(R)Primary-PressureCondition"){
# field(ZNAM, "OFF" ) # field(ZNAM, "OFF" )
@@ -442,3 +411,57 @@ record(bo, "$(P)$(R)TMPump1-ManualValve"){
field( ZNAM, "Closed") field( ZNAM, "Closed")
field( ONAM, "Open") 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")
}

View File

@@ -94,6 +94,8 @@ record(ai, "$(P)$(R)Shot-TorPSCurrentImage" ) {
field(DTYP, "Raw Soft Channel" ) field(DTYP, "Raw Soft Channel" )
field(INP, "$(P)$(R)PCF8591:72:BYTE2_CH3 PP NMS") field(INP, "$(P)$(R)PCF8591:72:BYTE2_CH3 PP NMS")
field(SCAN, ".2 second") field(SCAN, ".2 second")
#Scan Disable Input Link Value
field(DISA, "1")
field(ASLO, "39.215686275" ) field(ASLO, "39.215686275" )
field(AOFF, "0.0" ) field(AOFF, "0.0" )
field(EGU, "A" ) field(EGU, "A" )

View File

@@ -1,121 +1,133 @@
# vim: sta:et:sw=4:ts=4:sts=4
# 8/5/2021 Only sensor 2 is working. Running with dspIC # 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 dspIC
# 20/9/2021 sensors 1,2,3 are working. Running with tty USB # 20/9/2021 sensors 1,2,3 are working. Running with tty USB
record (longin, "$(P)$(R)P001:M") record (longin, "$(P)$(R)P001:M")
{ {
field (DESC, "getPressure001 $(bus)") field (DESC, "getPressure001 $(bus)")
field (DTYP, "stream") field (DTYP, "stream")
field (INP, "@pfeiffer.proto getPressure001($(P)$(R)P001:E) $(bus)") field (INP, "@pfeiffer.proto getPressure001($(P)$(R)P001:E) $(bus)")
# field (SCAN, "I/O Intr") # field (SCAN, "I/O Intr")
field (SCAN, "1 second") field (SCAN, "1 second")
field (FLNK, "$(P)$(R)TMPump1-PressureAdmission") field(PHAS, "1")
field (FLNK, "$(P)$(R)VVessel-Pressure")
} }
record (longin, "$(P)$(R)P001:E") 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 (DESC, "ISTTOK:central:VVessel-Pressure")
field(INPA, "$(P)$(R)P001:M") # Maximize Status and Severity, MSS propagate all alarms
field(INPB, "$(P)$(R)P001:E") field(INPA, "$(P)$(R)P001:M MSS")
field(CALC, "(A*0.001)* 10.0**(B-20)") field(INPB, "$(P)$(R)P001:E")
field(PREC, "3") field(CALC, "(A*0.001)* 10.0**(B-20)")
field(EGU, "mBar") field(PREC, "3")
field(HIHI,"1.0e-2") field(EGU, "mBar")
field(HIGH,"1.0e-3") 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(LOW, "20.0")
# field(LOLO,"0.0") # field(LOLO,"0.0")
field(HHSV,"MAJOR") field(HHSV,"MAJOR")
field(HSV, "MINOR") field(HSV, "MINOR")
# field(LSV, "MINOR") field(LSV, "MINOR")
# field(LLSV,"MAJOR") field(LLSV,"MAJOR")
} }
# out "0020074002=?107"; # out "0020074002=?107";
record (longin, "$(P)$(R)P002:M") record (longin, "$(P)$(R)P002:M")
{ {
field (DESC, "getPressure002 $(bus)") field (DESC, "getPressure002 $(bus)")
field (DTYP, "stream") field (DTYP, "stream")
field (INP, "@pfeiffer.proto getPressure002($(P)$(R)P002:E) $(bus)") field (INP, "@pfeiffer.proto getPressure002($(P)$(R)P002:E) $(bus)")
# field (SCAN, "I/O Intr") # field (SCAN, "I/O Intr")
field (SCAN, "1 second") field (SCAN, "1 second")
field (FLNK, "$(P)$(R)RPump1-Pressure") field(PHAS, "0")
field (FLNK, "$(P)$(R)RPump1-Pressure")
} }
record (longin, "$(P)$(R)P002:E") record (longin, "$(P)$(R)P002:E")
{ {
field (DESC, "Pressure002 exponent $(bus)") field (DESC, "Pressure002 exponent $(bus)")
} }
record (calc, "$(P)$(R)RPump1-Pressure") record (calc, "$(P)$(R)RPump1-Pressure")
{ {
field (DESC, "ISTTOK:central:RPump1-Pressure") field (DESC, "ISTTOK:central:RPump1-Pressure")
field(INPA, "$(P)$(R)P002:M") field(INPA, "$(P)$(R)P002:M MSS")
field(INPB, "$(P)$(R)P002:E") field(INPB, "$(P)$(R)P002:E")
field(CALC, "(A*0.001)*10.0**(B-20)") field(CALC, "(A*0.001)*10.0**(B-20)")
field(PREC, "3") field(PREC, "3")
field(EGU, "mBar") field(EGU, "mBar")
field(HIHI,"1.0e-1") field(HIHI,"1.0e-1")
field(HIGH,"5.0e-2") field(HIGH,"5.0e-2")
# field(LOW, "20.0") # field(LOW, "20.0")
# field(LOLO,"0.0") # field(LOLO,"0.0")
field(HHSV,"MAJOR") field(HHSV,"MAJOR")
field(HSV, "MINOR") field(HSV, "MINOR")
# field(LSV, "MINOR") # field(LSV, "MINOR")
# field(LLSV,"MAJOR") # field(LLSV,"MAJOR")
} }
# out "0030074002=?108"; # out "0030074002=?108";
record (longin, "$(P)$(R)P003:M") record (longin, "$(P)$(R)P003:M")
{ {
field (DESC, "getPressure003 Mantissa $(bus)") field (DESC, "getPressure003 Mantissa $(bus)")
field (DTYP, "stream") field (DTYP, "stream")
field (INP, "@pfeiffer.proto getPressure003($(P)$(R)P003:E) $(bus)") field (INP, "@pfeiffer.proto getPressure003($(P)$(R)P003:E) $(bus)")
field (SCAN, "1 second") field (SCAN, "1 second")
# field (SCAN, "I/O Intr") field(PHAS, "2")
field (FLNK, "$(P)$(R)VVessel-Pressure") # field (SCAN, "I/O Intr")
field (FLNK, "$(P)$(R)TMPump1-PressureAdmission")
} }
record (longin, "$(P)$(R)P003:E") 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(DESC, "ISTTOK:central:TMPump1-PressureAdmission")
field(INPA, "$(P)$(R)P003:M") field(INPA, "$(P)$(R)P003:M MSS")
field(INPB, "$(P)$(R)P003:E") field(INPB, "$(P)$(R)P003:E")
field(CALC, "(A*0.001)*10.0**(B-20)") field(CALC, "(A*0.001)*10.0**(B-20)")
field(PREC, "3") field(PREC, "3")
field(EGU, "mBar") field(EGU, "mBar")
field(HIHI,"1.0e-1") field(HIHI,"1.0e-1")
field(HIGH,"1.0e-2") field(HIGH,"1.0e-2")
field(HHSV,"MAJOR") field(LOW,"1.0e-9")
field(HSV, "MINOR") field(LOLO,"0.5e-9")
field(HHSV,"MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV,"MAJOR")
} }
# out "0040074002=?109"; # out "0040074002=?109";
# NOT connected 26/10/2021 # NOT connected 26/10/2021
record (longin, "$(P)$(R)P004:M") record (longin, "$(P)$(R)P004:M")
{ {
field (DESC, "getPressure004 Mantissa $(bus)") field (DESC, "getPressure004 Mantissa $(bus)")
field (DTYP, "stream") field (DTYP, "stream")
field (INP, "@pfeiffer.proto getPressure004($(P)$(R)P004:E) $(bus)") field (INP, "@pfeiffer.proto getPressure004($(P)$(R)P004:E) $(bus)")
# field (SCAN, "1 second") # field (SCAN, "1 second")
# field (SCAN, "I/O Intr") # field (SCAN, "I/O Intr")
field (FLNK, "$(P)$(R)RPump2-Pressure") field (FLNK, "$(P)$(R)RPump2-Pressure")
} }
record (longin, "$(P)$(R)P004:E") record (longin, "$(P)$(R)P004:E")
{ {
field (DESC, "Pressure004 Exponent $(bus)") field (DESC, "Pressure004 Exponent $(bus)")
} }
record (calc, "$(P)$(R)RPump2-Pressure") record (calc, "$(P)$(R)RPump2-Pressure")
{ {
field(DESC, "ISTTOK:central:RPump2-Pressure") field(DESC, "ISTTOK:central:RPump2-Pressure")
field(INPA, "$(P)$(R)P004:M") field(INPA, "$(P)$(R)P004:M MSS")
field(INPB, "$(P)$(R)P004:E") field(INPB, "$(P)$(R)P004:E")
field(CALC, "(A*0.001)* 10.0**(B-20)") field(CALC, "(A*0.001)* 10.0**(B-20)")
field(PREC, "3") field(PREC, "3")
field(EGU, "mBar") field(EGU, "mBar")
# field(HIHI,"1.0e-1") # field(HIHI,"1.0e-1")
# field(HIGH,"5.0e-3") # field(HIGH,"5.0e-3")
# field(LOW, "20.0") # field(LOW, "20.0")
@@ -123,13 +135,13 @@ record (calc, "$(P)$(R)RPump2-Pressure")
# field(HHSV,"MAJOR") # field(HHSV,"MAJOR")
# field(HSV, "MINOR") # field(HSV, "MINOR")
# field(LSV, "MINOR") # field(LSV, "MINOR")
# field(LLSV,"MAJOR") # field(LLSV,"MAJOR")
} }
record(stringout,"$(P)$(R)RS485Debug") { record(stringout,"$(P)$(R)RS485Debug") {
field(DESC, "") field(DESC, "")
field(DTYP, "stream") field(DTYP, "stream")
field(OUT, "@pfeiffer.proto debug $(bus)") field(OUT, "@pfeiffer.proto debug $(bus)")
field(VAL,"") field(VAL,"")
} }

View File

@@ -1,3 +1,4 @@
# vim: sta:et:sw=4:ts=4:sts=4
# #
# Project : ISTTOK slow Control # Project : ISTTOK slow Control
# #
@@ -13,257 +14,279 @@
## ##
record(mbbi, "$(P)$(R)OPSTATE") { record(mbbi, "$(P)$(R)OPSTATE") {
field(DESC, "Multiple Pulse Sequence State") field(DESC, "Multiple Pulse Sequence State")
field(ZRVL, "0") field(ZRVL, "0")
field(ONVL, "1") field(ONVL, "1")
field(TWVL, "2") field(TWVL, "2")
field(THVL, "3") field(THVL, "3")
field(FRVL, "4") field(FRVL, "4")
field(FVVL, "5") field(FVVL, "5")
field(SXVL, "6") field(SXVL, "6")
field(SVVL, "7") field(SVVL, "7")
field(ZRST, "Stopped") field(ZRST, "Stopped")
field(ONST, "Starting") field(ONST, "Starting")
field(TWST, "Idle") field(TWST, "Idle")
field(THST, "Clean") field(THST, "Clean")
field(FRST, "WaitShot") field(FRST, "WaitShot")
field(FVST, "Stopping") field(FVST, "Stopping")
field(SXST, "Emergency") field(SXST, "Emergency")
field(SVST, "UPSEmergency") field(SVST, "UPSEmergency")
field(VAL, "0") field(VAL, "0")
field(FLNK, "$(P)$(R)OPCALCSTATE")
#field(PINI, "YES")
} }
record(mbbo, "$(P)$(R)LASTOPSTATE") { record(mbbo, "$(P)$(R)LASTOPSTATE") {
info(autosaveFields, "VAL") info(autosaveFields, "VAL")
field(DESC, "Pulse Sequence Last Saved State") field(DESC, "Pulse Sequence Last Saved State")
field(ZRVL, "0") field(ZRVL, "0")
field(ONVL, "1") field(ONVL, "1")
field(TWVL, "2") field(TWVL, "2")
field(THVL, "3") field(THVL, "3")
field(FRVL, "4") field(FRVL, "4")
field(FVVL, "5") field(FVVL, "5")
field(SXVL, "6") field(SXVL, "6")
field(SVVL, "7") field(SVVL, "7")
field(ZRST, "Stopped") field(ZRST, "Stopped")
field(ONST, "Starting") field(ONST, "Starting")
field(TWST, "Idle") field(TWST, "Idle")
field(THST, "Clean") field(THST, "Clean")
field(FRST, "WaitShot") field(FRST, "WaitShot")
field(FVST, "Stopping") field(FVST, "Stopping")
field(SXST, "Emergency") field(SXST, "Emergency")
field(SVST, "UPSEmergency") field(SVST, "UPSEmergency")
# field(VAL, "0") field(PINI, "YES")
# field(VAL, "0")
} }
# record for bit leds
record(calc, "$(P)$(R)OPCALCSTATE") { record(calc, "$(P)$(R)OPCALCSTATE") {
field(DESC, "Pulse Calculated State") field(DESC, "Pulse Calculated State")
field(CALC,"2^A") field(CALC,"2^A")
field(SCAN,"1 second") #field(SCAN,"1 second")
field(INPA,"$(P)$(R)OPSTATE.VAL PP NMS") field(INPA,"$(P)$(R)OPSTATE.VAL NPP NMS")
} }
record(calc, "$(P)$(R)STARTCALCSTATE") { record(calc, "$(P)$(R)STARTCALCSTATE") {
field(DESC, "Start Calculated State") field(DESC, "Start Calculated State")
field(CALC,"2^A") field(CALC,"2^A")
field(SCAN,"1 second") field(SCAN,"1 second")
field(INPA,"$(P)$(R)STARTINGSTATE.VAL PP NMS") field(INPA,"$(P)$(R)STARTINGSTATE.VAL PP NMS")
} }
record(calc, "$(P)$(R)STOPPINGCALCSTATE") { record(calc, "$(P)$(R)STOPPINGCALCSTATE") {
field(DESC, "Stop Calculated State") field(DESC, "Stop Calculated State")
field(CALC,"2^A") field(CALC,"2^A")
field(SCAN,"1 second") field(SCAN,"1 second")
field(INPA,"$(P)$(R)STOPPINGSTATE.VAL PP NMS") field(INPA,"$(P)$(R)STOPPINGSTATE.VAL PP NMS")
} }
record(calc, "$(P)$(R)CLEANCALCSTATE") { record(calc, "$(P)$(R)CLEANCALCSTATE") {
field(DESC, "Clean Automatic Calculated State") field(DESC, "Clean Automatic Calculated State")
field(CALC,"(2^(A+1))-1") field(CALC,"(2^(A+1))-1")
field(SCAN,"1 second") field(SCAN,"1 second")
field(INPA,"$(P)$(R)CLEANINGSTATE.VAL PP NMS") field(INPA,"$(P)$(R)CLEANINGSTATE.VAL PP NMS")
} }
record(calc, "$(P)$(R)WSHOTCALCSTATE") { record(calc, "$(P)$(R)WSHOTCALCSTATE") {
field(DESC, "WaitShot Calculated State") field(DESC, "WaitShot Calculated State")
field(CALC,"2^A") field(CALC,"2^A")
field(SCAN,"1 second") field(SCAN,"1 second")
field(INPA,"$(P)$(R)WSHOTINGSTATE.VAL PP NMS") field(INPA,"$(P)$(R)WSHOTINGSTATE.VAL PP NMS")
} }
#record(ai, "$(P)$(R)Temperature_0") { #record(ai, "$(P)$(R)Temperature_0") {
# field(DESC, "ISTTOK Temperature 0 Calculated") # field(DESC, "ISTTOK Temperature 0 Calculated")
# field(EGU, "C") # field(EGU, "C")
# field(SCAN,"1 second") # field(SCAN,"1 second")
#} #}
record(bo, "$(P)$(R)UPS-OnBattery") { record(bo, "$(P)$(R)UPS-OnBattery") {
info(autosaveFields, "VAL STAT") info(autosaveFields, "VAL STAT")
field(DESC, "Main APC UPS On Battery status") field(DESC, "Main APC UPS On Battery status")
field(VAL, "0") field(VAL, "0")
field(ZNAM, "OFF") field(PINI, "YES")
field(ONAM, "ON") field(ZNAM, "OFF")
field(ONAM, "ON")
field(OSV, "MAJOR") field(OSV, "MAJOR")
} }
record(bo, "$(P)$(R)UPS-Shutdown") { record(bo, "$(P)$(R)UPS-Shutdown") {
info(autosaveFields, "VAL STAT") # info(autosaveFields, "VAL STAT")
field(DESC, "Main APC UPS Shutdown request") field(DESC, "Main APC UPS Shutdown request")
# field(VAL, "0") field(VAL, "0")
field(ZNAM, "OFF") field(ZNAM, "OFF")
field(ONAM, "ON") field(ONAM, "ON")
field(OSV, "MAJOR") field(OSV, "MAJOR")
field(PINI, "YES")
} }
record(bo, "$(P)$(R)OPREQ") { record(bo, "$(P)$(R)OPREQ") {
info(autosaveFields, "VAL") info(autosaveFields, "VAL")
field(DESC, "Pulse Sequence Start/Stop") field(DESC, "Pulse Sequence Start/Stop")
# field(VAL, "0") # field(VAL, "0")
field(ZNAM, "STOP") field(PINI, "YES")
field(ONAM, "START") field(ZNAM, "STOP")
field(ONAM, "START")
} }
record(bo, "$(P)$(R)CLEANINGMANMODE") { record(bo, "$(P)$(R)CLEANINGMANMODE") {
info(autosaveFields, "VAL") info(autosaveFields, "VAL")
field(DESC, "Cleaning Manual/Auto") field(DESC, "Cleaning Manual/Auto")
info(autosaveFields, "VAL") info(autosaveFields, "VAL")
# field(VAL, "1") # field(VAL, "1")
field(ZNAM, "M") field(ZNAM, "M")
field(ONAM, "A") field(ONAM, "A")
} }
record(bo, "$(P)$(R)FSTriggerStart") { record(bo, "$(P)$(R)FSTriggerStart") {
field(DESC, "FireSignal Trigger Start") field(DESC, "FireSignal Trigger Start")
field(VAL, "0") field(VAL, "0")
field(ZNAM, "STOP") field(PINI, "YES")
field(ONAM, "START") field(ZNAM, "STOP")
field(ONAM, "START")
} }
record(bo, "$(P)$(R)PROCESS-MODE") { record(bo, "$(P)$(R)PROCESS-MODE") {
info(autosaveFields, "VAL") info(autosaveFields, "VAL")
field(DESC, "Plasma Process Mode") field(DESC, "Plasma Process Mode")
#field(VAL, "0") #field(VAL, "0")
field(ZNAM, "CLEAN") #field(PINI, "YES")
field(ONAM, "SHOT") field(ZNAM, "CLEAN")
field(ONAM, "SHOT")
} }
record(bo, "$(P)$(R)PROCESS-REQ") { record(bo, "$(P)$(R)PROCESS-REQ") {
field(DESC, "Plasma Process sub-states Start/Stop") field(DESC, "Plasma Process sub-states Start/Stop")
field(VAL, "0") field(VAL, "0")
field(ZNAM, "STOP") field(PINI, "YES")
field(ONAM, "START") field(ZNAM, "STOP")
field(ONAM, "START")
field(SCAN,"Passive")
field(FLNK, "$(P)$(R)PULSE-NUMBER")
} }
record(bo, "$(P)$(R)AUTHORISATION") { record(bo, "$(P)$(R)AUTHORISATION") {
field(DESC, "Pulse Sequence Authorisation Start/Abort") field(DESC, "Pulse Sequence Authorisation Start/Abort")
field(ZNAM, "ABORT") field(ZNAM, "ABORT")
field(ONAM, "START") field(ONAM, "START")
field(VAL, "0") field(VAL, "0")
} }
record(longout, "$(P)$(R)PULSE-NUMBER") { record(calc, "$(P)$(R)PULSE-NUMBER") {
info(autosaveFields, "VAL") info(autosaveFields, "VAL")
field(DESC, "Pulse Number") 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") { record(calc, "$(P)$(R)COUNTDOWN") {
field(DESC, "Countdown Increment") field(DESC, "Countdown Increment")
field(INPA,"$(P)$(R)COUNTDOWN") field(INPA,"$(P)$(R)COUNTDOWN")
field(SCAN,"Passive") field(DISA,"1")
field(CALC,"A+1") #field(SCAN,"Passive")
field(VAL, "160") field(SCAN,"1 second")
field(CALC,"A+1")
field(VAL, "160")
} }
record(calc, "$(P)$(R)COUNTER") { record(calc, "$(P)$(R)COUNTER") {
field(DESC, "0.1 s counter") field(DESC, "0.1 s counter")
field(INPA, "$(P)$(R)COUNTER") field(INPA, "$(P)$(R)COUNTER")
field(SCAN, ".1 second") field(SCAN, ".1 second")
field(CALC, "A + .1") field(CALC, "A + .1")
} }
record(stringin, "$(P)$(R)CurrentTime") { record(stringin, "$(P)$(R)CurrentTime") {
field(DESC, "Current Date and Time of the IOC") field(DESC, "Current Date and Time of the IOC")
field(SCAN, "1 second") field(SCAN, "1 second")
field(DTYP, "Soft Timestamp") field(DTYP, "Soft Timestamp")
field(PINI, "YES") #field(PINI, "YES")
field(INP, "@%d/%m/%Y %H:%M:%S") field(INP, "@%d/%m/%Y %H:%M:%S")
} }
record(stringout, "$(P)$(R)TraceMessage") { record(stringout, "$(P)$(R)TraceMessage") {
field(DESC, "Trace Message from IOC") field(DESC, "Trace Message from IOC")
field(VAL, "Trace mode ON") field(VAL, "Trace mode ON")
} }
record(stringout, "$(P)$(R)LogMessage") { record(stringout, "$(P)$(R)LogMessage") {
field(DESC, "Log Message ") field(DESC, "Log Message ")
# field(VAL, "Trace mode ON") # field(VAL, "Trace mode ON")
} }
record(mbbi, "$(P)$(R)STARTINGSTATE") { record(mbbi, "$(P)$(R)STARTINGSTATE") {
field(DESC, "Starting State Sequence") field(DESC, "Starting State Sequence")
field(ZRVL, "0") field(ZRVL, "0")
field(ONVL, "1") field(ONVL, "1")
field(TWVL, "2") field(TWVL, "2")
field(THVL, "3") field(THVL, "3")
field(FRVL, "4") field(FRVL, "4")
field(FVVL, "5") field(FVVL, "5")
field(ZRST, "NonStarting") field(ZRST, "NonStarting")
field(ONST, "Starting1") field(ONST, "Starting1")
field(TWST, "WaitManV") field(TWST, "WaitManV")
field(THST, "WaitPress") field(THST, "WaitPress")
field(FRST, "WaitTMP") field(FRST, "WaitTMP")
field(FVST, "StartEnd") field(FVST, "StartEnd")
field(VAL, "0") field(VAL, "0")
} }
record(mbbi, "$(P)$(R)CLEANINGSTATE") { record(mbbi, "$(P)$(R)CLEANINGSTATE") {
field(DESC, "Cleaning State Sequence") field(DESC, "Cleaning State Sequence")
field(ZRVL, "0") field(ZRVL, "0")
field(ONVL, "1") field(ONVL, "1")
field(TWVL, "2") field(TWVL, "2")
field(THVL, "3") field(THVL, "3")
field(FRVL, "4") field(FRVL, "4")
field(FVVL, "5") field(FVVL, "5")
field(ZRST, "NonCleaning") field(SXVL, "6")
field(ONST, "Cleaning1") field(ZRST, "NonCleaning")
field(TWST, "Cleaning2") field(ONST, "Cleaning1")
field(THST, "Cleaning3") field(TWST, "Cleaning2")
field(FRST, "Cleaning4") field(THST, "Cleaning3")
field(FVST, "Cleaning5") field(FRST, "Cleaning4")
field(VAL, "0") field(FVST, "Cleaning5")
field(SXST, "Cleaning6")
field(VAL, "0")
} }
record(mbbi, "$(P)$(R)WSHOTINGSTATE") { record(mbbi, "$(P)$(R)WSHOTINGSTATE") {
field(DESC, "Plasma Shot State Sequence") field(DESC, "Plasma Shot State Sequence")
field(ZRVL, "0") field(ZRVL, "0")
field(ONVL, "1") field(ONVL, "1")
field(TWVL, "2") field(TWVL, "2")
field(THVL, "3") field(THVL, "3")
field(FRVL, "4") field(FRVL, "4")
field(FVVL, "5") field(FVVL, "5")
field(SXVL, "6") field(SXVL, "6")
field(SVVL, "7") field(SVVL, "7")
field(EIVL, "8") field(EIVL, "8")
field(NIVL, "9") field(NIVL, "9")
field(TEVL, "10") field(TEVL, "10")
field(ELVL, "11") field(ELVL, "11")
field(TVVL, "12") field(TVVL, "12")
field(TTVL, "13") field(TTVL, "13")
field(ZRST, "NonShooting") field(ZRST, "NonShooting")
field(ONST, "ShotWTrig") field(ONST, "ShotWTrig")
field(TWST, "Shooting2") field(TWST, "Shooting2")
field(THST, "Shooting3") field(THST, "Shooting3")
field(FRST, "Shooting4") field(FRST, "Shooting4")
field(FVST, "Shooting5") field(FVST, "Shooting5")
field(SXST, "Shooting6") field(SXST, "Shooting6")
field(SVST, "Shooting7") field(SVST, "Shooting7")
field(EIST, "Shooting8") field(EIST, "Shooting8")
field(NIST, "Shooting9") field(NIST, "Shooting9")
field(TEST, "Shooting10") field(TEST, "Shooting10")
field(ELST, "Shooting11") field(ELST, "Shooting11")
field(TVST, "Shooting12") field(TVST, "Shooting12")
field(TTST, "ShotEnd") field(TTST, "ShotEnd")
field(VAL, "0") field(VAL, "0")
} }
record(mbbi, "$(P)$(R)STOPPINGSTATE") { record(mbbi, "$(P)$(R)STOPPINGSTATE") {

View File

@@ -11,11 +11,13 @@ DB += ISTTOKpcf8591.db
DB += ISTTOKpfeiffer.db DB += ISTTOKpfeiffer.db
DB += ISTTOKtda8444.db DB += ISTTOKtda8444.db
DB += sendmail.db DB += sendmail.db
DB += seeed4relay.db
DB += pcf8591.proto DB += pcf8591.proto
DB += tda8444.proto DB += tda8444.proto
DB += sendmail.proto DB += sendmail.proto
DB += pcf8574.proto DB += pcf8574.proto
DB += pfeiffer.proto DB += pfeiffer.proto
DB += seeed4relay.proto
# If <anyname>.db template is not named <anyname>*.template add # If <anyname>.db template is not named <anyname>*.template add
# <anyname>_TEMPLATE = <templatename> # <anyname>_TEMPLATE = <templatename>

View File

@@ -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)
# CR and LF are control characters, respectively coded 0x0D (13 decimal) and 0x0A (10 decimal) MaxInput = 20;
MaxInput = 30;
ExtraInput = Ignore; ExtraInput = Ignore;
# Values in millisecond # Values in millisecond
LockTimeout = 1000; LockTimeout = 500;
# Affects first out command in a protocol. # Affects first out command in a protocol.
# If other records currently use the device, how many milliseconds to wait for # If other records currently use the device, how many milliseconds to wait for
# exclusive access to the device before giving up? # exclusive access to the device before giving up?
#ReadTimeout = 1500; #ReadTimeout = 1500;
ReplyTimeout = 400; ReplyTimeout = 300;
#PollPeriod = $ReplyTimeout; #PollPeriod = $ReplyTimeout;
#Integer. Affects first in command in I/O Intr mode (see chapter Record Processing). #Integer. Affects first in command in I/O Intr mode (see chapter Record Processing).

View File

@@ -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")
}

View File

@@ -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"; }

View File

@@ -40,7 +40,7 @@ mail_end {
send { send {
mail_start; mail_start;
out "Problem is: %s\n"; 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; mail_end;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,18 +1,19 @@
ISTTOK:central:PULSE-NUMBER.VAL # P=ISTTOK:,R=central:
$(P)$(R)PULSE-NUMBER.VAL
ISTTOK:central:LogMessage.VAL ISTTOK:central:LogMessage.VAL
ISTTOK:central:LASTOPSTATE.VAL ISTTOK:central:LASTOPSTATE.VAL
ISTTOK:central:OPREQ ISTTOK:central:OPREQ.VAL
ISTTOK:central:PROCESS-MODE.VAL ISTTOK:central:PROCESS-MODE.VAL
ISTTOK:central:CLEANINGMANMODE.VAL ISTTOK:central:CLEANINGMANMODE.VAL
ISTTOK:central:Emergency-UserButton.VAL ISTTOK:central:Emergency-UserButton.VAL
ISTTOK:central:TMPump1-ManualValve.VAL ISTTOK:central:TMPump1-ManualValve.VAL
ISTTOK:central:Shot-TorPSCurrent ISTTOK:central:Shot-TorPSCurrent
ISTTOK:central:UPS-Shutdown #ISTTOK:central:UPS-Shutdown
#ALARM Limits #ALARM Limits
ISTTOK:central:RPump1-Pressure.HIGH $(P)$(R)RPump1-Pressure.HIGH
ISTTOK:central:RPump1-Pressure.HIHI ISTTOK:central:RPump1-Pressure.HIHI
#ISTTOK:central:RPump2-Pressure.HIGH #ISTTOK:central:RPump2-Pressure.HIGH
#ISTTOK:central:RPump2-Pressure.HIHI #ISTTOK:central:RPump2-Pressure.HIHI

View File

@@ -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-Power
ISTTOK:central:TMPump1-Emergency ISTTOK:central:TMPump1-Emergency
ISTTOK:central:TMPump1-Acceleration ISTTOK:central:TMPump1-Acceleration
@@ -6,6 +91,26 @@ ISTTOK:central:TMPump2-Emergency
ISTTOK:central:TMPump2-Acceleration ISTTOK:central:TMPump2-Acceleration
ISTTOK:central:TTSystem-tzero ISTTOK:central:TTSystem-tzero
ISTTOK:central:Emergency-PhysButton 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-OnBattery
ISTTOK:central:UPS-Shutdown ISTTOK:central:UPS-Shutdown
ISTTOK:central:OPREQ ISTTOK:central:OPREQ
@@ -41,117 +146,14 @@ ISTTOK:SR_heartbeat
ISTTOK:SR_i_am_alive ISTTOK:SR_i_am_alive
ISTTOK:SR_deadIfZero ISTTOK:SR_deadIfZero
ISTTOK:SR_disable 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:56:REGISTER
ISTTOK:central:PCF8574:57:REGISTER ISTTOK:central:PCF8574:57:REGISTER
ISTTOK:central:PCF8574:60:REGISTER ISTTOK:central:PCF8574:60:REGISTER
ISTTOK:central:PCF8574:61:REGISTER ISTTOK:central:PCF8574:61:REGISTER
ISTTOK:central:PCF8591:72:CTRLREGISTER ISTTOK:central:PCF8591:72:CTRLREGISTER
ISTTOK:central:CurrentTime ISTTOK:central:SEEED4RELAY:17:REGISTER
ISTTOK:central:PCF8591:72:ADC_CH1 ISTTOK:central:OPSTATE
ISTTOK:central:PCF8591:72:ADC_CH2 ISTTOK:central:STARTINGSTATE
ISTTOK:central:PCF8591:72:ADC_CH3 ISTTOK:central:CLEANINGSTATE
ISTTOK:central:P001:M ISTTOK:central:WSHOTINGSTATE
ISTTOK:central:P001:E ISTTOK:central:STOPPINGSTATE
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

View File

@@ -1,14 +1,13 @@
# autosave R5.3 Automatically generated - DO NOT MODIFY - 211214-141949 # autosave R5.3 Automatically generated - DO NOT MODIFY - 211215-181848
ISTTOK:central:PULSE-NUMBER.VAL 0 ISTTOK:central:PULSE-NUMBER.VAL 49461
ISTTOK:central:LogMessage.VAL ISTTOK:central:LogMessage.VAL
ISTTOK:central:LASTOPSTATE.VAL 5 ISTTOK:central:LASTOPSTATE.VAL 2
ISTTOK:central:OPREQ 0 ISTTOK:central:OPREQ.VAL 1
ISTTOK:central:PROCESS-MODE.VAL 0 ISTTOK:central:PROCESS-MODE.VAL 0
ISTTOK:central:CLEANINGMANMODE.VAL 0 ISTTOK:central:CLEANINGMANMODE.VAL 0
ISTTOK:central:Emergency-UserButton.VAL 0 ISTTOK:central:Emergency-UserButton.VAL 0
ISTTOK:central:TMPump1-ManualValve.VAL 1 ISTTOK:central:TMPump1-ManualValve.VAL 1
ISTTOK:central:Shot-TorPSCurrent 32 ISTTOK:central:Shot-TorPSCurrent 32
ISTTOK:central:UPS-Shutdown 0
ISTTOK:central:RPump1-Pressure.HIGH 0.05 ISTTOK:central:RPump1-Pressure.HIGH 0.05
ISTTOK:central:RPump1-Pressure.HIHI 0.1 ISTTOK:central:RPump1-Pressure.HIHI 0.1
<END> <END>

View File

@@ -15,6 +15,7 @@ dbLoadDatabase "dbd/ISTTOKrpi.dbd"
ISTTOKrpi_registerRecordDeviceDriver pdbbase ISTTOKrpi_registerRecordDeviceDriver pdbbase
## Load I2C drivers ## Load I2C drivers
# *** IMPORTANT: Compile drvAsynI2C with flag STREAM_WORKAROUND = 1
drvAsynI2CConfigure( "I2C", "/dev/i2c-1", 1 ) drvAsynI2CConfigure( "I2C", "/dev/i2c-1", 1 )
## Load record instances ## 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/ISTTOKpcf8591.db","P=ISTTOK:,R=central:,BUS=I2C")
dbLoadRecords("db/ISTTOKtda8444.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:") dbLoadRecords("db/ISTTOKmachineControl.db","P=ISTTOK:,R=central:")
## SEEED RELAY BOARD
dbLoadRecords("db/seeed4relay.db","P=ISTTOK:,R=central:,A=17")
## Load Serial drivers ## Load Serial drivers
#drvAsynSerialPortConfigure("RS0","/dev/ttyAMA0") #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> # 2021/12/14 13:11:50.019969 RS0 ISTTOK:central:P002:M: No reply within 200 ms to "0020074002=?107<0d>
#var streamError 1 #var streamError 1
#with this no errors on pfeiffer bus #with this no errors on pfeiffer bus
var streamDebug 1 #var streamDebug 1
streamSetLogfile("logfile.txt") #streamSetLogfile("logfile.txt")
## Run this to trace the stages of iocInit ## Run this to trace the stages of iocInit
#traceIocInit #traceIocInit
@@ -70,11 +73,11 @@ asSetFilename("${TOP}/iocBoot/${IOC}/access_security.acf")
iocInit iocInit
#asInit asInit
# Create request file and start periodic 'save # Create request file and start periodic 'save
# makeAutosaveFileFromDbInfo("$(SAVE_DIR)/$(IOC).req", "autosaveFields") # 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 ## Start any sequence programs , use safe mode
seq IsttokSeqExec "unit=ISTTOK" seq IsttokSeqExec "unit=ISTTOK"