"Busy" in Baustein einabuen

DjDonJuan

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe mal wieder eine Frage und zwar habe ich in MXPRo/ CoDeSys einen Funktions_Block programmiert. Leider benötigt, dieser mehrere Zyklen bis er komplett abgearbeitet ist. Nun möchte ich einen BOOL Wert Busy integrieren, der mir, sobald der FB aufgerufen wurde TRUE wird und erst wenn er alle Ergebnisse geliefert hat wieder auf FALSE geht.

So kann ich später bei der fallenden Flanke von Busy mein Hauptprogramm fortsetzen.

Anbei mal meinen Code:

fbTrigger(CLK:=bTrigger, Q=>bPosFlank ); (*positive Flankenerkennung *)
IF bPosFlank=TRUE THEN
sPath:= CONCAT(sPath,sFileName); (*Zusammenfügen Pfad und
Dateiname*)
dwAdress:=SysFileOpen(sPath,'r'); (*Durchsuchen des Pfades, ob
Datei vorhanden ist (Datei
wird geöffnet), falls nicht
Rückgabewert=0 *)
IF dwAdress= 0 THEN
bFileExists:=FALSE;
bFileNotExists:=TRUE;
speicher:=SysFileClose(dwAdress); (*Datei wird wieder geschlossen *)
ELSE
bFileExists:=TRUE;
bFileNotExists:=FALSE;
speicher:=SysFileClose(dwAdress); (*Datei wird wieder geschlossen *)
END_IF
END_IF


Danke schon mal für eure Mithilfe!

Gruß
 
Hallo zusammen,

ich habe mal wieder eine Frage und zwar habe ich in MXPRo/ CoDeSys einen Funktions_Block programmiert. Leider benötigt, dieser mehrere Zyklen bis er komplett abgearbeitet ist. Nun möchte ich einen BOOL Wert Busy integrieren, der mir, sobald der FB aufgerufen wurde TRUE wird und erst wenn er alle Ergebnisse geliefert hat wieder auf FALSE geht.

So kann ich später bei der fallenden Flanke von Busy mein Hauptprogramm fortsetzen.

Anbei mal meinen Code:

fbTrigger(CLK:=bTrigger, Q=>bPosFlank ); (*positive Flankenerkennung *)
IF bPosFlank=TRUE THEN
sPath:= CONCAT(sPath,sFileName); (*Zusammenfügen Pfad und
Dateiname*)
dwAdress:=SysFileOpen(sPath,'r'); (*Durchsuchen des Pfades, ob
Datei vorhanden ist (Datei
wird geöffnet), falls nicht
Rückgabewert=0 *)
IF dwAdress= 0 THEN
bFileExists:=FALSE;
bFileNotExists:=TRUE;
speicher:=SysFileClose(dwAdress); (*Datei wird wieder geschlossen *)
ELSE
bFileExists:=TRUE;
bFileNotExists:=FALSE;
speicher:=SysFileClose(dwAdress); (*Datei wird wieder geschlossen *)
END_IF
END_IF


Danke schon mal für eure Mithilfe!

Gruß

Ich kann nicht erkennen, dass der Codes mehrere Zyklen benötigt.
Auf jeden Fall brauchst du eine interne statische Variable im FB, "fbBusy", die dir den Zustand der Bearbeitung speichert und eine Out "busy", welche diesen Zustand dann nach außen meldet. Nach der Abfrage der Flanke "IF bPosFlank=TRUE THEN" setzt du fbBusy, Im Moment würde ich nach dem 1. END_IF fbBusy wieder zurücksetzen, aber das bringt hier nichts, wenn alles in einem Durchlauf erledigt wird. fbBusy würde nach außen nie True werden.
Wenn es wirklich so ist, dass mehrere Zyklen vergehen, bis die Aktion erledigt ist, muß es ja irgendwo eine Fertigmeldung geben, diese sollte dann fbBusy zurücksetzen. Ich kann nur sehen, dass dwAdress sofort 0 oder <> 0 abfragt und das Ergebnis setzt.

PS: Die Flanke am Anfang bedingt ja auch, dass der Code nur ein einziges Mal durchlaufen wird und zwar genau einen Zyklus lang.
 
Zuletzt bearbeitet:
Zurück
Oben