2014-09-11 6 views
2

Мой существующий код:Как отправить все данные в один буфер через последовательный порт?

private void ConvertAndSend_Click(object sender, EventArgs e) 
{ 
    if (serialPort.IsOpen) 
    { 
     byte[] TxBuffer = new byte[240]; 
     string[] coords = textBox1.Text.Split('\n'); 
     for (int i = 0; i <= coords.Length - 1; i++) 
     { 
      if (coords[i].Length > 0) 
      { 
       Data = GetValue(coords[i]); 
      } 
     } 
     TxBuffer[0] = 0x5A; 
     TxBuffer[1] = Instruction; 
     TxBuffer[2] = (byte)Data.Length; 
     Data.CopyTo(TxBuffer, 3); 
     TxBuffer[Data.Length + 3] = 0x2C; 
     serialPort.Write(TxBuffer, 0, 4 + Data.Length); 
    } 
} 

Теперь я посылаю все «данные» в отдельном «Txbuffer». например если у меня есть несколько «Данных», я собираюсь отправить несколько «Txbuffer». Как я могу объединить все «данные» в один «Txbuffer» и отправить за один раз?

+0

Почему, на ваш взгляд, это имеет значение? Драйвер устройства будет конкатенировать их все в один буфер FIFO в любом случае, пока 'Write()' вызывается снова до отправки последнего байта, а последовательные порты настолько медленны, что это легко сделать. –

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

@BenVoigt Это не большая проблема, но она будет более эффективной. – user3974930

ответ

2

Это не совсем «неправильно», хотя волшебное число, такое как 240, не выигрывает никаких призов. Вы также можете использовать BinaryWriter, передать SerialPort.BaseStream в свой конструктор.

Имейте в виду, что последовательные порты реализуют потоки, а не «пакеты». Просто сырой ход байтов без отличительного начала и конца. Точно так же, как TCP. Нет никакого протокола кадрирования, если вы не создадите свой собственный. Что вы сделали. Ресивер должен вернуть поток байтов обратно в кадр. Это же требование не существует, когда вы его передаете.

+0

Спасибо за помощь Ханс, я решил это :) – user3974930

Смежные вопросы