Array in Nov Ram

COOLT

Level-1
Beiträge
98
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hey leute ich hätte da mal wieder ein problem und zwar:
Ich weis, dass man Merker als %Q blablabla setzen kann und das mit dem Novram dann verknüpfen aber geht das ganze auch mit einem Array? weil ich will ein Array ins Nov RAM schreiben damit das z.B. bei einem Reboot erhalten bleibt
 
Hallo Coolt,

ich würde das Problem folgendermaßen lösen:

1) Struktur erstellen:
erstelle eine Struktur, z.B.:

TYPE ST_NOVRAM :
STRUCT
bVariable: BOOL;
abVariable: ARRAY[1..10] OF BOOL;
sString: STRING(80);
rReal: REAL;
END_STRUCT
END_TYPE

2) Variable deklarieren:
stStruktur AT %Q* :ST_NOVRAM;

3) System-Manager:
Projekt übersetzen, im System-Manager neu einlesen

4) NOV-Ram:
eine neue Variable beim NOV-Ram-Ausgang anfügen, die Struktur auswählen und zum Schluß noch verknüpfen (siehe Schreenshot)


Damit sind alle Variablen die ins NOV-Ram sollen an einer Stelle im Programm.Nur mal so als kleines Beispiel.

Grüßle
iguazu
 

Anhänge

  • Struktur.jpg
    Struktur.jpg
    202,7 KB · Aufrufe: 48
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann ich nich einfach das Array mit
Code:
 arrBenutzerliste    :    ARRAY[1..Max_Benutzer] OF st_User;        (*    Benutzerliste mit ID, Level und Name der Anwender    *)
mit
Code:
 arrBenutzerliste  AT %Q*  :    ARRAY[1..Max_Benutzer] OF st_User;        (*    Benutzerliste mit ID, Level und Name der Anwender    *)
so deklarieren? funktioniert das nicht auch?
 
Hallo,

klar, funktioniert auch (siehe Screenshot).
ich hoffe ich konnte dir weiterhelfen.

Grüßle
iguazu
 

Anhänge

  • Struktur.jpg
    Struktur.jpg
    216,6 KB · Aufrufe: 47
Hallo,

ich wurde das nicht so machen. Es gibt einen entscheidenten nachteil bei dieser Methode. Bei einem Stop oder Reset der Steuerung werden alle Ausgänge auf Null gesetzt so auch die vom NovRam und so sind alle Daten weg!

Der bessere Weg ist das schreiben der NovRam Daten über den Baustein FB_NovRamReadWriteEx oder FB_NovRamReadWrite.

Ich hab mir einen Baustein gebastelt der die NovRam Struktur kontrolliert und bei einer Änderung der Daten die NovRam Struktur in den NovRam schreibt.

Zum Start des Programms wird die Struktur einmalig eingelesen.

gruß bonatus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich wurde das nicht so machen. Es gibt einen entscheidenten nachteil bei dieser Methode. Bei einem Stop oder Reset der Steuerung werden alle Ausgänge auf Null gesetzt so auch die vom NovRam und so sind alle Daten weg!

....

Also das ist jetzt mal quark. die daten bleiben erhalten.
 
Hallo repök,

wenn du die Daten des NovRams aus Ausgang deklarierst z.B.: NovRamOut AT %Q* ist es aber so. Alle Ausgänge werden auf 0 bzw. FALSE gesetzt und die Daten sind weg!

Hast du es schonmal ausprobiert?
 
Danke euch für die hilfe leute aber jetz hab ich ein kleines Problem und zwar:
Code:
(* Generated automatically by TwinCAT - (read only) *)
VAR_CONFIG
    .COMin_COMport AT %IB0 : PcComInData;
    .COMout_COMport AT %QB528 : PcComOutData;
    .COMin_KL6001 AT %IB66 : KL6inData;
    .COMout_KL6001 AT %QB594 : KL6outData;
END_VAR
Das sind die Var_Configs und wenn ich das Programm mit strg+F8 debuggen lasse sagt der mir:
Code:
Warnung 1990: Kein 'VAR_CONFIG' für 'P_Benutzerlisten_Initialisierung.arrBenutzerliste'
Da bin ich mir dann nich so sicher ob das so ganz funktioniert.
Weis einer wie ich die arrBenutzerliste da rein bekomme?

