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

Ergebnis 1 bis 5 von 5

Thema: String als UDT am FB In Out S7 -300 mit Classic

  1. #1
    Registriert seit
    25.02.2016
    Beiträge
    284
    Danke
    19
    Erhielt 58 Danke für 51 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Beisammen,

    wie oben beschrieben ich habe mir einen UDT für die Kommunikation der Visu mit einen FB der von mir erstellt worden ist am In Out des FB wird der UDT aufgerufen und in einem DB wird er aufgerufen der DB ist Symbolisch am Aufruf des FB angegeben.
    der UDT enthält mehrere Strukturen und in einer Struktur ist ein String der von der Visu beschrieben wird. Nun so weit so gut aber, ich müsste den String im FB Umkopieren auf einen Ausgangsbereich. Nur wie kann ich den String Kopieren Blockmove nimmt das Symbol aus den Deklarationsbereich nicht an und Selbst einen Pointer davor schreiben geht leider nicht weil ja so eine Variable wie ich weis keine Adresse hat.

    Wisst ihr wie das geht?
    Ich müsste wie oben geschrieben den String nur in einen Ausgangsbereich Kopieren können mehr wäre nicht!


    Mit besten Grüßen Tia

    Programmiert wird mit
    Step 7 classic v 5.5
    Zitieren Zitieren Gelöst: String als UDT am FB In Out S7 -300 mit Classic  

  2. "Das Problem ist, dass du aus dem AWL-Programm im FB zwar an die Adresse der UDT herankommst (Datenbaustein und Anfangsadresse), aber nicht an den Versatz der einzelnen Elemente im UDT.

    Wenn der String auf den du zugreifen willst im UDT an erster Stelle liegt, und auch garantiert nie verschoben wird, dann kannst du dir da was basteln.

    Du lädst das erste Zeichen des Strings:

    L #data.stringVar[1]

    Damit das erste Zeichen geladen werden kann, muss der als Parameter übergebene Datenbaustein geöffnet werden. In einem FB wird dafür das DB-Register verwendet. Außerdem wird die Anfangsadresse dieses UDT noch in das Adressregister 1 (AR1) geladen. Mit dem Wissen kannst du direkt nach der Anweisung mit

    L DBNO

    auf die Datenbausteinnummer zugreifen, und mit

    TAR1

    auf die Anfangsadresse im Datenbaustein. Zwischenspeichern würde ich diese Informationen in einer Temp-Variable, damit die Registerinhalte nicht wieder zerstört werden wenn du auf andere Daten zugreifst.

    Was mit den Informationen theoretisch möglich wäre, dass du dir im temp-Bereich ebenfalls eine UDT des gleichen Typs anlegst, und dann mit den extrahierten Informationen einen Any-Pointer zusammenbaust, und dann per Blockmove die ganze UDT in den Temp-Bereich kopierst. Da kannst du dann auf alle Elemente zugreifen, auch die String-Inhalte."


  3. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Um es einfach zu machen:
    Nimm SCL, dort ist das ohne Umwege möglich.

    In AWL dürfte eine ganz üble Zauberei werden.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  4. #3
    Wincctia ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.02.2016
    Beiträge
    284
    Danke
    19
    Erhielt 58 Danke für 51 Beiträge

    Standard

    Hallo Thomas

    würde ich gern nur soll ich einen Baustein entwicklen der in Awl ist hab heute schon Stundenlang Propiert hab echt keine Idee mehr. Währe über jeden Tip dankbar evtl auch nur ein Denkanstoß

    danke schon mal Gruß Tia

  5. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Das Problem ist, dass du aus dem AWL-Programm im FB zwar an die Adresse der UDT herankommst (Datenbaustein und Anfangsadresse), aber nicht an den Versatz der einzelnen Elemente im UDT.

    Wenn der String auf den du zugreifen willst im UDT an erster Stelle liegt, und auch garantiert nie verschoben wird, dann kannst du dir da was basteln.

    Du lädst das erste Zeichen des Strings:

    L #data.stringVar[1]

    Damit das erste Zeichen geladen werden kann, muss der als Parameter übergebene Datenbaustein geöffnet werden. In einem FB wird dafür das DB-Register verwendet. Außerdem wird die Anfangsadresse dieses UDT noch in das Adressregister 1 (AR1) geladen. Mit dem Wissen kannst du direkt nach der Anweisung mit

    L DBNO

    auf die Datenbausteinnummer zugreifen, und mit

    TAR1

    auf die Anfangsadresse im Datenbaustein. Zwischenspeichern würde ich diese Informationen in einer Temp-Variable, damit die Registerinhalte nicht wieder zerstört werden wenn du auf andere Daten zugreifst.

    Was mit den Informationen theoretisch möglich wäre, dass du dir im temp-Bereich ebenfalls eine UDT des gleichen Typs anlegst, und dann mit den extrahierten Informationen einen Any-Pointer zusammenbaust, und dann per Blockmove die ganze UDT in den Temp-Bereich kopierst. Da kannst du dann auf alle Elemente zugreifen, auch die String-Inhalte.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  6. #5
    Wincctia ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.02.2016
    Beiträge
    284
    Danke
    19
    Erhielt 58 Danke für 51 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Thomas,

    danke für die Infos werde ich am mo gleich testen!!!

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 31.03.2016, 09:09
  2. Antworten: 7
    Letzter Beitrag: 12.06.2015, 16:57
  3. Antworten: 4
    Letzter Beitrag: 20.04.2015, 15:30
  4. String in UDT speichern und mit WinCC Flexible 2008 auslese
    Von SenderTs im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 18.08.2010, 11:30
  5. [Frage] - String mit mehr als 254 Zeichen?
    Von marcengbarth im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 27.07.2007, 10:39

Lesezeichen

Berechtigungen

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