2013-08-05 4 views
0

Я разрабатываю проект в VB.NET, который читает из SERIAL PORT некоторую информацию. Эта информация входит в пакет из 4 байтов. Im способен читать данные из последовательного порта, но то, что я получаю, это всего лишь пакет из 4 чисел.Работа с байтами в VB.NET

Например, мои показания:

134 0 0 4 
140 0 0 6 
141 0 0 5 
133 0 0 8 
... 

В руководстве объясняется, как преобразовать эти цифры в используемые данные. Я могу сделать это над бумагой, но я не знаю, как закодировать это в VB.NET. Я не знаю, как работать на уровне байта.

Прилагаю изображение о значении байта. enter image description here

+0

Покажите нам, что вы пробовали пожалуйста. –

+1

Я не хочу писать код для вас, все, что я могу вам дать, это следующее: http://www.tutorialspoint.com/vb.net/vb.net_bitshift_operators.htm это все операторы для man manilation в битве в vb.net с приятным маленьким примером – x4rf41

+2

да, я не хочу, чтобы рабы работали на меня: P. Я ищу советы и учебные пособия. Я проверю этот учебник и посмотрю, могу ли я получить что-то полезное! благодаря! – Redder

ответ

2

я получил ответ, спасибо пользователя x4rf41

Может быть нужно некоторые исправления, но его то, что я искал.

Это код:

Private Sub thread_lectura_tarjeta1() 

     Dim RXByte As Byte 'byte recived 
     Dim RXPacket As List(Of Byte) = New List(Of Byte) 'each reading has 4 bytes 
     Dim lectura As Long = 0 'is the FINAL data 
     Dim COMPort As SerialPort = ensayo.get_digitalizadores(0).get_puerto_com 
     Dim chk_signo As Byte = 0 

     While (True) 

      lectura = 0 

      Do 'each package starts with a byte > 127, because is the only byte that its first bit is 0 

       RXByte = COMPort.ReadByte 

      Loop Until (RXByte > 127) 

      RXByte = RXByte And 127 
      RXPacket.Insert(0, RXByte) 

      RXByte = COMPort.ReadByte    
      RXPacket.Insert(1, RXByte) 

      RXByte = COMPort.ReadByte 
      chk_signo = RXByte And 8 
      RXPacket.Insert(2, RXByte And 7) 

      RXByte = COMPort.ReadByte 
      RXPacket.Insert(3, RXByte) 

      lectura = RXPacket.Item(0) + RXPacket.Item(1) * 128 + RXPacket.Item(2) * 16384 

      'checking sign 


      If chk_signo = 8 Then ' negative number 

       lectura = (lectura Xor 131071) * -1 
      End If 



      Sleep(1) 'wait 1 milisecond and read again 

     End While 
    End Sub 
Смежные вопросы