Codesys für raspberry auch auf Debian lauffähig?

tomrey

Level-1
Beiträge
362
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
ich überlege, meine Hausautomatisierung auf Wago 750-881 aufzuteilen in einen Wago-Teil und einen Linux-Teil.
Auf Wago bliebe die reine Hausautomatisierung (Licht, rollos usw.) und mein Debian-Server, auf dem alles was mit Multimedia zu tun hat, würde die Visu und weitere Integration mit z.B. der Heizung übernehmen.
Auf dem Debian laufen (nur für meine eigenen Zwecke) Apache und node-red, mit dem ich schon heute http-put Befehle aus der Wago weiterverarbeite.

Soweit ich das beurteilen kann, müsste dazu:
1. Die Codesys Entwicklungsumgebung 3.xy unter Debian laufen
2. Codesys soft-SPS dito.
3. Diese mit der Wago reden können (Modbus?)
Logisch, daß die Wago weiterhin mit Codesys 2.3 programmiert wird.

Stimmt das so?
Hat das schon wer gemacht?
Was muß ich in der Wago für Modbus alles ändern/vorbereiten?
Kann ich das vorab testen?
Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum umständlich,
ich muß mein mühsam angeeignetes codesys 2.3 knowhow sowieso für die Programmierung auf der Wago weiternutzen also will ich maximalen nutzen davon haben.
Außerdem läuft ja eh schon der Debian-server.
Vor Jahren hatte ich mal mit scadabr erste Gehversuchen gemacht aber da funktionierte die Verbindung mittels OPC Server nicht richtig.
Vielleicht ist der Ansatz eine codesys hmi-Lösung aber genau das kann ich nicht beurteilen und suche deshalb hier nach Efahrungen.
Gruß
 
