-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Beiträge - frankie

#1
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
#2
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:


in OB 30 zähle ich ihn wie hier hoch:




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


#3
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

#4
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,624.0.html
#5
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




BB

Frankie



#6
Hallo Gregor!

Ich habe versucht deine OSCAT Bibliothek mit TIA V12 Basic zu öffnen.
Da bekomm ich dann die schöne meldung Das Projekt kann in TIA 12 SP1 nicht göffnet werden, da Step7 professional fehlt.

Wird das wirklich benötigt?

bzw. wie kann ich die Bibliothek selbst in TIA12 basic laden?
Migrieren mag es irgendwie nicht..

Danke
Frankie