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

Results 1 to 7 of 7

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

  1. #1
    Join Date
    11.07.2003
    Posts
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


    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
    Reply With Quote Reply With Quote AG 100U CPU 95 - Datenabfrage über PG während des Programms  

  2. #2
    Join Date
    19.06.2003
    Posts
    2,205
    Danke
    85
    Erhielt 271 Danke für 179 Beiträge

    Default

    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
    Join Date
    11.07.2003
    Posts
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

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

  4. #4
    Join Date
    19.06.2003
    Posts
    2,205
    Danke
    85
    Erhielt 271 Danke für 179 Beiträge

    Default

    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
    Join Date
    11.07.2003
    Posts
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default

    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
    Join Date
    19.06.2003
    Posts
    2,205
    Danke
    85
    Erhielt 271 Danke für 179 Beiträge

    Default

    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
    Join Date
    11.07.2003
    Posts
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


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

    Gruß,
    Stefan

Similar Threads

  1. erklären eines Programms
    By woseitsihr in forum Programmierstrategien
    Replies: 2
    Last Post: 01.07.2010, 15:42
  2. Simulation eines S7 Programms
    By DerPraktikant in forum Simatic
    Replies: 6
    Last Post: 09.12.2008, 10:03
  3. Replies: 2
    Last Post: 13.12.2007, 21:00
  4. Fernwarten und Datenabfrage über CP343-1
    By Waelder in forum Simatic
    Replies: 2
    Last Post: 26.11.2007, 17:56
  5. Archivierung eines S7 Programms
    By 1schilcher in forum Simatic
    Replies: 6
    Last Post: 09.03.2007, 08:15

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
  •