Серийные данные не передаются в приложении C # - PullRequest
2 голосов
/ 17 мая 2010

У меня есть приложение на C #, в котором последовательные данные (COM1) иногда не передаются. Ниже приведен упрощенный фрагмент моего кода (вызовы записи в textBox удалены):

    InitializeComponent()
    {
       // 
       // serialPort1
       // 
       this.serialPort1.BaudRate = 115200;
       this.serialPort1.DiscardNull = true;
       this.serialPort1.ReadTimeout = 500;
       this.serialPort1.ReceivedBytesThreshold = 2;
       this.serialPort1.WriteTimeout = 500;
       this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
    }

        if (radioButtonUart9600.Checked)
        {
           serialPort1.BaudRate = 9600;

           try
           {
              serialPort1.Open();
           }
           catch (SystemException ex)
           {
              /* ... */
           }
        }

        try
        {
           serialPort1.Write("D");
           serialPort1.Write(msg, 0, 512);
           serialPort1.Write("d");
           serialPort1.Write(pCsum, 0, 2);
        }
        catch (SystemException ex)
        {
           /* ... */
        }

Странно то, что этот же код прекрасно работает, когда порт настроен для 115.2 Кбит / с. Однако при работе на скорости 9600 бит / с данные, которые должны передаваться этим кодом, похоже, не передаются. Я проверил это, наблюдая за флагом приема на удаленном устройстве. Из инструкции try не выдается никаких исключений. Есть ли что-то еще (Flush и т. Д.), Что я должен сделать, чтобы убедиться, что данные передаются? Любые мысли или предложения, которые вы можете иметь, будут оценены. Я использую Microsoft Visual C # 2008 Express Edition. Спасибо.

1 Ответ

4 голосов
/ 18 мая 2010

Удалите эти блоки try / catch. Это должно дать вам шанс увидеть исключение TimeoutException, которое вы получаете, потому что вы установили значение WriteTimeout слишком низким Отправка 516 байтов на скорости 9600 бод занимает 538 миллисекунд.

Ваши другие настройки тоже являются рецептами для неприятностей. Избавьтесь от ReceivedBytesThreshold и DiscardNull.

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