Und wenn ich
Code:
VAR
    arrBenutzerliste    AT%QB524:    ARRAY[1..Max_Benutzer] OF st_User;        (*    Benutzerliste mit ID, Level und Name der Anwender    *)
END_VAR
benutze dann sagt er mir
Code:
 Fehler 3801: P_Benutzerlisten_Initialisierung (3): Die Variable 'arrBenutzerliste' ist zu groß (48600 Byte)
Weis einer wie ich das deklarieren sollte am besten?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie es im Code schon so schön heißt sind diese Var_Configs "Generated automatically by TwinCAT". Die entsprechende Warnung ist auch normal. Sie kommt immer, wenn du irgendwelche Ein- oder Ausgänge in deinem Programm hast, die du im Systemmanager noch nicht verknüpft hast. Verknüpfe einfach deine Variablen im Systemmanager und übersetze das Programm erneut. Dann müsste die Warnung weg sein.
 
o.k. Danke dir
Jetz hat er wieder das Problem:
Code:
Fehler3801:P_Benutzerlisten_Initialisierung (3) : Die Variable 'arrBenutzerliste' ist zu groß (48600 Byte)
is aufgetaucht nachdem ich das Projekt neu eingelesen habe.
so dann weiter im Text, nächstes Problem. Ich möchte das das Array ins Novram gespeichert wird und von dort dann bei einem System neustart wieder ausgelesen wird wie geht das? Weil ich hab das ja jetz nur als Ausgang deklariert und nich auch noch als Eingang soll ich dafür einfach mal noch nen Array festlegen was dann in das Ausgangsarray per FB oder Programm reinschreibt?
 
Zuletzt bearbeitet:
Hallo Coolt,

ich würde das Problem folgendermaßen lösen:

1) Struktur erstellen:
erstelle eine Struktur, z.B.:

TYPE ST_NOVRAM :
STRUCT
bVariable: BOOL;
abVariable: ARRAY[1..10] OF BOOL;
sString: STRING(80);
rReal: REAL;
END_STRUCT
END_TYPE

2) Variable deklarieren:
stStruktur AT %Q* :ST_NOVRAM;

3) System-Manager:
Projekt übersetzen, im System-Manager neu einlesen

4) NOV-Ram:
eine neue Variable beim NOV-Ram-Ausgang anfügen, die Struktur auswählen und zum Schluß noch verknüpfen (siehe Schreenshot)


Damit sind alle Variablen die ins NOV-Ram sollen an einer Stelle im Programm.Nur mal so als kleines Beispiel.

Grüßle
iguazu

so wirds gemacht......
 
Im Reiter Allgemeines DPRAM gibt es ein Häkchen zu setzen : Auto Init linked PLC Outputs. das muss gesetzt sein. dann is fertig.
 
Das struct dingen bringt mich auch nich weiter ich das Struct was bei mir hinter array steht ist ja :
Code:
TYPE st_User :
STRUCT
    sUserID:STRING;
    sUserlvl:STRING;
    sUserName:STRING;
END_STRUCT
END_TYPE
Und wenn ich versuche das mit dem dpram zu verknüpfen sagt der mir es wäre zu groß.
Ich denke mal das der novram für so eine große Datenmenge nicht ausgelegt ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wieviele user willst du anlegen? vieleicht mal mit weniger probieren?
Die Strings verkürzen würde ich auch noch. Kein schwein braucht 255 zeichen für seinen namen. also blabla:String[10]. der wäre jetzt 10 zeichen lang.
 
K mit der String verkürzung isses klein genug geworden. und 200 is erstmal nen Start wert ich arbeit schließlich in einer nicht gerade kleinen Firma
glaube zwar kaum das mehr als 100 leute zugang zur gleichen maschine brauchen aber egal es soll für viele ausgelegt sein.

Danke euch leute damit wäre mal wieder ein Problem weniger in meinem Projekt xD
Mfg
COOLT
 
Zuletzt bearbeitet:
So ich hab das ganze mal getestet und als ich dann aus meinem Programm die vorgegebenen Benutzernahmen rausgenommen habe und das ganze dann im online modus resettet habe und neu gestartet habe hat er jetz die karte nimmer erkannt.
 
Zurück
Oben