Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: CX9000 - Verwendung von Novram

  1. #1
    Registriert seit
    17.02.2011
    Beiträge
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo SPS-Gemeinde,

    ich möchte in meinem SPS-Projekt gerne einige Daten (es sind nur ein paar Mini-Arrays) in einem nicht-flüchtigen Speicher ablegen.
    Da ich gerne das Flash meines CX9000 schonen will und ich auch nicht den absoluten Ausfallschutz benötige, hab ich schon herausgefunden, dass es da das Nov-Ram gibt, offenbar ein batteriegepufferter Speicher, der einen Stromausfall/Neustart "überlebt".

    Nun meine Frage(n):
    Wie benutze ich den Speicher? Ich habe in älteren Posts gelesen, es gäbe da zwei Möglichkeiten:
    - einmal per FB (gibt's da ein Code-Beispiel?)
    - und einmal per Twincat-Konfiguration ... soll aber bei meinem Rechner die CPU recht belasten (?).
    Was sind hier die Vor- und Nachteile und wie funktioniert's?

    Anzumerken wäre noch, dass ich nicht bei jedem Zyklus lesen oder schreiben muss, sondern nur bei bestimmten "Events".

    Bin für jede Hilfe dankbar.

    Christian
    Zitieren Zitieren CX9000 - Verwendung von Novram  

  2. #2
    Registriert seit
    29.09.2006
    Beiträge
    368
    Danke
    0
    Erhielt 41 Danke für 38 Beiträge

    Standard

    Hallo,

    meines Wissens gibt es Bausteine dafür, schau doch mal nach z.B. "FB_NovRamReadWriteEx" und weitere.

    Viele Grüße

  3. #3
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Auf zyklisches Schreiben würde ich auch verzichten. Es belastet nicht nur den CX sehr stark, sondern es besteht auch die Gefahr, dass bei einem SPS-Stop der NOVRAM mit Nullen beschrieben wird.
    Für den ereignisgesteuerten Zugriff gibt es, wie schon Fx64 schreibt, den FB_NovRamReadWriteEx, es geht aber auch mit den Standard-ADS-Bausteinen.
    Code:
    VAR
       NVRead:ADSREAD;
       NVWrite:ADSWRITE;
    END_VAR
    
    NVRead(
    NetID:='',
    Port:=300,
    IdxGrp:=16#8003,   (* Die "3" ist die Geräte-ID des NOVRAM's, musst Du im Systemmanager nachschauen, welche ID er bei Deinem CX hat *)
    IdxOffs:=0,             (* Byte-Offset im NOVRAM, wenn Du nicht alles an einem Stück lesen/schreiben willst, brauchst Du dafür eine Variable *)
    Len:=SizeOf(ReadData),
    DestAddr:=Adr(ReadData),
    Read:=ReadTrigger,
    TmOut:=t#3s);
    
    NVWrite(
    NetID:='',
    Port:=300,
    IdxGrp:=16#8003,   
    IdxOffs:=0,
    Len:=SizeOf(WriteData),
    SrcAddr:=Adr(WriteData),
    Read:=WriteTrigger,
    TmOut:=t#3s);

  4. #4
    wisi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.02.2011
    Beiträge
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo "ST",

    Danke für Deine Antwort.

    Zitat Zitat von StructuredTrash Beitrag anzeigen
    Auf zyklisches Schreiben würde ich auch verzichten. Es belastet nicht nur den CX sehr stark, sondern es besteht auch die Gefahr, dass bei einem SPS-Stop der NOVRAM mit Nullen beschrieben wird.
    Meinst Du mit zyplischem Schreiben die von mir als zweites genannte Variante?

    Zitat Zitat von StructuredTrash Beitrag anzeigen
    Für den ereignisgesteuerten Zugriff gibt es, wie schon Fx64 schreibt, den FB_NovRamReadWriteEx, es geht aber auch mit den Standard-ADS-Bausteinen.
    Code:
    ...
    OK. ist schonmal interessant. Wie schaut hier ReadData und WriteData aus, wenn es sich um Arrays handeln? Gilt im einfachsten Fall ReadData = WriteData, d.h. man deklariert hier nur eine Variable als Container?

    Allgemeine Frage zum Nov-Ram. Kann ich darüber frei verfügen, oder läuft man hier Gefahr, etwas zu überschreiben, weil der Speicherbereich evtl. noch anderweitig genutzt wird (etwa von irgendwelchen FBs)? Deine ADS-Befehle könnten ja theoretisch die kompletten 128kB des CX9000 einlesen und schreiben.

    Besten Dank für Deine Hilfe
    Christian

  5. #5
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Zitat Zitat von wisi Beitrag anzeigen
    Meinst Du mit zyplischem Schreiben die von mir als zweites genannte Variante?
    Ja.
    Zitat Zitat von wisi Beitrag anzeigen
    OK. ist schonmal interessant. Wie schaut hier ReadData und WriteData aus, wenn es sich um Arrays handeln? Gilt im einfachsten Fall ReadData = WriteData, d.h. man deklariert hier nur eine Variable als Container?
    Du gibst in den FB-Aufrufen Grösse und Adresse der Variablen an. Ob das einfache Datentypen sind oder Arrays oder Structs, spielt keine Rolle. Natürlich kannst Du zum Lesen und Schreiben dieselbe Variable verwenden.

    Zitat Zitat von wisi Beitrag anzeigen
    Allgemeine Frage zum Nov-Ram. Kann ich darüber frei verfügen, oder läuft man hier Gefahr, etwas zu überschreiben, weil der Speicherbereich evtl. noch anderweitig genutzt wird (etwa von irgendwelchen FBs)? Deine ADS-Befehle könnten ja theoretisch die kompletten 128kB des CX9000 einlesen und schreiben.
    So weit ich weiss, hast Du den gesamten NOVRAM zur freien Verfügung.
    Geändert von StructuredTrash (28.09.2012 um 16:39 Uhr)

  6. #6
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Hallo,

    seit der TwinCAT Version 2.9 sind keinerlei FBs mehr notwendig um mit dem NOVRAM zu arbeiten.

    Im Infosys von Beckhoff ist eigentlich sehr einfach beschrieben wie man mit den NOVRAM benutzt. KLICKI KLICKI

    Also einfach die Variablen, die im NOVRAM gespeichert werden sollen, als Ausgangsvariablen deklarieren (AT%Q*), im Systemmanager in der NOVRAM Baugruppe die entsprechenden Verknüpfungen erzeugen, den Haken bei "Auto Init linked PLC Outputs" setzen und fertig.

    Problem (zumindest bei mir):
    Das ganze funktioniert irgendwie nur mit globalen Variablen. Wenn ich Variablen aus einem FB in den NOVRAM schreibe, was ohne Fehlermeldungen funktioniert, sind die Werte nach einem SPS Neustart trotzdem wieder 0.
    Hatte bisher noch keinen Nerv mich deswegen an die Hotline zu wenden.....

  7. #7
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Zitat Zitat von MasterOhh Beitrag anzeigen
    Hatte bisher noch keinen Nerv mich deswegen an die Hotline zu wenden.....
    Die wird Dir ganz bestimmt weiterhelfen.
    Ich hatte ähnliche Probleme und habe mir die Achse abgedreht, um dagegen etwas zu tun. Nach langem Bohren auch jenseits der Hotline bekam ich schliesslich von Beckhoff die Auskunft, dass bei einem SPS- oder Feldbus-Stop eine "ungünstige Verkettung von Ereignissen" dafür sorgen kann, dass auch nach dem Nullsetzen der Ausgänge noch ein NOVRAM-Schreibvorgang stattfindet. Seitdem verwende ich die NOVRAM-Klemme EL6080.

  8. #8
    wisi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.02.2011
    Beiträge
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo MasterOhh,

    danke für Deine Antwort. Kann ich diese so verstehen, dass die Implementierung via Twincat Konfiguration nicht mit Performance-Einbußen verbunden ist, d.h. Twincat ist schlau genug, die Variablen nur zu schreiben, wenn sie sich ändern bzw. wenn gelesen wird?

    In meinem Falle möchte ich einige Lichtszenen (3 Bool-Arrays und drei INT-Arrays) als Presets abspeichern, d.h. das Lesen aus dem Nov-Ram wäre nur beim Aufruf (Auswahl per Tastendruck) und das Schreiben nur beim Speichern (ebenfalls per Taste) nötig.

    Besten Dank!
    WISI

  9. #9
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Zitat Zitat von wisi Beitrag anzeigen
    Kann ich diese so verstehen, dass die Implementierung via Twincat Konfiguration nicht mit Performance-Einbußen verbunden ist, d.h. Twincat ist schlau genug, die Variablen nur zu schreiben, wenn sie sich ändern bzw. wenn gelesen wird?
    Nein, so schlau ist TwinCat nicht, die Daten werden zyklisch geschrieben, und das kann gerade einen schwachbrüstigen CX9000 arg ins Schwitzen bringen. TwinCat ist im Gegenteil sogar so dumm, dass es die NOVRAM-Daten bei einem SPS- oder Feldbusstop manchmal löscht, weil es ja schliesslich Ausgänge sind, die dabei auf 0 gesetzt werden.

  10. #10
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Für deinen Anwendungsfall wäre das persistente Speichern im Flash vieleicht die bessere Alternative. siehe FB_WritePersistentData

    Ob beim Speichern in den NOVRAM geprüft wird ob die Daten sich geändert haben kann ich mir nicht vorstellen. Da ja alles über das Prozessausgangsabbild geht werden die Daten sicher zyklisch geschrieben. Performanceprobleme sollte es aber nur geben, wenn du mit sehr kleinen Zykluszeiten und großen Datenmengen arbeitest.
    In einem Projekt habe ich ein Array[1..100] of Int das im NOVRAM gespeichert wird, das geht problemlos.......

Ähnliche Themen

  1. Verwendung von Webservices?
    Von newbe im Forum Hochsprachen - OPC
    Antworten: 9
    Letzter Beitrag: 23.02.2016, 11:25
  2. Verwendung von Simatic iMap
    Von luekry im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 22.07.2009, 08:30
  3. Verwendung von BOOL
    Von Lipperlandstern im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 13.03.2008, 13:09
  4. Verwendung von ODK mit C++ am Microbox T
    Von MM440 im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 05.04.2007, 13:47
  5. Verwendung von FB
    Von drfunfrock im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 22.11.2005, 13:40

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •