SixML - CompositeValues

Composite-Values fassen mehrere Werte strukturiert in ein gemeinsames ByteArray zusammen. Dies wird benötigt, um mehrere Dienstwerte innerhalb eines Dienstes abzubilden (z.B. für den DriveInformation-Dienst) oder um Elementwerte abzufragen. Das innere Format kann über die Dienstbeschreibung bestimmt werden, so dass empfangene ByteArrays korrekt in ihre einzelnen Bestandteile zerlegt werden können.

Jeder Bestandteil eines Composite-Wertes kann über die CompositePartID eindeutig identifiziert werden. Dies wird z.B. für das Setzen oder Auslesen einzelner Werte durch ConnectedInput/Output-Dienste oder ValueContainer benötigt.

Die Composite-Beschreibung für den SensorInput-Dienst sieht z.B. folgendermaßen aus. Sie wird als Teil der ServiceDescription übertragen:

CompositeDescriptionContainer [CompositePartDescriptionContainer [CompositePartProperties, ValueUnit*, ValueName*] ]	
	
      1 Byte                            100                                     CompositeDescriptionContainer
        1 Byte                          63                                      
            1 Byte                      101                                     CompositePartDescriptionContainer
              1 Byte                    17                                      
                  1 Byte                103                                     CompositePartProperties
                    1 Byte              2                                       
                    2 Bytes             01-04                                   compositeID:1;compositeValueType:Int16
                  1 Byte                35                                      ValueUnit
                    1 Byte              4                                       
                    4 Bytes             55-00-20-02                             DegreeCelsius/10^2
                  1 Byte                34                                      ValueName
                    1 Byte              5                                       
                    5 Bytes             86-97-108-117-101                       Value
            1 Byte                      101                                     CompositePartDescriptionContainer
              1 Byte                    20                                      
                  1 Byte                103                                     CompositePartProperties
                    1 Byte              2                                       
                    2 Bytes             02-04                                   compositeID:2;compositeValueType:Int16
                  1 Byte                35                                      ValueUnit
                    1 Byte              4                                       
                    4 Bytes             55-00-20-02                             DegreeCelsius/10^2
                  1 Byte                34                                      ValueName
                    1 Byte              8                                       
                    8 Bytes             77-105-110-76-105-109-105-116           MinLimit
            1 Byte                      101                                     CompositePartDescriptionContainer
              1 Byte                    20                                      
                  1 Byte                103                                     CompositePartProperties
                    1 Byte              2                                       
                    2 Bytes             03-04                                   compositeID:3;compositeValueType:Int16
                  1 Byte                35                                      ValueUnit
                    1 Byte              4                                       
                    4 Bytes             55-00-20-02                             DegreeCelsius/10^2
                  1 Byte                34                                      ValueName
                    1 Byte              8                                       
                    8 Bytes             77-97-120-76-105-109-105-116            MaxLimit
    
    <CompositeDescriptionContainer>
      <CompositePartDescriptionContainer>
        <CompositePartProperties compositeID="1" compositeValueType="Int16" />
        <ValueUnit>DegreeCelsius/10^2</ValueUnit>
        <ValueName>Value</ValueName>
      </CompositePartDescriptionContainer>
      <CompositePartDescriptionContainer>
        <CompositePartProperties compositeID="2" compositeValueType="Int16" />
        <ValueUnit>DegreeCelsius/10^2</ValueUnit>
        <ValueName>MinLimit</ValueName>
      </CompositePartDescriptionContainer>
      <CompositePartDescriptionContainer>
        <CompositePartProperties compositeID="3" compositeValueType="Int16" />
        <ValueUnit>DegreeCelsius/10^2</ValueUnit>
        <ValueName>MaxLimit</ValueName>
      </CompositePartDescriptionContainer>
    </CompositeDescriptionContainer>
      
	

Jeder Composite-Part wird als individueller CompositePartDescriptionContainer übertragen. Er enthält stets ein CompositePartProperties-Tupel mit der ID und dem ValueType. Optional werden zusätzlich eine ValueUnit und ein ValueName übertragen.

Bei der späteren Übertragung eines composite-Wertes wird ein einziges Byte-Array übertragen, die Struktur innerhalb des Byte-Arrays ergibt sich aus der composite-Beschreibung.

Für Variablentypen mit dynamischer Länge (string, URL, byte array und Listenwerte) wird vor dem Wert selbst ein Byte mit der aktuellen Länge übertragen, um innerhalb eines Composites auch mehrere Untervariablen variabler Länge übertragen zu können.

Ein composite-Typ darf keine weiteren composite-Variablen enthalten, Composite-Typen dürfen also nicht geschachtelt werden.