Как определить, мы получаем все данные от последовательного порта C # - PullRequest
1 голос
/ 04 сентября 2011

Как мы узнаем о классе SerialPort в c #, когда получаем все данные от устройства, подключенного к последовательному порту?

Вот мой код.Откуда я знаю, что получил все данные с устройства?

private void button1_Click(object sender, RoutedEventArgs e)
        {
    p = new SerialPort("COM5");
                if (!p.IsOpen)
                {
                    try
                    {
                        p.Open();
                        p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
                        p.PinChanged += new SerialPinChangedEventHandler(p_PinChanged);                       
                      Data = "Port ouvert";
                    }
                    catch (Exception ex)
                    {
                        Data = string.Format("Erreur ouverture du port : {0}", ex.Message);
                    }
                }}


    void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {

                var serial = (SerialPort)sender;

                string line = serial.ReadExisting();

                string data =  string.Format("Donné recu : {0}",line);          
                Data = data;
                strb.Append(line);

            }

Ответы [ 3 ]

5 голосов
/ 04 сентября 2011

как вы представляете, что получили все данные?Устройство всегда может отправить вам еще немного позже.

Например, у нас было медицинское устройство, которое использовало для отправки строк текста на последовательно подключенный принтер (один из этих старых принтеров с выводом, способный печатать по одной строке за раз ина той же странице), мы заменили принтер на компьютер и сделали программное обеспечение способным добавлять в TextArea строки текста, поступающие из последовательного порта.

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

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

2 голосов
/ 04 сентября 2011

Вы можете проверить свойство SerialDataReceivedEventArgs.EventType . Если это SerialData.Eof, это, скорее всего, означает, что все данные были получены.

1 голос
/ 04 сентября 2011

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

То, что вы просите, находится выше уровня последовательного порта.Вам необходимо знать интерфейс для типа устройства, с которым вы общаетесь.Вы должны знать, чего ожидать от устройства, которое будет диктовать, когда вы закончите слушать.Вам также потребуется написать код обработки ошибок для ситуаций, когда вам не отправляют все необходимые данные.

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