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

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

Thema: SFC 14 "DPRD_DAT" mehrmals aufrufen

  1. #1
    Registriert seit
    18.04.2008
    Beiträge
    27
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    Zugriff über Profibus auf FU-Daten:
    In einem multiinstanz-FB(FBx) rufe ich SFC14 und SFC 15 auf , in diesem FB arbeite ich auch mit AR1, und AR2. Die ARs werden am Anfang gerettet und im letzten Netwerk wieder geladen.

    In einem übergeordneten FB instanziere ich FBx mehrmals.
    Die Instanzen rufe ich dann auf, so das SFC 14 und SFC 15 mehrmals hintereinander aufgerufen werden.

    Nun zu meinem Problem: Beim übergeben der ausglesenen Werte stehen überall, d.h. in jeder Instanz die gleichen Werte(STAT-Variablen), obwohl ich mit SFC 15 andere jeweils Parameter anfordere.
    Rufe ich allerdings nur eine Instanz auf, wird immer der jeweils richtige geliefert.
    Gibt es vielleicht ein Zeitproblem?
    Darf man SFC14 und SFC15 die auf den gleichen PEW/PAB-Bereich zeigen mehrmals hintereinander aufrufen?
    Gibts da eventuell Probleme mit dem AR1 und AR2?. Muss ich die ARs auch vor den SFC-Aufrufen retten?

    Wäre für Tipps sehr dankbar.
    Zitieren Zitieren SFC 14 "DPRD_DAT" mehrmals aufrufen  

  2. #2
    Registriert seit
    22.01.2008
    Ort
    Allgäu, da wo die Kühe schöner sind als die Mädels
    Beiträge
    1.775
    Danke
    51
    Erhielt 731 Danke für 436 Beiträge

    Standard

    Hallo
    Stell doch mal Dein Programm ins Forum.
    So pauschal Aussagen zu treffen ist sehr schwierig

    Gruss
    Audsuperuser
    Gruss Audsuperuser

    Herzlich Willkommen im Chat:
    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  3. #3
    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!

    Wenn du mit dem AR2 arbeitest benützt du dann in diesem Baustein auch noch Variablen?
    Dann müßtest du bevor du eine Variable aus dem Deklarationsbereich verwendest das AR2 zurücksichern.

    godi

  4. #4
    Immer_1 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.04.2008
    Beiträge
    27
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo,

    In FBx(multiinstanziert)
    benutze ich z.B. folgende Anweisungen

    Var1: OUT (INT)
    Var2: out (INT)

    In_BOOL: IN(Bool)
    Steuer_B: STAT(Byte)
    Status_HB: STAT(Byte)
    Status_LB: STAT(Byte)
    TempAr1 : Temp(DWORD)
    TempAr2 : Temp(DWORD)

    Code:

    erstes NW n:
    TAR1 #TempAr1 // Adressregister 1 retten
    TAR2 #TempAr2 // Adressregister 2 retten

    NW n+1:
    LAR1 P##Steuer_B
    TAR2 //Adressoffset in Akku1
    +AR1 //Bereichskennung wird nicht verändert

    U In_BOOL
    = DIX [AR1,P#0.4]

    NW n+2:
    CALL SFC 15 /schreiben
    übergebe in SFC 15 Steuer_B

    NW n+3:
    CALL SFC 14 /lesen
    Werte in Status_LB, Status_HB eingelesen

    NW n+4:
    LAR1 P##Var1
    TAR2 //Adressoffset in Akku1
    +AR1 //Bereichskennung wird nicht verändert

    L Status_LB
    T DIB [AR1,P#0.0]
    L Status_HB
    T DIB [AR1,P#1.0]

    letztes NW:
    LAR2 #TempAr2 // Adressregister 2 wiederherstellen
    LAR1 #TempAr1 // Adressregister 1 wiederherstellen


    In Übergeordnete FB
    Def:
    Instanz1: FBx
    Instanz2: FBx

    Code:
    CALL Instanz1(Steuer_B = 2)
    CALL Instanz2(Steuer_B = 4)

    Instanz1.Var1 = 23
    Instanz2.Var1 = 23

    In beiden Instanzen steht der gleiche Wert. Warum?
    Wenn man nur eine Instanz aufruft sind die Werte unterschiedlich.

    Ich hoffe das jetzt alles klar ist.
    Die Anweisungen sind mehr symbolisch zu verstehen.

    Danke im voraus.

    Immer_1, immer high

  5. #5
    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 Immer_1 Beitrag anzeigen
    NW n+4:
    LAR1 P##Var1
    TAR2 //Adressoffset in Akku1
    +AR1 //Bereichskennung wird nicht verändert

    L Status_LB
    T DIB [AR1,P#0.0]
    L Status_HB
    T DIB [AR1,P#1.0]
    Warum rechnest du da das AR2 in das AR1 hinzu?

    Ich schätze mal das du mit Status_LB und Status_HB das Var1 beschreiben willst.
    Da würde genügen:
    Code:
    LAR1    P##VAR1
    L Status_LB
    T [AR1,P#0.0] 
    L Status_HB
    T [AR1,P#1.0]
    godi

  6. #6
    Immer_1 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.04.2008
    Beiträge
    27
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo,

    In Übergeordnete FB
    Def:
    Instanz1: FBx
    Instanz2: FBx

    Mit AR2 addiere ich die Adresse von der Instanz als Versatz hinzu.

  7. Folgender Benutzer sagt Danke zu Immer_1 für den nützlichen Beitrag:

    godi (27.04.2008)

  8. #7
    Registriert seit
    22.05.2005
    Ort
    sonniges Maifeld
    Beiträge
    1.067
    Danke
    77
    Erhielt 205 Danke für 159 Beiträge

    Standard

    Das Problem wird an der Verwendung des AR2 liegen.

    Das AR2- und das DI-Register dienen als Basisadressregister für die Adressierung aller Parameter und der STAT-Variablen innerhalb eines FB.

    Wenn AR2 oder DI innerhalb eines FBs vom Anwender überschrieben werden, darf danach ohne eine Restaurierung der beiden Register kein Zugriff auf FB-eigene Parameter der STAT-Variablen erfolgen.
    "Man kann auf seinem Standpunkt stehen, aber man sollte nicht darauf sitzen" - Erich Kästner

  9. #8
    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 Immer_1 Beitrag anzeigen
    Hallo,

    In Übergeordnete FB
    Def:
    Instanz1: FBx
    Instanz2: FBx

    Mit AR2 addiere ich die Adresse von der Instanz als Versatz hinzu.
    OK da habe ich jetzt zu wenig aufgepasst da es ja eine Multiinstanz ist.

    godi

  10. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.265
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Also ich hab dein Vorgehen noch nicht ganz verstanden.

    Bezieht ich das Folgende:

    Darf man SFC14 und SFC15 die auf den gleichen PEW/PAB-Bereich zeigen mehrmals hintereinander aufrufen?
    Gibts da eventuell Probleme mit dem AR1 und AR2?. Muss ich die ARs auch vor den SFC-Aufrufen retten?
    auf einen FB-Aufruf, oder greifst du in jedem FB auf die selbe Adresse zu?

    In jedem Fall wird es einige SPS-Zyklen dauern, bis nach deinem Schreibauftrag mit SFC15 eine Antwort von deinem Slave mit SFC14 ausgelesen werden kann. (der muß ja erst mal den Auftrag bearbeiten) Dazwischen kannst du sicher keinen Auftrag mehr an die selbe Adresse überstellen, denke ich mal. Also sollte normalerweise nach dem Auftrag, Parameter XY auszulesen, irgendeine Möglichkeit bestehen zu erkennen, daß auch der richtige Parameter mit SFC14 gelesen wurde. Übergibt der Slave dazu keine eindeutige Kennung bleibt nur die Wertänderung des einglesenen Wertes oder noch schlechter, eine feste Wartezeit, bis zum Einlesen des Wertes.

    Was auf jeden Fall gehen sollte, ist mit 2 FB aus 2 Slaves Werte auslesen, da diese ja unterschiedliche Adressen belegen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  11. #10
    Immer_1 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.04.2008
    Beiträge
    27
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn AR2 oder DI innerhalb eines FBs vom Anwender überschrieben werden, darf danach ohne eine Restaurierung der beiden Register kein Zugriff auf FB-eigene Parameter der STAT-Variablen erfolgen.[/quote]

    Wie rettet/restauriert man DI-Register ?

    mit den FB-Instanzen greife ich auf die PEB/PAB-Adressen nur mit unterschiedlichen Parametern für die Abfragen aus dem FU.

    Der FU(Slave) meldet zwar Wert gelesen z.B. Status ="5", aber der Status ="5" bleibt gesetzt, solange sich der Zustand nicht ändert.
    Ich Plane jetzt alle 200ms jeweils nur eine Instanz zu aktivieren, so dass die PEB,PAB-Bereiche eindeutige Werte liefern.
    Das werde ich mal Morgen an der Anlage testen.

    Danke für die Tipps!

Ähnliche Themen

  1. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  2. Antworten: 5
    Letzter Beitrag: 25.02.2011, 14:30
  3. Antworten: 16
    Letzter Beitrag: 21.06.2008, 12:44
  4. Antworten: 2
    Letzter Beitrag: 14.12.2007, 15:09
  5. Antworten: 4
    Letzter Beitrag: 29.11.2006, 08:59

Lesezeichen

Berechtigungen

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