В ПНСТ 908-2023 (пункт C.2) представлен пример шаблона КПО машины для литья под давлением. Пример элемента КПО, использующего этот шаблон КПО, можно описать с помощью XML следующим образом.
<ebc xmlns:op="product-operation.xml" xmlns:m="/template/go.php?url=https://www.w3.org/1998/Math/MathML">
<header>
<template name="INJECTION_MOLDING_MACHINE" id="template_id_imm1"/>
</header>
<property_set>
<!-- default value setting -->
<!-- default value setting -->
<var name="equipment_id" type="String" value="imm1"/>
<var name="equipment_type" type="String" value="XXX"/>
<var name="organization" type="String" value="XYZ"/>
<var name="model_name" type="String" value="im_machine"/>
<var name="external_size_hight" type="Double" value="100" unit="cm"/>
<var name="external_size_width" type="Double" value="250" unit="cm"/>
<var name="external_size_depth" type="Double" value="100" unit="cm"/>
<var name="equipment_weight" type="Double" value="200" unit="kg"/>
<var name="startup_time" type="Double" value="20" unit="sec"/>
<var name="shutdown_time" type="Double" value="20" unit="sec"/>
<var name="electricpower_idling" type="Double" value="30" unit="kW"/>
<var name="electricpower_mold_change" type="Double" value="30" unit="kW"/>
<var name="electricpower_mold_cleanig" type="Double" value="30" unit="kW"/>
<var name="electricpower_cylinder_cleaning" type="Double" value="30" unit="kW"/>
<var name="electricpower_injection_molding" type="Double" value="30" unit="kW"/>
<var name="electricpower_opening_of_a_mold" type="Double" value="30" unit="kW"/>
<var name="electricpower_ejection_by_ejector_pins" type="Double" value="30" unit="kW"/>
<var name="electricpower_restorationof_ejector_pins" type="Double" value="30" unit="kW"/>
<!-- state data value setting -->
<var name="elapsed_time" type="Double" value="0"/>
<var name="total_energyconsumption" type="Double" value="0"/>
<!-- production operation value setting -->
<var name="op_power" type="Boolean" value="false"/>
<var name="op_cylinder_cleaning_instruction" type="Boolean" value="false"/>
<var name="op_cylinder_cleaning_time" type="Double" value="10"/>
<var name="op_injection_molding_instruction" type="Boolean" value="false"/>
<var name="op_injection_molding_time" type="Double" value="10"/>
<var name="op_mold_change_time" type="Double" value="10"/>
<var name="op_mold_cleaning_instruction" type="Boolean" value="false"/>
<var name="op_mold_cleaning_time" type="Double" value="10"/>
<var name="op_mold_id_old" type="Double" value="10"/>
<var name="op_mold_id" type="Double" value="100"/>
<var name="op_pca_id_old" type="Double" value="20"/>
<var name="op_pca_id" type="Double" value="200"/>
<var name="op_opening_mold_time" type="Double" value="10"/>
<var name="op_plan_quantity" type="Double" value="10"/>
<var name="op_product_time" type="Double" value="10"/>
<var name="op_restoration_ejector_pins_time" type="Double" value="10"/>
<var name="op_shutdown_time" type="Double" value="10"/>
<var name="op_startup_time" type="Double" value="10"/>
<var name="op_total_processing_quantity" type="Double" value="10"/>
</property_set>
<external_interaction_list>
<external_interaction id="e1" name="robot_extraction">
<send_to equipment_id="mer" message="robot_extraction_request"/>
</external_interaction>
<external_interaction id="e2" name="robot_completed_notice">
<receive_from equipment_id="mer" message="robot_completed_notice"/>
</external_interaction>
</external_interaction_list>
<behaviour>
<!-- state list -->
<state_list>
<state id="s1" name="initial" status="on"/>
<state id="s2" name="idling">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_idling</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
<state id="s3" name="mold_change">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_mold_change</m:mi>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>op_pca_id_old</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>op_pca_id</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
<state id="s4" name="mold_cleanig">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo>=</m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_mold_cleanig</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
<state id="s5" name="cylinder_cleaning">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_cylinder_cleaning</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
<state id="s6" name="injection_molding">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_injection_molding</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
<state id="s7" name="opening_of_a_mold">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_opening_of_a_mold</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
<external_interaction id="e1" seq="post">
<param>true</param>
</external_interaction>
</state>
<state id="s8" name="ejection_by_ejector_pins">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_ejection_by_ejector_pins</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
<state id="s9" name="restorationof_ejector_pins">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_restorationof_ejector_pins</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
<calculation_formula repeat="no">
<m:math>
<m:mrow>
<m:mi>op_total_processing_quantity</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>op_total_processing_quantity</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
</state_list>
<!-- state transition list -->
<state_transition_list>
<state_transition id="t1" name="power_on">
<!-- CONDITION: power on -->
<!-- CONDITION: start-up time is elapsed -->
<transition_condition>op_power? = true</transition_condition>
<transition_timeout>op_startup_time</transition_timeout>
<from_state id="s1" name="initial"/>
<to_state id="s2" name="idling"/>
</state_transition>
<state_transition id="t2" name="power_off">
<!-- CONDITION: power off -->
<!-- CONDITION: shutdown time is elapsed -->
<transition_condition>op_power? = false</transition_condition>
<transition_timeout>op_shutdown_time</transition_timeout>
<from_state id="s2" name="idling"/>
<to_state id="s1" name="initial"/>
</state_transition>
<state_transition id="t3" name="mold_change">
<!-- CONDITION: product input time reached -->
<!-- CONDITION: the mold ID is different from the previous production -->
<transition_condition>op_mold_id != op_mold_id_old</transition_condition>
<transition_timeout>op_product_time</transition_timeout>
<from_state id="s2" name="idling"/>
<to_state id="s3" name="mold_change"/>
</state_transition>
<state_transition id="t4" name="mold_change_completed">
<!-- CONDITION: mold change time is elapsed -->
<transition_timeout>op_mold_change_time</transition_timeout>
<from_state id="s3" name="mold_change"/>
<to_state id="s2" name="idling"/>
</state_transition>
<state_transition id="t5" name="mold_cleaning">
<!-- CONDITION: product input time reached -->
<!-- CONDITION: mold cleaning instruction -->
<transition_condition>op_mold_cleaning_instruction? = true</transition_
condition>
<transition_timeout>op_product_time</transition_timeout>
<from_state id="s2" name="idling"/>
<to_state id="s4" name="mold_cleanig"/>
</state_transition>
<state_transition id="t6" name="mold_cleaning_completed">
<!-- CONDITION: mold cleaning time is elapsed -->
<transition_timeout>op_mold_cleaning_time</transition_timeout>
<from_state id="s4" name="mold_cleanig"/>
<to_state id="s2" name="idling"/>
</state_transition>
<state_transition id="t7" name="cylinder_cleaning">
<!-- CONDITION: product input time reached -->
<!-- CONDITION: cylinder cleaning instruction -->
<transition_condition>op_cylinder_cleaning_instruction? = true</transition_
condition>
<transition_timeout>op_product_time</transition_timeout>
<from_state id="s2" name="idling"/>
<to_state id="s5" name="cylinder_cleaning"/>
</state_transition>
<state_transition id="t8" name="cylinder_cleaning_completed">
<!-- CONDITION: cylinder cleaning time is elapsed -->
<transition_timeout>op_cylinder_cleaning_time</transition_timeout>
<from_state id="s5" name="cylinder_cleaning"/>
<to_state id="s2" name="idling"/>
</state_transition>
<state_transition id="t9" name="product_start">
<!-- CONDITION: product input time reached -->
<transition_condition>op_injection_molding_instruction? = true</transition_
condition>
<transition_timeout>op_product_time</transition_timeout>
<from_state id="s2" name="idling"/>
<to_state id="s6" name="injection_molding"/>
</state_transition>
<state_transition id="t10" name="injection_molding_completed">
<!-- CONDITION: injection-molding time is elapsed -->
<transition_timeout>op_injection_molding_time</transition_timeout>
<from_state id="s6" name="injection_molding"/>
<to_state id="s7" name="opening_of_a_mold"/>
</state_transition>
<state_transition id="t11" name="opening_mold_completed">
<!-- CONDITION: opening-mold time is elapsed -->
<transition_timeout>op_opening_mold_time</transition_timeout>
<from_state id="s7" name="opening_of_a_mold"/>
<to_state id="s8" name="ejection_by_ejector_pins"/>
</state_transition>
<state_transition id="t12" name="robot_completed_notice">
<!-- CONDITION: reception of extraction-complete notice from robot -->
<transition_external>e2</transition_external>
<from_state id="s8" name="ejection_by_ejector_pins"/>
<to_state id="s9" name="restorationof_ejector_pins"/>
</state_transition>
<state_transition id="t13" name="ejection_pins_completed">
<!-- CONDITION: pin ejection time is elapsed -->
<!-- CONDITION: number of producing product is unachieved -->
<transition_condition>op_total_processing_quantity > op_plan_quantity</transition_
condition>
<transition_timeout>op_restoration_ejector_pins_time</transition_timeout>
<from_state id="s9" name="restorationof_ejector_pins"/>
<to_state id="s6" name="injection_molding"/>
</state_transition>
<state_transition id="t14" name="order_completed">
<!-- CONDITION: all process time is elapsed -->
<!-- CONDITION: number of producing product is achieved -->
<transition_condition>op_total_processing_quantity = op_plan_quantity</transition_
condition>
<transition_timeout>op_restoration_ejector_pins_time</transition_timeout>
<from_state id="s9" name="restorationof_ejector_pins"/>
<to_state id="s2" name="idling"/>
</state_transition>
</state_transition_list>
</behaviour>
</ebc>
A.3 Элемент КПО для робота для извлечения пресс-форм
В ПНСТ 908-2023 (пункт C.3) представлен пример шаблона КПО робота для извлечения пресс-форм. Пример элемента КПО, использующего этот шаблон КПО, можно описать с помощью XML следующим образом.
<ebcxmlns:op="product-operation.xml" xmlns:m="/template/go.php?url=https://www.w3.org/1998/Math/MathML">
<header>
<template name="MOLDING_EXTRACTION_ROBOT" id="template_id_mer1"/>
</header>
<property_set>
<!-- default value setting -->
<var name="equipment_id" type="String" value="mer1"/>
<var name="equipment_type" type="String" value="XXX"/>
<var name="organization" type="String" value="XYZ"/>
<var name="model_name" type="String" value="me_robot"/>
<var name="external_size_hight" type="Double" value="100" unit="cm"/>
<var name="external_size_width" type="Double" value="250" unit="cm"/>
<var name="external_size_depth" type="Double" value="100" unit="cm"/>
<var name="equipment_weight" type="Double" value="100" unit="kg"/>
<var name="startup_time" type="Double" value="20" unit="sec"/>
<var name="shutdown_time" type="Double" value="20" unit="sec"/>
<var name="electricpower_idling" type="Double" value="20" unit="kW"/>
<var name="electricpower_extraction_of_molded_part" type="Double" value="30" unit="kW"/>
<var name="electricpower_releasing_of_moded_part" type="Double" value="30" unit="kW"/>
<!-- state data value setting -->
<var name="elapsed_time" type="Double" value="0"/>
<var name="total_energyconsumption" type="Double" value="0"/>
<!-- production operation value setting -->
<var name="op_power" type="Boolean" value="false"/>
<var name="op_extraction_time" type="Double" value="10"/>
<var name="op_releasing_time" type="Double" value="10"/>
</property_set>
<external_interaction_list>
<external_interaction id="e1" name="robot_extraction">
<receive_from equipment_id="imm1" message="robot_extraction_request"/>
</external_interaction>
<external_interaction id="e2" name="robot_completed_notice">
<send_to equipment_id="imm1" message="robot_completed_notice"/>
</external_interaction>
</external_interaction_list>
<behaviour>
<!-- state list -->
<state_list>
<state id="s1" name="initial" status="on"/>
<state id="s2" name="idling">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo><!-- <m:mo>×</m:mo> -->
<m:mi>electricpower_idling</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
<state id="s3" name="extraction_of_molded_part">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo><!-- <m:mo>×</m:mo> -->
<m:mi>electricpower_extraction_of_molded_part</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
<external_interaction id="e2" seq="post">
<param>true</param>
</external_interaction>
</state>
<state id="s4" name="releasing_of_moded_part">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo><!-- <m:mo>×</m:mo> -->
<m:mi>electricpower_releasing_of_moded_part</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
</state_list>
<!-- state transition list -->
<state_transition_list>
<state_transition id="t1" name="power_on">
<!-- CONDITION: power on -->
<!-- CONDITION: start-up time is elapsed -->
<transition_condition>op_power? = true</transition_condition>
<transition_timeout>startup_time</transition_timeout>
<from_state id="s1" name="initial"/>
<to_state id="s2" name="idling"/>
</state_transition>
<state_transition id="t2" name="power_off">
<!-- CONDITION: power off -->
<!-- CONDITION: shutdown time is elapsed -->
<transition_condition>op_power? = false</transition_condition>
<transition_timeout>shutdown_time</transition_timeout>
<from_state id="s2" name="idling"/>
<to_state id="s1" name="initial"/>
</state_transition>
<state_transition id="t3" name="extraction_start">
<!-- CONDITION: reception of extraction-request from molding machine -->
<transition_external>e1</transition_external>
<from_state id="s2" name="idling"/>
<to_state id="s3" name="extraction_of_molded_part"/>
</state_transition>
<state_transition id="t4" name="extraction_of_molded_parts_completed">
<!-- CONDITION: extraction time is elapsed -->
<transition_timeout>op_extraction_time</transition_timeout>
<from_state id="s3" name="extraction_of_molded_part"/>
<to_state id="s4" name="releasing_of_moded_part"/>
</state_transition>
<state_transition id="t5" name="releasing_of_molded_part_completed">
<!-- CONDITION: releasing time is elapsed -->
<transition_timeout>op_releasing_time</transition_timeout>
<from_state id="s4" name="releasing_of_moded_part"/>
<to_state id="s2" name="idling"/>
</state_transition>
</state_transition_list>
</behaviour>
</ebc>
В ПНСТ 908-2023 (пункт C.4) представлен пример шаблона КПО контроллера температуры пресс-форм. Пример элемента КПО, использующего этот шаблон КПО, можно описать с помощью XML следующим образом.
<ebc
xmlns:op="product-operation.xml" xmlns:m="/template/go.php?url=https://www.w3.org/1998/Math/MathML">
<header>
<template name="MOLD_TEMPERATURE_CONTROLLER" id="template_id_mtc1"/>
</header>
<property_set>
<var name="equipment_id" type="String" value="mtc1"/>
<var name="equipment_type" type="String" value="XXX"/>
<var name="organization" type="String" value="XYZ"/>
<var name="model_name" type="String" value="mt_controller"/>
<var name="external_size_hight" type="Double" value="100" unit="cm"/>
<var name="external_size_width" type="Double" value="250" unit="cm"/>
<var name="external_size_depth" type="Double" value="100" unit="cm"/>
<var name="equipment_weight" type="Double" value="200" unit="kg"/>
<var name="startup_time" type="Double" value="20" unit="sec"/>
<var name="shutdown_time" type="Double" value="20" unit="sec"/>
<var name="heating_time" type="Double" value="60" unit="sec"/>
<var name="electricpower_heating" type="Double" value="40" unit="kW"/>
<var name="electricpower_mold_temperature_control" type="Double" value="30" unit="kW"/>
<!-- state data value setting -->
<var name="elapsed_time" type="Double" value="0"/>
<var name="total_energyconsumption" type="Double" value="0"/>
<!-- production operation value setting -->
<var name="op_power" type="Boolean" value="false"/>
</property_set>
<!-- external_interaction no difinition -->
<external_interaction_list/>
<behaviour>
<!-- state list -->
<state_list>
<state id="s1" name="initial" status="on"/>
<state id="s2" name="heating">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_heating</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
<state id="s3" name="mold_temperature_control">
<state_data>
<elapsed_time>0</elapsed_time>
<total_energyconsumption>0</total_energyconsumption>
</state_data>
<calculation_formula>
<m:math>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> + </m:mo>
<m:mn>1</m:mn>
</m:mrow>
</m:mrow>
</m:math>
<m:math>
<m:mrow>
<m:mi>total_energyconsumption</m:mi>
<m:mo> = </m:mo>
<m:mrow>
<m:mi>elapsed_time</m:mi>
<m:mo> * </m:mo>
<m:mi>electricpower_mold_temperature_control</m:mi>
</m:mrow>
</m:mrow>
</m:math>
</calculation_formula>
</state>
</state_list>
<!-- state transition list -->
<state_transition_list>
<state_transition id="t1" name="power_on">
<!-- CONDITION: power on -->
<!-- CONDITION: start-up time is elapsed -->
<transition_condition>op_power? = true</transition_condition>
<transition_timeout>startup_time</transition_timeout>
<from_state id="s1" name="initial"/>
<to_state id="s2" name="heating"/>
</state_transition>
<state_transition id="t2" name="mold_heating_completed">
<!-- CONDITION: heating time is elapsed -->
<transition_timeout>heating_time</transition_timeout>
<from_state id="s2" name="heating"/>
<to_state id="s3" name="mold_temperature_control"/>
</state_transition>
<state_transition id="t3" name="power_off">
<!-- CONDITION: power off ->
<!-- CONDITION: shutdown time is elapsed -->
<transition_condition>op_power? = false</transition_condition>
<transition_timeout>shutdown_time</transition_timeout>
<from_state id="s3" name="mold_temperature_control"/>
<to_state id="s1" name="initial"/>
</state_transition>
</state_transition_list>
</behaviour>
</ebc>
(справочное)
На рисунке B.1 показан пример построения модели экземпляра оборудования в целевой мультиагентной среде NetLogo.
![]() оборудования в NetLogo
Процессор построения соответствует процессору XSLT. Процессор построения - это своего рода программное обеспечение, которое принимает элемент КПО (*.xml) в качестве входных данных, выполняет процедуру построения (*.xsl) и создает модель экземпляра оборудования (*.nlogo). Процессор построения обрабатывает определенные закономерности, описанные в правилах построения. На основе найденного шаблона процессор построения выполняет построение, связанное с совпавшим шаблоном. Полученный результат представляет собой модель экземпляра оборудования.
Процедура построения с использованием правил построения в NetLogo:
- шаг A. Модель экземпляра оборудования создается так, чтобы в элементе КПО была указана общая информация на основе правила построения 1. Процедура шага A представляет собой ту же последовательность, что и блок-схема применения правила 1, обозначенная a) и b) на рисунке B.2, и помечена как Step A в следующем коде XLST. Когда процедура шага A выполняется процессором построения, создается общая информация, такая как имя шаблона КПО и идентификатор шаблона КПО. Правило 1 состоит из следующих элементов XSL:
- элементы XSL: <xsl:value-of select>, <xsl:text>.
![]() Рисунок B.2 - Шаг A с использованием правила 1
;; (Step A)
;; /ebc/header/template
<xsl:text>;; EBC_template_name : </xsl:text>
<xsl:value-of select="/ebc/header/template/@name"/>
<xsl:text>
</xsl:text>
<xsl:text>;; EBC_template_id : </xsl:text>
<xsl:value-of select="/ebc/header/template/@id"/>
- шаг B. Модель экземпляра оборудования создается так, чтобы иметь обрабатываемое описание каждого элемента набора свойств, указанного в элементе КПО, на основе правила построения 2. Процедура шага B представляет собой ту же последовательность, что и блок-схема применения правила 2, обозначенная a), b), c) и d) на рисунке B.3, и отмечена как Step B в следующем коде XLST. Когда процедура шага B выполняется процессором построения, все переменные определяются и устанавливаются в качестве начальных значений или значений по умолчанию. Правило 2 состоит из следующих элементов XSL и ключевых слов NetLogo:
- ключевые слова NetLogo: to ... end, set
- элементы XSL: <xsl:for-each select>, <xsl:if test>, <xsl:value-of select>, <xsl:text>.
![]() Рисунок B.3 - Шаг B с использованием правила 2
;; (Step B)
to setup-'plural of equipment name'
;; /ebc/property_set/var
<xsl:for-each select="/ebc/property_set/var">
set <xsl:value-of select="@name"/>
<xsl:if test="@type='Double'">
<xsl:text> </xsl:text>
<xsl:value-of select="@value"/>
</xsl:if>
<xsl:if test="@type='Boolean'">
<xsl:text>?</xsl:text>
<xsl:text> </xsl:text>
<xsl:value-of select="@value"/>
</xsl:if>
<xsl:if test="@type='String'">
<xsl:text> </xsl:text>
<xsl:text>"</xsl:text>
<xsl:value-of select="@value"/>
<xsl:text>"</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
</xsl:for-each>
End
- шаг C. Модель экземпляра оборудования создается так, чтобы иметь обрабатываемое описание каждого состояния поведения и/или каждого внешнего взаимодействия, указанного в элементе КПО, на основе правил 3 и 5. Процедура шага C представляет собой ту же последовательность, что и блок-схема применения правила 3, обозначенная a), b), c) и i), и блок-схема применения правила 5, обозначенная буквами d), e), f), g) и h) на рисунке B.4, и отмечена как шаг C в следующем коде XLST. Когда процедура шага C выполняется процессором, реализуются все процедуры состояния поведения(й) и/или внешнего взаимодействия(й). Правила 3 и 5 состоят из следующих элементов XSL и ключевых слов NetLogo:
- ключевые слова NetLogo: to ... end, wait, if, ifelse, set
- элементы XSL: <xsl:for-each select>, <xsl:variable name>, <xsl:if test>, <xsl:valueof select>, <xsl: text>, <xsl:apply-templates select>.
![]() ;; (Step C)
<xsl:for-each select="/ebc/behaviour/state_list/state">
;; /ebc/behaviour/state_list/state
to <xsl:for-each select="/ebc/property_set/var">
<xsl:variable name="eq_id" select="@name"/>
<xsl:if test="$eq_id = 'equipment_id'">
<xsl:value-of select="@value"/>
<xsl:text>_</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="@name"/>
<xsl:text>
</xsl:text>
<xsl:variable name="state_id" select="@id"/>
<xsl:text>
</xsl:text>
<xsl:text>
    </xsl:text>
<xsl:apply-templates select="calculation_formula/m:math"/>
<xsl:if test="external_interaction">
<xsl:variable name="tr_ex_id" select="external_interaction/@id"/>
<xsl:for-each select="/ebc/external_interaction_list/external_interaction">
<xsl:variable name="ex_id" select="@id"/>
<xsl:if test="$tr_ex_id = $ex_id">
<xsl:if test="receive_from">
<xsl:text>
	</xsl:text>
<xsl:text>if </xsl:text>
<xsl:value-of select="receive_from/@message"/>
<xsl:text>? = true</xsl:text>
</xsl:if>
<xsl:if test="send_to">
<xsl:text>
	</xsl:text>
<xsl:text>set </xsl:text>
<xsl:value-of select="send_to/@message"/>
<xsl:text>? true</xsl:text>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:if>
- шаг D. Модель экземпляра оборудования создается так, чтобы иметь обрабатываемое описание каждого перехода состояния поведения и/или каждого внешнего взаимодействия, указанного в элементе КПО, на основе правил 4 и 5. Процедура шага D представляет собой ту же последовательность, что и блок-схема применения правила 4, обозначенная a), b), c) и i), и блок-схема применения правила 5, обозначенная d), e), f), g) и h) на рисунке B.5, и отмечена как шаг D в следующем коде XLST. Когда процедура шага D выполняется процессором построения, реализуются все процедуры перехода состояний поведения(й) и/или внешнего их взаимодействия(й). Правила 4 и 5 состоят из следующих элементов XSL и ключевых слов NetLogo:
- ключевые слова NetLogo: to ... end, wait, if, ifelse, set
- элементы XSL: <xsl:for-each select>, <xsl:variable name>, <xsl:if test>, <xsl:value-of select>, <xsl: text>.
![]() ;; (Step D)
;; /ebc/behaviour/state_transition_list/state_transition
<xsl:for-each select="/ebc/behaviour/state_transition_list/state_transition">
<xsl:variable name="tr_name" select="@name"/>
<xsl:variable name="s_id" select="from_state/@id"/>
<xsl:variable name="d_id" select="to_state/@id"/>
<xsl:if test="$state_id = $s_id">
<xsl:if test="transition_condition">
<xsl:text>
	</xsl:text>
