From b0138c2c703dd711c82c21b32a2dc622e86c74f3 Mon Sep 17 00:00:00 2001
From: Thomas Juerges <4-jurges@users.noreply.git.astron.nl>
Date: Thu, 30 Jul 2020 16:30:44 +0200
Subject: [PATCH] Refactored the code

- State machine checks for properties that get their values from the OPC server.
- Refactored attribute names to be all lower case.
- Got rid of the two functions that enable/disable data fetching in the data thread.
---
 StatsCrosslet-DS/StatsCrosslet.py  | 265 ++++++++++++-----------------
 StatsCrosslet-DS/StatsCrosslet.xmi |  59 +------
 2 files changed, 117 insertions(+), 207 deletions(-)

diff --git a/StatsCrosslet-DS/StatsCrosslet.py b/StatsCrosslet-DS/StatsCrosslet.py
index 8c8998751..abf6ce385 100644
--- a/StatsCrosslet-DS/StatsCrosslet.py
+++ b/StatsCrosslet-DS/StatsCrosslet.py
@@ -66,14 +66,14 @@ class StatsCrosslet(Device):
         # property system.
         self.debug_stream("Entering read_data loop.")
         while self.stop_data_read_loop is False:
-            self.debug_stream("read_data is running...")
+            self.debug_stream("read_data is running, going to sleep for %fs..." % (self._pause_time))
             threading.Event().wait(self._pause_time)
             if self.data_acquisition_is_active is True:
                 try:
                     self.debug_stream("fetching data:  subband = %d, integration_time = %d", self._subband, self._integration_time)
                     t, visibilities_list, rcu_modes = self.obj.call_method(self.record_cross, self._subband, self._integration_time)
                     self.debug_stream("fetching data done: t = %s, len(visibilities_list) = %d, len(rcu_modes) = %d", t, len(visibilities_list), len(rcu_modes))
-                    self._time_stamp = t
+                    self._time_stamp = t.isoformat()
                     visibilities = numpy.array(visibilities_list)[0] + 1j * numpy.array(visibilities_list[1])
                     self._visibilities_real = visibilities.real
                     self._visibilities_imag = visibilities.imag
