Files
ISTTOK/epics
Bernardo Carvalho 495ca45e16 New device name
Signed-off-by: Bernardo Carvalho <bernardo.carvalho@tecnico.ulisboa.pt>
2022-05-04 16:03:59 +01:00
..
2022-02-23 19:02:37 +00:00
2021-12-15 18:19:17 +00:00
2019-12-19 23:02:55 +00:00
2022-05-04 16:03:59 +01:00
2022-02-14 16:48:21 +00:00

New ISTTOK Slow Control System

Intro

The new ISTTOK slow control system is designed to replace the former vacuum/power/slow timing system based is the EDWARDS controller.

The new system uses the EPICS framework and the Control System Studio, below there is a detailed description of the used software. In the next figure is depicted the system structure. Kiku

At the present the software are installed in two IOC servers with the exception of the Control System Studio that is also used for the GUI management.

All software stored in IPFN GIT server

Team and responsabilities

  • Horácio Fernandes (ISTTOK Leader)
  • Bernardo Carvalho (Project Leader)
  • Humberto Figueiredo (ISTTOK Session Leader)
  • Hugo Alves (ISTTOK Session Leader, State Machine development)
  • Tiago Pereira (dsPIC development, RS232 protocol/ Sensor Interface/ Wiring)

System description

Presently there are two/three instances of EPICS IOC Server implemented. One responsible for the Temperature Node. And a second one, installed in a Raspberry Pi, implemented in the new control unit launched at ISTTOK for the remote control of the vacuum pumps, named Central Node. A third one is dedicated for readind the Vacuum Sensore through the RS484 Interface

Temperature/Vacuum Node: Temperature Sensors and ELCO Voltage Measurement Systems

  • Thermocouple Sensor
  • ELCO voltage measurement
  • For communication was used a fiber optic

The dsPic uses the internal ADC to read the voltage signal from the thermocouple. To measure the ELCO's voltage it was developed two boards one to read the ELCO's voltage and another to connect the fiber optic to dsPIC.

Hardware Platform

  • Thermocouple Sensor
  • ELCO voltage measurement
  1. One PC Controller
  • Intel(R) Atom(TM) CPU330 1.60GHz, Dual Core, 1 Gbyte RAM, 4 RAM
  • 4 Serial Ports
  • IP addr: 192.168.1.152 ( ISTTOK private network)
  • Scientific Linux CERN 6 (SLC6) with MRG Realtime extensions *Linux kernel 3.2.33-rt50.66.el6rt.x86_64
  • NTP time conected to IPFN Gps NTP/PPS server IP:10.136.236.255 and baco.ipfn.tecnico.ulisboa.pt (193.136.136.129)
  1. Local Control
  • One or more dsPic board running an embedded firmware

Temperature Sensors and ELCO Voltage Measurement Systems -For communication was used a fiber optic

The dsPic uses the internal ADC to read the voltage signal from the thermocouple. To measure the ELCO's voltage it was developed two boards one to read the ELCO's voltage and another to connect the fiber optic to dsPIC.

Protocol for communication between dspics and PC

  • all bytes are readable ASCII
  • all messages all terminated with two bytes: \r\n (13 10)
  • messages have variable length
  • framing character for fields inside message is space (32)
  • individual fields inside each message have variable length
  • the last three characters before the terminator are the ASCII representation of the checksum of all other bytes, excluding the terminator
  • Messages are sent periodically (1s)

Examples: PIC -> PC VL01_1 VL02_1 VL03_0 TE01_150.9 TE02_80.1 UP_7200 PR01_1.3e-4 CKS\r\n

PC -> PIC VL01_1 CKS\r\n

Table of word fields

N A
VLxx_ Valve
TExx_ Temperature
UP_ Uptime
PRDxx_ Wave Period
PRxx_ Pressure

Software Platform

  1. EPICS V3.15.7 (instaled in /opt/epics/base-3.15.7)
    • IOC sources (versioned) in /home/codac-dev/ISTTOK/epics/iocs/ISTTOKdsPIC
    • IOC binaries in /opt/epics/apps/ISTTOK
    • Init IOC script in /etc/rc.local
  2. Modules ( (instaled in /opt/epics/modules)
  3. CS-Studio

Process Value in this IOC Server:

PV Name PV Type Archive
ISTTOK:temperature:Uptime longin no
ISTTOK:temperature:Last_Uptime ai no
ISTTOK:temperature:Temperature_0 ai yes
ISTTOK:temperature:Temperature_1 ai no
ISTTOK:temperature:Temperature_2 ai no
ISTTOK:temperature:Temperature_3 ai no
ISTTOK:temperature:Capbank_Voltage ai no
ISTTOK:temperature:VVessel-Temperature ai yes

Central Control/Vacuum Node

  • Vacuum Sensors
  • Pffeifer rotatory vacuum pumpa (RPump1)
  • Edwards electro valve
  • Seiko Seiki turbomolecular pump and control unit (model SCU-400)
  • Main State Machine, see source

Hardware Platform

  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)
  1. Two Interface Boards, Velleman Model k8000..
  • 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
  • Indicator leds for the relays in the front panel
  • 24 V power supply

Software Platform

  1. Linux Raspian "Stretch" (user :pi):
  • 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 v7 base-7.0 from epics github
    • (in /home/pi/Apps/epics7/epics-base) including modules:
    • asynDriver asyn
    • StreamDevice
    • State Notation Language and Sequence v.2.2 seq
    • autosave
    • IOC installed in '/home/pi/ISTTOK/epics/iocs/ISTTOKrpi'
      • Running in screen deamon (see /etc/rc.local)

For installation EPICS in Linux/raspian see this link

Process Variables

Process Variables in this IOC Server:

  • State machine PVs
PV Name PV Type Archive
ISTTOK:central:AUTHORISATION bo no
ISTTOK:central:OPREQ bo no
ISTTOK:central:PROCESS-MODE bo no
ISTTOK:central:PROCESS-REQ bo no
ISTTOK:central:COUNTER calc no
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

  • Connected to PCF8574 I2C Address = 56 (Bottom Valleman)
PV Name PV Type Bit
ISTTOK:central:TMPump1-ControllerOn bo 0
ISTTOK:central:TMPump1-ControllerOff bo 1
ISTTOK:central:TMPump1-MotorOn bo 2
ISTTOK:central:TMPump1-MotorOff bo 3
ISTTOK:central:TMPump1-Power bi 4
ISTTOK:central:TMPump1-Acceleration bi 5
ISTTOK:central:TMPump1-Emergency bi 6
ISTTOK:central:TMPump1-NormalOperation bi 7

  • Connected to PCF8574 I2C Address = 57 (Bottom Valleman board)
PV Name PV Type Bit
ISTTOK:central:TMPump2-Emergency bi 0
ISTTOK:central:TMPump2-Acceleration bi 1
ISTTOK:central:TMPump2-MotorOn bo 2
ISTTOK:central:Emergency-PhysButton bi 4
ISTTOK:central:TTSystem-tzero bi 7

  • Connected to PCF8574 Address = 60 (Top Valleman Board)

|PV Name | PV Type | Bit | Relay #/(NO/NC)| |:----------|-------|---:| |ISTTOK:central:RPump1-Motor| bo | 0 | 5 / NC | |ISTTOK:central:RPump1-Valve| bo | 1 | 4 / NC | |ISTTOK:central:RPump2-Motor (Not Used/Disabled)| bo | 2 | | |ISTTOK:central:RPump2-Valve (Not Used/Disabled| bo | 3 | | |ISTTOK:central:VVessel-Filament| bo | 4 | 1 / NO|

  • Connected to TDA8444 DAC @ address 0x20=d32 (Bottom Valleman Board)
PV Name PV Type Archive
ISTTOK:central:TDA8444:32:DAC_CH0 longout no
ISTTOK:central:TDA8444:32:DAC_CH1 longout no
ISTTOK:central:TDA8444:32:DAC_CH2 longout no
ISTTOK:central:TDA8444:32:DAC_CH3 longout no
ISTTOK:central:TDA8444:32:DAC_CH5 longout no
ISTTOK:central:TDA8444:32:DAC_CH6 longout no

  • Connected to PCF8591 ADC / DAC register @ address 0x48=d72

|PV Name |PV Type | CH |Archive| |:----------|-------|---:| | ISTTOK:central:TMPump2-Speed| ai | ch1 | no | | ISTTOK:central:TMPump2-Current| ai | ch2 | no | | ISTTOK:central:Shot-TorPSCurrentImage"| ai | ch3 | no |

  • Connected to RS485 Bus (Using USB /dev/ttyUSB0)
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 Grove - 4-Channel SPDT Relay Address = 17

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

  • Connected to Seeeduino- 4-Channel SPDT Relay Address = 18

|PV Name | PV Type | Bit | Relay NO/NC| |:----------|-------|---:| |ISTTOK:central:Clean-PrimContactor| bo | 0 | Relay NO/NC| |ISTTOK:central:Clean-TorContactor| bo | 1 | Relay NO/NC| |ISTTOK:central:CapBank-Charge| bo | 2 | Relay NO/NC| |ISTTOK:central:Buzzer| bo | 3 | Relay NO/NC|

  • Connected to Seeeduino- 4-Channel SPDT Relay Address = 19

|PV Name | PV Type | Bit | Relay NO/NC| |:----------|-------|---:| | ISTTOK:central:Shot-TorPSDisable| bo | 0 | NO | | ISTTOK:central:Lab-WarningLight| bo |1 | NO |

Vacuum Node (Not used, backup server only)

  • Vacuum Pfeiffer Sensors (RS485)

Hardware Platform

  1. A Raspberry Pi 2, running a raspian Buster distribution..
  • Has a USB/RS485 interface for monitoring pressure sensors

Process Variables

Process Variables in this IOC Server:

  • Connected to RS485 Bus
PV Name PV Type Archive
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

  1. Linux Raspian "buster" (user :pi):

Download and configure CS-Studio

  • Install JAVA JDK (version Java SE Development Kit 8) or openjdk-8-jre linux package
  • Download ISTTOK EPICS Files to a working folder
    • git clone https://bernardo@git.ipfn.tecnico.ulisboa.pt/r/ISTTOK.git
  • Goto site CS-Studio and download latest version to your OS
  • Uncompress folder
  • Run cs-studio executable
    • Choose a workplace folder
  • Goto to Menu EDIT->Preferences->CSS Core->Data Sources->Channel Access
    • On Address List replace localhost with epics.ipfn.tecnico.ulisboa.pt
    • Uncheck Auto Address List
    • Restart CS-Studio
  • Run File -> Import -> General-> Projects from folder
    • point to cloned folder
  • Navigate to ISTTOK/epics/css/sys-mng-opi/CSS
    • Open SystemManagerIsttok.opi with "OPI Display"

EPICS Channel Access Configuration

export EPICS_CA_ADDR_LIST="192.168.1.110 192.168.1.152"
export EPICS_CA_AUTO_ADDR_LIST="NO"

References

"EPICS IOC module development and implementation for the ISTTOK machine subsystem operation and control" Paulo Carvalho, André Duarte, Tiago Pereira, Bernardo Carvalho, Jorge Sousa, Horácio Fernandes, Carlos Correia, Bruno Gonçalves, Carlos Varandas

Fusion Engineering and Design 86 (2011) 10851090