Aufbau der CoDeSys Symboldatei

Flash

Level-1
Beiträge
44
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Allerseits

Ich suche eine Beschreibung zum Aufbau der Symboldatei von CoDeSys (Schlüsselwörter, Dateitypen etc.) und habe im Netz auf die Schnelle nichts gefunden. Könnt Ihr mir da behilflich sein?

Wieso das Ganze?
  • Ich habe eine Steuerung vor mir liegen, welche Rezepte in binärer Form sichert. Ich habe den Auftrag diese binäre Form in eine interpretierbares Format zu bringen. Leider variiert die Struktur der Rezepte von Projekt zu Projekt, was die Interpretation des binären Files nicht gerade einfacher macht. Ich möchte die Struktur des binären Files anhand der Symboldatei ermitteln, damit ich anschliessend das binäre File in ein lesbares Format bringen kann.

Vielen Dank für Eure Hilfe!
 
Hallo Flash,

wie der Aufbau ist steht meines Wissens nirgendwo. Ich vermute mal du hast alles Rezeptdaten in einer Struktur (diese kann u.U. aus Unterstrukturen bestehen). Dann heißt die z.B.: stRecipe[0..n].RealData, ...

Jetzt musst du die .sym Datei nur noch öffnen und schauen was da drin steht.

Das sieht z.B.: so aus:

Code:
;Version=2
;ProjectId=6752396
;Checksum=0
;Filesize=0
.stHMI.bToHMI_AutoActive:BOOL:4:500384:1:b:16#40000003
.stHMI.bToHMI_AutoNotActive:BOOL:4:500385:1:b:16#40000003
.stHMI.bToHMI_BoxOutputActive:BOOL:4:500395:1:b:16#00000003

