gute serielle Schnittstelle Klasse für das .NET Framework?
-
20-08-2019 - |
Frage
Weiß jemand, der eine gute Klasse (hoffentlich kostenlos), um die .net Serialport-Klasse zu ersetzen? Es macht mir Probleme und ich brauche eine, die etwas flexibler ist.
Sehen Sie meine anderen Thread über meine Probleme , aber im Wesentlichen muss ich die IOCTL_SERIAL_SET_DTR zu unterdrücken und IOCTL_SERIAL_CLR_DTR Befehle von ausgegeben wird, wenn ich den Port öffnen, so brauche ich etwas flexibler als die Klasse von .NET Framework bereitgestellt.
Lösung
Vor einigen Jahren habe ich OpenNETCF.IO.Serial vor den Serien Unterstützung .net hinzugefügt wurde. Es ist für den kompakten Rahmen, aber ich benutzte es für beide kompakte Geräte und regelmäßige Windows-Anwendungen. Sie erhalten den Quellcode, so dass Sie es selbst ändern kann das ist, was ich getan habe.
Es schafft im Grunde einen c # Wrapper um die serielle Funktion aus kernel32.dll importiert.
Sie möchten vielleicht auch einen Blick auf haben, wie eine serielle Schnittstelle zu erfassen, die das USB-Kabel verschwindet, weil bekommt unplugged
Hier ist der Code, den ich es zu nennen pflegte
using OpenNETCF.IO.Serial;
public static Port port;
private DetailedPortSettings portSettings;
private Mutex UpdateBusy = new Mutex();
// create the port
try
{
// create the port settings
portSettings = new HandshakeNone();
portSettings.BasicSettings.BaudRate=BaudRates.CBR_9600;
// create a default port on COM3 with no handshaking
port = new Port("COM3:", portSettings);
// define an event handler
port.DataReceived +=new Port.CommEvent(port_DataReceived);
port.RThreshold = 1;
port.InputLen = 0;
port.SThreshold = 1;
try
{
port.Open();
}
catch
{
port.Close();
}
}
catch
{
port.Close();
}
private void port_DataReceived()
{
// since RThreshold = 1, we get an event for every character
byte[] inputData = port.Input;
// do something with the data
// note that this is called from a read thread so you should
// protect any data pass from here to the main thread using mutex
// don't forget the use the mutex in the main thread as well
UpdateBusy.WaitOne();
// copy data to another data structure
UpdateBusy.ReleaseMutex();
}
private void port_SendBuff()
{
byte[] outputData = new byte[esize];
crc=0xffff;
j=0;
outputData[j++]=FS;
// .. more code to fill up buff
outputData[j++]=FS;
// number of chars sent is determined by size of outputData
port.Output = outputData;
}
// code to close port
if (port.IsOpen)
{
port.Close();
}
port.Dispose();
Andere Tipps
Ich habe nicht versucht, versucht, dies aber vielleicht können Sie:
- Holen Sie sich den Quellcode von
System.IO.Ports.SerialPort
unter Verwendung von Reflector oder ähnlich - Ändern Sie diesen Quellcode wie Sie möchten
- Rebuilt die modifizierte Kopie in einem anderen Namespace, und es verwenden,
Der Standard .NET Serialport ist keine versiegelte Klasse - eine Chance, Sie das Verhalten, das Sie von einer Unterklasse erhalten, erleben