FB_HVACNOVRAMDataHandling
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;
![]() | 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: 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.
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
- Neues Projekt anlegen
- Einfügen der TcHVAC.lib, dies geschieht über die Registerkarte Ressourcen im Object Organizer
2. Schritt
- Projekt übersetzen, dabei erhält man zwei Warnungen, da in der TcHVAC.lib zwei nicht vollständig definierte Adressen vorhanden sind. Über diese beiden Adressen muss der Anwender die Start- und Endadresse des Speicherbereiches festlegen.
3. Schritt
- Über den Karteireiter Ressourcen im Object Organizer unter Variablen_Konfiguration kann der Menübefehl Alle Instanzpfade im Menü Einfügen benutzt werden. Nach der Durchführung dieses Schrittes kann der Anwender die Startadresse und Endadresse definieren.
4. Schritt
- Definieren der Adressen in der Variablen_Konfiguration unter den Globalen Variablen.
![]() | Auf ARM basierenden Plattformen (z.B. CX90xx) muss darauf geachtet werden, dass die Adressen der lokierten Variablen durch 4 teilbar sind. |
5. Schritt
- In diesem Beispiel wurde als Anfangadresse 0 und als Endadresse 56 definiert.
6. Schritt
- Nachdem die Schritte 1 bis 5 durchgeführt worden sind , muss das Projekt neu übersetzt werden.
![]() |
|
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;