Visualisierung mittels C#

Woerneproppen

Level-1
Beiträge
18
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus zusammen,

ich habe ein funktionierendes Programm mit einer WebVisu auf einem 750-8202 am laufen. Allerdings würde ich die Visualisierung jetzt gerne mittels C# realisieren. Bisher habe ich aber nur die Möglichkeit gefunden mittels Modbus auf die Wago zuzugreifen, aber dann eben nur direkt auf die Wago.
In der Arbeit habe ich diesen Zugriff auf eine Bosch-Rexroth SPS (basiert auch auf Codesys) schon realisiert bekommen, allerdings lief dies über eine eigene DLL von BR. Allerdings war es da möglich direkt auf die Variablen der Symbolkonfiguration zuzugreifen. Genau sowas würde ich auch für die Wago suchen, damit ich das Programm nicht ändern muss, sondern so weiter verwenden kann.

Habt ihr eine Idee wie es mit möglichst wenig Aufwand umzusetzen wäre?

mit freundlichen Grüßen
Woerneproppen
 
Moin, ich gehe mal davon aus, dass Du einen externen Webserver verwenden und nicht Dein eigene Visu auf dem Controller hosten willst.
In dem Falle gäbe es von CODESYS und WAGO eine völlig veraltete Modbus DLL oder von CODESYS einen schweine-teuren PLChandler. Letzterer greift über das CODESYS Gateway auf Variablen jeder beliebigen CODESYS 2.3 / 3.5 basierten Steuerung (vom Hersteller unabhängig) zu. Alternativ nimmst Du ein Standard-Protokoll, z.B. OPC UA.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein ich wollte ich eigentlich gar nicht über einen Webserver gehen. Wie ich geschrieben habe, baue ich bzw. habe ich eine Programm auf Basis von C# geschrieben, welches als Visualisierung für mein SPS Programm dienen soll. Das Programm soll dann auf einem Raspberry Pi ausgeführt werden und die Verbindung soll über Ethernet erfolgen.
Hierzu muss ich auf die Variablen in meinem Programm zugreifen. Wenn ich des bisher richtig gelesen und verstanden habe, kann ich mit Modbus allerdings nur auf die Aus- und Eingänge direkt zugreifen und keine Variablen in der Symbolkonfiguration ansprechen.

Mir ist durchaus bewusst, dass das über die WebVisu wesentlich leichter zu realisieren ist, dies ist ja auch schon geschehen und das Programm läuft ja.

Die Anbindung von einem Programm an eine SPS ist für mich leider, bis auf des Bosch-Rexroth System, völliges Neuland. Zudem habe ich leider keine Dokumentation dazu gefunden die mir z.B. eine Liste von Befehlen zeigt, mit denen ich mich dann z.B. per OPC UA verbinden und dann einzelne Variablen auslesen könnte. Dazu muss ich sagen, habe ich mit OPC UA auch keine Erfahrungen gemacht bisher.

Bei Bosch-Rexroth gab es eine DLL mit Beispielen und einer PDF-Datei mithilfe derer man sich durchhangeln konnte (bei weitem nicht perfekt...).
 
Hi
Hat jetzt nicht gerade direkt mit deinem Thema was zu tun, aber du schreibst, dass du die C# Visu auf einem Raspberry laufen lassen wills. Wie kannst du das? Ist ja Linux drauf.(?)

Gruss blimaa
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tatsächlich hatte ich das gelesen, dass es mittlerweile wohl möglich sei die Programme die in C# zu schreiben und auf dem Raspberry Pi lauffähig zu bekommen. Ich wollte das mit folgender Anleitung mal ausprobieren:

 
Ich hab mit Net Core und Blazor noch nicht gearbeitet. Was sind denn die Unterschiede bzw. die Nach- und Vorteile. Deine Antworten sind leider sehr kurz und nicht wirklich Hilfreich.

Ein paar mehr Worte der Erklärung wären hilfreich. Was ist Blazor? Wobei genau hilft mir das?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Net Core ist erstmal für Dich kein großer Unterschied zu Net Framework.
Net Core läuft aber, mit den entsprechenden Runtimes oder wenn es entsprechend compiliert ist nativ auf Linux und MacOs.

Blazor basiert auf Net Core und dient zur webbasierten Programmierung. Dein Raspi wird dann zu einem Webserver,
den Du dann auch von anderen Geräten aus erreichen kannst. (Aber auch direkt lokal auf deinem Raspi).

