2014-01-20 3 views
0

У меня есть устройство, которое посылает данные в формате [stx]..data...[etx]C# приема данных от последовательного порта, используя readto()

Есть ли способ, чтобы использовать serialport.readto() функцию для чтения данных Шифрование до [etx]?

byte test = sp.ReadByte(); 

if (test == 0x02 && comOpen) 
{ 
    string indata = sp.ReadTo(""); 
    watch = "\n" + indata; 
    SetText(watch); 
    process_data(indata); 
    sendack(0x06); 
} 

Количество данных меняется каждый раз, когда он отправляет данные.

Я нашел реализацию serialport.read() функция очень типичная :). так есть ли способ, которым я могу использовать функцию serialport.readto() для чтения данных во входящем потоке?

Любое предложение было бы очень полезно.

+0

Непонятно, почему вы не используете ReadTo() правильно. Является ли зависанием, что вы не знаете, как его использовать, или является зависанием, что данные двоичные? –

+0

sp.Readto ("") содержит символ между "", обработанным регистратором последовательных данных для [ETX]. он не появляется здесь и не в VS, а там. Я имитирую устройство из симулятора, чтобы разработать приложение для обработки этих данных. – user3095292

+0

Хм, ну, не делай этого. Вместо этого используйте «\ u0003». –

ответ

0

Got мимо этого вопроса с помощью "\ u0003" в функции sp.readto().

sp.readto("\u0003") 
0

Если etx имеет несколько байтов, вам нужно будет сравнить его с буфером, чтобы узнать, когда вы получили окончание передачи.

Пример:

// Set to whatever ending marker is used in your scenario. 
var endingMarker = new byte[] { 0x01, 0x02, 0x03 }; 
var buffer = new List<byte>(); 

// Continue to read until ending marker is read. 
while (!endingMarker.SequenceEqual(buffer.Skip(Math.Max(0, buffer.Count - endingMarker.Length)))) 
{ 
    // Read one byte to the buffer. 
    buffer.Add(sp.ReadByte()); 
} 

// Remove ending marker. 
var result = buffer.Take(buffer.Count - endingMarker.Length).ToArray(); 
Смежные вопросы