<xsl:text>if </xsl:text>
<xsl:value-of select="transition_condition"/>
<xsl:text>
	</xsl:text>
<xsl:text>[</xsl:text>
<xsl:text>
	</xsl:text>
</xsl:if>
<xsl:if test="transition_timeout">
<xsl:text>wait </xsl:text>
<xsl:value-of select="transition_timeout"/>
<xsl:text>
	</xsl:text>
</xsl:if>
<xsl:if test="transition external">
<xsl:variable name="tr_ex_id" select="transition_external"/>
<xsl:for-each select="/ebc/external_interaction_list/external_interaction">
<xsl:variable name="ex_id" select="@id"/>
<xsl:if test="$tr_ex_id = $ex_id">
<xsl:if test="receive_from">
<xsl:text>
	</xsl:text>
<xsl:text>if </xsl:text>
<xsl:value-of select="receive_from/@message"/>
<xsl:text>? = true</xsl:text>
<xsl:text>
	</xsl:text>
<xsl:text>[</xsl:text>
<xsl:text>
	</xsl:text>
</xsl:if>
<xsl:if test="send_to">
<xsl:text>
	</xsl:text>
<xsl:text>set </xsl:text>
<xsl:value-of select="send_to/@message"/>
<xsl:text>? true</xsl:text>
<xsl:text>
	</xsl:text>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:if>
<xsl:for-each select="/ebc/property_set/var">
<xsl:variable name="eq_id" select="@name"/>
<xsl:if test="$eq_id = 'equipment_id'">
<xsl:text>set </xsl:text>
<xsl:value-of select="@value"/>
<xsl:text>_state [ -> </xsl:text>
<xsl:value-of select="@value"/>
<xsl:text>_</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="to_state/@name"/>
<xsl:text>]</xsl:text>
<xsl:text>
	</xsl:text>
</xsl:if>
end</xsl:for-each>
</xsl:for-each>
(справочное)
МЕЖДУНАРОДНЫМ СТАНДАРТАМ, ИСПОЛЬЗОВАННЫМ В КАЧЕСТВЕ
ССЫЛОЧНЫХ В ПРИМЕНЕННОМ МЕЖДУНАРОДНОМ СТАНДАРТЕ
Таблица ДА.1
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/pnst_predvaritelnyj-nacionalnyj-standart/1/pnst_34656.html
На правах рекламы:
|
|||||||||||||||||||||||||||||