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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 34

Thema: Pointer <- Indirekter DB möglich ?

  1. #21
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hab noch mal nachgeschaut... Hier noch mal das komplette Netzwerk 1:
    Code:
    // Den Begleitwerten einmalig den passenden Instanzdatenbaustein zuweisen
    // Hierzu einen ANY_Pointer verwenden:
    // Pointer im Format für die Begleitwerte der Alarm_S und SQ SFCs bilden
          L     B#16#10                     // TYP (Teil1): 10h für s7
          T     LB     0
          L     B#16#2                      // TYP (Teil2): BYTE
          T     LB     1
          L     12                          // Anzahl (Bytes) ab Startadresse
          T     LW     2
          L     #DI_Number                  // Nummer des Datenbausteins (IN:INT)
          T     LW     4
          L     1170                        // Startadresse im DB (Beginn STAT-Bereich)
          SLD   3                           // Pointer erzeugen
          T     LD     6
          L     B#16#85                     // Speicherbereichstyp: 85h für Instanz-DB
          T     LB     6
    // Der hiermit erzeugte Pointer liegt nun im TEMP-Bereich ab Adresse 0
    // Dort eine Variable #Begleitwerte des Typs ANY anlegen und bei SD zuweisen.
    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Abbilder der DBs Alarm_S_Bits und Alarm_SQ_Bits temporär zwischenspeichern
          L     #DB_Nr_Alarm_S_Bits
          T     #DB_Nr_Alarm_S_Bits_Int
          AUF   DB [#DB_Nr_Alarm_S_Bits_Int]
          L     DBD    0
          T     #Abbild_AlmS_Bits_DBD0      // Inhalt des DBD 0 lokal gespeichert
          L     DBD    4
          T     #Abbild_AlmS_Bits_DBD4      // Inhalt des DBD 4 lokal gespeichert
          L     DBD    8
          T     #Abbild_AlmS_Bits_DBD8      // Inhalt des DBD 8 lokal gespeichert
          L     DBD   12
          T     #Abbild_AlmS_Bits_DBD12     // Inhalt des DBD 12 lokal gespeichert
          L     #DB_Nr_Alarm_SQ_Bits
          T     #DB_Nr_Alarm_SQ_Bits_Int
          AUF   DB [#DB_Nr_Alarm_SQ_Bits_Int]
          L     DBD    0
          T     #Abbild_AlmSQ_Bits_DBD0     // Inhalt des DBD 0 lokal gespeichert
          L     DBD    4
          T     #Abbild_AlmSQ_Bits_DBD4     // Inhalt des DBD 4 lokal gespeichert
          L     DBD    8
          T     #Abbild_AlmSQ_Bits_DBD8     // Inhalt des DBD 8 lokal gespeichert
          L     DBD   12
          T     #Abbild_AlmSQ_Bits_DBD12    // Inhalt des DBD 12 lokal gespeichert
    // /////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    // *********************************************************************************************************
    //    eigentlicher Beginn Netzwerk 1 ...
    // *********************************************************************************************************
          L     #T_MOT_OUT_C
          T     #begleitwert1
          L     L#0                         // falls ein Wert ausreicht die restlichen 2 mit "0" auffüllen
          T     #begleitwert2
          T     #begleitwert3
    // Störung 1
          CALL  "ALARM_S"
           SIG    :=L16.0                   // Meldungsauslösendes Bit aus jeweiligem DB lokal gespeichert
           ID     :=W#16#EEEE               // Bleibt konstant gleich
           EV_ID  :=#Stoerung001            // Variable aus IN-Bereich welcher die Meldungsnummer zugeordnet ist
           SD     :=#Begleitwerte           // Pointer auf die Begleitwerte im STAT-Bereich (siehe oben)
           RET_VAL:=#retval                 // Rückgabewert für Fehlercodes
    Die Netzwerke 2 - n beinhalten dann jeweils nur die nachfolgenden SFC 17/18 Aufrufe und die Zuweisung der Begleitwerte. Beispiel Netzwerk 2:
    Code:
          L     #T_OEL_C
          T     #begleitwert1
          L     L#0
          T     #begleitwert2
          T     #begleitwert3
    // Störung 2
          CALL  "ALARM_S"
           SIG    :=L16.1
           ID     :=W#16#EEEE
           EV_ID  :=#Stoerung002
           SD     :=#Begleitwerte
           RET_VAL:=#retval
    Das geht dann einfach so weiter...
    Testen kann ich das erst wieder heute nachmittag, aber so wie es jetzt gepostet ist läufts aktuell und funktioniert NICHT -> Begleitwert ist immer = 0

    An SD soll ja der Anyzeiger mitteilen wo die Begleitwerte liegen -> in dem Fall im STAT-Bereich des Instanzdatenbausteins, diese werden vor Aufruf der nächsten Störung immer neu versorgt (Begleitwert1, 2 und 3)

    Ich weiss einfach nicht was da nicht gehen soll...

    Ersetze ich an SD den Any #Begleitwerte durch #begleitwert1 (direkt aus STAT) dann funktioniert es, habe dann allerdings nur einen Wert statt 3 (manchmal brauche ich 2, den dritten habe ich als reserve schon mal vorgesehen...)
    Also muss es irgendwie an dem Zeiger hängen...
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  2. #22
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo!

    #Begleitwert ist dein Any Zeiger?
    Liegt der im Temp bereich bei Adresse 0.0?

    Wo wird die Variable #DI_Nummer beschrieben?

    Gibt Ret_Val von deinen SFC aufrufen einen Wert zurück?

    godi

  3. #23
    Registriert seit
    06.10.2003
    Beiträge
    3.412
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo rs-plc-aa,

    ich habe den Beitrag jetzt nur kurz überflogen. Deine Begleitwerte liegen in den Lokaldaten? Wie sieht die Deklaration aus? Ich denke, du musst garkeinen Pointer basteln. Deklariere deine Begleitwerte als STRUCT oder als ARRAY und schreibe diesen direkt an die SFC. Alles andere erledigt Step7 für dich.

    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  4. #24
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    Zitat Zitat von godi Beitrag anzeigen
    Hallo!

    #Begleitwert ist dein Any Zeiger?
    Liegt der im Temp bereich bei Adresse 0.0?
    ja, steht ganz oben wo der Any Zeiger gebaut wird darunter als Kommentar...
    Zitat Zitat von godi
    Wo wird die Variable #DI_Nummer beschrieben?
    Ist ein IN Parameter (INT) und wird am OB als Zahl drangeschrieben -> kann sicherlich durch DINO ersetzt werden...
    Zitat Zitat von godi
    Gibt Ret_Val von deinen SFC aufrufen einen Wert zurück?

    godi
    nix fehlerhaftes zumindest

    Zitat Zitat von Onkel Dagobert
    Deine Begleitwerte liegen in den Lokaldaten? Wie sieht die Deklaration aus? Ich denke, du musst garkeinen Pointer basteln. Deklariere deine Begleitwerte als STRUCT oder als ARRAY und schreibe diesen direkt an die SFC. Alles andere erledigt Step7 für dich.
    Die Begleitwerte liegen im STAT -> darauf soll der Zeiger zeigen...

    Wenn das jetzt nicht geht werde ich sie aber in TEMP verschieben und einen normalen Pointer über die Länge aller 3 darauf setzen - das funktioniert. Wie das als Array geht weiss ich nicht, würde aber ziemlich sicher auch ohne gehen.

    Mir geht´s jetzt hauptsächlich noch darum zu wissen warum das jetzt nicht geht weil ich es vielleicht für was anderes noch brauchen kann.
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  5. #25
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Zitat Zitat von rs-plc-aa Beitrag anzeigen
    ja, steht ganz oben wo der Any Zeiger gebaut wird darunter als Kommentar...
    Habe damit gemeint ob die Variable Begleitwert (als Any) in der Deklaration im Temp bereich angelegt ist und ganz oben steht. Also mit Adresse 0.0 beginnt?
    Geändert von godi (25.04.2007 um 14:27 Uhr)

  6. #26
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    vom prinzip kann ich keinen fehler entdecken.
    mach mal nen scrennshot wenn der online bearbeitet wird (so ich ich das angehängt hatte.)
    eins von der bildung des any und eins vom aufruf der sfc17

    vor dem sfc aufruf füge vorher ein
    L LD 0
    L LW 4
    L LD 6
    nur um zu sehen ob da noch der zeiger stimmt.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  7. #27
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    Zitat Zitat von godi Beitrag anzeigen
    Habe damit gemeint ob die Variable Begleitwert in der Deklaration im Temp bereich angelegt ist und ganz oben steht. Also mit Adresse 0.0 beginnt?
    Ja -> Name: Begleitwerte ; Typ: Any ; Adresse: 0.0

    Die 3 eigentlichen Werte sind im STAT die einzigen Variablen. Der Zeiger soll also auf den Instanzdatenbaustein verweisen, und zwar auf Adresse 1170.0 und das ganze 12 Byte lang...

    Das mit dem Screenshot werde ich Nachreichen (geht jetzt im Moment nicht)
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  8. #28
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    komisch...
    Sollte eigentlich funktionieren

  9. #29
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    Ich mach heute wahrscheinlich keinen Abstecher mehr dort hin aber wahrscheinlich morgen.

    Dann schaue ich das alles im Status noch mal ganz genau an und füge mal noch Screenshots dazu.

    Jetzt weiß ich wenigstens daß nichts gravierendes sein kann.

    Danke schon mal...
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  10. #30
    Registriert seit
    06.10.2003
    Beiträge
    3.412
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von rs-plc-aa Beitrag anzeigen
    ..Jetzt weiß ich wenigstens daß nichts gravierendes sein kann..
    Da wäre ich mir nicht so sicher. Am meisten stört mich dass du in einem FB eine Nr. für einen Instanz-DB als Eingang anlegst und diesen dann in einem ANY weitergibst. Wahrscheinlich zeigt danach dein DI-Register nicht mehr auf den Instanz-DB des FB, sondern auf den, der als Eingangsparameter angegeben ist. Wenn du mit der DB-Nr. flexibel sein willst, musst du schon einen Global-DB verwenden. Widersprüchlich ist dies ohnehin, da ja die Daten, auf die zugegriffen werden sollen, in den temporären oder statischen Lokaldaten des FB stehen.

    Mach dir's nicht so schwer. Folgende Abbildung zeigt zwei Variablendeklarationen, mit denen du symbolisch einen ANY-Pointer übergeben kannst. Step7 generiert den passenden Pointer für dich, egal ob er auf die temorären oder statischen Lokaldaten zeigt. Probiert habe ich es nicht, aber generell sollte es so gehen.

    Vergib mir, falls ich falsch liege. Zum Testen habe ich momentan keine Zeit.

    Zitat Zitat von rs-plc-aa Beitrag anzeigen
    ..Dann schaue ich das alles im Status noch mal ganz genau an und füge mal noch Screenshots dazu..
    Achte dabei besonders auf die DB-Register! Unter Extras-Einstellung-AWL kannst du die Anzeige aktivieren.


    Gruß, Onkel
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Onkel Dagobert (25.04.2007 um 17:50 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 06.11.2009, 13:03
  2. Indirekter Bausteinaufruf
    Von Supervisor im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 03.12.2007, 11:47
  3. SCL - Indirekter Zugriff auf DB/AR1,2
    Von Floh im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 07.06.2006, 10:32
  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
  •