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

Ergebnis 1 bis 5 von 5

Thema: LibNoDave Zugriffsart vs. Performance

  1. #1
    Registriert seit
    21.07.2009
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen!

    Ich verwende die libnodave komponente (btw: Danke an den Programmierer!) zum Auslesen der Ein- und Ausgänge an einer S7 300 SPS in ein Delphi-Programm, gekoppelt über USB-MPI-Adapter. Momentan funktioniert das so:
    Eine Timer-Komponente liest alle 500ms entweder die "daveInputs" oder die "daveOutputs" aus. Gleichzeitig geht das aber leider nicht, falls doch wie?

    Es wär schön, wenn ich die Daten etwas schneller bereit gestellt bekomme. Das Heruntersetzten des Timer-Intervalls führt aber zu Problemen (NoDave-Komponente schaltet nicht rechtzeitig die Area um und liest die Inputs als Outputs oder umgekehrt). Welche Vorgehensweise schlagt ihr zur Beschleunigung vor?

    Und noch eine weitere Frage: Ist es möglich die Eingänge der SPS auf true oder false zu setzen? Bisher ist mir das nur bei den Ausgängen gelungen.

    Vielen Dank im Voraus,
    benwen
    Zitieren Zitieren LibNoDave Zugriffsart vs. Performance  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Wie macht die Timerkomponente das denn?
    Normalerweise sollte die nur das lesen anstoßen und dann werden die Daten über das OnRead-Ereignis der libnodave-Komponente angenommen. Erst danach sollte man erneut ein Lesen anstoßen, vorher das Area umschalten. Im Prinzip ist dazu kein Timer nötig, dann kann man dann frei hintereinander weg machen.
    Du könntest mal versuchen 2 Komponenten zu erzeugen, eine für die E eine für die A.
    Ich weiß nicht, ob Eingänge schreiben gar nicht geht oder ob du es bloß nicht siehst, denn die SPS liest ja das Prozessabbild ein und "zerstört" somit seine geschriebenen Eingänge.
    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

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

    Standard

    Zitat Zitat von benwen Beitrag anzeigen
    ...entweder die "daveInputs" oder die "daveOutputs" aus. Gleichzeitig geht das aber leider nicht, falls doch wie?
    Variablen aus mehreren Speicherbereichen lassen sich durchaus mit einer Anfrage lesen. Die Komponente unterstützt das nicht, aber nodave.pas schon:
    davePrepareReadRequest(dc, @einePDU);
    daveAddVarToReadRequest(@einePDU, daveInputs, 0, startAdresse, zahlBytes);
    daveAddVarToReadRequest(@einePDU, daveOutputs, 0, startAdresse, zahlBytes);
    daveExecReadRequest(dc, @einePDU, daveOutputs, @einResultSet);

    Anschließend müssen die Ergebnisse aus dem ResultSet geholt werden. Die Beispielprogramme testMPI.c oder testISO_TCP.c enthalten ein Beispiel. Alle Variablen zusammen müssen in eine Antwort-PDU passen.

    Zitat Zitat von benwen Beitrag anzeigen
    Und noch eine weitere Frage: Ist es möglich die Eingänge der SPS auf true oder false zu setzen?
    Ja, aber nur wenn keine Eingangsmodule auf diesen Adressen vorhanden sind, sonst werden die Werte vor Zyklusbeginn überschrieben. Es ist ähnlich wie im Step7-Programm: Du kannst E20.0 wie einen Merker verwenden, wenn kein Eingangsmodul EB20 nutzt.

  4. #4
    benwen ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.07.2009
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Wie macht die Timerkomponente das denn?
    Normalerweise sollte die nur das lesen anstoßen und dann werden die Daten über das OnRead-Ereignis der libnodave-Komponente angenommen. Erst danach sollte man erneut ein Lesen anstoßen, vorher das Area umschalten. Im Prinzip ist dazu kein Timer nötig, dann kann man dann frei hintereinander weg machen.
    Ja das ist genau das Problem, das Area-Umschalten geht zu langsam. Mit dem Timer lese ich abwechselnd die Inputs oder Outputs (bisher mit GetBit, also bitweise, liegt dort das Problem?). Sobald ich mit der Timer-Komponente unter 500 ms gehe, treten wieder die beschriebenen Probleme auf.

    Zitat Zitat von Ralle Beitrag anzeigen
    Du könntest mal versuchen 2 Komponenten zu erzeugen, eine für die E eine für die A.
    Das hatte ich schon versucht, klappt leider nicht so ganz.

    Zitat Zitat von Zottel Beitrag anzeigen
    Variablen aus mehreren Speicherbereichen lassen sich durchaus mit einer Anfrage lesen. Die Komponente unterstützt das nicht, aber nodave.pas schon:
    davePrepareReadRequest(dc, @einePDU);
    daveAddVarToReadRequest(@einePDU, daveInputs, 0, startAdresse, zahlBytes);
    daveAddVarToReadRequest(@einePDU, daveOutputs, 0, startAdresse, zahlBytes);
    daveExecReadRequest(dc, @einePDU, daveOutputs, @einResultSet);

    Anschließend müssen die Ergebnisse aus dem ResultSet geholt werden. Die Beispielprogramme testMPI.c oder testISO_TCP.c enthalten ein Beispiel. Alle Variablen zusammen müssen in eine Antwort-PDU passen.
    Danke, dann werde ich die Komponenten bei Gelegenheit mal erweitern.


    Zitat Zitat von Zottel Beitrag anzeigen
    Ja, aber nur wenn keine Eingangsmodule auf diesen Adressen vorhanden sind, sonst werden die Werte vor Zyklusbeginn überschrieben. Es ist ähnlich wie im Step7-Programm: Du kannst E20.0 wie einen Merker verwenden, wenn kein Eingangsmodul EB20 nutzt.
    Ok, also forcen geht nicht über nodave!?

    Grüße benwen
    Zitieren Zitieren Danke!  

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von benwen Beitrag anzeigen
    Ja das ist genau das Problem, das Area-Umschalten geht zu langsam. Mit dem Timer lese ich abwechselnd die Inputs oder Outputs (bisher mit GetBit, also bitweise, liegt dort das Problem?). Sobald ich mit der Timer-Komponente unter 500 ms gehe, treten wieder die beschriebenen Probleme auf.
    Nochmal dazu, du solltest das OnRead-Ereignis benutzen. Danach erst Area umschalten, Lesen starten, wieder auf OnRead warten. Der Timer liest sonstwas bzw. ale Daten, wenn du den zu kurz einstellst, das ist ja klar, erst das OnRead-Ereignis zeigt dir an, daß die Daten da sind.
    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

Ähnliche Themen

  1. libnodave Java Performance
    Von asalmut im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.10.2015, 20:36
  2. SIL und Performance Level
    Von Earny im Forum PC- und Netzwerktechnik
    Antworten: 6
    Letzter Beitrag: 16.12.2009, 20:36
  3. Performance PC mit Runtime
    Von wasduwolle im Forum HMI
    Antworten: 9
    Letzter Beitrag: 01.04.2009, 15:21
  4. Libnodave - Performance
    Von muharrr im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 13.03.2006, 14:04
  5. Performance mit Libnodave
    Von Speedy im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 01.09.2005, 14:46

Lesezeichen

Berechtigungen

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