+ Antworten
Ergebnis 1 bis 6 von 6
  1. #1
    Registriert seit
    Jun 2007
    Beiträge
    27

    Standard Modbus TCP BOOL-Wert senden

    Hallo zusammen,

    ich habe ein Problem bei meinem ersten eigenem Modul, ich möchte über Modbus einen Bool-Wert senden doch leider erzeugt IP-Symcon immer ein Zeichen zuviel im Sendetex.
    Zum Testen habe möchte ich eine Bool-Variable auf meiner Wago einschalten.
    Hier mein PHP Code:

    PHP-Code:
    public function switch(bool $Switch)
        {
            
    $Address_Switch 12287 $this->ReadPropertyInteger("E-Address");
            
    $send pack("a*",chr(255).chr(0));
            
    $send =utf8_encode($send);
            
    $this->SendDebug('Switch send'$send0);
            
    $Value $this->SendDataToParent(json_encode(Array("DataID" => "{E310B701-4AE7-458E-B618-EC13A1A6F6A8}""Function" => 5"Address" => $Address_Switch "Quantity" => 1"Data" => $send));
        } 
    Hier die Ausgabe vom Client-Socket:

    Code:
    00 75 00 00 00 07 01 05 30 63 FF 00
    Wie man sieht liest Symcon anscheinend die Länge falsch aus, im Protokoll steht das 7 Zeichen gesendet werden, aber es werden nur 6 Übertragen was ja auch richtig ist, nur die 7 ist falsch.
    Wenn ich die gleiche Funktion über die integrierte Modusanbindung realisiere funktioniert alles.

    Code:
    00 75 00 00 00 06 01 05 30 63 FF 00
    Was mache ich falsch?

  2. #2
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    23,777

    Ist das Problem auch da wenn du Chr(0).Chr(0) senden würdest? (Das pack ist eigentlich gar nicht notwendig)
    Auf den ersten Blick sieht das ganz gut aus.

    paresy

  3. #3
    Registriert seit
    Jun 2007
    Beiträge
    27

    Zitat Zitat von paresy Beitrag anzeigen
    Ist das Problem auch da wenn du Chr(0).Chr(0) senden würdest? (Das pack ist eigentlich gar nicht notwendig)
    Auf den ersten Blick sieht das ganz gut aus.

    paresy
    Nein dann funktioniert alles.


    Gesendet von iPhone mit Tapatalk

  4. #4
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    23,777

    Ich kann das Problem auf jeden Fall nachstellen. Auf die Schnelle habe ich jedoch keine Lösung, da ich dafür einiges intern mehr umbauen muss.

    paresy

  5. #5
    Registriert seit
    Jun 2007
    Beiträge
    27

    Danke für deine schnelle Reaktion,
    ich habe jetzt versucht das Problem noch etwas weiter einzugrenzen und es schein so als ob alle Werte die über 127 liegen fälschlicherweise als 2 Zeichen gezählt zu werden.
    Das Problem ist auch bei Modbusfunktion 6 der Fall.

    Bei Zahlwert 127 stimmt die Ausgabe:

    Code:
    $send = pack("a*",chr(127).chr(0));
            $send =utf8_encode($send);
            $this->SendDebug('Switch send', $send, 0);
            $Value = $this->SendDataToParent(json_encode(Array("DataID" => "{E310B701-4AE7-458E-B618-EC13A1A6F6A8}", "Function" => 6, "Address" => 12387 , "Quantity" => , "Data" => $send)));
    Code:
    TRANSMIT | 00 6D 00 00 00 06 01 06 30 63 7F 00
    Ab Zahlwert 128 passt es nicht mehr:

    Code:
    $send = pack("a*",chr(128).chr(0));
            $send =utf8_encode($send);
            $this->SendDebug('Switch send', $send, 0);
            $Value = $this->SendDataToParent(json_encode(Array("DataID" => "{E310B701-4AE7-458E-B618-EC13A1A6F6A8}", "Function" => 6, "Address" => 12387 , "Quantity" => 1, "Data" => $send)));
    Code:
    TRANSMIT | 00 6E 00 00 00 07 01 06 30 63 80 00
    Passiert bei 2 Werten über 127 genauso:

    Code:
    $send = pack("a*",chr(128).chr(128));
            $send =utf8_encode($send);
            $this->SendDebug('Switch send', $send, 0);
            $Value = $this->SendDataToParent(json_encode(Array("DataID" => "{E310B701-4AE7-458E-B618-EC13A1A6F6A8}", "Function" => 6, "Address" => 12387 , "Quantity" => 1, "Data" => $send)));
    Code:
    TRANSMIT | 00 73 00 00 00 08 01 06 30 63 80 80

  6. #6
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    23,777

    Ja. Es ist ein Problem mit der utf8 Kodierung. Nach dem utf8_encode ist ein Zeichen mehr da. Dies wird zwar am Ende korrekt per utf8_decode wieder reduziert, jedoch ist es an der Stelle wo die Länge berechnet wird nicht da. Das Problem tritt bei der nativen Instanz nicht auf, da diese Umkodierung dort nicht zutrifft.

    paresy

Ähnliche Themen

  1. Modbus RTU (485) Konverter --> Modbus TCP
    Von Daste im Forum SPS Automatisierungstechnik
    Antworten: 36
    Letzter Beitrag: 20.07.17, 10:08
  2. Modbus TCP stürzt ab, wenn ein Gerät über Modbus RTU keine Spannung hat
    Von Helmut im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 22
    Letzter Beitrag: 04.06.15, 07:32
  3. TCP/UDP Senden mit AVR Net I/O
    Von shishalive im Forum Bastel-Ecke
    Antworten: 0
    Letzter Beitrag: 09.05.13, 15:22
  4. Modbus TCP
    Von zkra im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 11
    Letzter Beitrag: 09.10.12, 13:55
  5. Modbus TCP Problem
    Von mue_dan im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 11
    Letzter Beitrag: 03.01.10, 18:28