Specifieke bytes selecteren

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Snack Clip
  • Registratie: Juni 2004
  • Laatst online: 06-05-2021
Hallo forumleden,

Ik ben bezig met het programmeren van een eigen programma in visual basic. Ik heb nog niet echt veel ervaring en daarom stuit ik op het volgende probleem.
Ik maak een verbinding tussen een apparaat via rs232. Vervolgens verzend ik een instructie waarin het apparaatadres staat en het adres dat ik wil opvragen. Vervolgens krijg ik een antwoord terug in deze vorm:
14
03
02
08
EA
33
C8

Voor mij zijn alleen de data bytes interessant en dat is in dit geval 08 (highbyte) en EA (lowbyte). Ik wil dus graag deze databytes achterelkaar op de WriteLine zien. Daarna moeten ze ook weer omgezet worden in decimaal, maar dat is voor later.
De code die ik gebruik is als volgt:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Shared Sub Read()
        Dim rcvBuf(_serialPort.ReadBufferSize) As Byte
        Dim message As Integer = Int32.MinValue

        While (_continue)
            Try
                message = _serialPort.Read(rcvBuf, 0, 1)
                Dim res As New StringBuilder()

                For i As Integer = 0 To message Step 2
                    res.Append(rcvBuf(i).ToString("X2"))
                Next

                Console.WriteLine(res.ToString())
            Catch ex As TimeoutException
                ' Do nothing
            End Try
        End While
    End Sub


Ik hoop dat jullie mij op weg kunnen helpen.
Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:46

Matis

Rubber Rocket

Twee dingen, zet je code alsjeblieft tussen de code-tags: Overzicht van UBB-codes #tag_code Dat maakt het makkelijker leesbaar.
Ten tweede: Ben je verplicht om VB te gebruiken? Het is niet de meest gemakkelijke taal om mee te beginnen als je onervaren bent ;)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Hoe is dat bericht dat je terug krijgt opgebouwd?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Snack Clip
  • Registratie: Juni 2004
  • Laatst online: 06-05-2021
@Matis, dank voor je aanwijzing wat de tags betreft, is makkelijker leesbaar nu.
En ja ik moet het programma in VB schrijven.

@Grijze Vos,
Het bericht is zo opgebouwd als ik heb laten zien, dus:
14
03
02
enz

Elke op een nieuwe regel.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21:46

Matis

Rubber Rocket

In dit specifieke geval, als de bytes altijd in dezelfde volgorde komen, kun je ervoor kiezen om in je forlusje byte 3 en 4 uit te lezen en alleen die te appenden aan je string.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Wat gaat er nu precies fout? Wat bevat rcvBuf direct na de Read call? En klopt dat? Of gaat het mis met het omzetten naar string?

Kortom, wat meer debuginfo zou handig zijn :)

Acties:
  • 0 Henk 'm!

  • Snack Clip
  • Registratie: Juni 2004
  • Laatst online: 06-05-2021
@JanDM,
Er gaat nog niks fout, de hele reeks die op mijn scherm tevoorschijn komt klopt. Ik wil alleen de databytes van de reeks hebben. In dit geval byte 4 en 5. Deze moeten achter elkaar komen en omgezet worden in een decimale waarde.

Acties:
  • 0 Henk 'm!

  • Snack Clip
  • Registratie: Juni 2004
  • Laatst online: 06-05-2021
@Matis,
Daar ging mij gedachte ook naar uit alleen lukt mij dat nog niet.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Begrijp je je eigen code wel? Je maakt het jezelf nogal erg moeilijk. Op dit moment ben je namelijk eerst een byte om aan het zetten naar een string en vraagt je nu af hoe je daar vervolgens weer een byte van gaat maken.

Bedenk dat een byte ook gewoon een 'normale decimale waarde' is. Dat het nu hexadecimaal op je scherm komt heb je zelf gedaan door een formaat mee te geven aan je toString().

Wat lukt er trouwens niet met het forlusje? Welke code heb je geprobeert en waarom gaf dat niet het gewenste effect?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Snack Clip
  • Registratie: Juni 2004
  • Laatst online: 06-05-2021
Waarschijnlijk begrijp ik het inderdaad nog niet. Ik dacht dat ik het naar een string moest omzetten om in ieder geval de ontvangen data te kunnen laten weergeven. Het hoeft inderdaad niet eerst naar hex omgezet te worden, ik kon het op deze manier echter wel controleren of de ontvangen data goed was (in vergelijking met software die bij het apparaat wordt geleverd). Er wordt nu op elke nieuwe lijn in het console een byte weergegeven. Ik moet dus op een of andere manier de twee juiste bytes kiezen en deze samenvoegen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je moet geen bytes kiezen; er valt niets te kiezen. Je weet wat de header van een bericht is (14 03 02), dus dat kun je gewoon overslaan. Nouja, je moet ze wel checken natuurlijk. ;) De twee bytes daarna zijn dan automatisch de daadwerkelijke data, en die druk je dan wel af of gebruik je daarvoor waar je ze voor nodig hebt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Snack Clip
  • Registratie: Juni 2004
  • Laatst online: 06-05-2021
Ja maar hoe druk ik nu alleen die databytes af?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Draai die vraag eens om? Hoe druk je de header bytes niet af? Die is wat eenvoudiger en levert je hetzelfde op. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Snack Clip schreef op zaterdag 05 september 2009 @ 14:48:
Hallo forumleden,

[...]

Ik ben bezig met het programmeren van een eigen programma in visual basic. Ik heb nog niet echt veel ervaring en daarom stuit ik op het volgende probleem.Ik hoop dat jullie mij op weg kunnen helpen.
Alvast bedankt!
Een infinite loop met de 'toch niet helemaal'-blocking call naar .Read() is niet de juiste manier om dit te doen. Maak je SerialPort asynchroon en gebruik het DataReceived event. Zie ook hier.
Pagina: 1