b.weyand85
Level-2
- Beiträge
- 35
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
SFC14 und 15 in SCL in einem Zyklus laufen lassen
Bei einem DP-Slave möchte ich mittels dem SFC15 Daten an ein Slave via Profinet senden und mit SFC14 einlesen. Eigentlich wollte ich, dass Schreiben und Lesen direkt nacheinander ausgeführt werden und die entsprechenden Daten in einem DB gespeichert werden sollen.
Mein Problem hierbei ist, dass wenn ich beides hintereinander ausführe (also S_CMD) drücke, dann schreibt er mir die gelesenen Daten erst beim zweiten Betätigen dieses Taster in den DB. Mache ich dies hingegen einzeln (erst S_SCHREIBEN und dann S_LESEN drücken), dann schreibt er die Daten beim drücken von S_LESEN in den Datenbaustein.
Kann mir mal jemand erklären warum dies mit dem direkt hintereinander nicht funktioniert? Liegt das vielleicht daran, dass diese zu schnell hintereinander ausgeführt werden und dies bei der einzelnen Betätigung funktioniert weil dann ein zweiter Zyklus begonnen hat?
Gibt es eine Lösung, das beide hintereinander ausgeführt werden?
Bei einem DP-Slave möchte ich mittels dem SFC15 Daten an ein Slave via Profinet senden und mit SFC14 einlesen. Eigentlich wollte ich, dass Schreiben und Lesen direkt nacheinander ausgeführt werden und die entsprechenden Daten in einem DB gespeichert werden sollen.
Mein Problem hierbei ist, dass wenn ich beides hintereinander ausführe (also S_CMD) drücke, dann schreibt er mir die gelesenen Daten erst beim zweiten Betätigen dieses Taster in den DB. Mache ich dies hingegen einzeln (erst S_SCHREIBEN und dann S_LESEN drücken), dann schreibt er die Daten beim drücken von S_LESEN in den Datenbaustein.
Kann mir mal jemand erklären warum dies mit dem direkt hintereinander nicht funktioniert? Liegt das vielleicht daran, dass diese zu schnell hintereinander ausgeführt werden und dies bei der einzelnen Betätigung funktioniert weil dann ein zweiter Zyklus begonnen hat?
Gibt es eine Lösung, das beide hintereinander ausgeführt werden?
Code:
IF S_CMD = TRUE THEN
STROBEID_SPS := STROBEID_SPS+1;
DB1.DBB42 := INT_TO_BYTE(STROBEID_SPS);
Error1 := Schreiben_SFC15();
Error2 := Lesen_SFC14();
DB2.DBX0.0 := FALSE;
END_IF;
IF S_LESEN = TRUE THEN
Error2 := Lesen_SFC14();
DB2.DBX0.4 := FALSE;
END_IF;
IF S_SCHREIBEN = TRUE THEN
STROBEID_SPS := STROBEID_SPS+1;
DB1.DBB42 := INT_TO_BYTE(STROBEID_SPS);
Error1 := Schreiben_SFC15();
DB2.DBX0.3 := FALSE;
END_IF;
Zuletzt bearbeitet: