Ich habe Firmware-Upgrade-Programm, das die Software auf einem Gerät über eine serielle Verbindung aktualisiert. Dies wird an Kunden gesendet, die das Upgrade durchführen. Beim Testen habe ich festgestellt, dass COM1 ausgewählt werden kann und auch ohne angeschlossenes serielles Kabel geöffnet wird. Es gibt Code, um zu prüfen, ob die Verbindung offen ist und um Ausnahmen zu fangen, aber da COM1 geöffnet wird, wird das Programm gerade fortgesetzt, obwohl keine Verbindung zum Gerät besteht.Handhabung der Wahl der falschen seriellen Schnittstelle in Upgrade-Software
Wie gehe ich mit einem Client um, der den falschen COM-Port auswählt?
Es wird Anweisungen geben, aber ich fühle mich sicherer, dieses Problem von der App behandelt zu haben.
Hier ist meine serielle Schnittstelle offen Code:
// Create a new SerialPort object.
SerialPort _serialPort;
_serialPort = new SerialPort(comPort, 115200, Parity.Even, 8, StopBits.One);
// for state machine
bool _continue = true;
do
{
try
{
_serialPort.Open();
if (_serialPort.IsOpen)
{
Console.WriteLine("");
Console.WriteLine("Serial Port is Open");
Console.WriteLine("");
}
else
{
MessageBox.Show("Serial Port is not open. Choose another port.");
}
}
catch (UnauthorizedAccessException ex)
{
MessageBox.Show(ex.Message);
}
catch (ArgumentOutOfRangeException ex)
{
MessageBox.Show(ex.Message);
}
catch (ArgumentException ex)
{
MessageBox.Show(ex.Message);
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
catch (InvalidOperationException ex)
{
MessageBox.Show(ex.Message);
}
} while (!_serialPort.IsOpen);
Machen Sie keine Schleife und Sie werden in Ordnung sein, versuchen Sie einfach, den Port zu öffnen, und wenn es eine Ausnahme auslöst, informieren Sie den Benutzer und lassen Sie ihn einen anderen wählen. – Gusman
Ich nehme an, Sie haben eine Art von Protokoll mit einem Handshake von irgendeiner Form, so dass Sie ein Timeout programmieren können, wenn das Gerät nicht in X-Zeit antwortet, schließen Sie den Port und informieren Sie den Benutzer. – Gusman
Der IsOpen-Test schlägt nie fehl, zuvor haben Sie Open aufgerufen. Du hast das nicht getestet, es funktioniert einfach nicht. Serielle Ports sind zu grob, um einen zuverlässigen "is connected" Test zu haben. Die DsrHolding-Eigenschaft kann helfen, ist aber keine Garantie. Stellen Sie sicher, dass Sie über ein Optionsmenü verfügen, mit dem der Benutzer die richtige Portnummer auswählen kann. –