Laden...

Auslesen eines seriellen Puffers (COM-Port)

Erstellt von maggo vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.169 Views
M
maggo Themenstarter:in
2 Beiträge seit 2006
vor 17 Jahren
Auslesen eines seriellen Puffers (COM-Port)

Hi,
ich hoffe jemand von euch kann mir bei meinem problem helfen. Ich soll mit c# einen com-port auslesen, über den ich als "Slave" Daten in Form von MODBUS/RTU-Telegramme erhalte. Eine Verbindung konnte ich mit folgendem Programm bereits aufbauen, jedoch zeigt er in meinem fertigen Programm nur kryptische Zeichen bei Datenempfang und nicht die Standart-Hexazeichen des Modbus-Protokolls an. Via eines Portmonitors habe ich auch schon geprüft, ob die Daten richtg per "ModbusView", das als Master fungiert, in den "Slave"-Puffer geladen werden.

Hier mal der Quelltext:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace COM_Port_schicken
{

public partial class Form1 : Form  
{  
    private delegate void AddTextDelegate(string newText);  


    public Form1()  
    {  
        InitializeComponent();  

          
    }  

    System.IO.Ports.SerialDataReceivedEventArgs e)  
      
    private void button1_Click(object sender, EventArgs e)  
    {  
          
        serialPort1.Open();  
                     
    }  
    
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)  
    {  

    }  

      
    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)  
    {  
                 
        AddText(Convert.ToString(serialPort1.ReadExisting()));  

    }  

    private void AddText(string newText)  
    {  
        if (listBox1.InvokeRequired)  
        {  
            AddTextDelegate del = new AddTextDelegate(AddText);  
            listBox1.BeginInvoke(del, new object[] { newText });  
        }  
        else  
        {  
            listBox1.Items.Add(newText);  
        }  
    }  

     
}  

}

Viele Dank im Vorraus schonmal für eure antworten !

121 Beiträge seit 2006
vor 17 Jahren

Original von maggo
Via eines Portmonitors habe ich auch schon geprüft, ob die Daten richtg per "ModbusView", das als Master fungiert, in den "Slave"-Puffer geladen werden.

  1. Kriegst du mit einem anderen Modbus-Slave-Client eine erfolgreiche Datenübertragung hin, oder liegt es nur an Deinem C# Programm (also Test mit anderer Software).
  2. Gib uns noch die Einstellungen von serialPort1.
  3. Welches Handshaking verwendest Du?
  4. Wieviele PINs hat Dein Datenkabel, falls nur 3 - was bei serieller Kommunikation im Allgemeinen auch geht - ist das Timing zwischen Request und Response wichtig, das Problem hatte ich mal bei einer Installation.

Gruß Hape

M
maggo Themenstarter:in
2 Beiträge seit 2006
vor 17 Jahren

Also es muss generell müsste es an meinem Programm liegen, nur ich find den Fehler nicht, warum er den das "eingentlich richtige" aus dem Buffer falsch ausgibt

Ich habe intern eine Virtuelle rs232-Verbindung aufgebaut. Programmien muss ich den Slave. Die Masterkommunikation habe ich über "ModbusView" laufen. Da eigentliche Problem ist das auslesen des Buffers

Einstellungen:
8 Datenbits
ein Stopbit
even parity
baudrate 115200

121 Beiträge seit 2006
vor 17 Jahren

Hi maggo,
ok - jetzt nochmals die Frage, kriegst du mit einem anderen Modbus-Slave-Client die Übetragung hin - oder hast Du keinen anderen Slave-Client?
Falls Du einen alternativen Client ausprobieren könntest, könntest Du ausschließen dass es Probleme mit dem virtuellen RS232 gibt. Falls nicht einmal der alternative Client mit dem Master, also ModbusView, erfolgreich kommunizieren kann, hast Du den Fehler zumindest stärker lokalisiert.
Gruß Hape

N
750 Beiträge seit 2004
vor 17 Jahren

hallo maggo,

bitte Wie poste ich richtig? --> punkt 8

danke 😉

nils

?( wer suchet, der findet auch! :]