Bytearray senden via SerialPort

Chefselber

Mitglied
Hallo,

ich habe folgenden Code mit welchem ich 13 Byte über die serielle Schnittstelle schicken möchte.

Java:
           byte []tx_buffer = new byte[13];
            String temp = "" ;
            byte checksum = 0;
          
            // Buffer vorbelegen
             tx_buffer[0] = (byte) 165;  // Fest lt. Protokoll
            tx_buffer[1] = 64;  // 40=GPRS 80=übergeordnet - anscheinend egal
            tx_buffer[2] = (byte)144;  // 90 = Spannung, Strom und SOC
            tx_buffer[3] = 8;  // 8 = Länge fix, nicht ändern
            tx_buffer[4] = 0;  // Rest auf 0 setzen
            tx_buffer[5] = 0;
            tx_buffer[6] = 0;
            tx_buffer[7] = 0;
            tx_buffer[8] = 0;
            tx_buffer[9] = 0;
            tx_buffer[10] =0;
            tx_buffer[11] =0;

            code = tx_buffer[2];


            // Checksumme berechnen und an Byte 13 eintragen
            for (int i=0;i<=11;i++)
            {
                checksum += tx_buffer[i];
                temp += tx_buffer[i];
              
            }
            tx_buffer[12] = checksum;
             temp += String.valueOf(tx_buffer[12]);

             jTextField1.setText(String.valueOf(temp));
          //  jTextField1.setText(tx_buffer.toString());

            // für Anzeige "-" entfernen und Leerzeichen raus nehmen
        //   temp =  BitConverter.ToString(tx_buffer);
        //    temp = temp.Replace('-', ' ');
        //    temp = Regex.Replace(temp, @"\s", "");
        //    textBoxDATASTRING.Text = temp;
        //    textBoxSend.Text += "\r\n" + temp;
      
            // An Serialport übergeben
               serialPort.writeBytes(tx_buffer,13);




Es wird diese Bytefolge an die serielle Schnittstelle übergeben:
-9164-112800000000125

Es kommt als Antwort nur 1 Byte -91 zurück.
Normalerweise sollten es 13 sein.

Ich vermute, dass die Gegenstelle ein Problem mit signed (unsigned) im 1. und 3. Byte hat. tx_buffer[0] und tx_buffer[2].
Diese muss ich ja casten, da sonst Java meckert.

Wenn ja, wie kann ich das bewerkstelligen?

Wenn ich denselben Code mit C#
verwende, funktioniert es.

MfG
 

httpdigest

Top Contributor
Der cast des ints 165 nach byte ist hier kein Problem. 165 ist erstmal ein int-Literal und das Bit-Pattern davon ist 00000000000000000000000010100111. Der Cast nach byte macht daraus dann einfach das byte mit Bit-Pattern 10100111 per "Truncation" (also Abschneiden der 24 höherwertigen Bits).
Da ist es irrelevant, ob z.B. arithmetische Operationen oder toString das als "signed" interpretieren.
Das Problem wird ein anderes sein.
 

AndiE

Top Contributor
Ich kann keine Methode mit der Signatur "writeBytes(byte[] data, int count)" finden. Von welcher Klasse ist "serialPort" ein Objekt?
 

Chefselber

Mitglied
@httpdigest für die schnelle, gute Erklärung.


Hier der C# Code.

Ich kann keine Unterschiede finden.



Code:
   // Port öffnen wenn geschlossen
            if (!serialPort1.IsOpen)
               btn_OPEN_Click(sender, e);

            byte[] tx_buffer = new byte[13];
            string temp = "" ;
            byte checksum = 0;
          
            // Buffer vorbelegen
            tx_buffer[0] = 165;  // Fest lt. Protokoll
            tx_buffer[1] = 64;  // 40=GPRS 80=übergeordnet - anscheinend egal
            tx_buffer[2] = 144;  // 90 = Spannung, Strom und SOC
            tx_buffer[3] = 8;  // 8 = Länge fix, nicht ändern
            tx_buffer[4] = 0;  // Rest auf 0 setzen
            tx_buffer[5] = 0;
            tx_buffer[6] = 0;
            tx_buffer[7] = 0;
            tx_buffer[8] = 0;
            tx_buffer[9] = 0;
            tx_buffer[10] = 0;
            tx_buffer[11] = 0;

            code = tx_buffer[2];

            // Checksumme berechnen und an Byte 13 eintragen
            for (int i=0;i<=11;i++)
            {
                checksum += tx_buffer[i];
            }
            tx_buffer[12] = checksum;
        
            // für Anzeige "-" entfernen und Leerzeichen raus nehmen
            temp =  BitConverter.ToString(tx_buffer);
            temp = temp.Replace('-', ' ');
            temp = Regex.Replace(temp, @"\s", "");
            textBoxDATASTRING.Text = temp;
            textBoxSend.Text += "\r\n" + temp;
      
            // An Serialport übergeben
            serialPort1.Write(tx_buffer, 0, 13);
 

Chefselber

Mitglied
Habe hier die Schleife entfernt und es kommen nun Daten an.
Aber Bitweise.

