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,13 +114,14 @@ 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)..
* connected to raspberry Pi through I2C interface;
@@ -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"
```

View File

@@ -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 = '<html>\n' \
'<body>\n' \
' <h1> ISTTOK Present Condition </h1> \n'
html += '<p>RPump1-Pressure: ' + str(RPump1press) + ' mBar </p>'
html += '<p>RPump2-Pressure: ' + str(RPump2press) + ' mBar </p>'
html += '<p>TMPump1-PressureAdmission: ' + str(TMPump1press) + ' mBar </p>'
html += '<p>VVessel-Pressure: ' + str(VVesselpress) + ' mBar </p>'
html += '<p>OPSTATE: ' + str(opState) + ' </p>'
html += '<p>PULSE-NUMBER: ' + str(pulseNum) + ' </p>'
html += '<p>Rpi CurrentTime: ' + str(rpiCurrentTime) + ' </p>'
'<head> <meta charset="UTF-8"/> <title>ISTTOK Status page</title>' \
'<meta http-equiv="refresh" content="5"> </head>' \
'<body>\n <h1> ISTTOK Present Condition </h1> \n'
# html += '<p>RPump1-Pressure: ' + str(RPump1press) + ' mBar </p>'
html += '<p>RPump1-Pressure: ' + RPump1press + ' mBar </p>'
# html += '<p>RPump2-Pressure: ' + str(RPump2press) + ' mBar </p>'
html += '<p>TMPump1-PressureAdmission: ' + TMPump1press + ' mBar </p>'
html += '<p>VVessel-Pressure: ' + VVesselpress + ' mBar </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>\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]

View File

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

View File

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

View File

@@ -1,3 +1,4 @@
# 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
@@ -8,28 +9,32 @@ record (longin, "$(P)$(R)P001:M")
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(PHAS, "1")
field (FLNK, "$(P)$(R)VVessel-Pressure")
}
record (longin, "$(P)$(R)P001:E")
{
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 (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")
@@ -39,6 +44,7 @@ record (longin, "$(P)$(R)P002:M")
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")
@@ -48,7 +54,7 @@ record (longin, "$(P)$(R)P002:E")
record (calc, "$(P)$(R)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(CALC, "(A*0.001)*10.0**(B-20)")
field(PREC, "3")
@@ -70,26 +76,32 @@ record (longin, "$(P)$(R)P003:M")
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)VVessel-Pressure")
field (FLNK, "$(P)$(R)TMPump1-PressureAdmission")
}
record (longin, "$(P)$(R)P003:E")
{
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(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";
@@ -111,7 +123,7 @@ record (longin, "$(P)$(R)P004:E")
record (calc, "$(P)$(R)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(CALC, "(A*0.001)* 10.0**(B-20)")
field(PREC, "3")

View File

@@ -1,3 +1,4 @@
# vim: sta:et:sw=4:ts=4:sts=4
#
# Project : ISTTOK slow Control
#
@@ -31,6 +32,8 @@ record(mbbi, "$(P)$(R)OPSTATE") {
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")
@@ -51,14 +54,16 @@ record(mbbo, "$(P)$(R)LASTOPSTATE") {
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(SCAN,"1 second")
field(INPA,"$(P)$(R)OPSTATE.VAL NPP NMS")
}
record(calc, "$(P)$(R)STARTCALCSTATE") {
@@ -100,24 +105,27 @@ record(bo, "$(P)$(R)UPS-OnBattery") {
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")
# info(autosaveFields, "VAL STAT")
field(DESC, "Main APC UPS Shutdown request")
# field(VAL, "0")
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(PINI, "YES")
field(ZNAM, "STOP")
field(ONAM, "START")
}
@@ -135,6 +143,7 @@ record(bo, "$(P)$(R)CLEANINGMANMODE") {
record(bo, "$(P)$(R)FSTriggerStart") {
field(DESC, "FireSignal Trigger Start")
field(VAL, "0")
field(PINI, "YES")
field(ZNAM, "STOP")
field(ONAM, "START")
}
@@ -143,6 +152,7 @@ record(bo, "$(P)$(R)PROCESS-MODE") {
info(autosaveFields, "VAL")
field(DESC, "Plasma Process Mode")
#field(VAL, "0")
#field(PINI, "YES")
field(ZNAM, "CLEAN")
field(ONAM, "SHOT")
}
@@ -150,8 +160,11 @@ record(bo, "$(P)$(R)PROCESS-MODE") {
record(bo, "$(P)$(R)PROCESS-REQ") {
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") {
@@ -161,15 +174,23 @@ record(bo, "$(P)$(R)AUTHORISATION") {
field(VAL, "0")
}
record(longout, "$(P)$(R)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(DISA,"1")
#field(SCAN,"Passive")
field(SCAN,"1 second")
field(CALC,"A+1")
field(VAL, "160")
}
@@ -185,7 +206,7 @@ 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(PINI, "YES")
field(INP, "@%d/%m/%Y %H:%M:%S")
}
@@ -224,12 +245,14 @@ record(mbbi, "$(P)$(R)CLEANINGSTATE") {
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")
}

View File

@@ -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 <anyname>.db template is not named <anyname>*.template add
# <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)
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).

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 {
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;
}

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: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

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-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

View File

@@ -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
<END>

View File

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