|
In Part 4 you will find a set of approx. 120 control functions according VDE/VDI 3696. Below we show an analysis diagram for one of them: SUB, a subtraction function, where one signal, called SUB_U1, is subtracted from a second signal, called SUB_U2, resulting in a third signal, called SUB_QV. This can be shown as:
We have to ask ourselves is: what exactly do we subtract: the signals or the magnitude of those signals? It is the latter. Furthermore we have to deal with much more than can be seen in above simple sketch:
Analysis DiagramFirst we make an analysis diagram, in which all aspects of this function are covered. The legend below is taken from Part 2:
Let us review this diagram:
The activity diagram:
The property diagram:
The function diagram (bottom up):
<apply> <minus/> <ci> x </ci> <ci> y </ci> </apply>
In order to be able to use SUB as a definition for the ClassOfActivity SignalSubtracting we turn it into an instance of RoleAndDomain, where the Domain is ControlFunction and the Role is 'Definer'. The above is what it says: an analysis. Very necessary to warrant a proper use of the ISO 15926-2 data model, but of course not very useful for implementation. But very much a nuisance when you want to use it in daily practice. Therefore we use templates, that sweep the complexity under the carpet, but if necessary we can access that complexity to find out what exactly the semantical constructs are for the templates we use. Now then, first we will discuss the end result, and if you feel the urge to study the details, that will be possible after that. The end resultWe started with a simple sketch:
and we need to come as close to that simplicity as possible. The format of the ShorthandTemplate for this function is:
where:
The parameters C through G represent instances of part2:WholeLifeIndividual. Any lifecycle information about these individuals will have to come in the form of instances of the applicable nodes or templates. If, for example, you want to know what kind of signal E is, then that signal has been declared by: <MilliampDcCurrent rdf:ID="E"/> And if we want to know what the actual value of signal G was at a certain date-time, that will be possible. Or if you want to know where you hardware D physically was located at a certain date-time, that will be possible as well. Subtraction relays usually do not come as solitary objects, but are part of some control loop, like this one (courtesy DSM):
The signals are linking the functions into such a configuration. Their role name (e.g. U2) may change, but they are the same signal when they exit one block and enter another. Casting it in Reference Data and TemplatesBelow is an RDF/OWL representation in the RDF/XML format. First we have to discover how many reference data and templates we are going to need for this, and where these will be used.
Part 2 - Data ModelAs indicated in the legend the lightblue rectangles are for entity data types defined in the OWL version of the ISO 15926-2 data model. Part 4 - Reference Data
The following reference data (classes) have to be in Part 4 (the details like a definition are left out here) (fasten your seat belt :-) ): For the top part of the above analysis diagram:
The use of templates
If you have read all this, it may have become clear to you that we have some streamlining and shortcutting work to do. That is why we introduce the Templates here. The candidates for templates are:
so basically the three parts of the above analysis diagram, as earlier discussed. The templates we design now must be as generic as possible, because otherwise we will see a combinatory explosion. For each template we first compose the LonghandTemplate, and then the companion ShorthandTemplate, and then give an example of an instance of that ShorthandTemplate (the Longhand ones will not be instantiated).
Activity "SignalSubtracting"So let's start with the activity "SignalSubtracting".
We declare the ShorthandTemplate "ST-SignalSubtracting": <!--the specialized properties-->
<owl:ObjectProperty rdf:ID="subtractionActivity"> <rdfs:subPropertyOf rdf:resource="#activity"/> </owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="subtractionFunction"> <rdfs:subPropertyOf rdf:resource="#participationType"/> </owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="subtractionPerformer"> <rdfs:subPropertyOf rdf:resource="#participant"/> </owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="subtractionReference"> <rdfs:subPropertyOf rdf:resource="#participant"/> </owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="subtractionDifferand"> <rdfs:subPropertyOf rdf:resource="#participant"/> </owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="subtractionDifference"> <rdfs:subPropertyOf rdf:resource="#participant"/> </owl:ObjectProperty>
<!--the specialized template class-->
<ClassOfShorthandTemplate rdf:ID="ST-SignalSubtracting"> <rdfs:subClassOf rdf:resource="#ST-2301"/> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#subtractionActivity"/> <owl:allValuesFrom rdf:resource="#SignalSubtracting"/> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#subtractionFunction"/> <owl:allValuesFrom rdf:resource="#Sub"/> <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#subtractionPerformer"/> <owl:allValuesFrom rdf:resource="#SubRelay"/> <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#subtractionReference"/> <owl:allValuesFrom rdf:resource="#SubU1Signal"/> <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#subtractionDifferand"/> <owl:allValuesFrom rdf:resource="#SubU2Signal"/> <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#subtractionDifference"/> <owl:allValuesFrom rdf:resource="#SubQvSignal"/> <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> </ClassOfShorthandTemplate>
A typical example of an instance of the latter ST as you will have them in your Façade looks like:
Q: Now why do we need all these reference data and templates? A: For validation, in order to avoid that data of an incorrect type are used. For example the first property shall be a member of the Activity "SignalSubtracting". If not, the template instance is rejected, and an error message is produced. (Somewhere, in this Façade or another, we must find a triple like:
but also a subClassOf SignalSubtracting may have been used )
The SIGNAL_PROPERTY and its quantification(later) The functions(later) |