+ Antworten
Ergebnis 1 bis 10 von 10
  1. #1
    Registriert seit
    Sep 2009
    Beiträge
    34

    Standard serial port über Variablen ansteuern

    Hallo liebe IP-Symcon-User,
    ich steuere schon seit Jahren einen Wechselrichter über den Com-Port an. Ein script sendet eine Folge von Befehlen zur Sollwertvorgabe, gemäß Protokoll des Herstellers. Ein typische Befehl sieht folgendermaßen aus:

    PHP-Code:
    COMPort_SendText($comport_ID"\xC4");    //an COMPort 0xC4 senden \x 
    Bislang hatte ich den entsprechenden Sollwert direkt in verschieden an sonsten gleiche Scripte direkt eingegeben.
    Jetzt möchte ich aber nur noch ein Scrpit verwenden, wo der entsprechende Sollwert eingelesen und dann variabel an die Stelle plaziert wird. Prinzipiell soll das dann folgendermaßen aussehen:

    PHP-Code:
    $comport_ID=17242 /*[Serial Port]*/ //ID des Comports
    $neg_hex=256;
    $I_S_B=0;
    $I_S_hex=`00`;
    $I_S_vorz=`00`;
    $I_S_plus=`00`;
    $I_S_minus=`FF`;
    $I_S=-100;   //GetValueInteger(21577 /*[Steuerung\Sontime\I_Sontime_soll]*/);
    if ($I_S>=0)
        {
        
    $I_S_vorz=$I_S_plus;
        
    $I_S_B=$I_S;
        
    //$I_S_vorz=sprintf("%'02X\n", $I_S_plus);
        
    }
    elseif (
    $I_S<0)
        {
        
    $I_S_vorz=$I_S_minus;
        
    $I_S_B=$I_S+$neg_hex;
        
    //$I_S_vorz=sprintf("%'02X\n", $I_S_minus);
        
    }
    $I_S_hex=sprintf("%02s"$I_S_B);
    print(
    $I_S_hex);


    IPS_Sleep(5);
    COMPort_SendText($comport_ID"\x00");    //an COMPort 0xcc senden \x
    IPS_Sleep(5);
    //Datenpuffer loeschen
    COMPort_SendText($comport_ID"\x0C");    //an COMPort 0xcc senden \x
    IPS_Sleep(5);
    // Pointer resetten
    COMPort_SendText($comport_ID"\xFA");    //an COMPort 0xcc senden \x
    IPS_Sleep(5);
    // Sollwert senden
    COMPort_SendText($comport_ID"\x08");    //an COMPort 0xcc senden \x
    IPS_Sleep(5);
    COMPort_SendText($comport_ID"\x11");    //an COMPort 0xcc senden \x
    IPS_Sleep(5);
    // Adresse senden
    COMPort_SendText($comport_ID"\xC4");    //an COMPort 0xcc senden \x
    IPS_Sleep(5);
    COMPort_SendText($comport_ID"\x60");    //an COMPort 0xcc senden \x
    IPS_Sleep(5);
    //Batteriestrom Sollwert
    //COMPort_SendText($comport_ID, "\x$I_S_minus");    //an COMPort 0xcc senden \x
    //COMPort_SendText($comport_ID, "\x$I_S_vorz");    //an COMPort 0xcc senden \x
    COMPort_SendText($comport_ID"\xFF");    //an COMPort 0xcc senden \x
    IPS_Sleep(5);
    //COMPort_SendText($comport_ID, "\x9C");    //an COMPort 0xcc senden \x
    COMPort_SendText($comport_ID"\x$I_S_hex");    //an COMPort 0xcc senden \x  Variable in Funktion !!!! 
    Leider ist es mir bislang nicht gelungen die Variable so zu formatieren, dass sie korrekt gesendet wird.
    Im Debug der Schnittstelle stehen an der Stelle auch vier 2-Stellige Blöcke anstatt ein 2stelliger Block so wie es auch sein sollte. Es scheint sich vielleicht um ein Datentypproblem zu handeln.
    Hat jemand eine Idee?

    Vielen Dank und viele Grüße

    hololoy
    Geändert von hololoy (21.03.18 um 18:50 Uhr) Grund: php tags Tipfehler

  2. #2
    Registriert seit
    Aug 2016
    Beiträge
    3,068

    Hallo hololoy,

    kannst du den Code bitte in PHP Tags setzen, dann kann man ihn wesentlich besser lesen.

    Grüße,
    Kai
    IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV
    Einfach mal rein schauen: IP-Symcon Discord Channel

  3. #3
    Registriert seit
    Sep 2009
    Beiträge
    34

    Standard serial port über Variablen ansteuern

    Man kann das Problem vielleicht auch besser fassen:
    zwei comport-Befehle sollen im Prinzip gleich funktionieren, den gleichen Binärcode zum Empfäger senden:

    PHP-Code:
    COMPort_SendText($comport_ID"\x9C");    //an COMPort 0x9C senden
    COMPort_SendText($comport_ID"\x$I_S_hex");    //an COMPort 0x9C senden  Variable in Funktion !!!! 
    In der zweiten Zeile entspricht das Ergebnis in der vorherigen Berechnung ebenfalls dem Wert 9C, was auch über den echo Befehl im Ausgabefenster so dargestellt wird.
    Beim debug Fesnster steht aber folgendes(siehe unten):

    Der Fehler ist dort zu erkennen, wo die vier Blöcke in einer Zeile stehen. Wenn man die entsprechenden Zeichen direkt in die
    Funktion schreibt, steht dort nur ein Zweierblock, wie bei den anderen TRANSMIT Zeilen.

    Ich hoffe, dass das Problem jetzt klarer erkennbar ist.

    Viele Grüße

    hololoy
    Angehängte Grafiken Angehängte Grafiken  
    Geändert von hololoy (21.03.18 um 18:47 Uhr) Grund: Tipfehler

  4. #4
    Registriert seit
    Jun 2013
    Beiträge
    107

    Wenn du das wirklich so gemacht hast schickt er dir ja nicht den Inhalt der Variablen $I_S_hex sondern er schickt \x$I_S_hex als Zeichenkette.
    Was passiert denn wenn du
    COMPort_SendText($comport_ID, "\x" . $I_S_hex);
    da rein schreibst? Der . ist glaub ich der concat Befehl in PHP ohne da jetzt nachzuschauen.

    Sent from my SM-G935F using Tapatalk
    Geändert von nancilla (23.03.18 um 21:00 Uhr) Grund: direktes Komplettzitat entfernt

  5. #5
    Registriert seit
    Sep 2009
    Beiträge
    34

    Standard serial port über Variablen ansteuern

    Hallo teichhei,
    hat leider nicht geklappt, es werden im Debug Fenster drei Dopppelblöcke angezeigt.
    Ich habe aber noch eine weitere Frage: kann man mit einer if oder case Abfrage prüfen, ob eine Zahl in einem Interval liegt oder muss man 2 Abfragen verschachteln?

    Vielen Dank und viele Grüße

    hololoy

  6. #6
    Registriert seit
    Sep 2009
    Beiträge
    34

    Hallo,
    die letzte Frage hat sich erledigt:

    if (($I_S_B<=45) && ($I_S_B>35))

    Es müsste so klappen, ich hatte beim ersten Test die äußeren Klammern vergessen.

    Viele Grüße

    Udo

  7. #7
    Registriert seit
    Jun 2013
    Beiträge
    107

    Zitat Zitat von hololoy Beitrag anzeigen
    Hallo teichhei,
    hat leider nicht geklappt, es werden im Debug Fenster drei Dopppelblöcke angezeigt.
    Ich habe aber noch eine weitere Frage: kann man mit einer if oder case Abfrage prüfen, ob eine Zahl in einem Interval liegt oder muss man 2 Abfragen verschachteln?

    Vielen Dank und viele Grüße

    hololoy
    Hi,

    Müssen ja drei Blöcke sein, jeder Buchstabe einer oder?

    \
    x
    Wert von Variable

    Oder hab ich da was falsch verstanden?
    Willst du einfach das Zeichen 9C schicken? Das wäre dann nur ein block.

    Sent from my SM-G935F using Tapatalk
    Geändert von teichhei (23.03.18 um 19:04 Uhr)

  8. #8
    Registriert seit
    Dec 2013
    Ort
    Dithmarschen
    Beiträge
    58

    Hallo teichhei,

    ich spreche den Ser-Port wie folgt an um einen String an einen IR Lesekopf zu senden und damit Daten abzufragen.
    Das funktioniert, vielleicht hilft es Dir weiter.

    PHP-Code:
    SPRT_SendText(43536 /*[Ser Port eHz IR Lesekopf 300,7,1,E   4RI    USB 1]*/chr(0x2f).chr(0x3f).chr(0x21).chr(0x0d).chr(0x0a)); // ersten String an IR schnittstelle senden 
    Gruß aus Dithmarschen
    Volker
    LCN, LinHK auf Raspberry, 4x LCN-SH,EnOcean Thermokon STC, Synology DS213j, Vaillant Geotherm Comfort VWS 11, IPS 5 auf Raspberry 3, IPSView, Z-Wave auf Raspberry

  9. #9
    Registriert seit
    Jun 2013
    Beiträge
    107

    Mir nicht, meins geht ja.
    Aber das ist eventuell der Knackpunkt für Hololoy, chr($variable). Dann wird nur ein ASCII Zeichen gesendet.

    Sent from my SM-G935F using Tapatalk
    Geändert von nancilla (23.03.18 um 21:02 Uhr) Grund: direktes Komplettzitat entfernt

  10. #10
    Registriert seit
    Sep 2009
    Beiträge
    34

    Standard serial port über Variablen ansteuern

    Hallo IPS-User,
    ich habe den letzten Vorschlag gerade getestet und es hat so erstmal funktioniert. Ich muss das jetzt nochmal komplett testen, aber ich glaube, dass es klappt.

    Vielen Dank und viele Grüße

    Hololoy

Ähnliche Themen

  1. Serial Port
    Von Erwoolf im Forum Allgemeine Diskussion
    Antworten: 12
    Letzter Beitrag: 05.01.16, 08:14
  2. eHZ Datenabfrage über Serial Port ohne Funktion
    Von siedler im Forum Allgemeine Diskussion
    Antworten: 0
    Letzter Beitrag: 18.02.15, 22:48
  3. Serial Port Baud
    Von wupperi im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 6
    Letzter Beitrag: 03.06.10, 08:25
  4. Serial Port
    Von audi2010 im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 4
    Letzter Beitrag: 17.08.08, 01:14