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

Ergebnis 1 bis 5 von 5

Thema: Mehrere Prozesse greifen auf der selben Datei zu

  1. #1
    Registriert seit
    04.07.2014
    Beiträge
    18
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich möchte von mehreren Task auf eine Datei zugreifen. Wie kann ich das am besten machen. Bin für jede Antwort sehr dankbar.
    es geht um einem Wago-Controller 750-880 und Codesys 2.3

    Die Datei habe in einem Programmbaustein implementiert und den ruf ich in andere Tasks auf, Leider irgendwann ist kein Zugriff auf die Datei möglich, da vllt gleichzeitig auf die Datei zugegriffen wird!

    Gruß
    Lawkan
    Zitieren Zitieren Mehrere Prozesse greifen auf der selben Datei zu  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    ich würde mir ein Bit setzen, sobald der Zugriff aktiv ist und es wieder löschen wenn beendet.
    Jede der Routinen, die auf die Datei zugreift fragt immer zuerst ab, ob das Bit gesetzt ist - hat einer es gesetzt kann der Nächste nicht mehr an die Datei. So in etwa ...

    Gruß
    Larry

  3. #3
    lawkan ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.07.2014
    Beiträge
    18
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Larry,
    Danke erstmal für deine Antwort.
    Das hab ich schon probiert, Deswegen soll ich hier noch erwähnen dass ich noch zwei andere Dateien erstelle.
    Also jetzt mal bissel ausführlicher und detaillierter:
    Es ist so dass ich zwei Archivdateien erstelle, der M-Archiv ist jedes mal erstellt wenn eine Änderung eines Bitzustands vorkommt, und der MG-Archiv wird jede Viertelstunde erstellt.
    Soweit so gut. Dann kommt jetzt die Debug-Datei, die im Moment Probleme macht. Also die Debug-Datei wird jedes mal aufgerufen wenn ein bestimmter Programmteil bzw -schritt abgearbeitet wird. Da habe ich ein bit gesetzt, wie du gemeint hast, und wieder gelöscht wenn die Datei geschlossen wird. Aber die Datei kann irgendwann nicht geschlossen wird (wegen ein anderer Zugriff von einem anderen Task oder ein Befehl zum öffnen eine andere Datei vermute ich) und da kann der gesetzte Bit nicht mehr gelöscht werden und somit hängt es.

    ich hoffe damit habe ich das Problem noch mehr klar beschrieben, und hoffe auf noch mehr Ideen. Danke

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Zitat Zitat von lawkan Beitrag anzeigen
    Aber die Datei kann irgendwann nicht geschlossen wird (wegen ein anderer Zugriff von einem anderen Task oder ein Befehl zum öffnen eine andere Datei vermute ich) und da kann der gesetzte Bit nicht mehr gelöscht werden und somit hängt es.
    Naja ... ich meinte ja auch, dass du diesen anderen Zugriff dann auch sperren sollst (mit dem gleiche Bit).
    Im Prinzip so : hat einer eine Arbeit angefangen so dürfen alle anderen (Tasks , Threads) nicht die gleiche Arbeit machen bis der Eine (!!!) seine Arbeit abgeschlossen hat ...

  5. #5
    lawkan ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.07.2014
    Beiträge
    18
    Danke
    7
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ja okay.
    Also hier ist der Code wie ich das realisiert habe:

    IF Debug_aktiv AND (NOT Debug_Freigabe) THEN
    Debug_Freigabe := TRUE;
    sZeit := REPLACE(DELETE(DT_TO_STRING(SysRtcGetTime(TRUE)),3,1),' ',1,11);
    Write_to_Logfile(
    DataString:= CONCAT(sZeit,' Task PLC_MW: Mittelwert-Erfassung.$R$N'),
    sStatus=> LogFile_sStatus,
    xStatus=> LogFile_xStatus);
    IF LogFile_xStatus THEN
    Debug_Freigabe := FALSE;
    END_IF
    END_IF

    und so in jedem Task den gleichen Code eingefügt wo ich den Schritt erfassen will.

    Deklaration ist folgendermaßen:
    Debug_aktiv : bool ==> globale Variable um die Debugfunktion ein/ausschlaten
    Debug_Freigabe : bool ==> globale Var um andere Zugriff zu sperren
    Write_to_Logfile : PRG ==> Programmbaustein wo die Filezugriffe durchgeführt werden (also FileOpen, FileWrite, FileClose: FC von SysLibFile.lib)
    LogFile_xStatus : bool ==> ist TRUE wenn Datei geschlossen wurde, FALSE wenn nicht

Ähnliche Themen

  1. Dali, 880, 647 - Ansprache mehrere Lampen über selben Baustein
    Von Curby im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 30.01.2014, 11:16
  2. TIA Tia und Step7 v5.5 auf dem selben System?
    Von fk- princess im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 27.07.2013, 10:35
  3. Antworten: 5
    Letzter Beitrag: 22.02.2012, 12:35
  4. Antworten: 2
    Letzter Beitrag: 08.08.2011, 20:51
  5. Antworten: 3
    Letzter Beitrag: 06.03.2010, 08:35

Stichworte

Lesezeichen

Berechtigungen

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