Java:
  public void SerialPortLesen(SerialPort port)
{
  
   port.addDataListener(new SerialPortDataListener(){
    @Override
    public int getListeningEvents() {return SerialPort.LISTENING_EVENT_DATA_RECEIVED;}
    @Override
    public void serialEvent(SerialPortEvent event){
    byte[] newdata = event.getReceivedData();
    System.out.println("UART Länge bytes" + newdata.length);   
    
 //for(int i=0; i<=newdata.length; i++)
 //    {
    
  //       databuffer += (byte)newdata[i];
        
   //   }
    System.out.println("neue Werte gelesen von UART" + newdata);     

}


Sieht jetzt so aus:

UART Länge bytes1
neue Werte gelesen von UART[B@1c1df491
UART Länge bytes1
neue Werte gelesen von UART[B@6f192a39
UART Länge bytes1
neue Werte gelesen von UART[B@797a659e
UART Länge bytes1
neue Werte gelesen von UART[B@23190489
UART Länge bytes1
neue Werte gelesen von UART[B@50d3c507
UART Länge bytes1
neue Werte gelesen von UART[B@763d65c6
UART Länge bytes1
neue Werte gelesen von UART[B@5c41b80a
UART Länge bytes1
neue Werte gelesen von UART[B@3797d247
UART Länge bytes1
neue Werte gelesen von UART[B@79a2d24f
UART Länge bytes1
neue Werte gelesen von UART[B@64ac8be8
UART Länge bytes1
neue Werte gelesen von UART[B@35fcfe9f
UART Länge bytes1
neue Werte gelesen von UART[B@3c70178d
UART Länge bytes1
neue Werte gelesen von UART[B@53af9ae6




Noch etwas kryptisch aber das muss ich anscheinend noch in irgendein Format wandeln.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F BitSet und ByteArray Java Basics - Anfänger-Themen 0
T udp -> bytearray -> image -> ausgabe via frame Java Basics - Anfänger-Themen 6
R Datentypen ByteArray aus einer .class erzeugen Java Basics - Anfänger-Themen 3
C Bytearray unkonvertiert ausgeben Java Basics - Anfänger-Themen 4
G String [HEX] To ByteArray Java Basics - Anfänger-Themen 12
G bytearray als Datei speichern? Java Basics - Anfänger-Themen 6
K Bytearray durchsuchen! Java Basics - Anfänger-Themen 6
T Bytearray: immer 4 Bytes herrauskopieren, bis fertig ! Java Basics - Anfänger-Themen 9
R Integer in ByteArray Java Basics - Anfänger-Themen 11
R String in ByteArray suchen Java Basics - Anfänger-Themen 9
T JDOM - Document build aus byteArray? Java Basics - Anfänger-Themen 5
J String to ByteArray Java Basics - Anfänger-Themen 5
G XML als byteArray generieren Java Basics - Anfänger-Themen 4
Z E-Mail senden mit Bibliotheken Java Basics - Anfänger-Themen 1
K Mail senden, nachdem Anwendung beendet wurde (gleich wie) Java Basics - Anfänger-Themen 4
B Java Mail -> Mail senden, ist aber nich in IMAP unter "Gesendet" Java Basics - Anfänger-Themen 3
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
G Email senden MailDev Java Basics - Anfänger-Themen 13
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
T Datei seriell senden Java Basics - Anfänger-Themen 42
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
L Text/Befehle zu Programmen senden Java Basics - Anfänger-Themen 1
F String zu einem Server senden Java Basics - Anfänger-Themen 4
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
M Input/Output Allg. Befehle an die cmd.exe senden Java Basics - Anfänger-Themen 9
fLooojava Bluetooth Projekt - Problem beim mehrmaligen Senden Java Basics - Anfänger-Themen 5
M Int wert in ActionEvent senden Java Basics - Anfänger-Themen 4
A Pfadangabe Datei senden Java Basics - Anfänger-Themen 14
S Hilfe!! Senden eine Bestätigungsmail Java Basics - Anfänger-Themen 3
C "Signal" senden Java Basics - Anfänger-Themen 2
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
H Objekt zu groß zum Senden? Java Basics - Anfänger-Themen 6
E Senden von Objects an Client. Variablenwerte kommen nicht an Java Basics - Anfänger-Themen 5
P Probleme bei senden eines Strings übers Netzwerk Java Basics - Anfänger-Themen 4
E SMS senden Java Basics - Anfänger-Themen 3
U E-Mails mittels Java senden. Java Basics - Anfänger-Themen 2
M bild mit httpPost senden Java Basics - Anfänger-Themen 8
B Object an Server senden, Server antwortet mit objekt? Java Basics - Anfänger-Themen 7
C Little Endianess - Senden von Daten Java Basics - Anfänger-Themen 2
M String senden/empfangen mit PHP funktioniert nicht Java Basics - Anfänger-Themen 2
T Daten über Com Port senden Java Basics - Anfänger-Themen 2
G Datei an PHP Script senden und speichern Java Basics - Anfänger-Themen 2
D Daten an Formular senden Java Basics - Anfänger-Themen 4
T Tastatur Tasten Senden Java Basics - Anfänger-Themen 4
M Mail senden - Problem connect to SMTP host Java Basics - Anfänger-Themen 5
Blackskyliner Befehle an einen Thread senden? Java Basics - Anfänger-Themen 2
M Bitmuster eines Strings über RS232 senden Java Basics - Anfänger-Themen 5
S 2x per GET senden Java Basics - Anfänger-Themen 6
B Bild/Datei von einem Server an einen Client senden Java Basics - Anfänger-Themen 6
M Mails zum Server senden der Authentisierung benötigt Java Basics - Anfänger-Themen 3
H String mit UDP senden Java Basics - Anfänger-Themen 10
M Warum kann man dem Thread kein notify senden? Java Basics - Anfänger-Themen 15
G String zur RS232 senden und mit cr abschließen! Java Basics - Anfänger-Themen 4
O Post senden an php script. Java Basics - Anfänger-Themen 20
G Post-Methode senden Java Basics - Anfänger-Themen 4
C string über server/client verbindung senden ? Java Basics - Anfänger-Themen 4
H Befehl zum FTP-Server senden?? Java Basics - Anfänger-Themen 2
R Serialport auslesen bei neuer Nachricht Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben