Datenaustausch über Netzwerk mittels Dateien

SY50

Level-1
Beiträge
271
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, es ist soweit ich muss mich an ein Scada System anklicken ;-)
ich muss nun Daten von meinem Steuerungen (sowohl Sps als auch ipc's mit Codesys V3 )
mit dem Leitsystem austauschen. Die Übergeordnete Ebene möchte dies unbedingt über XML Dateien machen. Wie ich schon mal vermutet habe, wollen sie xml Dateien schreiben, auf denen diverse Anweisungen enthalten sind. Rezepte usw. Um zu signalisieren dass eine Datei neu geschrieben wurde, wird eine *.txt datei als Triggerdatei geschrieben, welche ich nach dem Auslesen der XML dann wieder lösche.

nun zu meiner Frage. Hat von euch jemand so etwas schon mal gemacht? Also auf triggerdateien reagiert und etwas aus dem Netz gelesen geschrieben erzeugt und gelöscht? .... Des weiteren muss ich auch xmls erzeugen, aber soll ich dass alles mit fileopen .... Usw machen?

kann mir jemand behilflich sein?

Danke
 
Hallo,
ich verstehe gerade deinen Denkansatz nicht so ganz. Willst du direkt aus der SPS heraus die Daten erzeugen ... oder aus einer Visu.
Bei letzterem sollte es eigentlich gerade in diesem Segment (Beckhoff-CodeSys) schon Funktionalitäten geben, die auf Visual Studio / .Net-Basis arbeiten. Dort stehen dir dann schon passende Serialisierer zur Verfügung.

Vielleicht schreibst du mal noch etwas mehr dazu ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte es aus der sps direkt machen, denn manche Anlagen enthalten nur kleinere "Aggregate", welche keine Visuell haben und ich würde es gerne durchgängig haben, von daher direkt in der sps einlesen und auch erzeugen. Die sps die ich einsetze hat zwar auch ein filesystem, aber Diensten würden auf einem Rechner liegen, also nicht auf der jeweiligen Steuerung, sondern wenn man es so will auf einem Server.
 
Ist die Überlegung wert

Solche Lösungen haben wir schon sehr lange praktiziert.

Vorteil:

Leicht zu debuggen, auch bestens geeignet für Standalone und Unit Tests,

läuft auf verschiedensten Plattformen,

unabhängig von Protokollen und Einschränkungen der Lieferanten der Komponenten,

nach Fehlern und Unterbrechungen leichtes Recovery.

Die Synchronisierung haben wir anders gelöst, der Producer schreibt ausschliesslich seine Files, ein Consumer versucht ein Rename, wenn es klappt muss der Producer ein neues File anlegen, wenn es nicht klappt, weiss der Consumer, dass gerade geschrieben wurde.
 
Schön dass ihr das so gemacht habt, aber der Kunde will es leider anders ;-)
er möchte eben, dass ich seine XML Dateien lese, und nach Bearbeitung mit XML Dateien darauf antworte. Ich halte es allerdings auch für eine ganz gute Lösung. Aber weis nicht genau wie ich mit codesys V3 Vorgehen Soll
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Frage dazu :
Kann Codesys V3 eine Variable adressieren, deren Namen vorher als String zusammengebaut wurde ?
Wenn ja, dann sollte es nicht so problematisch sein, einen XML-Import zu schreiben. Wenn nein dann hast du m.E. ganz schön Schreibarbeit.
Aber prinzipiell würde ich hier auf .Net setzen (meine Meinung).

Gruß
Larry
 
Wieso variblen adressieren? Also ich möchte damit ja keine Variablen erzeugen oder so, sondern die XML soll nur als "Rezept" dienen. Also ich weis schon wenn das Element "X-Achse" mit den Attribut "Speed" in der XML steht , dass das die Vorschubgeschwindigkeit ist. Muss eben nur die XML irgendwie "dekodieren" also "Präsenz" wie geht das jetzt?
 
Naja ... scheinbar hast du mich nicht verstanden.
Wenn in deiner XML die Gruppe vielleicht "Rezeptdaten" und die Untergruppe "X_Achse" und deren Element "Speed" heißt dann könnte das ja dein Variablen-Name sein - nämlich "Rezeptdaten.X_Achse.Speed". Könntest du nun (was ich aber nicht weiß ob Codesys V3.0 das kann) diesen String zum direkten Adressieren einer Variablen nehmen dann wäre es nicht mehr so problematisch.
Ansonsten mußt du dir (so würde ich es ggf. machen) ein Array of String zusammenbauen in dem du die zusammengesetzten Variablen-Namen der XML schreibst und ein Array in das du die zugehörigen Werte schreibst. Oder du machst es als Struktur ...
Nun gehst du dann hinterher in einer Schleife das String-Array durch und machst darin ein Select Case-Konstrukt (z.B.) in dem du die Variablen-Namen deinen wirklichen SPS-Variablen zuordnest.
Das wäre das Einlesen - wie ich schon geschrieben habe "ein wenig" Schreibarbeit ...
Das Erzeugen einer XML (vor Allem wenn die noch eine Struktur haben soll) würde dann im Prinzip so ähnlich umgekehrt funktionieren.

