Parametersatz speichern/laden im Klartext

marlik83

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe eine WAGO Steuerung (Target-Visualisierung CP121-SVGA-TV) mit CoDeSys V2.3. Es geht um eine Anlagensteuerung bei der ich mehrere Parametersätze benötige und diese individuell in der Oberfläche laden/speichern müsste.

Aktuell habe ich mir so beholfen: Ich habe einen Datentyp (Struct) erstellt, in dem ich alle benötigten Parameter ablege:

Code:
        dwHandler := SysFileOpen(FileName := strFileName, Mode:='w');        
        IF dwHandler > 0 THEN
            dwBytes_Written:=SysFileWrite(File:=dwHandler, Buffer := ADR(Parameter), Size:=SIZEOF(Parameter));
            xWritten_Ready:=SysFileClose(File:=dwHandler);
            xWritten_Error:=FALSE;
        ELSE
            xWritten_Error:=TRUE;
        END_IF

Die Daten liegen nun in der Datei strFileName vor, jedoch in einem Format, dass ich z.B. am PC nicht anschauen editieren kann. Wenn ich nun den Parameter wieder zurücklese funktioniert das nun auch soweit. Wenn jedoch in der Anlage z.B. ein neuer Parameter definiert wurde, demnach der Datentyp erweitert wurde sind alle hinterlegten Datensätze futsch, da Sie nicht gelesen werden können wg. der geänderten Struktur. Ist ja eigentlich auch einleuchtend. Da ich eine Änderung nicht ausschließen kann, muss ich daher einen anderen Weg finden die Daten zu speicher und am besten so, dass die Parameterdatei auch an einem Windows PC lesbar ist. Leider habe ich schon viel gesucht und keine wirkliche Lösung bzw. gute Ansätze gefunden.

Hat hier vielleicht jemand eine Idee was man hier machen könnte?
 
Du könntest den Datensatz in einer Textdatei im (old-Windows-Style) INI-Format speichern:
Code:
Parametername1=Test-Datensatz 03.07.2014
Parametername3=45.678
Parametername2=123

Beim Einlesen in die Steuerung zunächst einen Datensatz mit Standardwerten belegen (Template) und dann die Textdatei Zeile für Zeile parsen.
Später dazugekommene bzw. nicht in der Datei enthaltene Parameter behalten den Standardwert.


Mit mehr Aufwand könntest Du die Textdatei auch im neumodischen XML-Format aufbauen. Vielleicht gibt es aber dafür schon einen fertigen Parser?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

japp, das klingt gut. Ich sehe aktuell nur noch ein Problem. Wie kann ich es machen, dass in den entsprechenden Parameter der Wert dann geschrieben wird?

Parameter Parametername1 soll aus der csv gelesen werden und in das entsprechende STRUCT "Parameter" mit gleichnamigen Element geschrieben werden. Soll heißen:

Er findet in der CSV Datei:
ParameterTest=234.0

und soll daraus
Parameter.ParameterTest := 234.0 machen, dass also der Wert im Struct abgelegt wird.

Aktuell liegen alle Parameter in dem Struct Parameter drin, oder wie würdest du die Sache geschickter angehen? Das Parsen der CSV schau ich mir gerade an, hab ich bisher in CoDeSys noch nie genutzt.

Danke schonmal!
 
Von Dateioperationen in Codesys habe ich keine Ahnung. Das Einlesen von INI-Dateien mache ich mit VBS.

Du müßtest die Datei
- zeilenweise einlesen
- am '=' splitten
- ggf. führende/endende Leerzeichen entfernen (trimmen)
- den String vor dem '=' vergleichen, ob er einem Parametername entspricht (eventuell CASE-Anweisung möglich)
- den Wert nach dem '=' von Text in numerisch umwandeln und dem Parameter zuweisen

Harald
 
In Codesys funktioniert das auch, aber da gibt es leider keine String.Split() Funktion. Die muss man sich aus den gegebenen String-Funktionen selber basteln.
Mit FIND kann man die Position des '= ' im String finden und dann mit LEFT und RIGHT den Parameternamen und den Wert aus dem String kopieren.
Etwas kniffelig wird es wenn man mögliche Fehleingaben abfangen will. Die Konvertierungsfunktionen in CodeSys zeigen einem leider nicht an ob der zu wandelne String gültig ist oder nicht. Wenn der String nicht passt, kommt bei umwandlung in eine Zahl einf nur 0 raus.
String_To_Int ('0') = 0
String _To_Int('sreghhtzh2435') = 0
 
Zurück
Oben