Hallo,
ich versuche momentan meine Wärmepumpen-Steuerung an den eibPC anzubinden.
Die Steuerung kann über Port 8888 angesprochen werden. Das Kommunikationsprotokoll sieht vor, dass auf bestimmte Bytefolgen entsprechende Antworten über den gleichen Socket kommen.
Bisher war ich davon ausgegangen, dass sendtcp und readtcp genau das erledigen. Nun scheint aber readtcp auf die Antworten der WP-Steuerung nicht zu reagieren. Könnte das damit zusammenhängen, dass der eibPC nur über Port 4809 kommunizieren kann?
Zweite Frage: Ist die interne Darstellung von Integern im eibPC im big oder little endian gehalten? Bei big endian könnte ich mir nämlich die umständliche Konvertierung sparen und den Wert mit readtcp direkt als u32 auslesen.
Hier das dazugehörige Makro zum reinschauen:
ich versuche momentan meine Wärmepumpen-Steuerung an den eibPC anzubinden.
Die Steuerung kann über Port 8888 angesprochen werden. Das Kommunikationsprotokoll sieht vor, dass auf bestimmte Bytefolgen entsprechende Antworten über den gleichen Socket kommen.
Bisher war ich davon ausgegangen, dass sendtcp und readtcp genau das erledigen. Nun scheint aber readtcp auf die Antworten der WP-Steuerung nicht zu reagieren. Könnte das damit zusammenhängen, dass der eibPC nur über Port 4809 kommunizieren kann?
Zweite Frage: Ist die interne Darstellung von Integern im eibPC im big oder little endian gehalten? Bei big endian könnte ich mir nämlich die umständliche Konvertierung sparen und den Wert mit readtcp direkt als u32 auslesen.
Hier das dazugehörige Makro zum reinschauen:
Code:
//---------------------------------------------------------------------- // Makros für den Enertex EiBPC // // Anbindung an Luxtronic 2.0 / WP-NET Steuerung für Wärmepumpen // // Version : v1.000 // // License : Verwendung nur für die Nutzung mit dem // Enertex EibPC gestattet // // (C) Copyright : Dr.-Ing. Arno Pernozzoli. All rights reserved. // // Author : Dr.-Ing. Arno Pernozzoli // // Dat.Rev. : $Date: 2011/05/10 11:08:00 $ // Version : $Revision: 1.0 $ //---------------------------------------------------------------------- :begin Luxtronic_WPNET(Name, PortLux, IPLux, IntervalLux) :info $Dieses Makro liest die aktuellen Informationen einer Luxtronic Wärmepumpensteuerung aus. \\ Über das Makro Luxtronic_Var und Luxtronic_GA können ausgelesene Werte in Variablen oder Gruppenadressen geschrieben werden.\\ Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.\\ Makro nur einmal in Ihrem System pro WP-Steuerung. Wenn Sie mit mehr als einer WP-Steuerung arbeiten wollen, vergeben Sie entsprechend weitere Namen.$\\ $Vergeben Sie einen Namen für Ihre Anbindung, ohne Leerzeichen, z.B WP$\\ $Geben Sie an, an welchem Port die WP-Steuerung erreichbar ist, i.d.R. 8888.$\\ $Geben Sie an, an welcher IP-Adresse die WP-Steuerung erreichbar ist.$\\ $Geben Sie an, in welchem Intervall die Daten aktualisiert werden sollen (in Minuten, max. 255)$ :shortinfo $Auslesen aktueller Informationen aus Luxtronic 2.0 / WP-NET Steuerung für Wämepumpen.$ Name_Connected = AUS Name_Protocol = 0u08 Name_Length = 0u32 Name_Entry = 0u32 Name_Response = 0u32 Name_Message = $$ Name_MQueue = $$ Name_R0 = 0u08 Name_R1 = 0u08 Name_R2 = 0u08 Name_R3 = 0u08 Name_Port = 0u16 Name_IP = 0u32 if (cycle(IntervalLux,00) and !Name_Connected) then \\ connecttcp(PortLux,IPLux); \\ sendtcp(PortLux,IPLux, 3004u32, 0u32); \\ Name_Connected = EIN \\ endif if event(readtcp(Name_Port, Name_IP, Name_Message)) and Name_Connected and (Name_IP == IPLux) then \\ write('15/7/0'c14,convert(Name_Message,$$c14)); \\ Name_MQueue = Name_MQueue + Name_Message \\ endif if change(Name_MQueue) and (size(Name_MQueue)>= 4u16) then \\ Name_R0 = stringcast(Name_MQueue,0u08,0); \\ Name_R1 = stringcast(Name_MQueue,0u08,1); \\ Name_R2 = stringcast(Name_MQueue,0u08,2); \\ Name_R3 = stringcast(Name_MQueue,0u08,3); \\ Name_MQueue = split(Name_MQueue, 4u16, END); \\ Name_Response = convert(Name_R0,0u32)*16777216u32+convert(Name_R1,0u32)*65536u32+convert(Name_R2,0u32)*256u32+convert(Name_R3,0u32); \\ write('15/7/0'c14,convert(Name_Response,$$c14)) \\ endif if (change(Name_Response)) then \\ write('15/7/0'c14,convert(Name_Response,$$c14)); \\ if (Name_Length > 0u32) then Name_Entry = Name_Entry + 1u32; Name_Length = Name_Length - 1u32 endif; \\ endif if ((Name_Length == 0u32) and Name_Connected) then \\ closetcp(PortLux,IPLux); \\ Name_Connected = AUS \\ endif :end :begin Luxtronic_Var(Name, Index, Var) :info $Dieses Makro schreibt einen ausgelesenen Wert mit gegebenem Index in die angegebene Variable. \\ Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.$\\ $Namen der Anbindung$\\ $Index des zu schreibenden Wertes.$\\ $Zu beschreibende Variable.$ :shortinfo $Schreiben eines aktuellen Werts aus der WP-Steuerung in eine Variable.$ if (Name_Entry == convert(Index,Name_Entry)) then Var = convert(Name_Response, Var) endif :end :begin Luxtronic_VarFloat(Name, Index, Var) :info $Dieses Makro schreibt einen ausgelesenen Wert mit gegebenem Index in die angegebene Variable. \\ Der ausgelesene Wert (z.B. Temperaturen) ist in zehntel angegeben und muss daher konvertiert werden. \\ Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.$\\ $Namen der Anbindung$\\ $Index des zu schreibenden Wertes.$\\ $Zu beschreibende Variable.$ :shortinfo $Schreiben eines aktuellen Float-Werts aus der WP-Steuerung in eine Variable.$ if (Name_Entry == convert(Index,Name_Entry)) then Var = convert(Name_Response, Var) / convert(10u08,Var) endif :end :begin Luxtronic_GAVar(Name, Index, GA, Var) :info $Dieses Makro sendet einen ausgelesenen Wert mit gegebenem Index an die angegebene Gruppenadresse. \\ Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.$\\ $Namen der Anbindung$\\ $Index des zu schreibenden Wertes.$\\ $Zu beschreibende Gruppenadresse.$ :shortinfo $Senden eines aktuellen Werts aus der WP-Steuerung an eine Gruppenadresse.$ if (Name_Entry == convert(Index,Name_Entry)) then write(GA,convert(Name_Response, GA)) endif :end :begin Luxtronic_GAFloat(Name, Index, GA) :info $Dieses Makro sendet einen ausgelesenen Wert mit gegebenem Index an die angegebene Gruppenadresse. \\ Der ausgelesene Wert (z.B. Temperaturen) ist in zehntel angegeben und muss daher konvertiert werden. \\ Zur Dokumentation der Ereignisnummern siehe beigelegtes Readme.txt.$\\ $Namen der Anbindung$\\ $Index des zu schreibenden Wertes.$\\ $Zu beschreibende Gruppenadresse.$ :shortinfo $Senden eines aktuellen Float-Werts aus der WP-Steuerung an eine Gruppenadresse.$ if (Name_Entry == convert(Index,Name_Entry)) then write(GA, convert(Name_Response, GA) / convert(10u08,GA)) endif :end
Kommentar