In jedem Fall mußt alle Variablen-Namen der XML kennen und deren Zuordnung zu deiner Steuerung kennen - das hebt die eigentliche Flexibilität der XML im Grunde komplett auf.

Aber vielleicht ist es ja gar nicht so schlimm und kompliziert, wie ich denke (aber wahrscheinlich doch).
Du könntest z.B. mal einen Auszug so einer XML-Datei posten - dann kann man sich ein besseres Bild machen.
Dann könntest du mal gegenchecken, ob du in Codesys V3.0 so einen indirekten Variablen-Zugriff, wie ich ihn anfänglich genannt habe, machen kann.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Frage dazu :
Kann Codesys V3 eine Variable adressieren, deren Namen vorher als String zusammengebaut wurde ?
Wenn ja, dann sollte es nicht so problematisch sein, einen XML-Import zu schreiben. Wenn nein dann hast du m.E. ganz schön Schreibarbeit.
Aber prinzipiell würde ich hier auf .Net setzen (meine Meinung).

Gruß
Larry

Ja, das geht. Aber wenn Du nicht Hersteller einer Codesys SPS bist, kostet das ein wenig Geld.

Es gibt von 3S das Gateway SDK. Ich hatte das einmal vor über 10 Jahren in einem anderen Projekt (Indralogic) benötigt.

Es war recht komplex im Einsatz und ohne Unterstützung aus Kempten ist die Lernkurve steil bis senkrecht aus meiner Erinnerung.

Das SDK für Windows war seinerzeit ein Ding, das in Verbindung mit Visual Studio C++ nur mit guten Kenntnissen von Microsoft COM+ zu meistern war.

gateway01.jpg

Hier ein Ausschnitt aus den ca.30 Files, die ich noch auf meiner Harddisk gefunden habe.
 
Danke für eure Anregungen, aber mit dem String zu reagieren halte ich jetzt ehrlich gesagt für viel inflexibler, denn dann muss die Variable in der sps ja auch immer schon bei der Entwicklung des Leitsystems bekannt sein. Ich hätte es jetzt so gemacht, dass ich ein Baustein schreibe, der dann wie das von Larty beschriebene Array abgearbeitet wird, aber die jeweiligen Array werden durch Methoden gefüllt. Also beim hochfahren der sps führe ich x mal eine Methode aus, die ausgewählte vatiablendaten in die entsprechenden arrays des Bausteins schreiben. Das wäre recht flexibel. Oder was meint ihr. Also es liegt jetzt nur noch daran wie ich die Datei lese und erzeuge. ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Willst Du jedesmal, wenn Du eine XML-Datei eingelesen hast, die SPS neu starten? :confused:

Harald

Nein natürlich nicht, will nur beim hochfahren damit festlegen welche Variablen überhaupt von der XML beeinflusst werden können. Naja das grenz die Sache zwar etwas ein, aber finde ich soweit ok. Oder was meint ihr?
 
@RobiHerb:
Danke für die Information - vielleicht kann ich dieses Wissen irgendwann einmal ganz gut gebrauchen ...

@TE:
So, wie du es eingangs beschrieben hast, habe ich diesen Datenaustausch ganz anders verstanden - so in der Art wie : es kommt ein Trigger für einen neuen Datensatz, du liest das aus und sortierst die Information entsprechend ein und arbeitest damit. Das Gleiche dann noch einmal umgekehrt.
Ich habe ein bißchen das Gefühl, dass du nicht so genau weißt, was gemacht werden soll, wo das hinsteuert und welchen Aufwand du dafür treiben mußt.
Vielleicht überdrenkst du das Ganze noch einmal ein wenig - Visual Studio wäre hier auch meine erste Wahl (als eigene Applikation).

Gruß
Larry
 
@Larry, genau das will ich machen. Hast du schon richtig verstanden. Weis genau was ich machen will, habe es vielleicht nicht gut erklärt, aber du hast es doch verstanden. ;-)
 
Zurück
Oben