Uhrzeit auslesen / abgleichen CX9020

Begonnen von Silencerbob, 02. März 2017, 21:52:18

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 3 Gäste betrachten dieses Thema.

Silencerbob

Hallo zusammen,

ich bin Neuling auf dem Gebiet. Ich habe eine Beckhoff CX9020 mit TwinCat 2.11, mit den Bibliotheken
Oscat_Building_100.lib,
Oscat_basic_333.lib und
Standard.Lib 5.6.98
im Einsatz.

Standardanwendungen funktionieren soweit, aber ich suche seit einiger Zeit eine Möglichkeit die Systemuhr auszulesen, um Uhrzeitsteuerungen zu realisieren. Aber die SysGetRTCTime habe ich nicht.
In welcher Bibliothek finde ich die? Oder was brauche ich um die Uhrzeit auszulesen?
Ein Online-Abgleich wäre auch geplant? Was gäbe es da für Möglichkeiten?

Silencerbob

#1
Keiner eine Idee?

Ich brauche die TcUtilities.Lib, oder? Woher bekomme ich diese?

peewit

die sollte innerhalb der twincat installation zu finden sein
mach mal einen suchlauf !

Silencerbob

#3
Habs gefunden!  8)
1. Uhrzeit kann ich jetzt auch auslesen. Nur wie geht der Abgleich via Internet? SNTP, gibts da ein HowTo?

