Ошибка COM-порта, когда порт уже потоковый - PullRequest
0 голосов
/ 07 июля 2011

У меня есть приложение, которое читает с COM-порта, а затем что-то делает с данными, которые он получает. В настоящее время я использую эмулятор COM-порта (поскольку у меня нет доступного для меня устройства), но я передаю ему образец данных. Программа, кажется, работает отлично, если я открываю COMPort, прежде чем начать передачу данных. Однако, если я начинаю передачу перед открытием COMPort, а затем открываю порт, событие dataReceived никогда не запускается, и я никогда не могу получить какие-либо данные. Я даже попытался очистить INBuffer, как только я открою порт, но не могу прочитать с него.

Мой код для открытия порта:

public void setupComPort(string baudRate, string dataBits, string stopBits, string parity, string portName)
    {
        if (comPort.IsOpen)
            comPort.Close();
        comPort.BaudRate = int.Parse(baudRate);
        comPort.DataBits = int.Parse(dataBits);
        comPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), stopBits);
        comPort.Parity = (Parity)Enum.Parse(typeof(Parity), parity);
        comPort.PortName = portName;
        // When data is recieved through the port, call this method
        comPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        try
        {
            // Open the port
            comPort.Open();
            //If there's data in buffer, discard so we can start receiving
            //comPort.DiscardInBuffer();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message, "Error Opening Port", MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 07 июля 2011

Это, вероятно, проблема с эмулятором. Я думаю, проблема исчезнет, ​​когда у вас будет реальное оборудование. Единственное, что я могу попробовать, это установить для ReceivedBytesThreshold значение, отличное от значения по умолчанию (например, 10 или что-то еще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...