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

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

Thema: Speicher indirekter Bitzugriff?

  1. #1
    Registriert seit
    18.02.2009
    Ort
    Köln
    Beiträge
    194
    Danke
    53
    Erhielt 15 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo alle zusammen.

    ich möchte mittels speicherindirekter Adressierung ein BOOL-Zustand von einem DB (z.B. DB8.DBX28.4) in einen anderen (z.B. DB6.DBX17.1) schreiben.
    Die Werte werden durch ein TP170 in den DB8 geschrieben und sollen von dort aus mittels Teach Button in den Rezepturbaustein(DB6) gespeichert werden. Der DB8 hat ARRAY Elemente.Meine anderen Variablen DW & Byte habe ich schon verschoben bekommen. Nur weis ich leider nicht wie ich den Zeiger aufbauen muss und wie ich den BOOL Wert in mein Rezeptur DB bekommen.

    Die Forensuche hat mir leider nichts brauchbares geliefert

    Hier mal mein Code:
    Netzwerk6 (das funktioniert)
    U "DB_Panel".Teachen_Pos
    FP M 0.2
    SPBNB _003
    L "DB_Panel".Pos_Achse1_Soll
    AUF DB [#DB_No]
    T DBD [#Zeiger]
    L #Zeiger //V 1 schreiben
    L #DB_Position
    L 4
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".V_Achse1_Soll
    AUF DB [#DB_No]
    T DBB [#Zeiger]
    L #Zeiger //Position 2 schreiben
    L #DB_Position
    L 2
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".Pos_Achse2_Soll
    AUF DB [#DB_No]
    T DBD [#Zeiger]
    L #Zeiger //V 2 schreiben
    L #DB_Position
    L 4
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".V_Achse2_Soll
    AUF DB [#DB_No]
    T DBB [#Zeiger]
    L #Zeiger //Position 3 schreiben
    L #DB_Position
    L 2
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".Pos_Achse3_Soll
    AUF DB [#DB_No]
    T DBD [#Zeiger]
    L #Zeiger //V 3 schreiben
    L #DB_Position
    L 4
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".V_Achse3_Soll
    AUF DB [#DB_No]
    T DBB [#Zeiger]
    _003: NOP 0

    Netzwerk7 (das funktioniert leider nicht)
    L #Zeiger
    L 1
    +I
    T #Zeiger
    U "DB_Panel".Aktieren_Pos
    S DBX [#Zeiger]

    Hoffe das Ihr mir helfen könnt.
    Gruß Rene
    Zitieren Zitieren Speicher indirekter Bitzugriff?  

  2. #2
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    Code:
    L #Zeiger // Position aktivieren
    L 1
    +I
    slw 3  // du musst das ganze für Pointer aufbereiten
    T #Zeiger
    U "DB_Panel".Aktieren_Pos
    S DBX [#Zeiger]
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  3. #3
    rerdma3s ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.02.2009
    Ort
    Köln
    Beiträge
    194
    Danke
    53
    Erhielt 15 Danke für 5 Beiträge

    Standard

    Hallo Gerhard,

    leider geht mit deinem Code die CPU wegen Bereichslängenfehler in Stopp.

    Durch meinen letzten Code im Netzwer6:

    L #Schiebebits //dies
    L #DB_Position //entspricht
    SLW //deinem SLW 3
    T #Zeiger

    ist meine temp Variable #Zeiger schon im Pointerformat.
    Der Zeiger steht auf Byteadresse 16 im DB 6. Nun muss ich meinen Pointer auf 17.0 (um eine Bitadresse festzulegen) ändern. Dann meine BOOLvariable aus dem DB8 laden und mittels indirekter Adressierung irgendwie in meinen DB6 bekommen.

  4. #4
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    hast du eine s7 400??

    und dein DB geht bis Byte 17?
    Geändert von Gerhard K (16.03.2010 um 23:20 Uhr)
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  5. #5
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von rerdma3s Beitrag anzeigen
    L #Schiebebits //dies
    L #DB_Position //entspricht
    SLW //deinem SLW 3
    T #Zeiger

    ist meine temp Variable #Zeiger schon im Pointerformat.
    Der Zeiger steht auf Byteadresse 16 im DB 6. Nun muss ich meinen Pointer auf 17.0 (um eine Bitadresse festzulegen) ändern.
    Probiere mal schnell das.
    Code:
         L #Zeiger
         + AR1, P#1.0
    Was mich wundert, Du sagst das der Code im NW 6 korrekt ist.
    Du schreibst nur SLW , ohne was dazu?

    Nachtrag: Probiere lieber das von Gerhard aus.
    Geändert von Paule (16.03.2010 um 23:20 Uhr)
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  6. #6
    rerdma3s ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.02.2009
    Ort
    Köln
    Beiträge
    194
    Danke
    53
    Erhielt 15 Danke für 5 Beiträge

    Standard

    als erstes mal Danke für die Tipps. Habe es so hinbekommen:

    U "DB_Panel".Teachen_Pos
    FP M 0.2
    SPBNB _003
    L "DB_Panel".Pos_Achse1_Soll //Position 1 schreiben
    AUF DB [#DB_No]
    T DBD [#Zeiger]
    L #Zeiger //V 1 schreiben
    L #DB_Position
    L 4
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".V_Achse1_Soll
    AUF DB [#DB_No]
    T DBB [#Zeiger]
    L #Zeiger //Position 2 schreiben
    L #DB_Position
    L 2
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".Pos_Achse2_Soll
    AUF DB [#DB_No]
    T DBD [#Zeiger]
    L #Zeiger //V 2 schreiben
    L #DB_Position
    L 4
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".V_Achse2_Soll
    AUF DB [#DB_No]
    T DBB [#Zeiger]
    L #Zeiger //Position 3 schreiben
    L #DB_Position
    L 2
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".Pos_Achse3_Soll
    AUF DB [#DB_No]
    T DBD [#Zeiger]
    L #Zeiger //V 3 schreiben
    L #DB_Position
    L 4
    +D
    T #DB_Position
    L #Schiebebits
    L #DB_Position
    SLW
    T #Zeiger
    L "DB_Panel".V_Achse3_Soll
    AUF DB [#DB_No]
    T DBB [#Zeiger]
    L #Zeiger // Position aktivieren
    L 8
    +I
    T #Zeiger
    U "DB_Panel".Aktieren_Pos
    AUF DB [#DB_No]
    S DBX [#Zeiger]
    UN "DB_Panel".Aktieren_Pos
    AUF DB [#DB_No]
    R DBX [#Zeiger]
    L #Zeiger // Greifer aktivieren
    L 1
    +I
    T #Zeiger
    U "DB_Panel".Handling
    AUF DB [#DB_No]
    S DBX [#Zeiger]
    UN "DB_Panel".Handling
    AUF DB [#DB_No]
    R DBX [#Zeiger]
    _003: NOP 0

    @ gerhard 315 2-DP

    @ Paule
    Mein SLW Befehl wird mit #Schiebebits (Variable hat vorher den Wert 3 bekommen) ausgeführt.
    Ich wollte es erst einmal mit speicherindirektem Adressieren schaffen und dann registerindirektes Adressieren ausprobieren. ich glaube der Code ist nicht besonders schön, aber er funktioniert und es ist auch meine erste indirekte Adressierung.

    Vielen Dank für eure Anregungen.
    Gruß rene

  7. #7
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    @ gerhard 315 2-DP
    was soll dann das, 3 mal laden hintereinander?
    Code:
    L #Zeiger //Position 2 schreiben
    L #DB_Position
    L 2
    +D 
    T #DB_Position
    du hast ja nur 2 akkus in den S7-300
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  8. Folgender Benutzer sagt Danke zu Gerhard K für den nützlichen Beitrag:

    rerdma3s (16.03.2010)

  9. #8
    rerdma3s ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.02.2009
    Ort
    Köln
    Beiträge
    194
    Danke
    53
    Erhielt 15 Danke für 5 Beiträge

    Standard

    Oh ja . . .

    der erste Ladebefehl ist ein überflüssigeer Code. Danke

    Bin ja auch noch ein direkter, indirekter AWL Neuling

  10. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.173
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Hallo Rene,

    hoffentlich siehst Du nächsten Monat noch durch in Deinem Kopierbaustein ...
    Ohne Dein Netzwerk 6 genau zu analysieren, grenzt es für mich an ein Wunder, daß es funktionieren soll.
    Und da ist auch noch die Frage, welcher Deiner 3 aufeinanderfolgenden Ladebefehle nun überflüssig ist.
    Das L #Zeiger hat jedenfalls keine Auswirkung auf Deine nachfolgende Adressberechnung.

    Wäre es nicht besser, Du machst in DB8 und DB6 identische Strukturen (UDT) und kopierst die Struktur
    im Ganzen einfach mit SFC20? Das entspräche besser dem Grundgedanken von Rezepturen/Datensätzen.

    Und statt
    Code:
    U "DB_Panel".Handling
    AUF DB [#DB_No]
    S DBX [#Zeiger]
    UN "DB_Panel".Handling
    AUF DB [#DB_No]
    R DBX [#Zeiger]
    schreib einfach
    Code:
    U "DB_Panel".Handling
    AUF DB [#DB_No]
    = DBX [#Zeiger]
    Gruß
    Harald

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    rerdma3s (17.03.2010)

  12. #10
    rerdma3s ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.02.2009
    Ort
    Köln
    Beiträge
    194
    Danke
    53
    Erhielt 15 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Harald,

    all deine Tipps sind richtig. Wie gesagt, dei indirekter Adressierung bin ich noch Neuling. Ich mache das hauptsächlich um mich weiter zu bilden. Das mit dem SFC20 schaue ich mir mal an.

    Es ist auch nicht wirklich eine Rezeptur, sondern eher eine Positionsmerkung für ein 3Achsportal. Die Positionen und die Geschwindigkeiten möchte ich am Bediengerät eingeben können und dann per Teachtaste in den DB schieben. Im Automatikbetrieb dann genau anders herrum. Erst aus meinem "Rezeptur/Positionsmerkungs DB lesen und in die entsprechenden FM353 schreiben.

Ähnliche Themen

  1. indezierter Bitzugriff
    Von tinosps im Forum CODESYS und IEC61131
    Antworten: 11
    Letzter Beitrag: 04.07.2008, 15:12
  2. LibNoDave Bitzugriff...
    Von Jochen Kühner im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 28.03.2008, 09:29
  3. Bitzugriff in WinCC VBS
    Von Anfängerproggi im Forum HMI
    Antworten: 9
    Letzter Beitrag: 30.07.2007, 10:51
  4. Indirekter Datenbausteinaufruf in SCL
    Von Anonymous im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 13.09.2005, 14:47
  5. indirekter DB zugriff
    Von bassknecht im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 20.08.2005, 12:44

Lesezeichen

Berechtigungen

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