2. Wollte jetzt den Timer_2 verwenden, für meine Brauchwasserumwälpumpe, aber er startet nicht zur gewünschten Zeit!  :-[
Was mache ich falsch?
Timer_1 funktioniert komischerweise.

3. Was muss ich bei dem Baustein Holiday alles einstellen, dass er funktioniert, bzgl der Array Holiday_Data?
Habs mit der Anleitung probiert, aber irgendetwas fehlt mir noch zum Verständnis. Siehe Anhang




[gelöscht durch Administrator]

mattsches

Zu den Timern kann ich dir nichts sagen, habe ich nicht in Verwendung.

Die Deklaration für das Array für den HOLIDAY-Baustein habe ich aus der Doku übernommen und für Baden-Württemberg angepasst (Beispiel für Bayern siehe Handbuch zur OSCAT Basic, Kap. 3.10):

(* Kalenderdaten gemäß OSCAT.lib *)
HOLIDAY_DE : ARRAY[0..29] OF HOLIDAY_DATA := (name := 'Neujahr', day := 1, month := 1, use := 1),
(name := 'Heilig Drei Könige', day := 6, month := 1, use := 1),
(name := 'Karfreitag', day := -2, month := 0, use := 1),
(name := 'Ostersonntag', day := 0, month := 0, use := 1),
(name := 'Ostermontag', day := 1, month := 0, use := 1),
(name := 'Tag der Arbeit', day := 1, month := 5, use := 1),
(name := 'Christi Himmelfahrt', day := 39, month := 0, use := 1),
(name := 'Pfingstsonntag', day := 49, month := 0, use := 1),
(name := 'Pfingstmontag', day := 50, month := 0, use := 1),
(name := 'Fronleichnam', day := 60, month := 0, use := 1),
(name := 'Augsburger Friedensfest', day := 8, month := 8, use := 0),
(name := 'Maria Himmelfahrt', day := 15, month := 8, use := 1),
(name := 'Tag der Deutschen Einheit', day := 3, month := 10, use := 1),
(name := 'Reformationstag', day := 31, month := 10, use := 0),
(name := 'Allerheiligen', day := 1, month := 11, use := 1),
(name := 'Buss und Bettag', day := 23, month := 11, use := 0),
(name := '1. Weihnachtstag', day := 25, month := 12, use := 1),
(name := '2. Weihnachtstag', day := 26, month := 12, use := 1);


Dieses gesamte Array übergibst du dann an den HOLIDAY.

shrimps

Hi,
für eine kleine Tagesschaltuhr ist doch der TIMECHECK aus der OSCAT besser geeignet, weil ultraklein...

HTH
Shrimps

Silencerbob

Hi Mattsches,

ich bin bei TwinCat leider auch noch Newbie. Komme eigentlich aus der S7-Welt. S7, TIA Portal, WinCC und PCS7.
Wie übergebe ich diese Array?

TIMECHECK kannte ich bisher noch nicht, aber die ist auch für die meisten Fälle doch zu wenig.

Silencerbob

Ich habe es jetzt geschafft, dass er den Holiday_de akzeptiert (war wohl ein Kopierfehler)
Aber jetzt mein nächstes Problem ist der Calendar_Calc!
Wie schaffe ich es, dass die Strukturvariable "CALENDAR" von dem Baustein beschrieben wird?
Hab auch schon die Doku und Forumeinträge abgegrast.
Ich gebe dem Baustein die UTC-Zeit, und lt. Doku macht er den Rest alleine.
Aber woher soll er die Geodaten bekommen? Hab versucht sie zu überschreiben, weil immer 0. Aber geht nicht.  ???

Ich habs dann mit SUN_TIME probiert, Geodaten per Hand vorgegeben-> Ausgabe funktioniert.


mattsches

Genauso wie mit dem HOLIDAY-Array: Du deklarierst eine globale Variable vom Typ CALENDAR und initialisierst die Koordinaten passend für deinen Standort:


(* OSCAT Kalenderdaten *)
cxCalendar : CALENDAR := (
Longitude := x.xxxxxx,
Latitude := xx.xxxxxx);



cxCalendar.UTC beschreibst du dann zyklisch mit der UTC-Zeit und übergibst die gesamte cxCalendar-Variable an den CALENDAR_CALC. Eigentlich ganz einfach.

Du könntest natürlich auch Longitude und Latitude zyklisch beschreiben, aber das ist unnötiger Code und geht mit der Initialisierung eleganter.

Der CALENDAR_CALC bekommt übrigens auch das HOLIDAY-Array übergeben. Den HOLIDAY-Baustein selbst habe ich gar nicht im Einsatz.

Silencerbob

Irgendwas mache ich falsch. Er hat immer noch 0 drin bei beiden Variablen. Was muss bei Language drin stehen? Steht auch 0
Hab eine Variable Calendar vom Typ CALENDAR in globale Variablen, dort hab ich auch Longitude und Lattitude angegeben wie du geschrieben hast.
Und die Calendar.utc kommt direkt vom RTC.
Aber er schluckts nicht. Wo ist mein Fehler?  :o ???

[gelöscht durch Administrator]

mattsches

Gab es die Variable "Calendar" vorher schon und hast du nur den Code für die Initialisierung per Online-Change zugefügt? Dann musst du die Steuerung einmal neu starten (Reset warm), damit "Calendar" initialisiert wird.

Die Variable würde ich auch nicht so nennen, der Name ist ja identisch mit dem Datentyp. Es wundert mich, dass TwinCAT deswegen keinen Fehler beim Übersetzen auswirft. Auch das könnte also ein Ansatzpunkt sein.

Deine Lokalzeit solltest du noch in UTC wandeln, bevor du sie in die CALENDAR-Struktur schreibst (OSCAT Basic, LTIME_TO_UTC).

Silencerbob

Unglaublich, es funktioniert !!!  8)
Du hattest recht! Warmstart und dann gings! Variable hab ich auch noch geändert vorher.

Jetzt wenn der Timer_2 noch funktionieren würde.  Hab ihn grad nochmal probiert. Siehe Anhang. Idee dazu?

Den Timer_1 kann ich auch Wochentage deaktivieren.
Wäre dann 2#0111 1100  Montag - Freitag aktiv?

[gelöscht durch Administrator]

Silencerbob

Keiner eine Idee warum der Timer_2 bei mir nicht funktioniert?