@@ -93,7 +93,7 @@ class StatsCrosslet(Device):
 
     OPC_Server_Name = device_property(
         dtype='DevString',
-        default_value="okeanos-kabel"
+        default_value="okeanos"
     )
 
     OPC_Server_Port = device_property(
@@ -125,35 +125,36 @@ class StatsCrosslet(Device):
     # Attributes
     # ----------
 
-    Subband = attribute(
+    subband = attribute(
         dtype='DevUShort',
         access=AttrWriteType.READ_WRITE,
     )
 
-    Integration_time = attribute(
+    integration_time = attribute(
         dtype='DevDouble',
+        access=AttrWriteType.READ_WRITE,
     )
 
-    Time_stamp = attribute(
+    time_stamp = attribute(
         dtype='DevString',
     )
 
-    Pause_time = attribute(
+    pause_time = attribute(
         dtype='DevDouble',
         access=AttrWriteType.READ_WRITE,
     )
 
-    RCU_modes = attribute(
-        dtype=('DevString',),
+    rcu_modes = attribute(
+        dtype=('DevLong',),
         max_dim_x=96,
     )
 
-    Visibilities_imag = attribute(
+    visibilities_imag = attribute(
         dtype=(('DevDouble',),),
         max_dim_x=96, max_dim_y=96,
     )
 
-    Visibilities_real = attribute(
+    visibilities_real = attribute(
         dtype=(('DevDouble',),),
         max_dim_x=96, max_dim_y=96,
     )
@@ -166,7 +167,6 @@ class StatsCrosslet(Device):
         """Initialises the attributes and properties of the StatsCrosslet."""
         Device.init_device(self)
         # PROTECTED REGION ID(StatsCrosslet.init_device) ENABLED START #
-        self.set_state(DevState.INIT)
         # Set default values in the read/write attributes.
         self._time_stamp = ''
         self._rcu_modes = ('',)
@@ -191,7 +191,7 @@ class StatsCrosslet(Device):
             self.data_acquisition_is_active = False
             self.stop_data_read_loop = False
             self.data_read_loop.start()
-            self.set_state(DevState.ON)
+            self.set_state(DevState.INIT)
         except Exception as e:
             self.set_state(DevState.FAULT)
             self.error_stream("Cannot connect to the OPC-UA server %s.  Trace: %s" % (self.OPC_Server_Name, traceback.format_exc()))
@@ -228,139 +228,101 @@ class StatsCrosslet(Device):
     # Attributes methods
     # ------------------
 
-    def read_Subband(self):
-        # PROTECTED REGION ID(StatsCrosslet.Subband_read) ENABLED START #
-        """Return the Subband attribute."""
-        return self.__subband
-        # PROTECTED REGION END #    //  StatsCrosslet.Subband_read
-
-    def write_Subband(self, value):
-        # PROTECTED REGION ID(StatsCrosslet.Subband_write) ENABLED START #
-        """Set the Subband attribute."""
-        pass
-        # PROTECTED REGION END #    //  StatsCrosslet.Subband_write
-
-    def is_Subband_allowed(self, attr):
-        # PROTECTED REGION ID(StatsCrosslet.is_Subband_allowed) ENABLED START #
-        if attr==attr.READ_REQ:
-            return self.get_state() not in [DevState.STANDBY]
-        else:
-            return self.get_state() not in [DevState.STANDBY]
-        # PROTECTED REGION END #    //  StatsCrosslet.is_Subband_allowed
-
-    def read_Integration_time(self):
-        # PROTECTED REGION ID(StatsCrosslet.Integration_time_read) ENABLED START #
-        """Return the Integration_time attribute."""
-        return self.__integration_time
-        # PROTECTED REGION END #    //  StatsCrosslet.Integration_time_read
-
-    def is_Integration_time_allowed(self, attr):
-        # PROTECTED REGION ID(StatsCrosslet.is_Integration_time_allowed) ENABLED START #
-        return self.get_state() not in [DevState.ON,DevState.OFF,DevState.INIT]
-        # PROTECTED REGION END #    //  StatsCrosslet.is_Integration_time_allowed
-
-    def read_Time_stamp(self):
-        # PROTECTED REGION ID(StatsCrosslet.Time_stamp_read) ENABLED START #
-        """Return the Time_stamp attribute."""
-        return self.__time_stamp
-        # PROTECTED REGION END #    //  StatsCrosslet.Time_stamp_read
-
-    def is_Time_stamp_allowed(self, attr):
-        # PROTECTED REGION ID(StatsCrosslet.is_Time_stamp_allowed) ENABLED START #
-        return self.get_state() not in [DevState.ON,DevState.OFF,DevState.INIT]
-        # PROTECTED REGION END #    //  StatsCrosslet.is_Time_stamp_allowed
-
-    def read_Pause_time(self):
-        # PROTECTED REGION ID(StatsCrosslet.Pause_time_read) ENABLED START #
-        """Return the Pause_time attribute."""
-        return self.__pause_time
-        # PROTECTED REGION END #    //  StatsCrosslet.Pause_time_read
-
-    def write_Pause_time(self, value):
-        # PROTECTED REGION ID(StatsCrosslet.Pause_time_write) ENABLED START #
-        """Set the Pause_time attribute."""
-        pass
-        # PROTECTED REGION END #    //  StatsCrosslet.Pause_time_write
-
-    def read_RCU_modes(self):
-        # PROTECTED REGION ID(StatsCrosslet.RCU_modes_read) ENABLED START #
-        """Return the RCU_modes attribute."""
-        return self._rcu_modes
-        # PROTECTED REGION END #    //  StatsCrosslet.RCU_modes_read
-
-    def is_RCU_modes_allowed(self, attr):
-        # PROTECTED REGION ID(StatsCrosslet.is_RCU_modes_allowed) ENABLED START #
-        return self.get_state() not in [DevState.ON,DevState.OFF,DevState.INIT]
-        # PROTECTED REGION END #    //  StatsCrosslet.is_RCU_modes_allowed
-
-    def read_Visibilities_imag(self):
-        # PROTECTED REGION ID(StatsCrosslet.Visibilities_imag_read) ENABLED START #
-        """Return the Visibilities_imag attribute."""
-        return self.__visibilities_imag
-        # PROTECTED REGION END #    //  StatsCrosslet.Visibilities_imag_read
-
-    def is_Visibilities_imag_allowed(self, attr):
-        # PROTECTED REGION ID(StatsCrosslet.is_Visibilities_imag_allowed) ENABLED START #
-        return self.get_state() not in [DevState.ON,DevState.OFF,DevState.INIT]
-        # PROTECTED REGION END #    //  StatsCrosslet.is_Visibilities_imag_allowed
-
-    def read_Visibilities_real(self):
-        # PROTECTED REGION ID(StatsCrosslet.Visibilities_real_read) ENABLED START #
-        """Return the Visibilities_real attribute."""
-        return self.__visibilities_real
-        # PROTECTED REGION END #    //  StatsCrosslet.Visibilities_real_read
-
-    def is_Visibilities_real_allowed(self, attr):
-        # PROTECTED REGION ID(StatsCrosslet.is_Visibilities_real_allowed) ENABLED START #
-        return self.get_state() not in [DevState.ON,DevState.OFF,DevState.INIT]
-        # PROTECTED REGION END #    //  StatsCrosslet.is_Visibilities_real_allowed
+    def read_subband(self):
+        # PROTECTED REGION ID(StatsCrosslet.subband_read) ENABLED START #
+        """Return the subband attribute."""
+        return self._subband
+        # PROTECTED REGION END #    //  StatsCrosslet.subband_read
+
+    def write_subband(self, value):
+        # PROTECTED REGION ID(StatsCrosslet.subband_write) ENABLED START #
+        """Set the subband attribute."""
+        self._subband = value
+        # PROTECTED REGION END #    //  StatsCrosslet.subband_write
+
+    def read_integration_time(self):
+        # PROTECTED REGION ID(StatsCrosslet.integration_time_read) ENABLED START #
+        """Return the integration_time attribute."""
+        if self.is_integration_time_allowed(True) is True:
+            return self._integration_time
+        # PROTECTED REGION END #    //  StatsCrosslet.integration_time_read
+
+    def write_integration_time(self, value):
+        # PROTECTED REGION ID(StatsCrosslet.integration_time_write) ENABLED START #
+        """Set the integration_time attribute."""
+        if self.is_integration_time_allowed(True) is True:
+            self._integration_time = value
+        # PROTECTED REGION END #    //  StatsCrosslet.integration_time_write
+
+    def is_integration_time_allowed(self, attr):
+        # PROTECTED REGION ID(StatsCrosslet.is_integration_time_allowed) ENABLED START #
+        return self.get_state() not in [DevState.OFF,DevState.INIT]
+        # PROTECTED REGION END #    //  StatsCrosslet.is_integration_time_allowed
+
+    def read_time_stamp(self):
+        # PROTECTED REGION ID(StatsCrosslet.time_stamp_read) ENABLED START #
+        """Return the time_stamp attribute."""
+        if self.is_time_stamp_allowed(True) is True:
+            return self._time_stamp
+        # PROTECTED REGION END #    //  StatsCrosslet.time_stamp_read
+
+    def is_time_stamp_allowed(self, attr):
+        # PROTECTED REGION ID(StatsCrosslet.is_time_stamp_allowed) ENABLED START #
+        return self.get_state() not in [DevState.OFF,DevState.INIT]
+        # PROTECTED REGION END #    //  StatsCrosslet.is_time_stamp_allowed
+
+    def read_pause_time(self):
+        # PROTECTED REGION ID(StatsCrosslet.pause_time_read) ENABLED START #
+        """Return the pause_time attribute."""
+        return self._pause_time
+        # PROTECTED REGION END #    //  StatsCrosslet.pause_time_read
+
+    def write_pause_time(self, value):
+        # PROTECTED REGION ID(StatsCrosslet.pause_time_write) ENABLED START #
+        """Set the pause_time attribute."""
+        self._pause_time = value
+        # PROTECTED REGION END #    //  StatsCrosslet.pause_time_write
+
+    def read_rcu_modes(self):
+        # PROTECTED REGION ID(StatsCrosslet.rcu_modes_read) ENABLED START #
+        """Return the rcu_modes attribute."""
+        if self.is_rcu_modes_allowed(True) is True:
+            return self._rcu_modes
+        # PROTECTED REGION END #    //  StatsCrosslet.rcu_modes_read
+
+    def is_rcu_modes_allowed(self, attr):
+        # PROTECTED REGION ID(StatsCrosslet.is_rcu_modes_allowed) ENABLED START #
+        return self.get_state() not in [DevState.OFF,DevState.INIT]
+        # PROTECTED REGION END #    //  StatsCrosslet.is_rcu_modes_allowed
+
+    def read_visibilities_imag(self):
+        # PROTECTED REGION ID(StatsCrosslet.visibilities_imag_read) ENABLED START #
+        """Return the visibilities_imag attribute."""
+        if self.is_visibilities_imag_allowed(True) is True:
+            return self._visibilities_imag
+        # PROTECTED REGION END #    //  StatsCrosslet.visibilities_imag_read
+
+    def is_visibilities_imag_allowed(self, attr):
+        # PROTECTED REGION ID(StatsCrosslet.is_visibilities_imag_allowed) ENABLED START #
+        return self.get_state() not in [DevState.OFF,DevState.INIT]
+        # PROTECTED REGION END #    //  StatsCrosslet.is_visibilities_imag_allowed
+
+    def read_visibilities_real(self):
+        # PROTECTED REGION ID(StatsCrosslet.visibilities_real_read) ENABLED START #
+        """Return the visibilities_real attribute."""
+        if self.is_visibilities_real_allowed(True) is True:
+            return self._visibilities_real
+        # PROTECTED REGION END #    //  StatsCrosslet.visibilities_real_read
+
+    def is_visibilities_real_allowed(self, attr):
+        # PROTECTED REGION ID(StatsCrosslet.is_visibilities_real_allowed) ENABLED START #
+        return self.get_state() not in [DevState.OFF,DevState.INIT]
+        # PROTECTED REGION END #    //  StatsCrosslet.is_visibilities_real_allowed
 
     # --------
     # Commands
     # --------
 
-    @command(
-    )
-    @DebugIt()
-    def start_acquisition(self):
-        # PROTECTED REGION ID(StatsCrosslet.start_acquisition) ENABLED START #
-        """
-        Start the data acquisition of the station`s crosslet stats.
-
-        :param argin: 'DevULong'
-
-        :return:None
-        """
-        if self.is_start_acquisition_allowed() is True:
-            self.data_acquisition_is_active = True
-            self.set_state(DevState.RUNNING)
-        # PROTECTED REGION END #    //  StatsCrosslet.start_acquisition
-
-    def is_start_acquisition_allowed(self):
-        # PROTECTED REGION ID(StatsCrosslet.is_start_acquisition_allowed) ENABLED START #
-        return self.get_state() not in [DevState.ON,DevState.OFF,DevState.STANDBY,DevState.RUNNING]
-        # PROTECTED REGION END #    //  StatsCrosslet.is_start_acquisition_allowed
-
-    @command(
-    )
-    @DebugIt()
-    def stop_acquisition(self):
-        # PROTECTED REGION ID(StatsCrosslet.stop_acquisition) ENABLED START #
-        """
-        Stop the data acquisition.
-
-        :return:None
-        """
-        if self.is_stop_acquisition_allowed() is True:
-            self.set_state(DevState.ON)
-            self.data_acquisition_is_active = False
-        # PROTECTED REGION END #    //  StatsCrosslet.stop_acquisition
-
-    def is_stop_acquisition_allowed(self):
-        # PROTECTED REGION ID(StatsCrosslet.is_stop_acquisition_allowed) ENABLED START #
-        return self.get_state() not in [DevState.ON,DevState.INIT,DevState.RUNNING]
-        # PROTECTED REGION END #    //  StatsCrosslet.is_stop_acquisition_allowed
-
     @command(
     )
     @DebugIt()
@@ -370,7 +332,8 @@ class StatsCrosslet(Device):
 
         :return:None
         """
-        pass
+        self.data_acquisition_is_active = True
+        self.set_state(DevState.ON)
         # PROTECTED REGION END #    //  StatsCrosslet.On
 
     @command(
@@ -397,18 +360,6 @@ class StatsCrosslet(Device):
         pass
         # PROTECTED REGION END #    //  StatsCrosslet.Remote
 
-    @command(
-    )
-    @DebugIt()
-    def Reset(self):
-        # PROTECTED REGION ID(StatsCrosslet.Reset) ENABLED START #
-        """
-
-        :return:None
-        """
-        pass
-        # PROTECTED REGION END #    //  StatsCrosslet.Reset
-
     @command(
     )
     @DebugIt()
@@ -418,7 +369,8 @@ class StatsCrosslet(Device):
 
         :return:None
         """
-        pass
+        self.set_state(DevState.OFF)
+        self.data_acquisition_is_active = False
         # PROTECTED REGION END #    //  StatsCrosslet.Off
 
     @command(
@@ -430,7 +382,8 @@ class StatsCrosslet(Device):
 
         :return:None
         """
-        pass
+        self.set_state(DevState.INIT)
+        self.data_acquisition_is_active = False
         # PROTECTED REGION END #    //  StatsCrosslet.Init
 
 # ----------
diff --git a/StatsCrosslet-DS/StatsCrosslet.xmi b/StatsCrosslet-DS/StatsCrosslet.xmi
index 946eb73e5..70f24b3ff 100644
--- a/StatsCrosslet-DS/StatsCrosslet.xmi
+++ b/StatsCrosslet-DS/StatsCrosslet.xmi
@@ -53,30 +53,6 @@
       </argout>
       <status abstract="true" inherited="true" concrete="true"/>
     </commands>
-    <commands name="start_acquisition" description="Start the data acquisition of the station`s crosslet stats." execMethod="start_acquisition" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
-      <argin description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argin>
-      <argout description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argout>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <excludedStates>OFF</excludedStates>
-      <excludedStates>RUNNING</excludedStates>
-      <excludedStates>FAULT</excludedStates>
-    </commands>
-    <commands name="stop_acquisition" description="Stop the data acquisition." execMethod="stop_acquisition" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
-      <argin description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argin>
-      <argout description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argout>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-      <excludedStates>INIT</excludedStates>
-      <excludedStates>RUNNING</excludedStates>
-      <excludedStates>FAULT</excludedStates>
-    </commands>
     <commands name="On" description="" execMethod="on" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
       <argin description="">
         <type xsi:type="pogoDsl:VoidType"/>
@@ -104,15 +80,6 @@
       </argout>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </commands>
-    <commands name="Reset" description="" execMethod="reset" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
-      <argin description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argin>
-      <argout description="">
-        <type xsi:type="pogoDsl:VoidType"/>
-      </argout>
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </commands>
     <commands name="Off" description="" execMethod="off" displayLevel="OPERATOR" polledPeriod="0" isDynamic="false">
       <argin description="">
         <type xsi:type="pogoDsl:VoidType"/>
@@ -131,39 +98,35 @@
       </argout>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </commands>
-    <attributes name="Subband" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="subband" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
       <dataType xsi:type="pogoDsl:UShortType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
       <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <readExcludedStates>STANDBY</readExcludedStates>
-      <writeExcludedStates>STANDBY</writeExcludedStates>
     </attributes>
-    <attributes name="Integration_time" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="integration_time" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
       <dataType xsi:type="pogoDsl:DoubleType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
       <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <readExcludedStates>ON</readExcludedStates>
       <readExcludedStates>OFF</readExcludedStates>
       <readExcludedStates>INIT</readExcludedStates>
     </attributes>
-    <attributes name="Time_stamp" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="time_stamp" attType="Scalar" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
       <dataType xsi:type="pogoDsl:StringType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
       <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <readExcludedStates>ON</readExcludedStates>
       <readExcludedStates>OFF</readExcludedStates>
       <readExcludedStates>INIT</readExcludedStates>
     </attributes>
-    <attributes name="Pause_time" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
+    <attributes name="pause_time" attType="Scalar" rwType="READ_WRITE" displayLevel="OPERATOR" polledPeriod="0" maxX="" maxY="" allocReadMember="true" isDynamic="false">
       <dataType xsi:type="pogoDsl:DoubleType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
@@ -171,36 +134,33 @@
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
     </attributes>
-    <attributes name="RCU_modes" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="96" maxY="" allocReadMember="true" isDynamic="false">
-      <dataType xsi:type="pogoDsl:StringType"/>
+    <attributes name="rcu_modes" attType="Spectrum" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="96" maxY="" allocReadMember="true" isDynamic="false">
+      <dataType xsi:type="pogoDsl:IntType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
       <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <readExcludedStates>ON</readExcludedStates>
       <readExcludedStates>OFF</readExcludedStates>
       <readExcludedStates>INIT</readExcludedStates>
     </attributes>
-    <attributes name="Visibilities_imag" attType="Image" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="96" maxY="96" allocReadMember="true" isDynamic="false">
+    <attributes name="visibilities_imag" attType="Image" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="96" maxY="96" allocReadMember="true" isDynamic="false">
       <dataType xsi:type="pogoDsl:DoubleType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
       <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <readExcludedStates>ON</readExcludedStates>
       <readExcludedStates>OFF</readExcludedStates>
       <readExcludedStates>INIT</readExcludedStates>
     </attributes>
-    <attributes name="Visibilities_real" attType="Image" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="96" maxY="96" allocReadMember="true" isDynamic="false">
+    <attributes name="visibilities_real" attType="Image" rwType="READ" displayLevel="OPERATOR" polledPeriod="0" maxX="96" maxY="96" allocReadMember="true" isDynamic="false">
       <dataType xsi:type="pogoDsl:DoubleType"/>
       <changeEvent fire="false" libCheckCriteria="false"/>
       <archiveEvent fire="false" libCheckCriteria="false"/>
       <dataReadyEvent fire="false" libCheckCriteria="true"/>
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
       <properties description="" label="" unit="" standardUnit="" displayUnit="" format="" maxValue="" minValue="" maxAlarm="" minAlarm="" maxWarning="" minWarning="" deltaTime="" deltaValue=""/>
-      <readExcludedStates>ON</readExcludedStates>
       <readExcludedStates>OFF</readExcludedStates>
       <readExcludedStates>INIT</readExcludedStates>
     </attributes>
@@ -213,9 +173,6 @@
     <states name="INIT" description="">
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </states>
-    <states name="RUNNING" description="">
-      <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
-    </states>
     <states name="FAULT" description="">
       <status abstract="false" inherited="false" concrete="true" concreteHere="true"/>
     </states>
-- 
GitLab