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

Results 1 to 8 of 8

Thread: Verschiedene Datenbausteine mit Pointer beschreiben

  1. #1
    Join Date
    14.05.2018
    Posts
    27
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen Leute,

    ich habe gerade ein ziemliches Problem, wo ich langsam mit meinem Latein am Ende bin.

    Ich möchte ein Integer in verschiedene Datenbaustein beschreiben, dass sich aller 100 Byte wiederholt.
    z.B. DB1.DBW32, DB1.DBW132, DB1.DBW232, DB2.DBW32, DB2.DBW132 usw.

    Mit folgendem Code konnte ich es teilweise lösen:

    L #Laufvariable //Start mit 1
    + -1
    L 100
    *I
    + 32
    SLD 3
    LAR1
    AUF DB1
    L DBW [AR1,P#0.0]
    L 1
    +I
    T DBW [AR1,P#0.0]

    Damit kann ich aber nur die DB1 beschreiben. Ich muss irgendwie mit einer Eingangs Variable von einer Funktione auf verschiedene Datenbausteine zugreifen.
    Dies ist zwar mit einem Any-Pointer möglich, aber mit BLKMOV kann ich nur Datenbausteine beschreiben und nicht den Wert laden, diese +1 erhöhen und wieder beschreiben.

    Ich hoffe ihr könnt mir weiterhelfen

    Gruß Wolf
    Reply With Quote Reply With Quote Verschiedene Datenbausteine mit Pointer beschreiben  

  2. #2
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,262
    Danke
    411
    Erhielt 2,515 Danke für 2,093 Beiträge

    Default

    Hallo,
    mal ungeachtet von deinem Vorhaben - in deinem geposteten Code befinden sich noch einige Ungereimtheiten. Dein Pointer wird so nicht funktionieren und eine Schleife sehe ich da auch nicht wirklich.
    Wie auch immer - du kannst natürlích auch einen DB indirekt adressieren.
    Wenn du immer gleich große Datenbereiche kopieren willst dann würde sich der Blockmove gegenüber einer Schleife anbieten - alleine wegen der Laufzeit. Von Fehlersuche mal ganz zu schweigen. Einen ANYPointer zu bauen ist nicht wirklich ein Hexenwerk.

    Auf der anderen Seite habe ich aus deiner Beschreibung nicht wirklich verstanden, was du machen willst ...

    Gruß
    Larry

  3. #3
    Join Date
    03.12.2008
    Posts
    919
    Danke
    211
    Erhielt 239 Danke für 149 Beiträge

    Default

    Hallo
    Nur interessehalber, Dein besagtes Integer, an wie viele verschiedene Ziele soll das denn transferiert werden?
    Wenn es nur 10 oder 20 Ziele sind und der Abstand von 100 Wörtern konstant bleibt,
    dann würde ich auch nicht davor zurückschrecken das direkt zu adressieren (dann taucht das wenigstens in den Querverweisen auf)
    Wenn es natürlich hunderte von Zielen werden sieht die Sache wieder anders aus........

  4. #4
    Join Date
    14.05.2018
    Posts
    27
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Default

    Hallo Larry,

    es ist auch nur ein Programmschnipsel. Und der funktioniert, ich habe es ja selber beobachten können.

    Any-Pointer ist auch kein Hexenwerk.
    Es ging darum den Wert zu Laden, es um 1 zu erhöhen und wieder reinschreiben.

    Also das mit dem Aufzählen ist jetzt so kein Problem mehr. Dafür habe ich eine andere Idee gehabt.
    Jetzt habe ich ein anderes Problem, und zwar kann ich eine einzelne Bit Adresse nicht mehr beschreiben.

    Ein weiterer Schnipsel die es evtl. näher erläutert:

    SET
    = "Error_Count".KOMM_IO

    LAR1 P##P_ANY
    L B#16#10 //Syntax ID
    T LB [AR1,P#0.0]
    L B#16#1 //Typ Bool
    T LB [AR1,P#1.0]
    L W#16#8 //Länge in Byte
    T LW [AR1,P#2.0]
    L #DB_NR //DB
    T LW [AR1,P#4.0]

    L #UMG_NR //Start
    + -1
    L 100
    *I
    + 34
    SLD 3
    T LD [AR1,P#6.0]
    L B#16#84 //Bereichskennung DB
    T LB [AR1,P#6.0]

    CALL "BLKMOV"
    SRCBLK :="Error_Count".KOMM_IO
    RET_VAL:=#RET_VAL_SFC20
    DSTBLK :=#P_ANY

    Hast du vielleicht eine Ahnung, wie man über Any Pointer einen einzelnen Bit beschreibt?

  5. #5
    Join Date
    14.05.2018
    Posts
    27
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Default

    Quote Originally Posted by Paul View Post
    Hallo
    Nur interessehalber, Dein besagtes Integer, an wie viele verschiedene Ziele soll das denn transferiert werden?
    Wenn es nur 10 oder 20 Ziele sind und der Abstand von 100 Wörtern konstant bleibt,
    dann würde ich auch nicht davor zurückschrecken das direkt zu adressieren (dann taucht das wenigstens in den Querverweisen auf)
    Wenn es natürlich hunderte von Zielen werden sieht die Sache wieder anders aus........
    Maximale Ziele sind 247
    Natürlich helfe ich gerne! Bitte ziehen Sie eine Nummer

  6. #6
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,262
    Danke
    411
    Erhielt 2,515 Danke für 2,093 Beiträge

    Default

    Quote Originally Posted by Elektro Wolf View Post
    Hast du vielleicht eine Ahnung, wie man über Any Pointer einen einzelnen Bit beschreibt?
    Genau so ...
    Der Pointer, wie von dir gebildet, adressiert in Wahrheit die Bitadresse.
    Dadurch, dass du dein '134' drei mal nach links schiebst (du hättest hier auch * 8 schreiben können) erzeugst du die Adresse des ersten Bits in dem Byte.
    Allerdings kommt die Bit-Geschichte in Verbindung mit dem Blockmove nicht so richtig ...

    Gruß
    Larry

  7. #7
    Join Date
    06.10.2004
    Location
    Kopenhagen.
    Posts
    5,362
    Danke
    440
    Erhielt 970 Danke für 766 Beiträge

    Default

    Sind die "Ziele" vielleicht Instanz-DB's, oder Multi-Instanz-DB's ?
    Wenn ja, dann einfach den Inkrementierung in die dazuhörige FB's programmieren. Dann hast du kein Bedarf über Pointer zu programmieren. Und alles ist symbolisch usw. usw.
    Jesper M. Pedersen

  8. #8
    Join Date
    14.05.2018
    Posts
    27
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by JesperMP View Post
    Sind die "Ziele" vielleicht Instanz-DB's, oder Multi-Instanz-DB's ?
    Wenn ja, dann einfach den Inkrementierung in die dazuhörige FB's programmieren. Dann hast du kein Bedarf über Pointer zu programmieren. Und alles ist symbolisch usw. usw.
    Weder noch. Das ist eine einfache Globale DB.
    Natürlich helfe ich gerne! Bitte ziehen Sie eine Nummer

Similar Threads

  1. TIA Array of Struct verschiedene Bereiche beschreiben
    By ChrisE in forum Simatic
    Replies: 5
    Last Post: 01.06.2018, 13:40
  2. TIA TIA-V13 Datenbausteine mit Offset?
    By wolder in forum Simatic
    Replies: 2
    Last Post: 25.04.2014, 10:04
  3. Step 7 UDT Datenbausteine in Global Datenbausteine umwandeln
    By Vogelfrei in forum Simatic
    Replies: 2
    Last Post: 30.05.2013, 00:18
  4. Datenbausteine mit SCL neu initialisieren
    By Garog in forum Simatic
    Replies: 4
    Last Post: 22.11.2010, 21:15
  5. Replies: 1
    Last Post: 07.10.2008, 11:43

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •