Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 55

Thema: TIA und Step7 erzeugen unterschiedliche Array-Offsets?

  1. #1
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ich beschäftige mich gerade mit der automatischen Offset-Erstellung in S7 Structs dabei ist mir aufgefallen das TIA und Step7 andere Offsets erzeugen

    Wenn ich einen ARRAY[1..2,1..4] of String[1] erstelle bekommt der Nachfolger in Step7 Lite 3 SP1 eine groessere Bitadresse als im TIA V11 SP5
    in Step 7 wird der String auf Word-teilbare Größe erweitert, beim TIA nicht (bei 400er, 1200er)

    array_string1 array[1..2,1..4] of string[1]

    ist in Step7 32 Byte und im TIA nur 24 Bytes lang

    Mir ist schon klar das es nicht per se falsch ist aber kann das nicht sehr leicht zu komischen Problemen fuehren?
    was passiert z.B. wenn man ein Step7 Projekt konvertiert und dieses dann auf die SPS bringt - aber z.B. per BSEND + Anypointer
    von einer bestimmten Stelle Daten überträgt?

    und die 300/400 Kompatibel-Auswahl bei der Datablock Erzeugung bedeutet dann auch nur 98% Kompatibel - darum denke ich das es ein TIA-Fehler ist

    Dieser Fehler wurde in TIA-V12 für die 300/400 korrigiert, die 1500 ist konform zum Step7 alignment

    http://www.sps-forum.de/showthread.p...694#post435694
    Angehängte Grafiken Angehängte Grafiken
    Geändert von LowLevelMahn (25.03.2013 um 17:39 Uhr)
    Zitieren Zitieren FIXED in V12 für 300/400: TIA und Step7 erzeugen unterschiedliche Array-Offsets?  

  2. Folgende 2 Benutzer sagen Danke zu LowLevelMahn für den nützlichen Beitrag:

    ebt'ler (19.02.2013),rostiger Nagel (18.02.2013)

  3. #2
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    So wie ich das sehe, ist das Ganze eine STRUCT und die Ausrichtung der STRUCT legt der Compiler (wenn nicht ausdrücklich anders eingestellt! (Pragma pack()) frei fest.

    Ob er aus einem Bool ein Bit oder ein Byte oder Word oder sonst etwas macht, steht dem Compiler frei. Wenn ich auf ein einzelnes Element der STRUCT zugreife, dann mit Namen des Elements und .Punkt Operator.

    Wenn das bisher anders ging, ist das keine Garantie für die Zukunft und schon gar nicht guter Stil sondern Hacker Mentalität.

    Übrigens ist damit auch Siemens früher (vor etwa 20 Jahren) flott auf die Nase gefallen, als sie in der Firmware ihrer Slot PLC davon ausgingen, dass ein Windows Handle eine bestimmte Ausrichtung hat und als dann Microsoft in Win NT
    auf andere Handle umstieg, konnte Siemens die Firmware der Slot PLC teuerst nachbessern.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Ausrichtung  

  4. #3
    LowLevelMahn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    und die Ausrichtung der STRUCT legt der Compiler (wenn nicht ausdrücklich anders eingestellt! (Pragma pack()) frei fest.
    jetzt nenne mir auch ganz schnell den Siemens-Standard aus dem du hier zitierst dann weiss ich wenigstens das es kein Blabla-ich-weiss-was-über-Compiler-Geschnatter ist
    und wo diese Einstellung im TIA sein soll? Klar kennen die meisten Kompiler ein erzwungenes Alignment - aber TIA?

    wir reden hier auch nicht von allgemeinen Zugriffsaligment sondern nur von einem einzige winzigen Fall der jetzt plötzlich anders ist
    und zwar nur wenn du Strings mit ungerader Größe in Arrays verwendest - sonst in keiner Situation egal welche Typen/Verschachtelung/Tiefe

    Aus welchem Grund denkst du für diese Situation nur im entferntesten allgemein C/C++/Konsorten-Alignmentregeln anwenden zu können???

    noch dazu bin ich mir 100% Sicher das da einfach nur geschlampt wurde - alle komplexen Typen sind im Datenblock word-aligned - auch der String
    nur nicht mehr in String-Arrays - d.h. entweder hat man beim String-Arrays diese Step7 Spezialität vergessen oder vergessen das Einzel-String Aligment auf Byte zu stellen
    weil einmal String-Zugriff mit Byte-Alignment und einmal mit Word-Alignment macht keinen Sinn
    Geändert von LowLevelMahn (18.02.2013 um 16:43 Uhr)
    Zitieren Zitieren Lustige Antwort...  

  5. #4
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.647
    Danke
    788
    Erhielt 654 Danke für 497 Beiträge

    Standard

    Wenn du dir 100% Sicher bist dass da geschlampt wurde, wieso fragst du dann hier noch? Nur Siemens kann dir sagen ob es ein Bug oder Feature ist. Denn Einfluss aufs Programm hat dieser Umstand ja nicht.

    mfG René

  6. #5
    LowLevelMahn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    gut sagen wir 97,5% sicher - primär auch nur wegen dem Umstand das einmal Byte- und einmal Word-Alignment benutzt wird, was noch eine SPS Spezialität sein könnte
    und mit Siemens-Fehler-Melden habe ich Gefühlt schon Jahre verbracht, meine Hoffnung ist das es hier Auffällt und dann genau geklärt wird

    Denn Einfluss aufs Programm hat dieser Umstand ja nicht
    es zeigt mir auch eher wie gut die neue Software getestet wird - speziell was Siemens unter "Kompatibilität" versteht

    ich frage mich nur ob hart kodierte Anypointer bei einem Import von Step7 nach TIA automatisch nachgezogen werden
    oder ob dann einfach die Adressen/Daten falsch sind (falls irgendwo über dem Zugriff ein Array mit Strings ungerader Größe existiert) und
    wie lange es dauert bis man nach einer Migration auf das Problem stösst - hab leider kein Step7 hier (nur Lite) sonst würde ich es testen

    Was ist deine Meinung zu der Sache?
    Zitieren Zitieren sagen wir 97,5% Sicher  

  7. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.793
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    Hehe, grade mal getestet. Wenn man einen so mit dem TIA erstellten Baustein versucht mit Step7 aus der SPS zu laden, lässt sich dieser nicht mehr öffnen.
    Fehlermeldung "Compilerinformation. Ungültiger Parameter im Aufruf" und "Datenbaustein konnte nicht geöffnet werden".
    Passt dann wohl nicht mehr mit der Step7 Datenhaltung zusammen.

  8. #7
    LowLevelMahn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    Passt dann wohl nicht mehr mit der Step7 Datenhaltung zusammen.
    sollte das denn funktionieren?

    und könntest du auch die Anypointer-Sache testen?

    also einfach ein Step7 Projekt mit

    DB1
    davor BOOL
    array_string1[1..2,1..4] of STRING[1]
    danach BOOL

    plus einen hartkodierten AnyPointer Zugriff auf "array_string1[2,1]" und "danach"

    dann das Projekt nach TIA migrieren und schauen ob die Offsets noch passen?

    mein Maximaldank wäre dir stets Gewiss
    Geändert von LowLevelMahn (18.02.2013 um 17:41 Uhr)
    Zitieren Zitieren kannst du auch die Anypointer-Sache testen?  

  9. #8
    Registriert seit
    25.06.2007
    Ort
    Dresden
    Beiträge
    3.930
    Danke
    465
    Erhielt 878 Danke für 634 Beiträge

    Standard

    Es gibt m.E. nur zwei Varianten, wie ein DB-Offset sich ergibt:

    Variante 1 (TIA-DB-Optimiert): Gar kein "sichtbarer" Offset, weil symbolische Ablage in der SPS (nur 1200/1500)

    Variante 2 (TIA/CLASSIC-Stile): Da wird immer zum nächsten vollen Wort gesprungen, wenn etwas folgt, was größer als ein Byte ist ODER wenn man ein neues STRUCT beginnt usw.

    Alles anderes wäre PFUSCH - und selbst mit der ausgefeiltesten (an den Haaren herbeigezogenen) Erklärung nicht nachzuvollziehen.

    So sehe ich das!


    EDIT: Ein STRING[1] hat schon mal mind. DREI Byte!!! - --MAXLÄNGE- -AKT_LÄNGE- -DATENBYTE-- ... das ergibt DREI ... aufgerundet VIER .... Bei der TIA-Variante fehlt das aufrunden...

    Frank
    Geändert von IBFS (18.02.2013 um 18:04 Uhr)
    Grüße Frank

  10. #9
    LowLevelMahn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    Variante 1 (TIA-DB-Optimiert): Gar kein "sichtbarer" Offset, weil symbolische Ablage in der SPS (nur 1200/1500)
    so funktioniert es auch

    Variante 2 (TIA/CLASSIC-Stile): Da wird immer zum nächsten vollen Wort gesprungen, wenn etwas folgt, was größer als ein Byte ist ODER wenn man ein neues STRUCT beginnt usw.
    irgendwie schon richtig - aber die Details sind doch anders, es gibt da Spezialfälle wie Bitarray, Multidimensionale usw.

    Alles anderes wäre PFUSCH - und selbst mit der ausgefeiltesten (an den Haaren herbeigezogenen) Erklärung nicht nachzuvollziehen.
    mir ist völlig klar wie es funktioniert - nur TIA macht einen winzigen kleinen Unterschied beim Datenalignement zu Step7 - Strings in Arrays werde nicht mehr Word-Aligned, aber ausserhalb von Arrays sind sie immer noch Word-Aligned
    was ein wenig verwirrend ist und sich ausser mit "wir habens vergessen Einzubauen" schwer erklären lässt

    und ich gehe davon aus das hartkodierte Anypointer in diesem Szenario bei einer Migration von Step7->TIA falsch werden, oder es passiert ein Wunder, oder Warnmeldung
    Geändert von LowLevelMahn (18.02.2013 um 18:10 Uhr)
    Zitieren Zitieren stimmt nicht ganz  

  11. #10
    Registriert seit
    29.03.2004
    Beiträge
    5.793
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von LowLevelMahn Beitrag anzeigen
    sollte das denn funktionieren?

    und könntest du auch die Anypointer-Sache testen?

    also einfach ein Step7 Projekt mit

    DB1
    davor BOOL
    array_string1[1..2,1..4] of STRING[1]
    danach BOOL

    plus einen hartkodierten AnyPointer Zugriff auf "array_string1[2,1]" und "danach"

    dann das Projekt nach TIA migrieren und schauen ob die Offsets noch passen?
    Auweia, das geht ja fast erwartungsgemäß voll in die Hose.

    Ich habe zwei Migrationen vorgenommen. Einmal mit Operandenvorrang auf absolut, und ein anderes Mal mit Operandenvorrang auf symbolisch.

    In beiden Fällen erfolgt der Zugriff nachher auf die falsche Adresse!

    Also wenn vorher "DB1.danach" auf DBX34.0 lag, wird auch nach der Migration auf die Adresse geschrieben. Dort steht dann natürlich etwas ganz anderes.

    Wenn man Glück hat ist der Datenbaustein zu kurz, dann kann das Programm nicht übersetzt werden.
    Oder man hat Glück und das Bit liegt in einem Int/Word etc. dann gibt es beim Übersetzen zumindest eine Warnung.

    Wenn dort irgendwelche anderen Bool-Variablen stehen, wird die Adresse mit dem neuen Symbol angepasst. Keine Warnmeldung, nichts.

Ähnliche Themen

  1. B+R Automation Studio und Siemens STEP7, TIA und WinCC flexible
    Von Sudoku im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 18.09.2012, 07:57
  2. Step7/TIA und Wago safety
    Von mrtommyt im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 12.12.2011, 08:02
  3. Antworten: 15
    Letzter Beitrag: 07.07.2011, 22:15
  4. WinCC und Step7 Software automatisch erzeugen
    Von WinCC_Novize im Forum HMI
    Antworten: 4
    Letzter Beitrag: 05.11.2010, 00:00
  5. Unterschiedliche Bestellnummern in Step7 v5.3
    Von Anonymous im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 03.10.2005, 16:16

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •