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?
//#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;
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.
ZitatPLC_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
Hier die Stelle in "STIME"
(* read the system timer *)
#tx := DINT_TO_DWORD("SYS_TIMER"."TIME");
(* stuff the highest bit into the timer value *)
#at_tx[7] := #bit31;
Ich arbeite mit den Quellen von DOD666
Aus diesem Beitrag:
http://www.oscat.de/community/index.php/topic,2475.msg12831.html#msg12831 (http://www.oscat.de/community/index.php/topic,2475.msg12831.html#msg12831)
BB
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:
(*
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
*)
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,164.0.html)
http://www.oscat.de/community/index.php/topic,624.0.html (http://www.oscat.de/community/index.php/topic,624.0.html)
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 (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
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
Ich schaue morgen mal dann zeige ich dir wie ich es gelöst habe.
MFG
Jens
Hallo Frankie,
SYS_TIMER.TIME ist ein DB.
den Wert in SYS_TIMER.TIME setze ich im OB100 auf 0.
In einem Interrupt OB mit 1 ms addiere ich immer 1 auf den Wert von SYS_TIMER.TIME.
Dies nutze ich um TIME_TCK nachzubilden.
MFG
Jens
Hi Jens..
Danke für deine Hilfe irgendwann wird das schon laufen bei mir..
Ich hab es jetzt geschaft BLIND_CONTROL_S mit allen HIlfsbausteinen usw. zu übersetzen und ind die CPU zu laden.
Ich hab den Baustein in OB1 verdrahtet. Ich kann mit meinen Tasttern das Rolo nun hoch und runter fahren, ohne das es zur eingestellten Zeit stehen bleibt. Ich schätze ich hab das mit deinem Hinweis auf den DB SYS_TIMER.TIME noch fehlerhaft umgesetzt.
DAs hochzählen in OB30 mit 1.ms schient jedenfalls zu klappen.
Ich setzte SYS_TIMER wie folgt:
(http://intelligenzallergie.de/img/SYS_TIMER.png)
in OB 30 zähle ich ihn wie hier hoch:
(http://intelligenzallergie.de/img/OB30.png)
IN DB25 lege ich ja den Startwert als 0 fest.
Welchen Datentyp sollte ich verwenden?
Leider scheint es noch nicht ganz zu klappen.
Das nächste Thema ist dann BLIND_INPUT mit BLIND_CONTROL_S zu kombinieren, weil ich ja nur Taster im Haus verwende. Einfach die Aus- und Eingänge per ziehen der Pins zu verknüpfen bekomm ich nicht hin, vermutlich muss ich da merker zwischen den Funktionen verwenden?
Danke für die Hilfe.. Leider scheinen die 1200er CPUS nicht so die Erste Wahl für solche Projekte.. :-(
Schönen Abend!
Frankie
Hallo Frankie,
anbei ein Bild wie ich die Rollos verschaltet habe.
Diese Anordnung ist in einem FB den ich dann pro Rollo aufrufe.
Das mit dem ziehen geht nicht das kommt aus CoDeSys da scheint so was zu gehen.
Ich nutze temporäre Variablen.
Gruß
Jens
[gelöscht durch Administrator]
Danke Jens!
Es klappt.. mit Blind Input und der richtigen einstellung funzen erstmal die Rolos im OG..
Ich dann morgen mal die Jalousien im EG..
Auch die Laufzeiten passen, das mit SYS_TIME funktioniert also auch..
Wenns an den Sunsetcalender geht.. melde ich mich wieder ::) ???
Danke!
Frankie
Hallo Frankie,
schön das es klappt.
Ist das eine Drohung ;D
Gruß
Jens
Hallo Frankie,
ich hänge da auch irgendwie am SYS_TIMER. der läuft zwar im Interupt und zählt fleißig hoch aber der BLIND_CONTROL funzt nicht Richtig.
Der Zähler für die Position PO läuft immer von 255 auf 0 sobald ich das Rollo einmal händisch betätige.
Kannst du mir bitte Aufzeigen wie du das jetzt gelöst hast. Scheint ja bei dir zu laufen :)
An den CALENDAR hab ich mich noch gar nicht getraut :(
mfG Koni
Er hat auch Rollos also die Bausteine für Rollos verwendet.
Du hast doch jalousien oder?
Denke da liegt das Problem.
Gruß
Jens
Hallo
Ja es liegt an dem Baustein BLIND CONTROL. Da ich eben Jalousien habe. Schade den wenn ich die OSCAT Anleitung lese wäre das genau das gewesen was ich gebraucht hätte.
mfG Koni
Lösung: OSCAT runter und alles selber schreiben! ;) Dann funktioniert's auch bei selben Arbeitsaufwand :) 8)
Hallo Zusammen,
ich bin bereits seit einiger Zeit hier im Forum als Gast am mitlesen.
Ich bin sehr an den BLIND Bausteinen aus der OSCAT Bibliothek interessiert.
Ich habe gelesen das der BLIND_INPUT und BLIND_CONTROL_S für das TIA Portal übersetzt wurde.
Wurde auch der BLIND_CONTROL übersetzt.
Koni8259 hat geschrieben, dass er Oscat runter geworfen hat und ALLES selber geschrieben hat.
Würdest du das hier zur Verfügung stellen.
MfG Tim
Hallo zusammen,
ich nutze TIA v13 und eine 1500er S7 und habe festgestellt das die RD_SINFO und die TOP_SI abfrage anscheinend nicht mehr funktioniert um die Variablen zu initialisieren. Weder der <> TOP_SI.EV_NUM = 3 noch die OR Abfragen auf 1, 2, 4 scheinen zu funktionieren.
Über diesen Beitrag und die 1200er Bib bin ich dann auf den "FirstScan" im OB 100 gestoßen. Ist das die einzige funktionierende Möglichkeit in der TIA Welt den ersten Zyklus/SPS start mitzubekommen und für solche Initialisierungen zu benutzten?
Danke!
@ DOD666 : Kannst du vielleicht deinen Screenshot wo du gezeigt hast wie du die Rollos & Jalousieen verschaltet hast, nochmal hochladen? Leider ist das Bild nicht mehr verfügbar.
Noch besser wäre natürlich wenn du mir das Programm geben könntest damit ich mir das ansehen kann wie du die ganzen Verschaltungen gelöst hast :) Ich gehe unter in Datenbausteinen und Merkern :D Es muss ja einen Weg geben das im TIA mit weniger Merkern und Datenbausteinen zu lösen. Ich habe 20 Schalter und 24 Jalousieen & Rollläden :-/
Btw. danke für deine zig Thread´s hier im Forum! Die haben mir schon viel weiter geholfen ;-)
Hi,
Habe mit der 1500 noch nicht viel gemacht aber es müsste ähnliche abfragen wie für die S7-300 geben.
Ich hoffe man muss es nicht wie bei der S7-1200 machen.
Schau mal bei Siemens dort gibt es eine Baustein Vergleichsliste.
Gruß
Jens
Zitat von: koni8259 in 20. April 2016, 12:58:47
Hallo Frankie,
ich hänge da auch irgendwie am SYS_TIMER. der läuft zwar im Interupt und zählt fleißig hoch aber der BLIND_CONTROL funzt nicht Richtig.
Der Zähler für die Position PO läuft immer von 255 auf 0 sobald ich das Rollo einmal händisch betätige.
Kannst du mir bitte Aufzeigen wie du das jetzt gelöst hast. Scheint ja bei dir zu laufen :)
An den CALENDAR hab ich mich noch gar nicht getraut :(
mfG Koni
Vor diesem Problem stehe ich leider auch im Moment. Bei dem BLIND_CONTROL_S für die Rollläden funktioniert der POS hervorragend. Aber beim BLIND_CONTROL läuft der Zähler nach einer Hand Fahrt immer gegen 00. Der Zähler läuft auch nicht weg, wenn ich die Jalousieen starte, der läuft erst weg, wenn ich die Jalousieen stoppe.
Weiß einer vielleicht wo es da hacken könnte?
Hallo,
habe mir den BLIND_CONTROL noch einmal angesehen und ein Problem gefunden.
Das Problem liegt in BLIND_ACTUATOR da stimmen 2 Aufrufe nicht.
Denke das ist bein Import in TIA passiert.
Lösung:
(* ramp up or down to simulate the angle position of the blind slats *)
#angle(E:=#lock.Q1 OR #lock.Q2,UP:= #lock.Q1, PT := #T_Angle);
#position(E := #lock.Q1 AND #angle.HIGH OR #lock.Q2 AND #angle.LOW, UP := #lock.Q1, PT := #T_UD);
Bitte den Code hierdurch ersetzen und testen.
Gruß
Jens
Ich habe den Code soeben getestet und jetzt laufen die Zeiten korrekt :)
Vielen Dank DOD666 für die Lösung ;) Du bist wirklich auf zack :)
Allerdings sieht es so aus als ob die Jalousiereferrenzfahrten bei CPU Neustart noch nicht klappen. Die Rollläden fahren problemlos Refferenz bei CPU Neustart, sprich auf 00 komplett auf.
Hallo zusammen,
ich möchte gerne ebenfalls den FB Blind_Control_S für meine S7 1200 Rollo Steuerung benutzen, leider hapert es bei mir aber beim SYS_TIMER und TIME.
Was genau muss ich in die DB SYS_TIMER.Time für Variablen deklarieren.
Wäre cool wenn da jemand einen Screenshot hätte.
Vielen Dank schon mal
Sven