Integrated Alarm System for ALMA Observatory Architecture - Development Overview

 
Integrated Alarm System for the ALMA Observatory
 
Achitecture
 
Alessandro Caproni
ESO Software Development Division
 
ALMA alarm systems
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
2
 
Development study
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
3
 
Current status
 
Vague and confused ideas
A growing prototype
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
4
 
IAS core – Distributed Alarm System Units
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
5
 
IAS core – Alarm System Computing
Elements
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
6
 
IAS Core – Alarm System Computing
Element
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
7
∑∑
 
 out =
1..n
(….)
 
out
 
1
 
n
 
Inputs sent on changes
out refreshed at a given time interval
Validity
Inputs and output share the same type
 
 
∑ (AKA Transfer Function)
 
∑ brief calculation on the inputs
∑ no remote access or I/O
∑ Dynamically load from CDB
Implementation
Java/scala
Python?
DSL?
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
8
 
ASCE state machine
INIT
Load TF
Init TF
HEALTHY
Run TF
TF BROKEN
Idle
TF SLOW
Run TF
SHUTDOWN
Shut down TF
CLOSED
 
initialized
 
shutdown
 
shutdown
 
shutdown
 
shutdown
 
close
 
broken
 
slow
 
normal
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
9
 
Putting all together
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
10
 
Identifiers
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
11
 
Communication with subsystems
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
12
 
Communications
 
HIOs passing between ASCEs and DASUs
Commands (to DASUs, from GUIs..)
GUIs
 
(RTI)DDS?
Message passing (ZMQ, ActiveMQ..)?
Actors (Akka)?
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
13
 
Back stage DB
 
HIOs produced at run time
High load (reading/writing HIOs, logs,
commands)
GUIs read HIOs from there
Cassandra already in use for monitoring
seems a good candidate
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
14
 
Configuration DB
 
Stores HIOs, ASCE, DASUs configuration
Deployment configuration
A RDB suffices here (Oracle? Mysql?)
On files (JSON, XML..)?
Cassandra could be evaluated if we want
to use only one technology
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
15
 
GUIs
 
Roles
Web server (JS, angular?)
Java FX for local (command line) GUIs
Google/apple notifications for mobile
Nice to have: support for mobile
applications
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
16
 
Prototype
 
Infrastructure (ant, jenkins, git…)
scala, java, python, shell
Implementation
Logging
HIO types
ASCE with ∑ (scala/java)
DASU (on going)
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
17
 
That’s all!
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
18
 
∑ example: multiplicity
 
def
 eval(compInputs: Map[String, HeteroInOut], actualOutput: HeteroInOut): HeteroInOut = {
    
if
 (compInputs.size<threshold) 
throw new
 UnexpectedNumberOfInputsException(compInputs.size,threshold)
    
if
 (actualOutput.iasType!=ALARM) 
throw new
 TypeMismatchException(actualOutput.id.runningID,actualOutput.iasType,ALARM)
    
for
 (hio <- compInputs.values
        
if
 hio.iasType!=ALARM) 
throw new
 TypeMismatchException(actualOutput.id.runningID,hio.iasType,ALARM)
    
// Get the number of active alarms in input
    
var
 activeAlarms=0
    
val
 numOfActiveAlarms = 
for
 {
      hio <- compInputs.values
      alarmValue = hio.actualValue.get.value.asInstanceOf[AlarmValue]
      
if
 (alarmValue.alarmState==AlarmState.Active)} activeAlarms=activeAlarms+1
 
    // Update the output
    
if
 (activeAlarms>=threshold) {
      actualOutput.updateValue(AlarmValue.transition(actualOutput.actualValue.get.value.asInstanceOf[AlarmValue], 
new
 Set()))
    } else {
      actualOutput.updateValue(AlarmValue.transition(actualOutput.actualValue.get.value.asInstanceOf[AlarmValue], 
new
 Clear()))
    }
  }
 
Garching, 12/12/2016
 
ALMA-CTA Meeting
 
19
Slide Note
Embed
Share

Detailed documentation from ALMA-CTA meetings showcasing the development stages and components of the Integrated Alarm System for the ALMA Observatory. Includes insights on alarm systems, computing elements, distributed units, and implementation strategies discussed in Garching meetings.

  • ALMA Observatory
  • Alarm System
  • Software Development
  • Garching Meetings
  • System Integration

