Wärmepumpedaten über Socket abfragen (Codesys 2.3 / WAGO)

philipp75

Level-2
Beiträge
67
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich bin ein kompletter Neuling was SPS Entwicklung betrifft - In meinem zu Hause ist aber nunmal eine WAGO verbaut, die u.a. die Fussbodenheizung steuert. Wir haben nun eine neue Wärmepumpe dazubekommen, deren Daten ich gerne abfragen möchte (Alpha Innotec LWD50A). Da ich grundsätzlich coden kann und neugierig bin, möchte ich das gerne selbst versuchen.

Die Wärmepumpe liefert über einen Webserver Daten, die auch per Socketverbindung abgegriffen werden können. In PHP/Pyhton/C#/Java oder ähnlich kein Problem für mich, Codesys - grosses Problem ;)

Leider finde ich nirgends ein Beispiel, von dem ich abspringen kann, daher würde mich sehr über Anschub-Hilfe freuen!

Zuerst mal ein paar Grundlegende Fragen - ich möchte die Daten alle 1,2,3 oder Minuten abfragen und visualisieren. Das Intervall ist mir erstmal gar nicht so wichtig, Hauptsache man kommt irgendwie an die Daten...

- Für den Abruf der Daten lege ich ein Programm oder Baustein (?) an in meiner vorhandenen Verzeichnisstruktur, einen Baustein rufe ich mit "CAL baustein" im PLC_PRG auf, damit er aktiv ist? (Siehe Bild "uebersicht.png")
- Dafür müssen die Sockets aber ASYNC sein, da sonst die Steuerung blockiert wird, da das Socket öffnen länger dauern kann?

Die Library SysLibSocketsAsnc.lib habe ich eingebunden. IP-Adresse und Port der Pumpe sind bekannt.

z.B. in PHP sieht es für die Wärmepumpe so aus - funktioniert und liefert ein umfangreiches 2-dimensionales Array zurück.

Code:
$socket = socket_create(AF_INET, SOCK_STREAM,0);
$connect = socket_connect($socket, "192.168.50...", "8888") || exit("socket_connect fehlgeschlagen"); 

$msg = pack('N*',3004);


$send=socket_write($socket, $msg, 4); //3004 senden
$msg = pack('N*',0);
$send=socket_write($socket, $msg, 4); //0 senden 
socket_recv($socket,$Test,4,MSG_WAITALL);  // Lesen, sollte 3004 zurückkommen
socket_recv($socket,$Test,4,MSG_WAITALL); // Status
socket_recv($socket,$Test,4,MSG_WAITALL); // Lõnge der nachfolgenden Werte
$Test = unpack('N*',$Test);

$data = implode($Test);
for ($i = 0; $i < $data; ++$i) 
{
	socket_recv($socket,$InBuff[$i],4,MSG_WAITALL);  // Lesen, sollte 3004 zurückkommen
	$daten_raw[$i] = implode(unpack('l',strrev($InBuff[$i])));
}
socket_close($socket);


Ich würde das SPS Programm gerne mit ST realisieren, da ich dem coden etwas näher bin wie dem grafischen "Entwickeln"...

1000 Dank!
 

Anhänge

  • uebersicht.PNG
    uebersicht.PNG
    100 KB · Aufrufe: 12
Zurück
Oben