Wenn du weiterführende Infos brauchst solltest Du dich über die üblichen Wege informieren.
Es gibt z.B. gute Tutorial-Videos in Youtube.

Zu deinem Problem der Kommunikation per se kann ich Dir leider nur wenig weiterhelfen.
Ich selbst nutze bei einer Wago 750-841 Modbus zur Kommunikation zwischen C# und der SPS,
ich habe aber auch nicht viele Daten die da ausgetauscht werden.

Grüße

Marcel
 
Ok. Muss ich mir mal anschauen.

Viele Daten muss ich auch nicht austauschen, allerdings hab ich per Modbus nur die Möglichkeit gefunden direkt auf die Ausgänge zuzugreifen und nicht auf Variablen eines Programms. Hast du dafür evtl. eine Lösung für mich?
Die Read/Write Coil Bausteine hatte ich gefunden, aber wie gesagt, soweit ich des verstanden habe, kann ich damit nur direkt die Aus- und Eingänge der Bausteine ansprechen.
 
Also bei meiner alten 841 sind die Modbus Coils und Inputs auf Merkerbereiche gemappt, auf die ich dann meine Variablen deklariere.
Ob das bei deiner genau so ist, musst Du dem Handbuch entnehmen.

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verwendet die 750-8202, leider werde ich aus er Anleitung nicht schlau... Bei BR hatte ich damals simple befehle wie "readvariablebysymbol(String)" und im String befand sich der name aus der Symbolkonfiguration.

Bei dem Modbus werd ich nicht so wirklich schlau, wo und wie ich die Variablen dann definieren muss und wie ich auf diese Zugreife...

Gibt es denn keine Möglichkeit um es ähnlich wie bei BR machen bzw. kann mir jemand erklären wie das aufgebaut ist? Ein Beispielcode ist da meist sehr hilfreich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also bei mir läuft Mono und die "Visu" in VB. Konnte da noch keine Probleme feststellen.
Vielleicht hätte ich es nicht zu allgemein formulieren sollen.

Also Korrektur:

Wenn Du etwas neues Anfängst, mach es bitte mit .Net Core bzw. aktueller Software.

Grüße

Marcel
 
Ich wollte kurz Rückmeldung geben.

Ich hatte es zwischenzeitlich versucht mit OPC_UA zu realisieren. Hierfür habe ich aber keine kostenlose Bibliothek für C# gefunden. Somit bin ich wieder zurück auf Modbus gewechselt. Nach langem Suchen habe ich gefunden, dass ich in der Netzwerkübersicht direkt die Variablen für den Modbus freigeben kann und mir dort dann auch die Adressen angezeigt werden. Somit ist eine Zuweisung im Programm gar nicht notwendig. Das Verbinden, abfragen und schreiben der Variablen ist ab da ja dann nur noch eine Kleinigkeit und habe ich mit der DLL von EasyModbus in C# realisiert.

Danke trotzdem für eure Tipps. Jetzt heißt es nur noch, das ganze auf dem RaspberryPi zum laufen bekommen.
 
Jetzt hab ich doch nochmal eine Frage:

Die Verbindung steht, die Bool Variablen kann ich alle auslesen. Allerdings hab ich jetzt noch ein Problem mit Int Variablen. Sobald ich diese im Modbus-Konfigurator anlege, werden die Werte mit denen ich eigentlich initialisieren möchte anscheinend gelöscht und auf 0 gesetzt. Leider kann ich die Werte über Modbus auch nicht beschreiben. Fehlermeldung bekomme ich keine.

Beim lesen gehe ich wie folgt vor:

iTimeUnlock[] = client. ReadInputRegisters(32800, 1); // Addresse hab ich aus dem Modbuskonfigurator, siehe Screenshot
iTimeVentilation[] = client.ReadInputRegister(32816, 1);

Für das Schreiben der Variable wollte ich folgende Methode verwenden:

client.WriteSingleRegister(32800, iTimeUnlock[0]); // Startwerte sind im Array vorher im Programm festgelegt
client.WriteSingleRegister(32832, iTimeVentilation[0]);

Sieht jemand evtl. schon den Fehler? Bzw. kann mir jemand erklären, warum die Werte in der SPS sofort auf 0 geschrieben werden, anstatt auf ihren Initialwerten zu bleiben?
 

Anhänge

  • 2022-03-21 15_32_11-B12_Versuchskammer_C#.ecp - e!COCKPIT.png
    2022-03-21 15_32_11-B12_Versuchskammer_C#.ecp - e!COCKPIT.png
    24,5 KB · Aufrufe: 24
Zurück
Oben