OSCAT auf S7-1200 CPU 1214C DCDCDC TIA 13SP1 Up7

Begonnen von frankie, 26. Februar 2016, 18:25:29

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

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?

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




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,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

DOD666

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




frankie

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



DOD666

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

frankie

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

DOD666

Hallo Frankie,

schön das es klappt.

Ist das eine Drohung  ;D

Gruß

Jens

koni8259

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

DOD666

Er hat auch Rollos also die Bausteine für Rollos verwendet.
Du hast doch jalousien oder?
Denke da liegt das Problem.

Gruß

Jens

koni8259

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

koni8259

Lösung: OSCAT runter und alles selber schreiben! ;) Dann funktioniert's auch bei selben Arbeitsaufwand :) 8)

Timmerx

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