Uploaded on Sep 28, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Integrated Alarm System for the ALMA Observatory Achitecture Alessandro Caproni ESO Software Development Division

  2. ALMA alarm systems Operator panels Integrated Alarm System Alarms and monitor points Software systems Garching, 12/12/2016 ALMA-CTA Meeting 2

  3. Development study Garching, 12/12/2016 ALMA-CTA Meeting 3

  4. Current status Vague and confused ideas A growing prototype Garching, 12/12/2016 ALMA-CTA Meeting 4

  5. IAS core Distributed Alarm System Units Outputs DASUs Inputs Garching, 12/12/2016 ALMA-CTA Meeting 5

  6. IAS core Alarm System Computing Elements DASU ASCE7 ASCE6 ASCE4 ASCE5 ASCE3 ASCE2 ASCE1 CONVERSION LAYER Garching, 12/12/2016 ALMA-CTA Meeting 6

  7. IAS Core Alarm System Computing Element out Inputs sent on changes out refreshed at a given time interval Validity Inputs and output share the same type out = 1..n( .) 1 n Garching, 12/12/2016 ALMA-CTA Meeting 7

  8. (AKA Transfer Function) brief calculation on the inputs no remote access or I/O Dynamically load from CDB Implementation Java/scala Python? DSL? Garching, 12/12/2016 ALMA-CTA Meeting 8

  9. ASCE state machine INIT Load TF Init TF initialized shutdown TF BROKEN Idle HEALTHY Run TF broken slow shutdown TF SLOW Run TF normal shutdown shutdown SHUTDOWN Shut down TF close CLOSED Garching, 12/12/2016 ALMA-CTA Meeting 9

  10. Putting all together Server 2 Server 1 JVM1 JVM1 JVM2 Garching, 12/12/2016 ALMA-CTA Meeting 10

  11. Identifiers DASU ASCE7 ARRAY01@ LOCKED@ASC5@ARRAY01 ASCE6 ASC4@ARRAY01 ASCE4 ASCE5 TEMP@DBCONVERTER@ARRAY01 ASCE3 ASCE2 ASCE1 CURRENT@POWERP@PWDASU DBCONVERTER@ARRAY01 CONVERSION PLUGIN Garching, 12/12/2016 ALMA-CTA Meeting 11

  12. Communication with subsystems Online IAS server(s) Weather BSDB Power plant Garching, 12/12/2016 ALMA-CTA Meeting 12

  13. Communications HIOs passing between ASCEs and DASUs Commands (to DASUs, from GUIs..) GUIs (RTI)DDS? Message passing (ZMQ, ActiveMQ..)? Actors (Akka)? Garching, 12/12/2016 ALMA-CTA Meeting 13

  14. Back stage DB HIOs produced at run time High load (reading/writing HIOs, logs, commands) GUIs read HIOs from there Cassandra already in use for monitoring seems a good candidate Garching, 12/12/2016 ALMA-CTA Meeting 14

  15. Configuration DB Stores HIOs, ASCE, DASUs configuration Deployment configuration A RDB suffices here (Oracle? Mysql?) On files (JSON, XML..)? Cassandra could be evaluated if we want to use only one technology Garching, 12/12/2016 ALMA-CTA Meeting 15

  16. GUIs Roles Web server (JS, angular?) Java FX for local (command line) GUIs Google/apple notifications for mobile Nice to have: support for mobile applications Garching, 12/12/2016 ALMA-CTA Meeting 16

  17. Prototype Infrastructure (ant, jenkins, git ) scala, java, python, shell Implementation Logging HIO types ASCE with (scala/java) DASU (on going) Garching, 12/12/2016 ALMA-CTA Meeting 17

  18. Thats all! Garching, 12/12/2016 ALMA-CTA Meeting 18

  19. example: multiplicity def eval(compInputs: Map[String, HeteroInOut], actualOutput: HeteroInOut): HeteroInOut = { if (compInputs.size<threshold) throw new UnexpectedNumberOfInputsException(compInputs.size,threshold) if (actualOutput.iasType!=ALARM) throw new TypeMismatchException(actualOutput.id.runningID,actualOutput.iasType,ALARM) for (hio <- compInputs.values if hio.iasType!=ALARM) throw new TypeMismatchException(actualOutput.id.runningID,hio.iasType,ALARM) // Get the number of active alarms in input var activeAlarms=0 val numOfActiveAlarms = for { hio <- compInputs.values alarmValue = hio.actualValue.get.value.asInstanceOf[AlarmValue] if (alarmValue.alarmState==AlarmState.Active)} activeAlarms=activeAlarms+1 // Update the output if (activeAlarms>=threshold) { actualOutput.updateValue(AlarmValue.transition(actualOutput.actualValue.get.value.asInstanceOf[AlarmValue], new Set())) } else { actualOutput.updateValue(AlarmValue.transition(actualOutput.actualValue.get.value.asInstanceOf[AlarmValue], new Clear())) } } Garching, 12/12/2016 ALMA-CTA Meeting 19

Related


More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#