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

Ergebnis 1 bis 5 von 5

Thema: Beckhoff ADS Integritäts/RaceCondition/Timing-Fragen

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    in letzter Zeit sind im Rahmen meiner Stduienprojekte einige Fragen zum Thema Kommunikation SPS<->WinPC via ADS (genauer c++ via ads-dll zu CX9000) aufgekommen, auf die ich im Beckhoff InfoSys keine Antwort gefunden habe, trotz Durcharbeiten der kompletten ADS-Kapitel.
    Wie sind eure Erfahrungen zu den folgenden Fragen bzw. habt ihr Links zu entsprechendem Nachschlagewerk?
    -Wie wird die Datenintegrität beim synchronen Lesen z.B. mit adssyncread gehandhabt? kann es z.b. passieren dass während des Lesens eines großen Arrays das SPS-Programm Teile davon überschreibt? Synchrones lesen deutet an dass nicht, wie es aber genau umgesetzt ist habe ich nirgends gefunden. Bekommt man den Stand vom Zyklusanfang? Gleiches beim Schreiben via adssyncwrite: kann es passieren dass man Stellen überschreibt die das SPS-Programm gerade liest? Quellen wären super.
    -Wie viele Notifications kann die SPS pro Zyklus senden? Wenn ich den Modus auf onChange und die maxcycletime auf 0 setze, kann ich dann mehrere Notifications pro Zyklus auslösen oder nur einen am Ende des Zykluses? Habs mal aus Interesse ausprobiert, die Ergebnisse waren aber eher kryptisch. Manchmal kam eine Notification, mal zwei aber mit dem gleichen Wert obwohl eigentlich inkrementiert worden sein sollte, 3 Notifications hab ich bei 4ms Zykluszeit noch nie erhalten. Das Windows keine 4ms schafft weis ich, deshalb wurden nur auf Knopfdruck einen Zyklus lang 5 Notifications erzeugt. Bei einer Sekunde maxdelay sollte das also nicht das Problem sein.

    Für Hinweise wäre ich wirklich dankbar, Lösungen ohne wirkliche Funktionsgarantie liegen schwer im Magen.
    Danke im Voraus,
    viele Grüße
    Chili
    Zitieren Zitieren Beckhoff ADS Integritäts/RaceCondition/Timing-Fragen  

  2. #2
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Ich kenne das Problem nur aus anderen Systemen und wie es gelöst ist:

    Synchrones Lesen bezieht sich allein auf die Seite, die liest! Das heisst, der Leseauftrag blockiert die restliche Programmabarbeitung bis die Daten kommen oder ein Timeout eingetreten ist.

    Anders, beim async Lesen, Auftrag wird gegeben, dann etwas anderes getan und per Polling gelegentlich nachgesehen, ob die Antwort angekommen ist. Ggf. auch Behandlung in einem eigenen Thread bei Prozessoren mit mit mehreren Kernen.

    Das sagt aber nichts über den Partner aus, der die Daten abgefragt bekommt.

    Die Notifications sind total unberechenbar, sie kommen in der Regel aus einem eigenen Tread, der z.B. eine ObservableCollection überwacht.
    Als Freelancer immer auf der Suche nach interessanten Projekten.

  3. #3
    Chili ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.12.2014
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Gut, macht bei der Durchsicht der anderen Adapter Sinn, da existieren entsprechende async-Varianten der Funktionen.
    Meine Fragen sind dadurch aber leider immer noch nicht beantwortet.
    Wie wird RaceConditions denn nun vorgebeugt?
    Um Notifications überhaupt vernünftig einsetzen zu können müssen sie doh in irgend einer Art und Weise deterministisch sein, nur auf welche?

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Naja ...
    wenn du deine benötigten Variablen in einem Thread zyklisch abfragst, mit dem Vorgängerwert vergleichst und bei Änderung eine Notification (ein Event) erzeugst dann ist das doch (zumindestens bis dahin) noch deterministisch. Die Frage ist, ob und in wie weit dein Rest-Programm dann damit arbeitet bzw. ob du alle deine Variablen in der gedachten Laufzeit des Threads aktualisiert bekommst ...

    Gruß
    Larry

  5. #5
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Chili Beitrag anzeigen
    -Wie wird die Datenintegrität beim synchronen Lesen z.B. mit adssyncread gehandhabt? kann es z.b. passieren dass während des Lesens eines großen Arrays das SPS-Programm Teile davon überschreibt? Synchrones lesen deutet an dass nicht, wie es aber genau umgesetzt ist habe ich nirgends gefunden. Bekommt man den Stand vom Zyklusanfang? Gleiches beim Schreiben via adssyncwrite: kann es passieren dass man Stellen überschreibt die das SPS-Programm gerade liest? Quellen wären super.
    Hallo Chili,

    meines Wissens wird bei der PLC zuerst die Logik, bzw. das Programm abgearbeitet und erst danach die ADS Commands. Somit können also keine Race-Conditions oder dergleichen entstehen.

    Gruß, Neals

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 14.11.2013, 14:14
  2. ADS-Protokoll: Fragen zum Daten-Frame
    Von drfunfrock im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 13.05.2012, 00:11
  3. Einstieg in Beckhoff ADS
    Von entenhausen_dd im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 30.03.2011, 20:09
  4. Beckhoff - ADS.ocx
    Von phil87 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 29.09.2008, 23:04
  5. Beckhoff ADS-Protokoll
    Von drfunfrock im Forum Feldbusse
    Antworten: 5
    Letzter Beitrag: 01.07.2005, 17:01

Stichworte

Lesezeichen

Berechtigungen

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