Kann man eigentlich direkt ohne weitere Erklärung verstehen. Nun mit einer Software deiner Wahl (CoDeSys, Visual Studio C#, VBA, Excel,...) welches das Einlesen von Dateien erlaubt weiter bearbeiten.
Ich würde das Zeile für Zeile machen und nach dem Schlüsselwort suchen welches für dich dein Rezept darstellt. z.B. "stRecipeSets". Nun weißt du, dass du an der ersten Rezeptzeile bist. Dann suchst du nach ":" und dann wieder nach ":". Dort hast du das Variablenformat z.B. "BOOL". Das belegt immer ein Byte obwohl nur 1 Bit benutzt wird. Bei Real, Dint, SINT... entsprechend 1,2,4 Bytes (siehe Codesysdoku). Aus diesen Informationen kannst du dir nun eine Sicht auf die Daten erstellen also z.B. BOOL;BOOL;DINT;DINT;REAL;REAL;BOOL;..... Diese Sicht musst du nun nur noch auf die im Binärformat vorliegenden Rezeptdaten anwenden und fertig. Willst du auch noch die Namen für die entsprechende Variable usw. haben musst du dir die auch noch aus der SYM extrahieren. Ich denke das Ganze ist relativ simpel möglich. Fertig gibt's das so aber nicht.

Zusatz:
Die Länge des Datenpakets steht auch in der SYM Datei vor dem ":b:16#" hier immer "1". Das musst du bei Standarddatentypen nicht auslesen aber wenn du Strings hast die du z.B. mit 20Byte Länger oder 255 Byte Länge definiert hast dann hier besser die Länge noch aus der Zeile extrahieren.

Ich hoffe das hilft dir weiter.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Excelite

Vielen Dank für Deine schnell ausführliche Antwort. Ich habe mich wohl etwas unklar ausgedrückt. Ich möchte mit der XML-Datei (.SYM_XML) arbeiten. Dort wird der Datentyp durch einen Wert und nicht durch Klartext repräsentiert. Ausserdem hat es noch weitere Schlüsselwörter wie Flags, Access und so weiter. Ich suche nach einer Beschreibung zu diesen Schlüsselwörtern und was die zugehörigen Werte bedeuten.

Hier ein Beispiel der SYM_XML-Datei:
Code:
  <Var Type="75" Flags="301989952" Access="98" RefId="5" Offset="49648" TopLevelType="75">.g_stConfAxis</Var>
  <Var Type="74" Flags="268435459" Access="98" RefId="5" Offset="49888" TopLevelType="75">.g_stConfAxis.abyAxisInStation</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49906" TopLevelType="75">.g_stConfAxis.abyAxisInStation[10]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49908" TopLevelType="75">.g_stConfAxis.abyAxisInStation[11]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49910" TopLevelType="75">.g_stConfAxis.abyAxisInStation[12]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49912" TopLevelType="75">.g_stConfAxis.abyAxisInStation[13]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49914" TopLevelType="75">.g_stConfAxis.abyAxisInStation[14]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49916" TopLevelType="75">.g_stConfAxis.abyAxisInStation[15]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49918" TopLevelType="75">.g_stConfAxis.abyAxisInStation[16]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49920" TopLevelType="75">.g_stConfAxis.abyAxisInStation[17]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49922" TopLevelType="75">.g_stConfAxis.abyAxisInStation[18]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49924" TopLevelType="75">.g_stConfAxis.abyAxisInStation[19]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49888" TopLevelType="75">.g_stConfAxis.abyAxisInStation[1]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49926" TopLevelType="75">.g_stConfAxis.abyAxisInStation[20]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49890" TopLevelType="75">.g_stConfAxis.abyAxisInStation[2]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49892" TopLevelType="75">.g_stConfAxis.abyAxisInStation[3]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49894" TopLevelType="75">.g_stConfAxis.abyAxisInStation[4]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49896" TopLevelType="75">.g_stConfAxis.abyAxisInStation[5]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49898" TopLevelType="75">.g_stConfAxis.abyAxisInStation[6]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49900" TopLevelType="75">.g_stConfAxis.abyAxisInStation[7]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49902" TopLevelType="75">.g_stConfAxis.abyAxisInStation[8]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49904" TopLevelType="75">.g_stConfAxis.abyAxisInStation[9]</Var>
  <Var Type="68" Flags="3" Access="98" RefId="5" Offset="49778" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49787" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[10]</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49778" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[1]</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49779" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[2]</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49780" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[3]</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49781" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[4]</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49782" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[5]</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49783" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[6]</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49784" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[7]</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49785" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[8]</Var>
  <Var Type="1" Flags="3" Access="98" RefId="5" Offset="49786" TopLevelType="75">.g_stConfAxis.abyNoOfAxisInStation[9]</Var>
  <Var Type="73" Flags="3" Access="98" RefId="5" Offset="49788" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49797" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[10]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49798" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[11]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49799" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[12]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49800" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[13]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49801" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[14]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49802" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[15]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49803" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[16]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49804" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[17]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49805" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[18]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49806" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[19]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49788" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[1]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49807" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[20]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49789" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[2]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49790" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[3]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49791" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[4]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49792" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[5]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49793" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[6]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49794" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[7]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49795" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[8]</Var>
  <Var Type="46" Flags="3" Access="98" RefId="5" Offset="49796" TopLevelType="75">.g_stConfAxis.aiAxisNoInStation[9]</Var>
  <Var Type="74" Flags="268435459" Access="98" RefId="5" Offset="49848" TopLevelType="75">.g_stConfAxis.awAxisFunc</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49866" TopLevelType="75">.g_stConfAxis.awAxisFunc[10]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49868" TopLevelType="75">.g_stConfAxis.awAxisFunc[11]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49870" TopLevelType="75">.g_stConfAxis.awAxisFunc[12]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49872" TopLevelType="75">.g_stConfAxis.awAxisFunc[13]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49874" TopLevelType="75">.g_stConfAxis.awAxisFunc[14]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49876" TopLevelType="75">.g_stConfAxis.awAxisFunc[15]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49878" TopLevelType="75">.g_stConfAxis.awAxisFunc[16]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49880" TopLevelType="75">.g_stConfAxis.awAxisFunc[17]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49882" TopLevelType="75">.g_stConfAxis.awAxisFunc[18]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49884" TopLevelType="75">.g_stConfAxis.awAxisFunc[19]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49848" TopLevelType="75">.g_stConfAxis.awAxisFunc[1]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49886" TopLevelType="75">.g_stConfAxis.awAxisFunc[20]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49850" TopLevelType="75">.g_stConfAxis.awAxisFunc[2]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49852" TopLevelType="75">.g_stConfAxis.awAxisFunc[3]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49854" TopLevelType="75">.g_stConfAxis.awAxisFunc[4]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49856" TopLevelType="75">.g_stConfAxis.awAxisFunc[5]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49858" TopLevelType="75">.g_stConfAxis.awAxisFunc[6]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49860" TopLevelType="75">.g_stConfAxis.awAxisFunc[7]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49862" TopLevelType="75">.g_stConfAxis.awAxisFunc[8]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49864" TopLevelType="75">.g_stConfAxis.awAxisFunc[9]</Var>
  <Var Type="74" Flags="268435459" Access="98" RefId="5" Offset="49808" TopLevelType="75">.g_stConfAxis.awAxisType</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49826" TopLevelType="75">.g_stConfAxis.awAxisType[10]</Var>
  <Var Type="42" Flags="268435459" Access="98" RefId="5" Offset="49828" TopLevelType="75">.g_stConfAxis.awAxisType[11]</Var>

Kennst Du Dich auch mit dieser Datei auch aus?

MfG Flash
 
Hi Flash,

sorry das scheint ein wenig undurchsichtiger zu sein als die .sym Datei. Doku dazu kenne ich nicht. Gibt es aber sicherlich auf Nachfrage bei 3S direkt. An deiner Stelle würde ich einfach ein Datenpaket als SYM_XML ausgeben und gleichzeitig als SYM. Dann müsstest du die direkte Übersetzung bekommen in dem Format wie ich es dir als Beispiel geschrieben habe. Das wäre meine Vorgehensweise. Mehr Infos habe ich leider nicht.
 
Zurück
Oben