Systemzeit auslesen

Steff3de

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bekomme beim Auslesen der Systemzeit mit Hilfe des FB's NT-GetTime (TwinCat PLC Library: Utilities) die Fehler ID 1861 (timeout elapsed) zurück. Das ganze hat aber bis heute funktioniert. Hat jemand ne Ahnung wie ich den Fehler weiter eingrenzen kann bzw. was das Problem sein könnte?

Es handelt sich bei der SPS um eine TwinCat Version 2.10 (Build 1313) unter Windows XP.

Gruß
Stefan
 
Code:
FUNCTION_BLOCK FB_TimeDate
VAR_INPUT
    Enable:BOOL;
END_VAR
VAR_OUTPUT
    MachineTime: DATE_AND_TIME;
END_VAR
VAR
    ntGetTime: NT_GetTime;
    ntTime:TIMESTRUCT;
    GetTimeStart: BOOL;
    fbRTC:RTC;
    TriggerTON: TON;
    TriggerClock: BOOL;
    TimeBusy: BOOL;
    OldTimeBusy: BOOL;
    GetTimeError: BOOL;
    StartUp:BOOL:=TRUE;
    TriggerStart: BOOL;
END_VAR

-------------------------------------------------------------------

IF Enable=TRUE THEN

    TriggerClock:=FALSE;
    IF TimeBusy=FALSE AND OldTimeBusy=TRUE THEN
        TriggerClock:=TRUE;
        StartUp:=FALSE;
    END_IF;
    OldTimeBusy:=TimeBusy;

    TriggerTON(IN:= NOT TriggerClock , PT:= T#5m, Q=> TriggerStart);

    GetTimeStart:=FALSE;
    IF StartUp=TRUE OR TriggerStart=TRUE THEN
        GetTimeStart:=TRUE;
    END_IF;

    ntGetTime(
        NETID:='',
        START:=GetTimeStart,
        TMOUT:=T#10s,
        BUSY=> TimeBusy,
        ERR=> GetTimeError,
        ERRID=>,
        TIMESTR=> ntTime);

    fbRTC(
           EN :=TriggerClock,
            PDT:=SYSTEMTIME_TO_DT(ntTime),
           Q=>,
            CDT=>MachineTime);

END_IF;

Funktioniert dieser Code auf deinem System. Kannst du im Windows die Zeit verstellen? Ist der Fehler nur beim Start der PLC vorhanden oder auch später?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich mache das so:

Code:
clocktimer(PT:=t#200ms,IN:=NOT clocktimer.Q);

NT_Time(NETID:='',TMOUT:=t#100ms,START:=clocktimer.Q);
und dann

Code:
timestamp :=  SYSTEMTIME_TO_DT(NT_Time.TIMESTR);
 
Zuletzt bearbeitet:
Hallo drfunfrock

Machst du das auch auf Rechner mit kleiner Rechnungsleistung. Hast du keine Problem mit den Windows Zugriffen im 200ms Takt? Kein Jitter? Wenn du keine Problem hast ist deine Version viel einfach. Muss ich auch mal ausprobieren.

Gruss
Thomas
 
Hallo Thomas

Die Systemzeit lässt sich am Rechner manuell nicht ändern, da der angemeldete Benutzer nicht über die entsprechenden Rechte verfügt.

Ich habe das Programm von drfunrock an der Maschine ausprobiert, allerdings habe ich den Trigger mal auf 500ms gesetzt -> Der Timeout-Fehler tritt nicht immer auf, d.h. ca. alle 3-5 Versuche bekomme ich die Systemzeit zurück.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo drfunfrock

Machst du das auch auf Rechner mit kleiner Rechnungsleistung. Hast du keine Problem mit den Windows Zugriffen im 200ms Takt? Kein Jitter? Wenn du keine Problem hast ist deine Version viel einfach. Muss ich auch mal ausprobieren.

Gruss
Thomas

Es funktioniert einfach. Der PC ist ein 4 Jahre alter, mit Pentium-D Prozessor (1.4GHz) Den Jitter hatte ich nie getestet. Die Zeit stimmt sekundengenau mit der Systemzeit überein.
 
Hallo drfunfrock

Ok ein 1.4GHz Rechner ist ja schon recht stark. Der Putzt natürlich ziemlich alles weg. Bei mir muss es auch auf einem CX9001 laufen. (ARM 266MHz)

Falls ich mal Zeit habe versuche ich deine Variante auf einem CX9001

Gruss
Thomas
 
Hallo drfunfrock

Ok ein 1.4GHz Rechner ist ja schon recht stark. Der Putzt natürlich ziemlich alles weg. Bei mir muss es auch auf einem CX9001 laufen. (ARM 266MHz)

Upss, die Dinger sind ja wirklich nicht sehr leistungsstark. Ich habe die auch im Einsatz, aber mehr als 2 COM-Ports sind kaum drin. Ich vermute mal, dass die Kontextumschaltung zwischen Realtime zu WindowsCE ein Problem macht. Wie wäre es, die Abfrage der Uhrzeit in einen Thread mit der höchsten Priorität auszulagern?
 
Hallo Thomas

Die Systemzeit lässt sich am Rechner manuell nicht ändern, da der angemeldete Benutzer nicht über die entsprechenden Rechte verfügt.

Ich habe das Programm von drfunrock an der Maschine ausprobiert, allerdings habe ich den Trigger mal auf 500ms gesetzt -> Der Timeout-Fehler tritt nicht immer auf, d.h. ca. alle 3-5 Versuche bekomme ich die Systemzeit zurück.

Ich hatte schon Probleme mit Beckhoff wären des Aufstarten, aber nicht währen des Betriebs.

Wenn du den TimeOut auf 1s und den Trigger auf 1.2s stellst wird es dann besser (3-5 Versuche) oder bleibt es gleich?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo drfunfrock

Mein Funktionblock funktioniert auf dem CX9001. Ich lese die Zeit nur alle 5minuten und gleiche damit die RTC im Twincat ab. Funktioniert gut. Braucht halt mehr Code. Der CX9001 ist nicht so schlecht, man muss halt aufpassen was und wie man programmiert. Bei mir läuft sogar eine Targetvisu, drei serielle Schnittstelle, Incremental Eingang Schrittmotor und mehrere Ein und Ausgänge.
 
Hallo Steff3de

Hast du noch andere zylische aufrufe aufs Windows? Flash zugriffe? Was hast du für eine SPS/Rechner?

Gruss
Thomas
 
Hallo drfunfrock

Mein Funktionblock funktioniert auf dem CX9001. Ich lese die Zeit nur alle 5minuten und gleiche damit die RTC im Twincat ab. Funktioniert gut. Braucht halt mehr Code. Der CX9001 ist nicht so schlecht, man muss halt aufpassen was und wie man programmiert. Bei mir läuft sogar eine Targetvisu, drei serielle Schnittstelle, Incremental Eingang Schrittmotor und mehrere Ein und Ausgänge.

Ich habe mit der CX9010 bei 2 COM-Port (per Ethercat->KBus -Umsetzung an KL6001) schon eine Auslastung von 35% ohne den Rest, weil eben die FBs aus der Bibliothek alle 2ms ausgeführt werden müssen. Vielleicht habe ich einen Fehler im Kode?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mit der CX9010 bei 2 COM-Port (per Ethercat->KBus -Umsetzung an KL6001) schon eine Auslastung von 35% ohne den Rest, weil eben die FBs aus der Bibliothek alle 2ms ausgeführt werden müssen. Vielleicht habe ich einen Fehler im Kode?

Ich hatte auch schon einen CX9010 aber ich konnte keine Geschwindigkeitsverbesserung zum CX9001 feststellen. Eigentlich sollte er doppelt so schnell sein. Ist er aber auf keinen Fall. Maximal ein paar Prozente.

Ich habe einen 8ms und einen 16ms Task. Ich verwende nicht die Bibliothek von Beckhoff. Ich habe da eine eigene Lösung.

ein 2ms Task ist zu viel für einen CX9001 4ms geht schon gut.

Gruss
Thomas
 
Die Änderung des Timouts auf 1 s und des Triggers auf 1,2 s brachte keine Veränderung.

Der einzige Betriebssystemaufruf ist das Abspeichern der Daten in eine csv Datei. In diesem Zusammenhang wird auch die Systemzeit abgefragt und abgespeichert. Das ganze passiert mit jedem neuem Teilemagazin (ca. alle 2 Minuten)

Es handelt sich dabei um eine C6140
 
Zurück
Oben