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

Ergebnis 1 bis 7 von 7

Thema: AG 100U CPU 95 - Datenabfrage über PG während des Programms

  1. #1
    Registriert seit
    11.07.2003
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    In einem Abstand von 10 Sekunden werden aus der AG die Datenbausteine DB2 und DB3 (jeweils 255 DW) ausgelesen (über TTY Konverter als RS232C)

    Während des Auslesens werden weiter die Eingänge abgefragt (Aufruf eines FB aus OB1 bis OB6 - sind halt 60 Eingänge) und bei positivem Flankenwechsel Daten vom DB2 nach DB3 kopiert und neue Daten in den DB2 geschrieben.

    Was genau passiert nun, wenn die Anfrage zum Senden des Datenbausteins über die PG kommt. Kann es sein, dass ich einen "halb aktualisierten" DB auslesen, oder wird der FB auf jeden Fall erst beendet, bevor der DB gesendet wird?

    Gruß,
    Stefan
    Zitieren Zitieren AG 100U CPU 95 - Datenabfrage über PG während des Programms  

  2. #2
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Abfragen über die PG-Schnittstelle sind asynchron. Du kannst also einen teilaktualisierten DB bekommen.
    Mögliche Abhilfe:
    Im SPS-Programm Daten in einen weiteren DB kopieren, aber nur falls ein bestimmter Merker 0 ist.
    Dann diesen Merker setzen.
    Im abfragenden Programm zuerst diesen Merker abfragen. Wenn gesetzt, Daten lesen und danach Merker löschen.

  3. #3
    Registriert seit
    11.07.2003
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Bleibt nun noch die Frage, wie ich den DB (komplett) am effektivsten kopiere?

  4. #4
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Du kopierst ja schon nach DB3. Also wirst Du auch in einen weiteren DB kopieren können.

    Aber besser wäre es vielleicht, das weirtere Kopieren zu vermeiden. Dazu verwendest Du abwechselnd den DB3 und
    einen weiteren neuen DB(4?). Jetzt brauchst Du zwei Merker, wie ich es vorher beschrieben habe.

    Zyklus 1
    SPS kopiert nach DB3 und setzt Merker 1.
    PC liest Daten aus DB3 und löscht Merker 1
    Zyklus 2
    SPS kopiert nach DB4 und setzt Merker 2.
    PC liest Daten aus DB3 und löscht Merker 2

    Die SPS verwendet also den DB, dessen zugehöriger Merker gelöscht ist. (Neues?) Problem: wenn die Daten nicht abgeholt werden, kann die SPS nicht mehr kopieren. Aber das bedeutet, das die Abfrage zu langsam ist und hätte auch bei der bisherigen Lösung zu Datenverlust durch überschreiben des DB3 geführt.

    Nach obigem Muster kannst Du auch noch mehr Puffer verwenden.
    Das kann dann sinnvoll sein, wenn der reine Transfer schnell genug ist, der PC aber zwischen 2 Abfragen was anderes tut oder Windoofs über das Rendern von true type fonts meditiert.

  5. #5
    Registriert seit
    11.07.2003
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das Problem ist, dass ich nur dann 4 DWs von DB2 nach DB3 kopieren, wenn eine pos. Flanke am entsprechenden Eingang vorliegt. Das heisst, bei jedem bestimmten Eingang werden dann die zugeordneten 4 DWs von DB2 nach DB3 kopiert. Abgeholt werden müssen aber immer zwei vollständige DBs. Also fände ich die Lösung mit dem Kopieren des DB2 in DB6 und des DB3 und DB7 unter Beachtung eines "Auslesemerkers" recht gelungen.

    Nur,wie kann man eine kompletten DB am schnellsten in einen anderen Kopieren? Schleife oder fest jeden DW ansprechen? Ich bekomme es leider mit der Schleife nicht hin

    Vielleicht hast Du ja einen Tipp für mich?

  6. #6
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Sonst ist Schleife kürzer und viele L ade/T ransfer-Anweisungen sind länger und schneller, weil kein Schleifenzähler bearbeitet wird.
    Ich erinnere mich gerade nicht ob es einen System FB zum Blockkopieren gab. Der könnte schneller sein, weil er sonst unzugängliche Mechanismen der Firm- oder Hardware nutzt.

    Das absolut schnellste ist wiederum, den DB NICHT zu kopieren.
    Ich denke Du hast einen FBx, der das kopieren von DB2 nach 3 macht und der sieht vielleicht so aus:


    UN M1.0 // keine positive Flanke
    SPB nix_kopie
    A DB 2
    L DW 1
    A DB3
    T DW1

    A DB 2
    L DW 2
    A DB3
    T DW2
    ...
    nix_kopie: NOP 0


    Wenn Du ihn so umschreibst:

    UN M1.0 // keine positive Flanke
    SPB nix_kopie
    A DB 2
    L DW 1
    T MW100 // Schmiermerker
    L DW 2
    T MW102
    ...
    A DB 3
    L MW 100
    T DW1
    L MW 100
    T DW2
    nix_kopie: NOP 0
    gibt es nur noch zwei Stellen, wo A DB x aufgerufen wird

    Wenn Du ihn weiter umschreibst:

    UN M1.0 // keine positive Flanke
    SPB nix_kopie
    A DB 2
    L DW 1
    T MW100 // Schmiermerker
    L DW 2
    T MW102
    ...

    U M 3.3 // DB3 nicht verfügbar
    SPB bloss_nicht_DB3
    A DB 3
    SPA kann_losgehen

    bloss_nicht_DB3: NOP 0
    U M 3.4 // DB13 nicht verfügbar
    SPB bloss_nicht_DB13
    A DB 13
    SPA kann_losgehen

    SPB bloss_nicht_DB13: NOP 0
    BEA // kein Puffer verfügbar, Datenverlust!

    kann_losgehen: NOP 0
    L MW 100
    T DW1
    L MW 100
    T DW2
    nix_kopie: NOP 0

    wird DB3 oder DB13 benutzt. Der andere kann in der Zwischenzeit
    ausgelesen werden.

    Wenn Du aber unbedingt immer nach DB3 schreiben must weil Du ihn noch woanders brauchst, hier eine weitere Variante. DB3 wird nicht mehr abgefragt, statt dessen abwechselnd DB13 und DB23:

    UN M1.0 // keine positive Flanke
    SPB nix_kopie
    A DB 2
    L DW 1
    T MW100 // Schmiermerker
    L DW 2
    T MW102

    A DB 3
    L MW100
    T DW1
    ...
    // nun sind Deine Daten im DB3
    //
    U M 3.3 // DB13 nicht verfügbar
    SPB bloss_nicht_DB13
    A DB 13
    SPA kann_losgehen

    bloss_nicht_DB13: NOP 0
    U M 3.4 // DB23 nicht verfügbar
    SPB bloss_nicht_DB23
    A DB 23
    SPA kann_losgehen

    SPB bloss_nicht_DB23: NOP 0
    BEA // kein Puffer verfügbar, Datenverlust!

    kann_losgehen: NOP 0
    L MW 100
    T DW1
    L MW 100
    T DW2
    nix_kopie: NOP 0

    jetzt enthält DB13 oder DB23 die aktuelle Kopie von DB3.

  7. #7
    Registriert seit
    11.07.2003
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke. Hat geholfen. Habe ein Kombinationen von beiden Varianten genommen!

    Gruß,
    Stefan

Ähnliche Themen

  1. erklären eines Programms
    Von woseitsihr im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 01.07.2010, 15:42
  2. Simulation eines S7 Programms
    Von DerPraktikant im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 09.12.2008, 10:03
  3. Profibus-DP auf RS232 Gateway/Link Datenabfrage
    Von mclear im Forum Feldbusse
    Antworten: 2
    Letzter Beitrag: 13.12.2007, 21:00
  4. Fernwarten und Datenabfrage über CP343-1
    Von Waelder im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 26.11.2007, 17:56
  5. Archivierung eines S7 Programms
    Von 1schilcher im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 09.03.2007, 08:15

Lesezeichen

Berechtigungen

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