Heizung über RS232 auslesen/steuern



  • Hallo zusammen !
    Vorwort:
    Ich habe eine Wärmepumpenheizung www.Heliotherm.at die ich gerne über PC steuern bzw auslesen möchte.
    Es gibt zwar eine Software (http://www.abatec-ag.com/ die ist anscheinen für normal sterbliche nicht zugänglich.
    Auch gibt es eine WebPortal zum steuern der WP. (RS232>Modem>Webportal)
    Möchte aber direkt zugreifen .

    Projekt:
    Die grafische Oberfläche (WINAPI)von meinem Programm habe ich soweit fertig;
    das wichtigste fehlt aber noch: Das auslesen der WP über die Serielle Schnittstelle!

    Erste Versuche:
    Wenn ich ein 3Com 56K Modem an dei WP anschließe erkennt die WP das es eben angeschlossen ist.

    Wenn ich ein NULL MODEM Kabel anschließe und folgenden CODE: verwende tut sich gar nichts.

    TCHAR cPort[5],scPort[10];
    	HANDLE hCom;
    //	OVERLAPPED o;
    DWORD dwEvtMaskIn = EV_CTS | EV_DSR | EV_BREAK | EV_RXCHAR | 
                            EV_RLSD | EV_ERR | EV_RXFLAG | EV_TXEMPTY | 
                            EV_ERR;
    
    int iport = GetPrivateProfileString("RS232","Com",NULL,cPort,sizeof(cPort),Verzeichnis);
    if (iport==0){
    		MessageBox(NULL,"Bitte einen COM-Anschluss wählen !","Fehler COM",MB_ICONEXCLAMATION);
    DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_SETTING_WP),hWnd,(DLGPROC)SettingwpDlgProc);
    	}
    	else {
    wsprintf(scPort,"\\\\.\\COM%s",cPort );
    
     hCom = CreateFile (scPort, 
                               GENERIC_READ | GENERIC_WRITE, 
                               0, 
                               NULL, 
                               OPEN_EXISTING, 
                              // FILE_ATTRIBUTE_NORMAL, 
    				FILE_FLAG_OVERLAPPED,
                               NULL); 
    
    if (hCom == INVALID_HANDLE_VALUE) 
       {
    			rs232_error(hWnd);
    
         WritePrivateProfileString("RS232","Connected","0",Verzeichnis);
    connect_log(hWnd);
    SendMessage(hWnd_toolbar,TB_CHECKBUTTON,ID_OPTION_CONNECT,FALSE);
    			   }
    
    		else{
    WritePrivateProfileString("RS232","Connected","1",Verzeichnis);
    connect_log(hWnd); //legt ein Logbuch an
    
     DWORD         iBytesReceived; 
    
      char daten[50]; 
    			ZeroMemory(&daten,sizeof(daten)); //???TEST
    
    DCB dcb;
    
      ZeroMemory(&dcb, sizeof(dcb)); 
    
      dcb.DCBlength = sizeof(DCB);  
    
      GetCommState (hCom, &dcb);   
    
       dcb.fParity          = TRUE; 
       dcb.wReserved         = 0; 
       dcb.BaudRate  = CBR_9600;         
       dcb.ByteSize  = 8;           
       dcb.Parity    = NOPARITY;     
       dcb.StopBits  = ONESTOPBIT;   
       dcb.fRtsControl = RTS_CONTROL_ENABLE;//HANDSHAKE; 
       dcb.fBinary = TRUE;
       dcb.fDtrControl = 2;
       dcb.fRtsControl = 2;
    
    if (!SetCommState(hCom, &dcb)) 
       { 
    		rs232_error(hWnd);
    			  fputs (write,pFile);
      			  fclose (pFile);
    	MessageBox(NULL,"Fehler bei SetCommState","SetCommState",0); 
    
       } 
    
    		//SetCommState (hCom, &dcb);    speichern 
    else {
    
    		MessageBox(NULL,"SetCommState gesetzt","STATE",0);  //TEST
    
    		if (!SetCommMask (hCom, dwEvtMaskIn)) 
    				{
    			rs232_error(hWnd);
    			  fputs (write,pFile);
      			  fclose (pFile);
    MessageBox(NULL,"Fehler bei SetComm MASK","MASK",0); 
    
    				}
    				else 
    				{
    					TCHAR test[10];
    					//TCHAR senddaten[4]="asdf";
    
    				ReadFile(hCom,&daten,50,&iBytesReceived,NULL);
    					MessageBox(NULL,"SetCommMASK (EVENTS) gesetzt","MASK",0);  //TEST
    					sprintf(test,"%i Bytes",iBytesReceived);
    					MessageBox(NULL,daten,test,0);
    										}
    			}
    	}
    }
    	}
    

    HIER MEINE FRAGEN:
    Kann mir hier jemand einen "Grossen" Tip geben.
    Was sendet das Modem für eine Signal das die WP es erkennt.
    bzw was muss ich für eine Direkte verbindung senden ???

    PS: Verzeiht mir meinen Stil aber habe erst vor einem 3/4 Jahr begonnen zu programmieren

    mfg Markus



  • kann sein, dass es an irgendwelchen steuerleitungen liegt, rts/cts, dtr/dsr oder dcd. daran erkennen manche geräte, dass ein anderes da ist.
    🙂



  • Interessantes Projekt! Viel kann ich dazu leider nicht sagen, nur ein Frägchen: Tut sich einfach wirklich gar nix oder wird eine von deinen Fehler-MessageBoxen aufgerufen?



  • @ Undertaker:

    Das habe ich auch schon wo gelesen mit RTS/CTS weis aber nicht weiter
    Habe aber nur EscapeCommFunktion(...,SETRTS); gefunden ??

    @ Badestrand:

    Nein, die (Fehler) MessageBoxen machen sich nicht auf.

    Hier Mein Programmhttp://bildupload.sro.at/a/images/HSC.jpg



  • Maxx175 schrieb:

    @ Undertaker:
    Das habe ich auch schon wo gelesen mit RTS/CTS weis aber nicht weiter
    Habe aber nur EscapeCommFunktion(...,SETRTS); gefunden ??

    mit irgendeiner comm-funktion kann man die ausgänge schalten, musste mal im msdn suchen.
    🙂



  • Hi,

    ich hab dasselbe Problem - hänge ich den Serial2Ethernet Adapter dran, bekommei ich sofort den Status gefunden am Display der WP.

    Ich habs mit Nullmodemkabel auch probiert, aber kein Erfolg - hab auch von Eltima diverse Produkte probiert, wo man einzelne Pins virtuell ändern kann, jedoch auch keine Chance!

    Bist du schon weitergekommen?

    Ich habe einen Logserver realisiert, der die Trenddaten speichert (genauso wie die tele Control die .fwt Files exportiert) und dann dementsprechend aufbereitet - zum Manager verwende ich die home Control und tele Control.

    Nun möchte ich das Modem wegbekommen und es nur via Nullmodemkabel schaffen.

    LG



  • Achja, habs auch mit einem geraden Kabel probiert, weil eigentlich verbindet man den PC mit dem Modem ja auch mit einem geraden Kabel. Habs auch mit einem gender-changer probiert, weil beide Stecker (WP und PC) male benötigen.



  • Hi,

    versuch doch erst mal mit einem Terminalprogramm (such mal realterm) die Verbindung herzustellen. Da kannst du ziemlich leicht alle Parameter durchprobieren.

    Es gibt halt beim seriellen Port ziemlich viel an Möglichkeiten einzustellen, die dazu führen können, dass es nicht richtig funktioniert.

    Grüße



  • Hat noch jemand eine Idee für mich?

    Wenn ich statt des Modems (egal ob Serial2Ethernet oder analoges Modem) ein Nullmodemkabel oder gerades serielles Kabel verwende, der Regler synchronisiert sich nicht mit dem PC.

    Die Einstellungen der seriellen Schnittstelle am PC passen!

    Zwischen PC und einem analogen Modem verwendet man ja auch ein gerades Kabel, oder?

    @Maxx175: gibts dich noch?



  • Tester321 schrieb:

    Zwischen PC und einem analogen Modem verwendet man ja auch ein gerades Kabel, oder?

    Ja, denn genau dafür ist diese Verbindung auch definiert.

    Bekommst du denn mit einem anderen Terminalprogramm eine Verbindung?
    Versuch mal HTerm. DA kannst du auch nach belieben die Steuerleitungen (RTS/CTS) schalten.



  • Zunächst mal möchte ich anmerken das ich die angesprochene Hardware nicht kenne.

    Das Kabel ist jedoch gut dokumentiert unter

    http://software.heliotherm.com/homecontrol/Userguide_de.pdf

    Zitat:
    "Für diese Verbindung wird ein Nullmodemkabel benötigt. Das Nullmodemkabel
    erhalten Sie im Elektrofachhandel. Dieses Kabel unterscheidet sich von einem
    herkömmlichen RS232-Kabel dadurch, dass Sende- und Empfangsleitungen
    gekreuzt sind und an beiden Seiten eine Buchse angebracht ist."

    Da offensichtlich alle Leitungen benötigt werden gehe ich von Hardware-Handshake aus.
    Über Baudrate und andere Parameter schweigt sich das Handbuch
    aus. Gibt es irgendwo eine Dokumentation der Kommandos ?



  • Also hier mal meine Recherchen.

    Regler: male
    PC: male
    Regler mit PC mit Nullmodemkabel (2x female) verbinden
    (getestet und funktioniert - Regler ist dabei im DIREKT Modus und sendet reine AT commands).

    Regler: male
    Serial2Ethernet Adapter (Moxa): female
    Regler mit Serial2Ethernet Adapter mit Verlängerungskabel (1x female, 1x male) verbinden
    (getestet und funktioniert - Regler ist dabei im MODEM Modus und sendet AT Befehle zum Serial2Ethernet Adapter und dieser packt diese dann in IP-Pakete um). Der Serial2Ethernet Adapter ist sogar so intelligent, dass er sogar im DIREKT Modus mit dem Regler kommunizieren kann (aber das ist egal).
    In diesem Modus erkennt der Regler, dass ein Modem dranhängt (gleiche Konstellation wie zwischen PC und Modem).

    Wenn man nun aber kein Modem verwenden möchte, sondern den Regler (male) direkt an den PC hängen möchte (male) - also via Nullmodemkabel - müßte man doch nur die Datenleitungen via Software ändern (vgl. Nullmodemkabel zu geradem Kabel), damit der Regler den PC ebenfalls als Modem erkennt - Grundgedanke ist nämlich, dass man nur im MODEM-Modus Verbindung zu einer IP (also einen TCP-Logserver) herstellen kann.
    Ich könnte auch ein Verlängerungskabel nehmen und mit einem Gender-Changer die Datenleitugnen ändern oder einfach auf ein Verlängerungskabel statt dem female-Stecker einen male löten.



  • In der Anleitung auf Seite 13 steht, dass man die female Buchse vom Serial2Ethernet Adapter mit dem beiliegenden Adapter auf male ändern kann. Leider war der bei mri nicht im Lieferumfang enthalten. Hat sich wohl der Wärmepumpenhersteller behalten und stattdessen ein Pickerl über Moxa geklebt! 🙂

    http://www.moxa.com/doc/man/NPort_DE-311_HIG_v4.pdf

    http://s1.directupload.net/images/111105/5myegyi8.png

    Ich denke bei dem Adapter handelt es sich um einen Gende-Changer, oder? Oder was versteht man unter einem "male null-modem adapter"?



  • gibt es schon news?



  • forellengarten schrieb:

    gibt es schon news?

    entschuldigung, war der Meinung mein Eintrag geht nicht online :-).

    Mich würde interessieren ob bzw. wie Ihr es geschafft habt über RS232 direkt auf die Wärmepumpe zuzugreifen. Vielen Dank schonmal! 😕


Anmelden zum Antworten