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