Hallo liebes Oscat Team. Ich habe euren dimm_i Baustein in einer 315 2PN/DP im Einsatz. Super Baustein.
Jetzt ist mir allerdings aufgefallen,dass er am BYTE out nach einem Netzausfall den Wert einfriert. wenn ich dann von AUS (also Q=0 und dann gedrückt halten) hochdimme setzt er denn Byte out auf 1. von da an, tut sich nichts mehr am Byte out. Nur ein MRES hilft mir hier uas der patsche. :-(
Is da was mit den Einstelleungen meiner CPU nich in Ordnung ( softwaremässig kann die nur einen Warmstart - auch hier tritt das Phänomen auf) oder wurde ein Netzausfall bzw. CPU Stop beim dimm_i nicht berücksichtigt?
Gruß
Mac
Hallo Mac,
alle Bausteine die die Zeitfunktion T_PLC_MS nutzen, muss bei Neustart der CPU die Zeitfunktion initialisiert werden.
OB100
//stime initialize
//on cpu startup stime must be initialized
//! systemtime starts with 0ms !
CLR
= "IDB stime".init
CALL "stime" , "IDB stime"
tx:=
MfG
Daniel
heiß ich lade den OB100 rein und fertig? oder muss ich den dimm_i im ob100 aufrufen?
Nein, rein nur obigen Code im OB100 einfügen, dann sollte es funktionieren.
MfG
Daniel
da steht schon was bei mir drin..der war auch geladen....
wenn ich das einfüge was du mir gegeben hast macht ers rot
das hattest du mir sogar noch gemacht aber der fehler tritt ja trotzdem auf
[gelöscht durch Administrator]
wie heisst der Instanz-DB zu stime FB64?
MfG
Daniel
db64
ist nur ohne Symbol?
MfG
Daniel
mhhh.... mist ich muss jetzt schnell weg..termin....ja eigentlich ist es das selbe ode nich? funktioniert aber nicht.
ich meld mich nacher noch mal danke erst mal.
oh ha tatsächlich, da ist ein Fehler drin.
MfG
Daniel
Hallo Mac,
also in denn OB100 müsste noch folgendes
//dimm_i initialize
L 0
T "IDB dimm_i".last_step
jetzt klappt es dann auch beim Neustart.
MfG
Daniel
hallo dalbi,
ist das ein fehler der nur step7 betrifft oder betrifft es auch andere portierungen?
Hallo Hugo, hallo daniel.
Sorry musste eben ganzdringend weg.
Jetzt bin ich wieder da, seh den neun Eintrag, und habe ihn sofort probiert. BOMBE!
0 in den .laststep des dimm_i DB's vom OB100 zu transferieren war dir Lösung! er hält den Wert und man kann nach Netz wiederherstellung und von STOP nach RUN sofort weiter dimmen, also zu deutsch: Nach Stromausfall geht mein Licht auch wieder in der selben Helligkeit sofort wieder an und ich kann sofort wieder dimmen.
Besten Dank Daniel ;D
Ein Hoch auf euch Jungs Ihr seit spitze.
Zitat von: hugo in 26. Januar 2008, 18:31:02
hallo dalbi,
ist das ein fehler der nur step7 betrifft oder betrifft es auch andere portierungen?
Scheinbar betrifft das nur die Siemens portierung da hier bei einem Funktionsbaustein-Aufruf ein zugehöriger Instanz-Datenbaustein mit angegeben werden muss, dieser speichert dann alle Werte. Bei einem Netzausfall sind dann diese natürlich wieder so da.
Ich hoffe mal nicht das davon noch mehr Funktionen betroffen sind.
MfG
Daniel
Hi
ZitatScheinbar betrifft das nur die Siemens portierung da hier bei einem Funktionsbaustein-Aufruf ein zugehöriger Instanz-Datenbaustein mit angegeben werden muss, dieser speichert dann alle Werte. Bei einem Netzausfall sind dann diese natürlich wieder so da.
Ich hoffe mal nicht das davon noch mehr Funktionen betroffen sind.
Wie hast du die Remanenz eingestellt.
Wenn der Datenbaustein NICHT als Remanent angegeben wird, sollte das passen ? !
Falls das so ist, musste nur der entsprechende Hinweis am Kopf der Funktion.
Zitat von: gravieren in 27. Januar 2008, 11:43:26
Falls das so ist, musste nur der entsprechende Hinweis am Kopf der Funktion.
Meines wissen nach kann man das nur hier Einstellen (siehe Bild).
Das Problem ist nur das davon dann der ganze DB betroffen ist.
MfG
Daniel
[gelöscht durch Administrator]
Um beim Beispiel des dimm_i zu bleiben würde das hier bedeuten das die Dimmfunktion komplett bei 0 startet das heisst nach einem Neustart wär das Licht bei Mac erst mal dunkel. ;D
MfG
Daniel
das wär nich so schön. Und... wenn man so wie ich das ganze jetzt in eine bzw. so wie bei mir mehrere verschachtelte multiinstanzen gepackt hat. ist alles betroffen!
bei mir gibt es ja keinen direkten instanz-DB zum dimm_i (hatte ich nicht erwähnt). dimm_i ist teil eines FB's für einen lichtsteuerungskreis, der ja auch einen db hat ...dieser ist wiederum in einem FB der alle lichtsteuerungskreise_FB's in sich hat...alles multiinstanz. nur der hauptfb für licht hat dann einen db in dem alle anderen db natürlich drinstecken.
Vorteil: speicherbedarf und ordung in sachen übersicht und struktur.
nachteil: ändere ich eine in/out/stat-variable in einem fb der verschachtelt is, muss ich den ganzen quark von unten nach obenneu generieren also die fb's bis zum eigentlichen db vom licht FB, der dann im OB 1 ist. wie auch Rolleden haupt fb etc.
das is ne frimelei ...aber es klappt und ich habe keine vielen db's pro hauptprogrammteil nur einen instanz an dem ich nich ran muss. und ein paar globale DB's für daten abfragen.... für HMI etc.
Habe noch eine Möglichkeit gefunden, der Baustein erkennt selbstständig ob ein Neustart war.
Beispiel:
FUNCTION FC200 : BYTE
VAR_IN_OUT
Startup : BOOL;
END_VAR
VAR_TEMP
(* Strukte für SFC6 "RD_INFO" *)
TOP_SI: struct
EV_CLASS: byte;
EV_NUM: byte;
PRIORITY: byte;
NUM: byte;
TYP2_3: byte;
TYP1: byte;
ZI1: word;
ZI2_3: dword;
end_struct;
START_UP_SI: struct
EV_CLASS: byte;
EV_NUM: byte;
PRIORITY: byte;
NUM: byte;
TYP2_3: byte;
TYP1: byte;
ZI1: word;
ZI2_3: dword;
end_struct;
ERR : INT;
END_VAR
BEGIN
(*****************************************************************************
Startinformation des aktuellen OBs auslesen mit der SFC 6 "RD_SINFO"
*****************************************************************************)
ERR := RD_SINFO (TOP_SI := TOP_SI, START_UP_SI := START_UP_SI);
(*****************************************************************************
Anlauf merken TOP_SI.EV_NUM
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
*****************************************************************************)
IF TOP_SI.EV_NUM = 1 OR TOP_SI.EV_NUM = 2 OR TOP_SI.EV_NUM = 4 THEN
Startup := TRUE;
END_IF;
FC200 := TOP_SI.EV_NUM;
END_FUNCTION
Müsste man dann allerdings in alle Funktionen einfügen die da betroffen sind. (arbeit)
MfG
Daniel