diff --git a/silecs-codegen/src/xml/fesa/fesa_3_0_0/generateFesaDesign.py b/silecs-codegen/src/xml/fesa/fesa_3_0_0/generateFesaDesign.py index d58d878dac2b6269d03d5c5c174df06685112d33..eb9a60460cdf1c3c634b83c2dd72941b2886d6f4 100644 --- a/silecs-codegen/src/xml/fesa/fesa_3_0_0/generateFesaDesign.py +++ b/silecs-codegen/src/xml/fesa/fesa_3_0_0/generateFesaDesign.py @@ -247,16 +247,19 @@ class FESADesignGenerator3_0_0(object): if register.generateFesaValueItem: self.getOrCreateValueItem(prop,register,isSetting) - def getOrCreateSettingProperty(self,parent,block): + def getOrCreateSettingProperty(self,parent,actionsNode,block): iecommon.logDebug('Generating SettingProperty for Block: ' + block.name, {'debuglog': True}) if( hasChildren(parent)): propsAfterCommand = parent.xpathEval("*[not(name()='command-property')]") prop = getOrCreateNamedPreviousSiblingElement(parent,propsAfterCommand[0], 'setting-property',block.getFesaName()) else: prop = getOrCreateNamedChildElement(parent,'setting-property',block.getFesaName()) + fillAttributes(prop, {'visibility': 'development', 'multiplexed': 'false'}) self.getOrCreateRegisterValueItems(prop,block,True) self.getOrCreateUpdateFlagItem(prop) self.getOrCreateCyleNameItem(prop) + self.getOrCreateAction(prop,'Set'+block.getFesaName(),'set',actionsNode,'custom') + self.getOrCreateAction(prop,'Get'+block.getFesaName(),'get',actionsNode,'custom') return prop def getOrCreateAcquisitionProperty(self,parent,actionsNode,block): @@ -272,17 +275,20 @@ class FESADesignGenerator3_0_0(object): self.getOrCreateUpdateFlagItem(prop) self.getOrCreateCyleNameItem(prop) self.getOrCreateCyleStampItem(prop) - self.getOrCreateAction(prop,'Get'+block.getFesaName(),'get',actionsNode,'default') + self.getOrCreateAction(prop,'Get'+block.getFesaName(),'get',actionsNode,'custom') return prop - def getOrCreateGSISettingProperty(self,parent,block): + def getOrCreateGSISettingProperty(self,parent,actionsNode,block): iecommon.logDebug('Generating GSISettingProperty for Block: ' + block.name, {'debuglog': True}) powerProp = parent.xpathEval('GSI-Power-Property')[0] # template is used --> there has to be a power prop prop = getOrCreateNamedPreviousSiblingElement(parent,powerProp, 'GSI-Setting-Property',block.getFesaName()) + fillAttributes(prop, {'visibility': 'development', 'multiplexed': 'false'}) self.getOrCreateRegisterValueItems(prop,block,True) self.getOrCreateUpdateFlagItem(prop) self.getOrCreateCyleNameItem(prop) + self.getOrCreateAction(prop,'Set'+block.getFesaName(),'set',actionsNode,'custom') + self.getOrCreateAction(prop,'Get'+block.getFesaName(),'get',actionsNode,'custom') return prop def getOrCreateGSIAcquisitionProperty(self,parent,actionsNode,block): @@ -295,21 +301,20 @@ class FESADesignGenerator3_0_0(object): self.getOrCreateUpdateFlagItem(prop) self.getOrCreateCyleNameItem(prop) self.getOrCreateCyleStampItem(prop) - self.getOrCreateAction(prop,'Get'+block.getFesaName(),'get',actionsNode,'default') + self.getOrCreateAction(prop,'Get'+block.getFesaName(),'get',actionsNode,'custom') self.getOrCreateAcquisitionContextItem(prop) return prop # propertyType only used during creation ! If named property already exists, it is just returned, no matter which type def getOrCreateFESAProperty(self,parent,actionsNode,block): - properties = parent.xpathEval("*") if self.isGSITemplate(parent): if parent.get_name() == 'setting': - return self.getOrCreateGSISettingProperty(parent,block) + return self.getOrCreateGSISettingProperty(parent,actionsNode,block) else: return self.getOrCreateGSIAcquisitionProperty(parent,actionsNode,block) else: if parent.get_name() == 'setting': - return self.getOrCreateSettingProperty(parent,block) + return self.getOrCreateSettingProperty(parent,actionsNode,block) else: return self.getOrCreateAcquisitionProperty(parent,actionsNode,block) @@ -386,51 +391,11 @@ class FESADesignGenerator3_0_0(object): for block in designClass.getDesignBlocks(): if not block.generateFesaProperty: continue #skip this block - - if block.isAcquisition(): - self.getOrCreateFESAProperty(acquisitionNode,actionsNode,block) - rtAction = getOrCreateNamedChildElement(actionsNode,'rt-action','Recv'+ block.getFesaName()) - notifiedProperty = getOrCreateNamedChildElement(rtAction,'notified-property', block.getFesaName(),'property-name-ref') - fillAttributes(notifiedProperty, {'automatic': 'true'}) - self.genEvent(block,doc,logTopics) - self.genSchedulingUnit(block,doc,logTopics) - else: # Setting or Command - settingPropertyNode = self.getOrCreateFESAProperty(settingNode, actionsNode, block) - fillAttributes(settingPropertyNode, {'visibility': 'development', 'multiplexed': 'false'}) - self.getOrCreateAction(settingPropertyNode,'Send'+block.getFesaName(),'set',actionsNode,'custom') - if block.isSetting(): - self.getOrCreateAction(settingPropertyNode,'Recv'+block.getFesaName(),'get',actionsNode,'custom') - else: # Command - self.getOrCreateAction(settingPropertyNode,'Get'+block.getFesaName(),'get',actionsNode,'default') - - #------------------------------------------------------------------------- - # Generates the logical-events node of the FESA design - # document parsing the SILECS class document - #------------------------------------------------------------------------- - def genEvent(self,block, fesaRoot,logTopics): - iecommon.logDebug('Generating event', logTopics) - eqpModelNode = fesaRoot.xpathEval("/equipment-model")[0] - eventsNode = getOrCreateChildElement(eqpModelNode,'events') - sourcesNode = getOrCreateChildElement(eventsNode,'sources') - timingSourceNode = getOrCreateNamedChildElement(sourcesNode,'timing-event-source','Timing') - timerSourceNode = getOrCreateNamedChildElement(sourcesNode,'timer-event-source','Timer') - logicalEventsNode = getOrCreateChildElement(eventsNode,'logical-events') - logicalEventNode = getOrCreateNamedChildElement(logicalEventsNode,'logical-event','Recv'+block.getFesaName()+'Event') - fillAttributes(logicalEventNode, {'type': 'timer', 'use': 'required'}) + if block.isWritable(): + propertyNode = self.getOrCreateFESAProperty(settingNode, actionsNode, block) + else: + propertyNode = self.getOrCreateFESAProperty(acquisitionNode,actionsNode,block) - #------------------------------------------------------------------------- - # Generates the scheduling-units node of the FESA design - # document parsing the SILECS class document - #------------------------------------------------------------------------- - def genSchedulingUnit(self,block, fesaRoot,logTopics): - iecommon.logDebug('Generating scheduling unit', logTopics) - eqpModelNode = fesaRoot.xpathEval("/equipment-model")[0] - schedulingUnitsNode = getOrCreateChildElement(eqpModelNode,'scheduling-units') - schedulingUnitNode = getOrCreateNamedChildElement(schedulingUnitsNode,'scheduling-unit','Recv'+block.getFesaName()+'Unit') - rtActionRefNode = getOrCreateChildElement(schedulingUnitNode,'rt-action-ref') - fillAttributes(rtActionRefNode, {'rt-action-name-ref': 'Recv'+block.getFesaName()}) - logicalEventRefNode = getOrCreateChildElement(schedulingUnitNode,'logical-event-ref') - fillAttributes(logicalEventRefNode, {'logical-event-name-ref': 'Recv'+block.getFesaName()+'Event'}) #------------------------------------------------------------------------- # Generates the scheduling-units node of the FESA design diff --git a/silecs-codegen/src/xml/test/generated_correct/AllTypesFESA.design b/silecs-codegen/src/xml/test/generated_correct/AllTypesFESA.design index b804989eb5c7d33e2db43b5e7edfe14145d8f74a..5d76d016bd64b791c36d830596a896bebd06fa9a 100644 --- a/silecs-codegen/src/xml/test/generated_correct/AllTypesFESA.design +++ b/silecs-codegen/src/xml/test/generated_correct/AllTypesFESA.design @@ -44,7 +44,7 @@ <server-action-ref server-action-name-ref="SettingGetAction"/> </get-action> </GSI-Setting-Property> - <GSI-Setting-Property name="MyRWBlockProp" multiplexed="false" visibility="development"><value-item name="RW_dt_fesa" direction="INOUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_dt_fesa"/></value-item><value-item name="RW_real_fesa" direction="INOUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_real_fesa"/></value-item><value-item name="RW_dint_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_dint_fesa"/></value-item><value-item name="RW_int_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_int_fesa"/></value-item><value-item name="RW_dword_fesa" direction="INOUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_dword_fesa"/></value-item><value-item name="RW_word_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_word_fesa"/></value-item><value-item name="RW_byte_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_byte_fesa"/></value-item><value-item name="RW_char_fesa" direction="INOUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_char_fesa"/></value-item><value-item name="RW_date_fesa" direction="INOUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_date_fesa"/></value-item><value-item name="RW_float32_fesa" direction="INOUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_float32_fesa"/></value-item><value-item name="RW_uint32_fesa" direction="INOUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_uint32_fesa"/></value-item><value-item name="RW_int32_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_int32_fesa"/></value-item><value-item name="RW_uint16_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_uint16_fesa"/></value-item><value-item name="RW_int16_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_int16_fesa"/></value-item><value-item name="RW_uint8_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_uint8_fesa"/></value-item><value-item name="RW_int8" direction="INOUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_int8"/></value-item><update-flag-item direction="OUT" optional="true" name="updateFlags"><builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/></update-flag-item><cycle-name-item direction="OUT" optional="true" name="cycleName"><array type="char"><dim>32</dim></array></cycle-name-item><set-action><server-action-ref server-action-name-ref="SendMyRWBlockProp"/></set-action><get-action><server-action-ref server-action-name-ref="RecvMyRWBlockProp"/></get-action></GSI-Setting-Property><GSI-Setting-Property name="MyWOBlockProp" multiplexed="false" visibility="development"><value-item name="WO_dt_fesa" direction="INOUT"><array type="double"><dim>10</dim></array><data-field-ref field-name-ref="WO_dt_fesa"/></value-item><value-item name="WO_real_fesa" direction="INOUT"><array type="float"><dim>10</dim></array><data-field-ref field-name-ref="WO_real_fesa"/></value-item><value-item name="WO_dint_fesa" direction="INOUT"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_dint_fesa"/></value-item><value-item name="WO_int_fesa" direction="INOUT"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int_fesa"/></value-item><value-item name="WO_dword_fesa" direction="INOUT"><array type="int64_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_dword_fesa"/></value-item><value-item name="WO_word_fesa" direction="INOUT"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_word_fesa"/></value-item><value-item name="WO_byte_fesa" direction="INOUT"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_byte_fesa"/></value-item><value-item name="WO_char_fesa" direction="INOUT"><array type="int8_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_char_fesa"/></value-item><value-item name="WO_date_fesa" direction="INOUT"><array type="double"><dim>10</dim></array><data-field-ref field-name-ref="WO_date_fesa"/></value-item><value-item name="WO_string_fesa" direction="INOUT"><array2D type="char"><dim1>10</dim1><dim2>64</dim2></array2D><data-field-ref field-name-ref="WO_string_fesa"/></value-item><value-item name="WO_float32_fesa" direction="INOUT"><array type="float"><dim>10</dim></array><data-field-ref field-name-ref="WO_float32_fesa"/></value-item><value-item name="WO_uint32_fesa" direction="INOUT"><array type="int64_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_uint32_fesa"/></value-item><value-item name="WO_int32_fesa" direction="INOUT"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int32_fesa"/></value-item><value-item name="WO_uint16_fesa" direction="INOUT"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_uint16_fesa"/></value-item><value-item name="WO_int16_fesa" direction="INOUT"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int16_fesa"/></value-item><value-item name="WO_uint8_fesa" direction="INOUT"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_uint8_fesa"/></value-item><value-item name="WO_int8" direction="INOUT"><array type="int8_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int8"/></value-item><update-flag-item direction="OUT" optional="true" name="updateFlags"><builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/></update-flag-item><cycle-name-item direction="OUT" optional="true" name="cycleName"><array type="char"><dim>32</dim></array></cycle-name-item><set-action><server-action-ref server-action-name-ref="SendMyWOBlockProp"/></set-action><get-action><server-action-ref server-action-name-ref="GetMyWOBlockProp"/></get-action></GSI-Setting-Property><GSI-Power-Property multiplexed="false" name="Power" visibility="operational"> + <GSI-Setting-Property name="MyRWBlockProp" multiplexed="false" visibility="development"><value-item name="RW_dt_fesa" direction="INOUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_dt_fesa"/></value-item><value-item name="RW_real_fesa" direction="INOUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_real_fesa"/></value-item><value-item name="RW_dint_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_dint_fesa"/></value-item><value-item name="RW_int_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_int_fesa"/></value-item><value-item name="RW_dword_fesa" direction="INOUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_dword_fesa"/></value-item><value-item name="RW_word_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_word_fesa"/></value-item><value-item name="RW_byte_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_byte_fesa"/></value-item><value-item name="RW_char_fesa" direction="INOUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_char_fesa"/></value-item><value-item name="RW_date_fesa" direction="INOUT"><array2D type="double"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_date_fesa"/></value-item><value-item name="RW_float32_fesa" direction="INOUT"><array2D type="float"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_float32_fesa"/></value-item><value-item name="RW_uint32_fesa" direction="INOUT"><array2D type="int64_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_uint32_fesa"/></value-item><value-item name="RW_int32_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_int32_fesa"/></value-item><value-item name="RW_uint16_fesa" direction="INOUT"><array2D type="int32_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_uint16_fesa"/></value-item><value-item name="RW_int16_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_int16_fesa"/></value-item><value-item name="RW_uint8_fesa" direction="INOUT"><array2D type="int16_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_uint8_fesa"/></value-item><value-item name="RW_int8" direction="INOUT"><array2D type="int8_t"><dim1>2</dim1><dim2>2</dim2></array2D><data-field-ref field-name-ref="RW_int8"/></value-item><update-flag-item direction="OUT" optional="true" name="updateFlags"><builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/></update-flag-item><cycle-name-item direction="OUT" optional="true" name="cycleName"><array type="char"><dim>32</dim></array></cycle-name-item><set-action><server-action-ref server-action-name-ref="SetMyRWBlockProp"/></set-action><get-action><server-action-ref server-action-name-ref="GetMyRWBlockProp"/></get-action></GSI-Setting-Property><GSI-Setting-Property name="MyWOBlockProp" multiplexed="false" visibility="development"><value-item name="WO_dt_fesa" direction="INOUT"><array type="double"><dim>10</dim></array><data-field-ref field-name-ref="WO_dt_fesa"/></value-item><value-item name="WO_real_fesa" direction="INOUT"><array type="float"><dim>10</dim></array><data-field-ref field-name-ref="WO_real_fesa"/></value-item><value-item name="WO_dint_fesa" direction="INOUT"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_dint_fesa"/></value-item><value-item name="WO_int_fesa" direction="INOUT"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int_fesa"/></value-item><value-item name="WO_dword_fesa" direction="INOUT"><array type="int64_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_dword_fesa"/></value-item><value-item name="WO_word_fesa" direction="INOUT"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_word_fesa"/></value-item><value-item name="WO_byte_fesa" direction="INOUT"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_byte_fesa"/></value-item><value-item name="WO_char_fesa" direction="INOUT"><array type="int8_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_char_fesa"/></value-item><value-item name="WO_date_fesa" direction="INOUT"><array type="double"><dim>10</dim></array><data-field-ref field-name-ref="WO_date_fesa"/></value-item><value-item name="WO_string_fesa" direction="INOUT"><array2D type="char"><dim1>10</dim1><dim2>64</dim2></array2D><data-field-ref field-name-ref="WO_string_fesa"/></value-item><value-item name="WO_float32_fesa" direction="INOUT"><array type="float"><dim>10</dim></array><data-field-ref field-name-ref="WO_float32_fesa"/></value-item><value-item name="WO_uint32_fesa" direction="INOUT"><array type="int64_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_uint32_fesa"/></value-item><value-item name="WO_int32_fesa" direction="INOUT"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int32_fesa"/></value-item><value-item name="WO_uint16_fesa" direction="INOUT"><array type="int32_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_uint16_fesa"/></value-item><value-item name="WO_int16_fesa" direction="INOUT"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int16_fesa"/></value-item><value-item name="WO_uint8_fesa" direction="INOUT"><array type="int16_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_uint8_fesa"/></value-item><value-item name="WO_int8" direction="INOUT"><array type="int8_t"><dim>10</dim></array><data-field-ref field-name-ref="WO_int8"/></value-item><update-flag-item direction="OUT" optional="true" name="updateFlags"><builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/></update-flag-item><cycle-name-item direction="OUT" optional="true" name="cycleName"><array type="char"><dim>32</dim></array></cycle-name-item><set-action><server-action-ref server-action-name-ref="SetMyWOBlockProp"/></set-action><get-action><server-action-ref server-action-name-ref="GetMyWOBlockProp"/></get-action></GSI-Setting-Property><GSI-Power-Property multiplexed="false" name="Power" visibility="operational"> <update-flag-item direction="OUT" name="updateFlags" optional="true"> <builtin-type-scalar data-type-name-ref="NOTIFICATION_UPDATE"/> </update-flag-item> @@ -652,6 +652,6 @@ <get-server-action implementation="default" name="AcquisitionGetAction"/> <get-server-action implementation="default" name="StatusGetAction"/> <get-server-action implementation="default" name="VersionGetAction"/><get-server-action implementation="default" name="ModuleStatusGetAction"/> - <get-server-action name="GetMyROBlockProp" implementation="default"/><rt-action name="RecvMyROBlockProp"><notified-property property-name-ref="MyROBlockProp" automatic="true"/></rt-action><set-server-action name="SendMyRWBlockProp" implementation="custom"/><get-server-action name="RecvMyRWBlockProp" implementation="custom"/><set-server-action name="SendMyWOBlockProp" implementation="custom"/><get-server-action name="GetMyWOBlockProp" implementation="default"/></actions> + <get-server-action name="GetMyROBlockProp" implementation="custom"/><set-server-action name="SetMyRWBlockProp" implementation="custom"/><get-server-action name="GetMyRWBlockProp" implementation="custom"/><set-server-action name="SetMyWOBlockProp" implementation="custom"/><get-server-action name="GetMyWOBlockProp" implementation="custom"/></actions> -<events><sources><timing-event-source name="Timing"/><timer-event-source name="Timer"/></sources><logical-events><logical-event name="RecvMyROBlockPropEvent" use="required" type="timer"/></logical-events></events><scheduling-units><scheduling-unit name="RecvMyROBlockPropUnit"><rt-action-ref rt-action-name-ref="RecvMyROBlockProp"/><logical-event-ref logical-event-name-ref="RecvMyROBlockPropEvent"/></scheduling-unit></scheduling-units></equipment-model> +</equipment-model>