Umständlich deshalb:
  • Die Codesys-Entwicklungsumgebung läuft nicht unter Linux.
  • Die Codesys-Runtime ist zwar für den Raspberry sehr günstig, nicht aber für Debian
  • Eine webbasierte Visualisierung kannst du sehr einfach mit Lösungen wie openhab, IP-Symcon oder ähnlichen einfach umsetzen.
    Dazu ist die Kopplung zu anderen Systemen (AV-Receiver, Sonos, ... einfach

Gruß
Blockmove
 
Hallo,
es gibt natürlich verschiedene Möglichkeiten (wie immer)
1. Linux SL X86 / wir vermutlich nächstes Jahr kommen, aber die wird sicher mehr kosten wie die Raspberry PI Runtime
2. du könntest 750-881 ersetzen durch einen PFC100 der PFC200 (abhängig davon welche KBus Klemmen du am Start hast)
dann hättest du die neue Webvisu drauf.
3. Pi als Webvisu zwischen 750-881 geht auch immer und ist wenn er 365d im Betrieb (was in einem Haus in der Regel der Fall ist) auch wirklich zuverlässig (das aus/ein schalten ist eher das kritische)

Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank, der Nachbar hat mir bereits einen übrigen PI angeboten. Ich werde jetzt erstmal die Kommunikation der V3 Entwicklungsumgebung und der mitgelieferten softSPS und HMI mit meiner 750-881 lernen (howto?). Hab im Moment viel Zeit weil meine Heizung sich verabschiedet hat und ich Frostschutzheizer am Kamin bin...
Evtl. muß ich sowieso Kommunikation lernen um eine neue Heizung einzubinden bzw. die richtige zu kaufen. Aber by the way: Bei CoDeSys steht bei HMI-SL etwas von Portierbarkeit auf Linux. Bedeutet das, ich könnte evtl. auch noch mit der 2.3 meine Visu als HMI auf meinem Linux-Server laufen lassen und per browser ansprechen? Habe verstanden, daß die webvisu immer den webserver auf der Wago braucht und wie blockmove schreibt nur dafür noch eine softSPS zwischenzuschalten ist eigentlich Blödsinn.
Grüße
 
@tomrey
Ich denke du bist zu sehr Codesys und Debian fixiert.
Dein 881 ist bis auf die veraltete Webvisu vollkommen ok.
Schnap dir mal den Raspi und spiele mit den diversen Homeautomation-Lösungen.
Die Kommunikation zu der Wago erfolgt über Modbus. In Codesys musst du die entsprechenden Variablen nur mit AT auf Merker legen und dann steht die Variable dem System zur Verfügung.
Der Vorteil der Homeautomation-Lösungen ist, dass sie Schnittstellen zu vielen anderen Systemen (EnOcean, Homematic, HUE, div. AV-Receiver, ...) mitbringen.
Neben der Visu hast du quasi ein Universal-Gateway.

Hier mal ein Codebeispiel aus meinem IP-Symcon um beim Klingeln eine Meldung auf meinen Kodi-Boxen auszugeben:

Code:
<?
IPS_LogMessage($_IPS['SELF'],"Alarm_Kodi - gestartet");
IPS_LogMessage($_IPS['SELF'],"Alarm_Kodi - SENDER : ".$_IPS['SENDER']);

// Zuweisen der Meldetexte
switch ($_IPS['Kodi_Message'])
{
    case "Gartentuer":
		$Messagetext = "Es klingelt an der Gartentür";
        break;
    case "Haustuer":
		$Messagetext = "Es klingelt an der Haustür";
        break;
	default:
		$Messagetext = "Alarmursache unbekannt";
}

IPS_LogMessage($_IPS['SELF'],"Alarm_Kodi - Message: ".$Messagetext);

// Überschrift und Messagetext codieren
$TITLE = rawurlencode("IPS-Meldung");
$MESSAGE = rawurlencode($Messagetext);

// Kodi-Benachrichtigung
@$source = Sys_GetURLContentEx('http://192.168.1.61:8080/jsonrpc?request={"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"'.$TITLE.'","message":"'.$MESSAGE.'"},"id":1}',
							  Array("AuthUser"=>"kodi","AuthPass"=>"kodi","Timeout"=>100));  
@$source = Sys_GetURLContentEx('http://192.168.1.62:8080/jsonrpc?request={"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"'.$TITLE.'","message":"'.$MESSAGE.'"},"id":1}',
							  Array("AuthUser"=>"kodi","AuthPass"=>"kodi","Timeout"=>100));  
@$source = Sys_GetURLContentEx('http://192.168.1.63:8080/jsonrpc?request={"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"'.$TITLE.'","message":"'.$MESSAGE.'"},"id":1}',
							  Array("AuthUser"=>"kodi","AuthPass"=>"kodi","Timeout"=>100)); 
@$source = Sys_GetURLContentEx('http://192.168.1.64:8080/jsonrpc?request={"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"'.$TITLE.'","message":"'.$MESSAGE.'"},"id":1}',
							  Array("AuthUser"=>"kodi","AuthPass"=>"kodi","Timeout"=>100));
@$source = Sys_GetURLContentEx('http://192.168.1.65:8080/jsonrpc?request={"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title":"'.$TITLE.'","message":"'.$MESSAGE.'"},"id":1}',
							  Array("AuthUser"=>"kodi","AuthPass"=>"kodi","Timeout"=>100));							  
?>

Die Konfiguration einer Wago-Variablen sieht so aus:
Wago.JPG

So ähnlich läuft es bei allen Systemen.

Gruß
Blockmove
 
"In Codesys musst du die entsprechenden Variablen nur mit AT auf Merker legen und dann steht die Variable dem System zur Verfügung."
Daran hakt's im Moment bei mir. Ich habe keine für mich verständliche Anleitung gefunden wie ich den slave vorbereiten muß.
Wäre toll wenn du betreutes modbussen machen würdest...
Die Modbus-ports sind auf und in der Steuerungskonfig sieht's so aus:
Screen Shot 12-17-17 at 05.40 PM.JPG
Jeder HW-Port het einen Variablennamen über den er im Programm angesprochen wird.
In der Reiter PA-Zuweisung so:
Screen Shot 12-17-17 at 05.43 PM.JPG
Ich habe schon gesehen, daß ich doe PA-Zuweisung ändern könnte:
Screen Shot 12-17-17 at 05.45 PM.JPG
aber ich brauche die Variablen ja in meinen Programmen...
Dann fällt mir noch ein:
Screen Shot 12-17-17 at 05.46 PM.JPG
da ist alles leer.
Also wie gesagt betreutes...
Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Modbus direkt auf die E/A ist bei einem Controller nicht die beste Idee.
Du hast doch bestimmt schon eine Visu für deinen 881 erstellt.
Für die Visu hast du (hoffentlich) eigene Variablen definiert.
Im einfachsten Fall legst du diese Variablen mit AT auf Merker.
Details zur Merkeradressierung und Modbus-Adressen findest du in den Manuals.

Gruß
Blockmove
 
naja also das hilft mir nun nicht recht weiter...
"Modbus direkt auf die E/A" was immer das heißt,
Logisch hab ich eine Visu, ich steuere damit ja seit Jahren mein Haus
Was sind einene Variablen für die visu?
Ich habe Variablen im Projekt, die spreche ich in der Visu an.
Ich weiß nicht ob du das meinst aber ich arbeite nirgendwo mit HW-Adressen %ATxy s. mein screenshot.
Wie legt man Variablen mit AT auf merker? Was ist AT? Was sind Merker? Ich habe machmal Merkerveriablen definiert um bestimmte Schaltzustände zu merken aber das meinst wohl kaum...
Mit den Manuals komm ich nicht weiter und bin wohl auch nicht der einzige wenn ich mir die diversen Hilferufe diesbezüglich hier anschaue. Die Manuals sind wohl eher für die Profis geschrieben.
Was mir aber auffiel: in einm Wago Manual:
WAGO-Software
MODBUS-Master-Konfigurator
zur Konfiguration von MODBUS-Netzwerken in WAGO-I/O-PRO (CODESYS)
ist die Rede von einem MODBUS-Master-Konfigurator der angeblich in der Steuerungskonfiguration auftauchen soll.
In meinem Projekt nicht (s. screenshot).
Wenn ich aber ein neues Projekt aufmache ist er da??? (Codesys 2.3.9.55)
Danke für deine sonntäglichen Bemühungen aber ich bin da jetzt schon 3 Tager trotz RTFM erfolglos dran.
Gruß
 
naja also das hilft mir nun nicht recht weiter...

Fazit:
Dir fehlen die Grundlagen

Wie legt man Variablen mit AT auf merker? Was ist AT? Was sind Merker? Ich habe machmal Merkerveriablen definiert um bestimmte Schaltzustände zu merken aber das meinst wohl kaum.

Doch genau diese Merker meine ich.
Und genau diese Merker sind bei Wago direkt über Modbus ansprechbar.
Ohne irgendwelche Konfiguration oder Sonstwas.

Hier die Wago Doku:
https://www.wago.com/wagoweb/documentation/app_note/a3000/a300003d.pdf

Hier findest du im Beitrag #13 eine Excel-Tabelle mit der Adresszuordnung
https://www.symcon.de/forum/threads/11889-Modbus-Bits-auslesen/page2

Für IOS oder Android gibt es einige kostenlose Apps um auf Modbus-Register zu zugreifen.
Einfach mal ne passende App runterladen, den Wert eines Merker-Bit, -Wort oder -Doppelwort ändern und in Codesys beobachten.
Ich denke dann wird's irgendwann mal klar.

Wie legt man Variablen mit AT auf merker?

So:
Code:
wTestvar AT %MW0 : WORD;

Viel Spass :p

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank, daß du dir so viel Zeit für mich nimmst!
Freilich fehlen mir die Grundlagen für Modbus versuche ja gerade, sie mir anzueignen.
Womöglich handelt es sich auch nur um eine Sprachverwirrung, denn jeder Ein- und Ausgang der Steuerungskonfiguration hat bei mir einen Variablennamen.
Ich arbeite nirgends im Programm mit den %...
So habe ich also in der Steuerungskonfiguration meine Deckenlicht im Wohnzimmer der Variable xDO_wz_decke_allg AT %QX7.13 also der Adresse zugeordnet.
Zur Bedienung habe ich einen Schalter xDI_wz_decke_allg AT %XI9.8 und beide sind natürlich BOOL.
Also das habe ich schon immer so gemacht und in meinen Programmen und Visus arbeite ich nur mit solchen "sprechenden" Variablen.
Was ich nun noch nicht hinbekommen habe, ist von außen entweder den Zustand meiner xDO_wz_decke_allg abzuholen= zu lesen oder die xDI_wz_decke_allg an/auszuschalten=zu schreiben. Das ist mein missing link. Ich habe die ganze Zeit gedacht, ich müsse für Modbus nun irgendwie direkt mit den %.. arbeiten und die nochmals speziell für Modbus irgendwie verändern oder zum Lesen/Schreiben speziell bereitstellen.
Also müsste ich doch von einem Modbus-Master aus eine Anforderung mit Namen meiner Variablen an die IP des slaves schicken können oder?
Die slave Konfiguration, die ich in Codesys 3.5 versucht habe, will aber nun wieder "Offset-Adressen" und "%.." von mir.
Wo ist mein Denkfehler?
Grüße
 
Der Zugriff per NAMEN geht über Modbus nicht.
Du weisst deiner Visu-Variablen einfach einen Merker zu (xVisu_btn_wz_decke_on AT %MX0.0).
Dann kannst du die Modbus-Adresse 122888 darauf zugreifen.
Wenn dein Programm einigermassen passt, dann brauchst du einfach nur bei deinen Visu-Variablen entsprechende Merker-Bit, Word oder DWord definieren, neu übersetzen und einspielen.
Dann ist der Zugriff von aussen möglich.
Eigentlich ganz einfach :D
Wie bereits gesagt. Nimm ne App und spiele damit.

Gruß
Blockmove
 
Guten Morgen, wenn ich schon wieder "einfach" lese....
Wo mach ich das? Bei der originalen Definition im Programm? Irgendwo in der Steuerungskonfig? In den Globalen?
d.h. jede Variable, die ich modbussen will, muß ein zweites Mal definiert werden, das wären ja hunderte - richtig?
Was ist mit "Nicht-Visu"-Variablen? Ich will ja auch Bedienen, also xDI's per Modbus schreiben?
Wo hätte ich das nachlesen können - dachte, ich hätte jetzt alle Anwendungshinweise Manuale usw. durch?
Schönen Tag!
 
Zurück
Oben