XML Parsing Problems/Questions

<data type="Float32">
     <value name="cntType">counter Type </value>
     <value name="maxFreq"> max. Frequency </value>
     <value name="gainrngi"> gain range actual </value>
     <value name="readCount"> read count </value>
     <value name="readDelay"> read delay </value>
     <value name="startDelay"> start delay </value>
     <value name="lastCount"> last count </value>
     <value name="dataState"> data State</value>
     <array length="unbounded" max="500" name="counts"> counts </array>
</data>

Im Fall von „type“ ist es möglich einfach einen Array der Größe 500 zu vermerken/anzulegen. Im Fall von „ref“ muss der Array allerdings flach dargestellt werden, sollte man in so einem Fall wirklich 500 Felder in der Property anlegen? Wie soll hier vorgegangen werden?


   <property category="slave">
      <name>MEDDATAS</name>
      <description>
         <long>Write therapy set value for specified EFI combination 
                and with specified data ID or read therapy set values for 
                specified EFI combination.
         </long>
      </description>
      <action medlock="none" type="write" access="free">
         <para type="ULong">
             <value name="dataId">Data ID</value>
             <value name="energy">Energy</value>
             <value name="focus">Focus</value>
             <value name="intensity">Intensity</value>
         </para>
         <data>
             <value type="Float32" name="fields">Field set value.</value>
         </data> 
      </action>
      <action medlock="none" type="read" access="free">
         <para type="UWord">
             <value name="energy">Energy</value>
             <value name="focus">Focus</value>
             <value name="intensity">Intensity</value>
         </para>
         <data>
             <value type="Float32" name="fields">Field set value.</value>
             <value type="Float32" name="currents">Current set value.</value>
             <value type="SLong" name="volts">Voltage set value.</value>
         </data> 
      </action>
   </property>
FESA und LSA sehen nicht vor das eine Property beim schreiben/lesen unterschiedliche Daten enthält. Daraus ergibts sich ein Problem wenn die gesendeten und gelesenen <data> Beschreibungen nicht identisch sind (insbesondere verschiedene <data> Einträge beim lesen und schreiben oder das selbe Feld mit unterschiedlichen Datentypen). Wie soll hier vorgegangen werden? Sollen nur identische einträge in LSA übernommen werden? Eine Möglichkeit wäre die Felder alle in die LSA Datenbank aufzunehmen und eine zusätzliche Spalte 'R', 'W', 'RW' einzuführen je nachdem ob es lesen, schreiben, oder lesen+schreiben ist.
<property category="slave">
  <name>FIELDI</name>
  <description>
    <long>Field actual value in Tm.</long>
  </description>
  <action medlock="none" type="read" access="free"/>
  <para>
    <value type="SWord" name="rawValue">Selection parameter with \n
      1 = read actual field calculated via DCCT or hall probe ADC value, \n
      2 = read raw hall probe ADC value. \n
      The parameter is optional. If it is omitted,
      the actual field will be returned.
    </value>
  </para>
  <data>
    <value type="Float32" name="fieldi">Field actual value</value>
  </data>
</property>
In LSA ist das regelmäßige verwenden von Parametern nicht vorgesehen. Im Fall das bei einem Gerätebefehl zusätzliche Daten geschickt werden müssen wird für diesen Sonderfall ein 'custom command' geschrieben. Dies ist allerdings im Fall der GSI nicht zweckmäßig da man sonst für jede Property die Parameter vorsieht einen solchen Sonderfall implementieren muss.
<property category="master">
  <name>POWER</name>
    <action type="read" medlock="none" replacedefault="true" access="free"/>
    <action type="write" medlock="none" replacedefault="true" access="device"/>
    <data type="ULong">
      <value name="power">Power</value>
    </data>
</property>
Welche Properties liegen hier tatsächlich vor? Haben read und write den gleichen Aufbau?
<property category="master">
  <name>INITPOS</name>
    <description>
    <short>Move to initial position.</short>
    <long>This call property moves anode and kathode to a
    known initial positions.
    The initial position for the four
   motors are part of the device constants.
    </long>
  </description>
  <action medlock="all" type="call" access="device"/>
</property>
Sollte wohl als hardware command realisiert werden? Die Methode wird nur aufgerufen (ohne Daten und Parameter) um das Gerät in die Ausgangsposition zu fahren.
<property category="master">
 <name>INFO</name>
 <description>
 <short>Read INFO array from DPRam.</short>
    <long>Read INFO array from DPRam. INFO data contain information about probe constants, offsets, etc. 
    The data are written to the DPRam by the SD-uP during cold and warm start.</long>
  </description>
  <action type="read" medlock="none" access="free"/>
    <data v08type="Integer32" endian="little">
      <value name="RInfoSndType" ref="ReadInfoType"/>
    </data>
  </property>

Hier (ds.xml) wird der complexe Datentyp ReadInfoType serialisiert und als Integer32 'Häppchen' zurückgegeben. Es kann dabei durchaus vorkommen das zwei 'short' Felder in einem Integer32 zusammengefaßt werden. Wie sollen diese Daten in LSA abgelegt werden? Soll direkt eine Serialisierung/Deserialisierung in JAPC stattfinden? Es wäre entweder möglich die 'Roh'daten als einfachen Array 1D in LSA abzulegen. Da der Aufbau des complex types ReadInfoType in LSA bekannt ist (wird vom eqmodparser eingelesen) könnte innerhalb von JAPC die Liste aus Integer32 direkt in die korrekten Datentypen wie sie in ReadInfoType spezifiziert sind umgeformt werden.
<name>DTX</name>
<creator>matthies</creator>
<version>01.00.00</version>
<description>
<short>DTX device model</short>
<long>DTX device model</long>
</description>
<!--Master-Properties-->
<property category="master">
<name>CONSTANT</name>
<description>
<short>Read device constants.</short>
<long>Deliver's important device constants.</long>
</description>
<action access="free" medlock="none" type="read">
<data type="SLong">
<value name="uFact">Umrechnungsfaktor fuer Messfensterlaenge und Delay</value>
<value name="defWorkMode"/>
<value name="anzGain">Anzahl Messbereiche</value>
<array length="8" name="gain" ref="GainType"/>
<value name="strayCorrect"/>
</data>
</action>
</property> 

In diesem Fall überschreibt der Typ des Arrays den Typ des Elternknotens.
Topic revision: r3 - 03 Feb 2011, bbesser
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback