Dynamisch Kommunikation via Netzwerkvariablen

wackel_peter

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

ich suche eine einfache Lösung für die Kommunikation zwischen mehreren SPSn.
Aktuell werden dazu Schrieb bzw Leselisten von Netzwerkvariablen verwendet.
Eine Kommunikation zwischen Gerät A und B funktioniert soweit auch.
Nun ist es aber möglich das ein zweites Gerät-B ins Spiel kommt. Dann bekomme ich Probleme, da B-Geräte nunmal auf dem gleichen Port schreiben.

Mein bisheriger Lösungsansatz lautet wie folgt:
Jedes Gerät-B verfügt über zwei Netzwerkvariabeln-Listen.
Gerät B lässt sich als Modul1 oder Modul2 konfigurieren, default 1.
Gerät A empfängt beide Listen auf den entsprechenden Ports(Port 1202 und 1203).
Wird nun ein zweites Gerät B hinzugefügt, so muss es als Modul-2 konfiguriert werden.
GerätB-Modul1 sendet die Variablenliste1 an Port 1202 und Variablenliste 2 an Port 1300.
GerätB-Modul2 sendet die Variablenliste1 an Port 1301 und Variablenliste 2 an Port 1203.

Funktioniert leider nicht! :(

Hat jemand eine Idee oder eigent sich eine andere Lösung (Diverse Ethernet und Bussysteme möglich) besser?

Grüße,
Peter
 
Alternativ Schlage ich dir eine Symbolkonfiguration vor: Application => rechtsklick => Objekt hinzufügen => Symbolkonfiguration.

Hier kannst du nach einem fehlerfreien build variablen bestimmen, die über ethernet ausgetauscht werden sollen, bzw die zugriffsrechte für jede einzelne bestimmen.

Mit dem DataServer (Auch in Application hinzuzufügen) können dann alle symbolkonfigurationen verknüpft werden. dafür müssen alle SPSen im selben Projekt vorliegen.

Funktioniert mit Codesys 3.X. Ich weiß nicht was du benutzt.

Über Posrts und dergleichen brauchst du dir dann keine gedanken mehr machen.

Edit: mir ist grad aufgefallen, dass Symbolkonfigurationen noch nicht unterstützt werden, dafür kann man aber ohnehin auf einfach jede Variable der andern im Projekt eingebundenen SPS zugreifen.

Die Sysmbolkonfiguration eignet sich übrigends perfect für OPC-Verbindungen. So kommuniziert meine SPS mit einem PRO-FACE-Touchscreen problemfrei. Alles was ich bestimmen musste war eine IP.
 
Zuletzt bearbeitet:
wie du es beschrieben hast habe ich die sps , bzw das vorherige einzelprojekt für Gerät B in das Projekt von Gerät-A gezigen.
ergeben sie daraus irgendwelche nachteile bzw dinge die man unbedingt beachten sollte?
 
Beide SPSen müssen dem selben Projekt untergeordnet sein.
Alles Daten, Geräte, POUs und so weiter die im Pfad einer Application sind, werden grundsätzlich nur von der dazugehörigen SPS gesehen.

Man kann auch Variablenlisten, Funktionen und Programme erstellen auf die alle SPSes zugreifen können. Da muss man auspassen. Das ist bei dir aber erstmal nicht der Fall.

Wenn du nun beide SPSes im selben Projekt hast (was per Drag and Drop funktionieren sollte) kannst du jeder SPS unter Application einen DataServer zuweisen. Diesem kannst du dann DataSource zufügen. Und in der kannst du dann als Source Variablen der jeweils anderen SPS zuordnen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok. Vielen Dank, das werde ich gleich mal ausprobieren.
Wie sieht es mit Variablen mit strukturierten Datentypen aus,müssen die in beiden Applikation vorhanden sein?
Wie genau kommunizieren die Steuerungen miteinander? TCP?
 
Da bin ich mir nicht sicher. Es gibt Im Fenster DataSource den Tab Kommunikation. Es läft definitiv über Ethernet. Das genuae Protokoll ist mir grad aber schleierhaft. Dadurch das alle SPSen im selben Projekt sind kennen sie Ihre IPs untereinander, daher sind manuelle Netztwereinstellungen nicht nötig, können aber in diesem Tab eingestellt werden.
 
In einer kleinen Beispielanwendung bekomme ich es zum laufen.
Die Kommunikation ist damit zwar bequemer, jedoch wird mein Problem damit auch nicht gelöst.
GerätA kann auf die Werte x und y zugreifen von GerätB zugreifen.
Kommt nun ein weiteres Gerät B hinzu, woher soll A wissen welche Werte richtig sind?

Ich möchte nicht mit festen Adressen arbeiten und kein Gerät C erstellen, dass das selbe tut wie Gerät B.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist die selbe Variablenliste mit dem selben Inhalt von 2 verschiedenen SPSen? Dann mach der Port keinen Unterschied. Die SPS A schreibt die Liste mit den aktuell kommenden Daten voll.

Da die SPS keinen dynamischen Speicher hat, kann sie das auch gar nicht anders machen. Woher soll SPS A bei der Initialisierung wissen für wie viele Teilnehmer die Variablenliste erstellt werden muss um alle Daten parallel verarbeiten zu können?


Kommt nun ein weiteres Gerät B hinzu, woher soll A wissen welche Werte richtig sind?

Genau das ist es. SPS B1 schreibt werte in die Variablen. Dann schreibt SPS B2 Werte hinein. SPS A merkt nur, dass sich die Werte ändern.

Wenn B1 und B2 das selbe tun (weil sie zum Beispiel die gleichen Sensoren an verschiedenen stellen einer Maschine messen) aber eben unterschiedliche Werte erzeugen, muss jeder dieser Werte Speicherplatz in SPS A zugewiesen bekommen. Wenn du nur eine Variablenliste einfügst, wird auch nur einmal Speicherplatz zugewiesen.

Da hilft nur ein Statuswort. Wenn 1 drinsteht sind alle Daten in diesem Zyklus von SPS B1. Wenn eine 2 drinsteht sind alle Daten aus diesem Zyklus von SPS B2.
Ich hab nur keine Ahnung wer von den beiden SPSen gewinnen wird bei der Datenübertragung. Wer also in den Speicher schreiben darf und wer nicht.
 
Da hätte ich jetzt noch eine Idee:
Du lässt die SPS B 1 bis wie viel auch immer nur Ereignisbasiert senden.
In SPS A gibt es ein INT, dem du die Nummer 1 bis was auch immer gibt. Diese wird allen SPS B gesendet. Die SPS B mit der gleichen parametrierten Nummer soll dann Ereignisbasiert die variablenliste übertragen.

Pseudomäßig:

If SPSA_INT = MeineKonfignummer Then
r_Trig(IN:=TRUE);
END_IF

IF r_Trig.Q Then
xSendeEreignis := TRUE;
ELSE
xSendeEreignis := FALSE;
END_IF

Unter Netzwerkvariablen "Bei Ereignis übertragen" anklicken und als Varible "xSendeEreignis" eintragen.
SPS B muss natürlich eine Varible auf TRUE setzten, die von der SPS A dann wieder False gesetzt wird, so weiß SPS A, dass alle Daten von BX gesendet wurden.
Dann kann die SPS SPSA_INT hochzählen und so die nächste SPS B anfragen. Zykluszeit technishc ist das ein wenig hackelig aber möglich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zuerst wollte ich die Dataserver-Lösung nochmal austesten.
Die Reaktionszeit und Zuverlässigekeit der Wiedererkennung wenn mal eine Steurung ausgeschaltet wird wären solche Punkte.
Mit der Automatischen Erkennung ist das System meiner Meinung nach recht träge.
Und das Erkennen wenn eine Steuerung Ausfällt muss auch handisch implentiert werden oder?
 
Ich hatte mal ein ähnliches Problem mit einer Produktionsstraße mit bis zu 10 identischen Maschinen, die gemeinsam von einer SPS abgefragt werden sollten.
Am Ende haben wir das so gemacht, das die Master-SPS Variablen-listen für alle 10 Maschinen hat - jeweils gleiche Variablen, erweitert um einen numerischen Index der Maschine.
Die zu überwachenden Maschinen bekamen dann IP-Adressen, bei denen der letzte Block ihrer Maschinennummer entspricht. Diese wurde entsprechend in die jeweilige Variablendeklaration mit übernommen.

Ist mit Sicherheit nicht die eleganteste aller möglichen Lösungen, aber es musste schnell und ohne weitere Hardware gehen...
Außerdem ist bei dem von mir beschriebenen System nicht mit dem willkürlichen Austausch einzelner Maschinen zu rechnen.
 
Zurück
Oben