Hallo Eik,
da gibt es natürlich viele Wege zum Ziel…
Wie bereits gesagt im einfachsten Fall über die Toolbox die serielle Schnittstelle ins Windows Form einbinden und entsprechend die Parameter wie Baudrate Com-Port etc. direkt setzen.
Allerdings kannst Du die Parameter auch innerhalb des Programmes ändern, setzen oder anpassen:
// Port Schließen wenn bereits offen um Änderungen vorzunehmen
if (serialPort1.IsOpen) serialPort1.Close();
// Eigenschaften einzeln direkt einstellen
serialPort1.PortName =
serielPort1.xxxx =
…
// oder über ein Auswahlfeld der ComboBox
serialPort1.BaudRate = int.Parse(cmb_Baudrate_Anlage1.Text);
…
//Com Port öffnen
try
{
serialPort1.Open();
}
catch (Exception)
{
… //Ausführen wenn Port nicht geöffnet werden kann
}
Wenn Du einzelne Bytes schicken möchtest hier eine Variante, wobei es für Write verschiedene Überladungen gibt.
// als Bytes oder Char Buffer senden mit Offset(int) und Count(int)
byte[] Send_NKE = { 0x10, 0x40, 0xFD, 0x3D, 0x16 };
serialPort1.Write(Send_NKE, 0, 5);
// als String senden
String Send_Text = “Das ist ein Test”;
serialPort1.Write(Send_Text);
Für den Empfang wäre interessant ob Du jederzeit Informationen auf der Schnittstelle erwartest, in dem Falle im Eigenschaftsfenster/Ereignisse einen Ereignisshandler zu einfügen:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
… // wird beim Eingang von seriellen Daten aufgerufen
}
Wenn Du aber nur definierte Antworten unmittelbar nach dem senden erwartest kannst Du diese nach einer Antwortzeit auch direkt abfragen:
Auch hier gibt es wieder verschiedene Möglichkeiten welche ich jetzt nicht alle ausführen möchte…
// Bytes oder Char empfangen
serialPort1.Read(Buffer, 0, serialPort1.BytesToRead);
// als String lesen
String = serialPort1.ReadLine();
Hier gibt es nun für die Auslesung des Empfangsbuffers verschiedene Varianten welche sinnvollerweise vom Thema abhängig sind. Wichtig ist dass der Buffer nicht zu zeitig ausgelesen wird um alles zu erfassen oder entsprechend behandelt wird um die gesamten Daten auszulesen.
Auch solltest Du zu passenden Zeiten durchaus mal an das Buffer löschen denken:
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
Ich hoffe das hilft als Anregung,
Gruß André
Lesezeichen