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

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

Thema: Threadsafety in OB's

  1. #1
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mahlzeit

    Ich verwende 2 OB's für mein Programm, OB61 für die heiklen sachen, OB1 für den Rest.
    Leider ist das ganze nicht zu 100% Threadsafe programmiert, was natürlich alle paar Tage mal ein Problem aufwirft...

    --> Gibts es die Möglichkeit, einzelne Programmabschnitte (Funktionen) atomar, also nicht unterbrechbar zu machen?
    Zitieren Zitieren Threadsafety in OB's  

  2. #2
    Registriert seit
    15.12.2007
    Beiträge
    712
    Danke
    84
    Erhielt 105 Danke für 94 Beiträge

    Standard

    Also ich verstehe die Frage überhaupt nicht. Was für ein "Problem" entsteht denn alle paar Tage? Und was meinst du mit atomar bzw. nicht unterbrechbar?

  3. #3
    Registriert seit
    11.04.2008
    Ort
    Bayern
    Beiträge
    523
    Danke
    26
    Erhielt 67 Danke für 67 Beiträge

    Standard

    Was verstehst du unter heikle Sachen.
    Und welche Probleme?

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Hallo,
    ich verstehe die Anfrage so, dass die beiden Abläufe direkt nichts miteinander zu tun haben, jedoch auf die gleiche Perepherie (hier vor Allem schreibend) zugreifen. Da würde es dann passieren können, dass der eine Ablauf den Ausgang x abschaltet (was auch notwendig wäre) un der andere Ablauf ihn wieder einschaltet (weil es ihm gerade genehm wäre). Ist das so ?
    In dem Fall (so ganz pauschal) hättest du dein Programm selbst nicht Threadsicher erstellt und da würde ich ansetzen. Der Sinn der anderen OB's (neben dem OB1) ist es ja gerade, im Ereignisfall sofort anzuspringen (wie ein Interrupt).

    Aber vielleicht schreibst du ja noch etwas mehr dazu ...

    Gruß
    Larry

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Du kannst mit den entsprechenden Systemfunktionen Interrupts sperren und wieder freigeben (SFC 39, SFC 40).
    Aber wo tritt das Problem denn auf? Alle Zugriffe auf <= 4 Byte sind atomar. Für alles was größer ist kann man UBLKMOV anstelle BLKMOV verwenden.

  6. #6
    Chefmech ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Ich habe 2 Programmteile (OB1 und OB61), die Kommunikation läuft eigentlich im OB1.
    Nun verwenden aber beide OB's den selben Sendepuffer, da die Kommunikation im OB1 läuft, der OB61 aber auch Telegramme absetzen kann.

    --> Wenn jetzt die Funktion "WriteToSndBuf" im OB1 auf der falschen Zeile Unterbrochen wird und der OB61 dann die selbe Funktion aufruft, verhaut's mir den Sendepuffer.
    Ich müsste also die Funktion "WriteToSndBuf" ununterbrechbar machen, dann wär das Problem gelöst, ansonsten müsst ich da ziemlich aufwändig zusätzliche Kommunikationsmechanismen zwischen den beiden OB's aufbauen.

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Obwohl es (glaube ich) so in etwa ist, wie ich es angenommen habe ist es nicht so, dass ich deinen Ansatz wirklich verstehe.
    Warum muß der OB61 also auch senden ? Er könnte doch genauso auch einen Merker setzen (oder so), der dann das zyklische Programm veranlaßt, wenn es paßt zu senden, was zu senden ist ...

    Gruß
    Larry

  8. #8
    Chefmech ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Das wär natürlich der richtige Ansatz, das ganze so zu entkoppeln.
    Ein einzelner Merker reicht da nicht, das sind unterschiedliche Anzahl und Typen von Telgrammen, da muss ich mir dann ziemlich aufwändig einen Zwischenpuffer aufbauen.

  9. #9
    Registriert seit
    21.07.2008
    Beiträge
    1.066
    Danke
    51
    Erhielt 140 Danke für 136 Beiträge

    Standard

    Denke das wirst du aber leider nicht großartig umgehen können, alternativ wären komplett getrennte Funktionen fürs Senden mit getrennten Puffern. Wobei du beachten solltest, dass die Kommunikationsbausteine teilweise ja auch asynchron zum OB1 rennen, dafür gibts ja dann die Statusflags.

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Chefmech Beitrag anzeigen
    Das wär natürlich der richtige Ansatz, das ganze so zu entkoppeln.
    Ein einzelner Merker reicht da nicht, das sind unterschiedliche Anzahl und Typen von Telgrammen, da muss ich mir dann ziemlich aufwändig einen Zwischenpuffer aufbauen.
    Das wäre nicht der richtige sondern m.E. der einzige Ansatz, das sauber und fehlerfrei hinzubekommen. Denk vielleicht noch einmal drüber nach ...

Lesezeichen

Berechtigungen

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