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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Array of Byte in String mit Step 7 V10.5

  1. #1
    Registriert seit
    13.07.2010
    Beiträge
    71
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    es gibt zwar bereits einige Treads mit dem gleichen Thema, nur konnte ich darin leider keine ausreichende Hilfe finden.
    Wie im Kopf schon zu sehen ist, soll ein Array mit 49 Stellen in einen String geschrieben werden, um ihn anschließend auf einem Panel (KTP400) ausgeben zu lassen.
    Meine Idee war zuerst, jedes einzelne Byte in ein Integer umzuwandeln und dann diesen Int in den ensprechenden String zu kopieren.
    Die erstellung der einzelnen Ints funktioniert auch soweit mit dem "conv-baustein".
    Um diese ints in den string zu kopieren wollte ich den baustein "val_strg" verwenden, der eig genau diese funktion erfüllen sollte. leider schreibt er anschließend keinen einzigenwert in den string

    Nebenbei: gibt es vlt auch eine elegantere Lösung als meine, da ich hierbei ja wirklich 49 stellen umwandeln und kopieren müsste...

    Lg
    Zitieren Zitieren Array of Byte in String mit Step 7 V10.5  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    ich nehme mal an, dass in deinem ARRAY_of_Byte schon Zeichen des ASCII-Zeichensatzes drin stehen ... ? In dem Fall einfach die Zeichen so wie sie sind in dem String kopieren und beim String (den der ist letztlich auch nur ein ARRAY_of Byte) den Header initialisieren (also deklerierte Länge des String und benutzte Länge desselben).

    Gruß
    Larry

    Nachsatz:
    Falls es keine ASCII-Zeichen in deinem ARRAY sind - was ist dann drin ?

  3. #3
    Registriert seit
    13.07.2010
    Beiträge
    71
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zunächst mal danke für die schnelle antwort.
    Die Idee mit dem "simplen" kopieren von dem Array in den string hatte ich auch schon, nur meckert der entsprechende baustein hierbei immer.
    Mit dem baustein "move_blk" lassen sich bereiche kopieren, wobei am eingang ein Array und am Ausgang ein Array angegeben werden muss. Bei einem String am Ausgang kommt immer die Fehlermeldung dass ein Zugriff an den Datentyp String an dieser Stelle unzulässig ist.
    Die Daten innerhalb des Arrays sind Ascii kodiert, jedoch im hex-format.

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Woher kommt denn dein Array_of_Byte ?
    Kannst du nicht direkt in den String [+ Offset 2] schreiben ?

    Hex ist nur eine andere Ansichtsform (also OK) - das ändert nichts am Inhalt ...

    Gruß
    Larry

  5. #5
    Registriert seit
    13.07.2010
    Beiträge
    71
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Um die Herkunft des Arrays zu erklären müsst ich leider weit ausholen, da es von einer speziellen Siemens Applikation kommt, die so nicht erwerblich ist (Arbeite in ner großen Firma, deswegen der Aufwand).

    Direkt in den String schreiben geht leider nicht. Wenn ich den String am Ausgang direkt auswähle kommt der oben genannte Fehler und wenn ich über Pointer gehe (=> P#DB6.DBX93.0 BYTE49) kommt die meldung dass der aktualparameter any nicht zum datentyp arrayelement [...] passt.

    Das direkte übertragen der daten von array in string will einfach nicht funktionieren, deswegen war meine idee noch über eine umwandlung zu gehen un dann mühsam alle bytes in ints zu konvertieren und dann die ints in dem string zusammenzufassen.
    komischerweise werden die Integer nicht in den string geschrieben

    Lg
    Cartman

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Naja ...

    der Blockmove würde auch arbeiten, wenn du am Ausgang dessen (Ziel) nicht den String-Anfang hinschreibst sondern den Nutzdatenbereich dessen als ANY-Pointer.

    Du kannst aber auch in einer Scheife die Inhalte übertragen - Byteweise.
    Int geht hier nicht - wie machst du das überhaupt ?

    Achja ... das Ganze ist natürlich ein Fall für AWL ... (falls du mit FUP oder so herummachst ...)

    Gruß
    Larry

  7. #7
    Registriert seit
    13.07.2010
    Beiträge
    71
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das obige Beispiel des Pointers (=> P#DB6.DBX93.0 BYTE49) bezog sich leider schon auf den Nutzdatenbereich. Der String geht bereits ab der Adresse 91 los.
    Zu deiner Idee mit der Schleife: mit welchem Baustein würdeste das realisieren?
    Über den Baustein "Val_Strg" kann ein numerischer Wert in eine Zeichenkette konvertiert werden. Theoretisch zumindest, praktisch klappts nicht, wobei der baustein einen mir noch unklaren eingang hat (format), an dem das ausgabeformat der zeichen angegeben werden muss. Der hierfür erforderliche Datentyp ist word.

    Mit AWL wäre das ganze mit sicherheit einfacher zu lösen, nur hat siemens ja gemeint bei der neuen 1200er Reihe brauch man kein AWL mehr...

    Lg
    Cartman

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    "Val_Strg" erzeugt dir aus einem Zahlenwert einen String - also aus der Zahl 12345 (die du in deiner Quell-variablen drin hast) wird dir der String "12345" gebildet. Das ist aber ja gar nicht, was du haben willst. Du möchtest ja Zeichen für Zeichen aus dem einem Speicherbereich in den nächsten kopieren.

    Wegen dem BlockMove noch einmal : worüber und vor Allem was meckert denn der Baustein ?

  9. #9
    Registriert seit
    13.07.2010
    Beiträge
    71
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Muss dir erstmal noch für deine Bemühungen danken, hast mir ja bereits schon mehrmals geholfen

    Also ich zähl ma den aktuellen Stand auf:
    Der Array of Byte (alias: return_fehler_text)befindet sich im DB6 an der Stelle 154: Array [0 .. 53] of Byte
    Der String (alias: Fehlertext) liegt bei der Adresse 93 im selben DB: String [54].
    Die "meckerei" geht bei dem baustein los, sobald der string als ausgang definiert wird. Der Fehlertext lautet: "An dieser Stelle sind keine Zugriffe auf ELemente des Datentyps string zulässig.

    Zu verdeutlichung hängen zwei Screenshots an.
    Angehängte Grafiken Angehängte Grafiken

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Lord Cartman Beitrag anzeigen
    Direkt in den String schreiben geht leider nicht. Wenn ich den String am Ausgang direkt auswähle kommt der oben genannte Fehler und wenn ich über Pointer gehe (=> P#DB6.DBX93.0 BYTE49) kommt die meldung dass der aktualparameter any nicht zum datentyp arrayelement [...] passt.
    Hast du das mal in AWL versucht ?

Ähnliche Themen

  1. String := '$Byte';
    Von SirTom78 im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 04.09.2011, 00:54
  2. array of [1..8] byte
    Von domino im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 13.04.2010, 07:25
  3. Array of Byte to String[12] ,S7
    Von sb9674 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 28.09.2009, 19:15
  4. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54
  5. Bool-Array in Byte-Array
    Von Techniker im Forum Sonstige Steuerungen
    Antworten: 10
    Letzter Beitrag: 13.01.2006, 19:12

Lesezeichen

Berechtigungen

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