oscat.lib > oscat.lib fuer Step 7
OSCAT auf S7-1200 CPU 1214C DCDCDC TIA 13SP1 Up7
frankie:
Hi Freunde!
Ich habe nun also die Library Bibliothek_OSCAT_Basic_332__S1200_V13_V13_SP1.zal13
und
Bibliothek_OSCAT_building_100_S1200_V13_V13_SP1.zal13
in TIA 13 SP1 up7 laden können.
Ich möchte nur meine Rolos und Jalousien im Haus steuern.
Bisher mach ich das mit einfachen Netzwerken, ohne Sunset und Automatismen.
Ich möchte aber mehr komfort, Timer usw.. was halt oscat alles bietet.
Ich hab also die Building und die Basic als Globale Bibliothek geöffnet.
Ich hab dann also den BLIND_CONTROL_S in den OB1 gezogen und verdrahtet.
Es gibt dann ja den FB248, der lässt sich aber nicht übersetzen.
Die Fehler sind dann: Ungültiger Datentyp. im SCL ist dann immer #rmp gehilightet.
Ich hab dann diverse Bausteine hinzugefügt und hänge jetzt beim Operand "FirstScan", der nicht definiert ist.
Weis jemand, wo ich den FirstScan finde, bzw. wie ich den definiere?
--- Code: ---//#ERR := RD_SINFO (TOP_SI => #TOP_SI, START_UP_SI => #START_UP_SI);
(* read system time *)
#tx := DINT_TO_TIME(DWORD_TO_DINT("T_PLC_MS"()));
(* reset last_time on system startup *)
IF "FirstScan" THEN
#last := #tx;
END_IF;
(* check inputs and start state machine *)
IF #UP AND NOT #DN THEN
(* manual UP *)
#rmp.IN := 255;
--- Ende Code ---
Da oben wird der Firstscan verwendet.
Kann ja nicht viel sein. Vielen dank schonmal.
.
.
Hab weiter gesucht .. der Operand "FirstScan" ist nicht definiert.
Der Fehler kommt von "STIME", "_RMP_B" und "BLIND_CONTROL_S".
Nebenbei werden diverse Parameter möglicherweise nicht initialisiert.
..
Ok.. Hab "FirstScan" Global definiert. (Hab mehrer Versuche gebraucht.. Man sollte zumindest richtig tippen können :-\)
Jetzt Fehlt in "STIME" "SYS_TIMER", da lässt sich aber nichts machen.. und der Operand "TIME" istn icht definiert.
--- Zitat ---PLC_1,,2,5,10:42:07
Programmbausteine,,2,5,10:42:07
STIME (FB64),,2,0,10:42:07
42,"SYS_TIMER" ist nicht bekannt.,,,10:42:07
42,Der Operand "TIME" ist nicht definiert.,,,10:42:07
_RMP_B (FB93),Baustein wurde erfolgreich übersetzt.,,,10:42:07
--- Ende Zitat ---
Hier die Stelle in "STIME"
--- Code: ---(* read the system timer *)
#tx := DINT_TO_DWORD("SYS_TIMER"."TIME");
(* stuff the highest bit into the timer value *)
#at_tx[7] := #bit31;
--- Ende Code ---
Ich arbeite mit den Quellen von DOD666
Aus diesem Beitrag:
http://www.oscat.de/community/index.php/topic,2475.msg12831.html#msg12831
BB
Frankie
frankie:
Ich hab mal bisserl geschaut..
Im OSCAT Step7 Baustein STIME wird die 32 bit Systemzeit auf 31 bit umgesetzt. Weild as eine Siemenseigenheit ist.
Das schöne ist, das die 1200er CPU sowas nicht hat, selbst die Alternative TIME_TCK gibt es nicht.
Ich denke man kann das aber ectl. mit RTM nachbauen.
Die Funktion scheint für alle Timer in OSCAT Building nötig zu sein.
Kann man den STIME irgendwie umbauen, das alles wieder läuft?
hier mal der SCL Code komlpett:
--- Code: ---(*
this function block makes sure that the timer of a siemens sps counts from 0 - 2^32-1.
*)
(* this FB is only necessary for siemens sps
the siemens sps timer counts from 0 to 2^31-1 and starts at 0 sfter overrun.
this means that the bit 31 (the highest bit ) will never be used and therefore
a problem arises when t2 - t1 is checked.
t2 - t1 is always valid also in an timer overrun situation where the time t1 is very high and t2 is very low.
the result of the subtraction t2 - t1 however is still valid.
this calculation does not work for soiemens because the highest bit is not used.
this module stores the highest bit, changes the highest bit at every overrun occurence and stuffs ther highest bit in the output.
the output is then used by t_plc_us and t_plc_ms.
the correction needs and fb and not a function because the value of the highest bit has to be stored.
do never use this function block in a codesys environment. the timer in codesys is correct and runs from 0 to 2^32-1
*)
(* read actual startup info *)
(* OB1_SCAN_1 BYTE - B#16#01: Abschluss des Neustarts (Warmstarts)
- B#16#02: Abschluss des Wiederanlaufs
- B#16#03: Abschluss des freien Zyklus
- B#16#04: Abschluss des Kaltstarts
- B#16#05: Erster OB 1-Zyklus der neuen Master-CPU nach
Master-Reserve-Umschaltung und STOP des
bisherigen Masters *)
//#ERR := RD_SINFO (TOP_SI => #TOP_SI, START_UP_SI => #START_UP_SI);
(* reset last_time on system startup *)
IF "FirstScan" OR NOT #init THEN
#last_time := 0;
#bit31 := false;
#init := true;
END_IF;
(* read the system timer *)
// Original: #tx := DINT_TO_DWORD("SYS_TIMER"."TIME");
// #tx := DINT_TO_DWORD("TIME_TCK"."TIME"); funzt mit 1200er nicht
#tx := DINT_TO_DWORD("SYS_TIMER"."TIME"); // hier ist SYS_TIMER und TIME nicht definiert
(* stuff the highest bit into the timer value *)
#at_tx[7] := #bit31;
(* check for overrun *)
IF DWORD_TO_DINT(#tx) < DWORD_TO_DINT(#last_time) THEN
(* an overrun has occured, change the value of the highest bit *)
#bit31 := NOT #bit31;
END_IF;
(* stuff the highest bit into the timer value *)
#at_tx[7] := #bit31;
(* remember the last system time for the next overrun check *)
#last_time := #tx;
(* revision history
DA 14.9.2007 rev 1.0
original version
DA 24.2.2008 rev 1.1
added self reset on system startup
DA 2.5.2008 rev 1.2
correct a problem running under OB35
DA 12.3.2009 rev 1.3
correct a problem run on different CPUs
DA 22.12.2009 rev 1.4
correct a problem on startup
DA 19.09.2011 rev 1.5
correct a error in code
*)
--- Ende Code ---
Hier in paar posts zu der Problematik:
http://www.oscat.de/community/index.php/topic,164.0.html
http://www.oscat.de/community/index.php/topic,624.0.html
DOD666:
Hallo Frankie,
anbei mal ein link zu einem Post von mir mit meiner angepassten Bibliothek.
http://www.oscat.de/community/index.php/topic,2475.msg12834.html#msg12834
Habe mir selber einen Systemzeitzähler gemacht mittels eines Interrupt OB.
Gruß
Jens
frankie:
Danke DOD666!
Wie ich in meinem ersten Post in den ersten 3 Zeilen schreibe, verwende ich ja genau deine Bibliothek.
Wie heisste die modifizierter Baustein?
Den STIME finde ich mehmals..
Ich würde ja gerne einfach den BLIND_CONTROL_S verwenden, aber es klemmt am schluss an STIME aus dem Ordner Jalousie
Danke
BB
Frankie
DOD666:
Ich schaue morgen mal dann zeige ich dir wie ich es gelöst habe.
MFG
Jens
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln