Ich habe ein Problem mit der Uhrzeit. Ich möchte gern aus meiner Visu heraus die Uhrzeit des MFD4 Panels ändern. Dazu schreibe ich als Programm folgendes:
If Eingabezeit<>Eingabezeit_old THEN
SysRtcSetTime(Eingabezeit);
Eingabezeit_old:=Eingabezeit;
END_IF
Gebe auch in der Taskkonfig ne Task vor für 200ms. Aber wenn er darauf zugreift schmeißt mich das Panel aus dem Onlinemodus raus und das Panel hängt sich zudem noch weg.
Hat jemand einen Lösungsvorschlag für mich.
Danke im vorraus.
MFG Dennis[/code]
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
SysRtcSetTime() funktioniert eigentlich tadellos, allerdings sollte man beachten, dass intern noch der batteriegepufferte RTC-Baustein seriell programmiert wird. Das kann mehrere 100ms dauern.
Wenn Du mehrere SPS-Zyklen hintereinander diese Funktion aufrufst, kann es zu Deinem beschriebenen Fehlverhalten kommen.
Ich würde Dir raten, um den den Aufruf einen Timer zu setzen, sodass SysRtcSetTime() für mehrere 100ms nicht mehr aufgerufen wird. Das sollte das Problem lösen, vorausgesetzt, Du generierst den LONG-Wert für das Datum richtig.
Gruß
Klaus
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Wieso soll denn die Funktion mehrmals hintereinander aufgerufen werden, Taskzeit und Taskkonfiguration hin oder her?
Der Benutzer gibt eine neue Uhrzeit ein, diese landet in "Eingabezeit". Weil diese nicht mehr mit "Eingabezeit_old" übereinstimmt, wird die Bedingung wahr und die Funktion einmal aufgerufen, anschließend wird aber "Eingabezeit" nach "Eingabezeit_old" kopiert, das heißt im nächsten Programmdurchlauf ist die Bedingung nicht mehr wahr, auch wenn erst ein paar Millisekunden vergangen sind. Erst wenn der Benutzer mit der Eingabe schneller ist als die Funktion zum Stellen der Uhr braucht gibt es ein Problem.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo liebe Forumgemeinde
Ich habe ein Problem mit der Uhrzeit. Ich möchte gern aus meiner Visu heraus die Uhrzeit des MFD4 Panels ändern. Dazu schreibe ich als Programm folgendes:
If Eingabezeit<>Eingabezeit_old THEN
SysRtcSetTime(Eingabezeit);
Eingabezeit_old:=Eingabezeit;
END_IF
Gebe auch in der Taskkonfig ne Task vor für 200ms. Aber wenn er darauf zugreift schmeißt mich das Panel aus dem Onlinemodus raus und das Panel hängt sich zudem noch weg.
Hat jemand einen Lösungsvorschlag für mich.
Danke im vorraus.
MFG Dennis[/code]
Hallo Dennis,
SysRtcSetTime() funktioniert eigentlich tadellos, allerdings sollte man beachten, dass intern noch der batteriegepufferte RTC-Baustein seriell programmiert wird. Das kann mehrere 100ms dauern.
Wenn Du mehrere SPS-Zyklen hintereinander diese Funktion aufrufst, kann es zu Deinem beschriebenen Fehlverhalten kommen.
Ich würde Dir raten, um den den Aufruf einen Timer zu setzen, sodass SysRtcSetTime() für mehrere 100ms nicht mehr aufgerufen wird. Das sollte das Problem lösen, vorausgesetzt, Du generierst den LONG-Wert für das Datum richtig.
Gruß
Klaus
SysRtcSetTime() wird in obigem Programm nur einmalig nach Verändern vom Eingabewert aufgerufen.
Guten Morgen!
Ich will mal wieder etwas Licht ins dunkel bringen, bevor ihr hier aneinander vorbei redet:
Was der Softwerker geschrieben hat, wäre also schon ein möglich Fehlerquelle, allerdings konnte ich das bei meiner Hardware noch nicht beobachten...
Gruß
Wieso soll denn die Funktion mehrmals hintereinander aufgerufen werden, Taskzeit und Taskkonfiguration hin oder her?
Der Benutzer gibt eine neue Uhrzeit ein, diese landet in "Eingabezeit". Weil diese nicht mehr mit "Eingabezeit_old" übereinstimmt, wird die Bedingung wahr und die Funktion einmal aufgerufen, anschließend wird aber "Eingabezeit" nach "Eingabezeit_old" kopiert, das heißt im nächsten Programmdurchlauf ist die Bedingung nicht mehr wahr, auch wenn erst ein paar Millisekunden vergangen sind. Erst wenn der Benutzer mit der Eingabe schneller ist als die Funktion zum Stellen der Uhr braucht gibt es ein Problem.