dimm_i Fehler bei Netzausfall

Begonnen von MacDeath, 26. Januar 2008, 15:29:20

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

dalbi

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

dalbi

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

MacDeath

#17
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.


dalbi

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