c # очистка последовательного порта для маленьких порций данных - PullRequest
3 голосов
/ 19 января 2011

Я пишу небольшой байтовый массив из двух байтов, используя что-то вроде следующего:

int bytes_to_write = 2;
port.Write(byte_buffer, buffer_offset, bytes_to_write);

Похоже, что лежащие в основе библиотеки ждут дополнительных данных, прежде чем записывать их в порт. Это правильное поведение, и могу ли я заставить его немедленно написать небольшой фрагмент? Некоторые форумы говорят, используя:

port.BaseStream.Flush(); 

приведет к правильному поведению, но другие говорят, что это не работает. Я провел пару тестов, и, похоже, у меня ничего не вышло.

Ура, Ричард

Ответы [ 3 ]

5 голосов
/ 19 января 2011

Это будет записано в буфер передачи драйвера последовательного порта без какой-либо дополнительной помощи.Промывка не требуется.Если он не доходит до устройства, то, вероятно, у вас проблема с рукопожатием.Классическая ошибка - оставить для нее значение None и не устанавливать для свойств DtrEnable и RtsEnable значение true.

Это также может быть проблемой проводки, избавьтесь от нее с помощью другой программы, например HyperTerminal или Putty.И последнее, но не менее важное: трудно поддерживать устройство, которое использует тайм-ауты при отладке кода.

3 голосов
/ 19 января 2011

Вы уверены, данные не записываются в порт?Я много работал с модулем SerialPort и выписал отдельные байты просто отлично.Там не должно быть необходимости звонить Flush().

Установите точку останова с помощью отладчика после вызова port.Write и проверьте объект port.Является ли свойство BytesToWrite > 0?

Редактировать : Кроме того, убедитесь, что ваш аргумент buffer_offset равен 0.

0 голосов
/ 06 декабря 2017

У меня очень похожая ситуация.Я пытаюсь писать по последовательному порту от c # до платы Arduino.Я могу записать в последовательный порт, но данные, наконец, отправляются только после закрытия и открытия порта.Я пробую несколько настроек, может быть, это должно вам помочь.DtrEnable, безусловно, самый важный.

port.Handshake = Handshake.None;
port.Open();
port.DiscardInBuffer();
port.DiscardOutBuffer();
port.DtrEnable = true;                
...