Серийный порт простой - PullRequest
0 голосов
/ 29 марта 2012

Привет, у меня есть простая программа, но она не работает должным образом.
Когда я получаю «A» на последовательном порту, я устанавливаю checkbox1, а когда «a», я сбрасываю checkbox1.

 public partial class MainWindow : Window
    {
        public static SerialPort sp = new SerialPort();
        public MainWindow()
        {
            InitializeComponent();
            sp.BaudRate = 2400;
            sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Prijem);
            if (!sp.IsOpen)
                sp.Open();            
        }

        private delegate void UpdateUiTextDelegate(char text);
        private void Prijem(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {            
            char c = (char)sp.ReadChar();
            Dispatcher.Invoke(DispatcherPriority.Send,
                new UpdateUiTextDelegate(WriteData), c);
        }

        private void WriteData(char c)
        {
            if (c == 'A')
            {
                checkBox1.IsChecked = true;
            }
            else if (c == 'a')
            {
                checkBox1.IsChecked = false;
            }
        }
    }

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Когда генерируется событие DataReceived, не гарантируется, сколько символов находится в буфере. Поэтому, если вы просто позвоните ReadChar(), вы не прочитаете полное содержимое буфера. Поэтому, если символы отправляются достаточно быстро, возможно, вы что-то пропустили, потому что ваш обработчик событий вызывается, когда два или более символа находятся в буфере.

Также вы должны установить ALL свойства последовательного порта, а не только скорость передачи данных. Это необходимо, потому что последовательный порт не имеет состояния по умолчанию и останется последним установленным параметром для каждого параметра. Поэтому, если вы используете какую-либо терминальную программу для изменения некоторых менее используемых настроек (таких как Xon / off, HW Handshake, StartBits и т. Д.), Ваша программа просто будет использовать те же настройки, если вы не сбросите их до желаемых значений.

1 голос
/ 29 марта 2012

Свойства SerialPort не все установлены.Назначьте номер порта.

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