FB_HVACNOVRAMDataHandling

FB_HVACNOVRAMDataHandling 1:

Anwendung

Mit diesem Funktionsbaustein werden SPS-Variablen spannungsausfallsicher ins NOVRAM geschrieben. Nach einem Spannungsausfall oder nach einem Neustart der Steuerung wird das NOVRAM komplett ausgelesen.

Das Verhalten vom Funktionsbaustein sieht wie folgt aus, wenn beim Aufstarten alles korrekt war:
udiStatus:= 1;
iNovRamReadCount:= 1;
iNovRamWriteCount:= 0;
bDone:= TRUE;

FB_HVACNOVRAMDataHandling 2:

HinweisBei ARM basierten Laufzeitsystemen bitte darauf achten, dass die Speicheradressen der SPS-Variablen durch 4 teilbar sind!

Bemerkungen

Die global deklarierten Variablen g_dwHVACVarConfigStart und g_dwHVACVarConfigEnd werden mit der Anfangsadresse und Endadresse des Speicherbereiches lokiert. Der Anwender muss darauf achten, dass es nicht zu Speicherüberlappungen kommt. Aus den beiden Adressen wird dann intern die Blockgröße ermittelt. Der gesamte Merkerbereich wird automatisch bei Änderung der Merkervariablen in das NOVRAM weggeschrieben.

siehe auch Anwendungsbeispiel: FB_HVACNOVRAMDataHandling 3:Example_NOVRAM.zip

VAR_INPUT

sNETID            : T_AmsNetId;     
TMOUT             : TIME;           
udiDevID          : UDINT;      
usiBlockSize      : USINT;          

sNETID : AmsNetId des TwinCAT-Rechners auf dem die Funktion ausgeführt werden soll. Für den lokalen Rechner, kann auch ein Leerstring angegeben werden.

TMOUT : Gibt die Timeout-Zeit an, die bei der Ausführung des ADS-Kommandos nicht überschritten werden darf.

udiDevID : Über die Geräte-ID wird das NOVRAM des CX90xx oder CX10xx spezifiziert, auf das mit dem Funktionsbaustein schreibend oder lesend zugegriffen werden soll. Die Geräte-IDs werden während der Hardware-Konfiguration vom TwinCAT System Manager festgelegt.

FB_HVACNOVRAMDataHandling 4:

usiBlockSize : Die Blockgröße auf die pro Lese-/Schreibzyklus zugegriffen wird, wird in Prozent angegeben. z.B 20, d.h. es werden 5 Lese-/Schreibzyklen benötigt, um auf den gesamten Merkerbereich zuzugreifen.

VAR_OUTPUT

udiStatus         : UDINT;                   
iNovramReadCount  : INT;                
iNovramWriteCount : INT;                
bDone             : BOOL;                   
bBusy             : BOOL;                   
bError            : BOOL;
udiErrorID        : UDINT;                          

udiStatus : = 0 , kein Status

= 1 , gültige Daten beim letzten Lesen des NOVRAM

= 2 , ungültige Daten beim letzten Lesen des NOVRAM. Daten wurden verworfen.

iNovramReadCount : Zähler, der beim Auslesen des NOVRAM um 1 inkrementiert.

iNovramWriteCount: Zähler, der beim Beschreiben des NOVRAM um 1 inkrementiert.

bDone: Wird auf TRUE gesetzt, wenn der Funktionsblock ausgeführt wurde.

bBusy: Bei der Aktivierung des Bausteins wird der Ausgang gesetzt und bleibt so lange aktiv bis der Befehl abgearbeitet wurde.

bError: Dieser Ausgang wird auf TRUE geschaltet, wenn bei der Ausführung eines Befehls ein Fehler aufgetreten ist. Der befehlsspezifische Fehlercode ist in udiErrorID enthalten.

udiErrorID: Enthält den befehlsspezifischen Fehlercode. Siehe bitte ADS Return Codes.

Beispiel zur Handhabung innerhalb TwinCAT PLC

1.Schritt

FB_HVACNOVRAMDataHandling 5:

2. Schritt

3. Schritt

4. Schritt

FB_HVACNOVRAMDataHandling 6:

Auf ARM basierenden Plattformen (z.B. CX90xx) muss darauf geachtet werden, dass die Adressen der lokierten Variablen durch 4 teilbar sind.

5. Schritt

6. Schritt

FB_HVACNOVRAMDataHandling 7:

    • Aus Performance-Gründen ist es sinnvoll, die lokierten Variablen (VAR_CONFIG Objekt) lückenlos zu adressieren.
    • Wenn die Variablen-Konfiguration (VAR_CONFIG) nachträglich geändert wird, ist es zwingend erforderlich die Änderungen über ein "Online Change" und nicht über "Load all" auf das Zielsystem zu laden. Nur bei einem "Online Change" wird sichergestellt, dass die NovRAM Daten korrekt erhalten bleiben. Bei "Load all" wurden die NovRAM Daten als ungültig erkannt.

    Beispiel für die Deklaration von lokierten Variablen:

    Heizkurve.fbRealMinTemp_NOVRAM.rVar_N        AT %MB12 : REAL;
    Heizkurve.fbRealMaxTemp_NOVRAM.rVar_N        AT %MB16 : REAL;
    Heizkurve.fbRealNightSetback_NOVRAM.rVar_N       AT %MB20 : REAL;
    Heizkurve.fbRealSetpoint_Y1_NOVRAM.rVar_N        AT %MB24 : REAL;
    Heizkurve.fbRealSetpoint_Y2_NOVRAM.rVar_N        AT %MB28 : REAL;
    Heizkurve.fbRealSetpoint_Y3_NOVRAM.rVar_N        AT %MB32 : REAL;
    Heizkurve.fbRealSetpoint_Y4_NOVRAM.rVar_N        AT %MB36 : REAL;
    Heizkurve.fbRealOutsideTemp_X1_NOVRAM.rVar_N     AT %MB40 : REAL;
    Heizkurve.fbRealOutsideTemp_X2_NOVRAM.rVar_N     AT %MB44 : REAL;
    Heizkurve.fbRealOutsideTemp_X3_NOVRAM.rVar_N     AT %MB48 : REAL;
    Heizkurve.fbRealOutsideTemp_X4_NOVRAM.rVar_N     AT %MB52 : REAL;

    .g_dwHVACVarConfigStart                  AT %MB0  : DWORD;
    .g_dwHVACVarConfigEnd                AT %MB56 : DWORD;