ich hatte letztens in einem anderen Thread gepostet Zeitschaltuhr für Tor und Schranke programmieren - Seite 2 und bin nicht sicher, ob das Problem untergegangen ist. Der TIMER_P4 scheint nicht richtig zu funktionieren, wenn mehrere Ereignisse pro Kanal definiert sind. Kann das jemand bestätigen?
Ich hab grad noch mal in den Baustein reingeschaut. Da dort mit TOD gearbeitet wird, sind tagesübergreifende Zeiten ein Problem. Z.B. 23:00 + 8 h ergibt TOD#31:00. Klingt komisch, ist aber so. Damit kann das nicht funktionieren. Ab 00:00 wird der Ausgang false, da 00:00 nicht zwischen 23:00 und 31:00 liegt. Das Problem hatte ich bei meiner Schaltuhr auch und hab die interne Berechnung auf DT umgstellt.
Das kommt zu dem Problem bei mehreren Ereignissen pro Kanal hinzu.
Ich habe meine oscat320.lib auf oscat_basic_333.lib aktualisiert
und die oscat_building_100.lib installiert .
Ich war überrascht das es fast reibungslos funktioniert.
2 Probleme habe ich aber noch und keine Lösung gefunden.
Ich komme aber nicht weiter mit :
Fehler 3760 GLOBALE VARIABLEN(29) Fehlerhafter Initalwert.
ldt: CALENDAR:=(OFFSET:=60,DST_EN:=TRUE,LOCATION:=1,LONGITUDE:=9.123,LATITUDE:=52.55);
Heute habe ich gesehen, das am Baustein “CALENDAR_CALC” die Variable “ldt” auf den neuen Eingang H gelegt ist. ???
Nach Änderung auf “XCAL” aber keine Änderung in der Fehlermeldung.
Werde deinen Ratschlag mal befolgen.
überprüfe mal in deiner osacat basic ob deine datentype genau so aussieht
TYPE CALENDAR :
STRUCT
UTC : DT; (* world time UTC *)
LDT : DT; (* local time *)
LDATE : DATE; (* local date *)
LTOD : TOD; (* local time of day *)
YEAR : INT; (* year of LDATE *)
MONTH : INT; (* month of LDATE *)
DAY : INT; (* day of LDATE *)
WEEKDAY : INT; (* weekday of LDATE *)
OFFSET : INT; (* Time Zone Offset for Local time in minutes *)
DST_EN : BOOL; (* daylight savings time enable *)
DST_ON : BOOL; (* true when daylight savings time os on *)
NAME : STRING(5); (* name of time zone *)
LANGUAGE : INT; (* location number pls see location setup *)
LONGITUDE : REAL; (* longitude of current location *)
LATITUDE : REAL; (* latitude of current location *)
SUN_RISE : TOD; (* sun_rise for current location *)
SUN_SET : TOD; (* sun_set for current location *)
SUN_MIDDAY : TOD; (* worldtime when sun stands at south position *)
SUN_HEIGTH : REAL ; (* suns heigth at midday, south position *)
SUN_HOR : REAL; (* sun angle horizontal 0 = north in degrees *)
SUN_VER : REAL; (* sun angle vertical above horizon in degrees *)
NIGHT : BOOL; (* true between sun_set and sun_rise *)
HOLIDAY : BOOL; (* true when holiday *)
HOLY_NAME : STRING(30); (* name of holiday *)
WORK_WEEK : INT; (* current work week *)
END_STRUCT
END_TYPE
wenn ja dann tippe ich eher auf ein ganz anderes problem
du kannst ja mal ein ganz neues projekt machen und nur die calendar datenstruktur importieren
und dann versuche nur die eine codezeile zu integrieren
Wenn ich ein neues Projekt erstelle und nur die oscat_basic_333.lib importiere habe ich die gleiche Fehlermeldung.
ldt: CALENDAR:=(OFFSET:=60,DST_EN:=TRUE,LOCATION:=1,LONGITUDE:=9.123,LATITUDE:=52.55);
Nehme ich Location;=1 raus läuft es ohne Fehlermeldung durch.
Ich habe nochmal in meinen alten Projekt nachgesehen da ist LOCATION:=1 drin.
nicht die ganze basic lib importieren sondern nur die datenstruktur…
es kann sein das die groesse der bibliothek das eigentliche problem ist, und deine fehlermeldung nur ein seiteneffekt ist
und in wirklichkeit kein direkter fehler ist.
Also wenn ich mir den Code für CALENDAR oben anschaue (den du bestätigt hast), nein. Und auch wenn ich in meine Basic 3.33 reinschaue, finde ich LOCATION nicht als Element der CALENDAR-Struktur.
Ergo: Die Initialisierung kann nicht funktionieren.
Nimm mal stattdessen LANGUAGE:=1. Sieht mir so aus, als sei die Variable irgendwann umbenannt worden.