Springen naar inhoud


- - - - -
VS 2015

Seriële Data Wordt Ontvangen In Delen

VS2015

  • Log in a.u.b. om te beantwoorden
Er zijn 3 reacties in dit onderwerp

#1 ON3WVS

ON3WVS

    Rookie Developer

  • Leden
  • Pip
  • 31 berichten
    Laatst bezocht 15 jan 2020 21:49

Geplaatst op 12 januari 2020 - 19:04

Hallo,

In een Visual Basic 2019 programma geef ik een instructie om via de seriële poort een commando te sturen naar een extern toestel.
Dat toestel ontvangt het commando goed, en stuurt een antwoord terug. Dat antwoord krijg ik echter in twee verschillende stukken terug, en niet in één string.

Ik vermoed dat het ergens te maken heeft met de lengte van het antwoord dat moet gedefinieerd of gedetecteerd worden maar ik kom er niet meteen aan uit:

In de Serialport1_Datareceive event heb ik het volgende:

Code:
Const bufferlength As Integer = 16
Dim buffer(16) as Char
Serialport1.Read(buffer, 0, bufferlength)
Dim strAntwoord as New String(buffer)
Msgbox(strAntwoord)


Het antwoord dat Visual Basic terug krijgt zou er als volgt moeten uit zien:

"r0400D40EFF" & vbCR & VbNull & "." & VbNull

Maar wat ik effectief terugkrijg is

Eerste bericht
"r" & VbNull & VbNull & VbNull & VbNull,.......etc tot er 16 karakters zijn

Tweede bericht
"0400D40EFF" & vbCR & VbNull & "." & VbNull

Als ik wat speel met de bufferlengte dan wordt mijn antwoord nog steeds in stukken weergegeven, maar dan anders verdeeld.
Het lijkt erop dat ik eerst zal moeten "meten" hoeveel karakters ik terug ontvang om dit antwoord dan mooi in één string te gieten.

Iemand advies hiermee?

Bedankt!

#2 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 695 berichten
    Laatst bezocht gisteren, 20:43
  • LocatieMechelen (BE)

Geplaatst op 15 januari 2020 - 13:43

Waarom gebruik je niet readline()? https://docs.microso...om-serial-ports

#3 ON3WVS

ON3WVS

    Rookie Developer

  • Leden
  • Pip
  • 31 berichten
    Laatst bezocht 15 jan 2020 21:49

Geplaatst op 15 januari 2020 - 21:05

Hallo Damic,

Ik heb readline geprobeerd en daarmee werkte het niet. Ik heb begrepen dat readline wacht tot er een Line Feed meegestuurd wordt. In het antwoord van het toestel zat er geen LF, enkel een CR.
Uiteindelijk is het dan gelukt om via ReadChar karakter per karakter binnen te nemen en achter elkaar te plakken om tot één string te komen. Van zodra CR gedetecteerd wordt, dan wordt de string als compleet beschouwd en naar ergens anders geschreven voor verdere verwerking.
Jammer dat er niet meer commando's bestaan in VB waarmee je zelf een delimiter kan kiezen. Ik dacht er vanaf te zijn met één regeltje maar dat pakte heel anders uit :-)

Bedankt alvast,

#4 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 695 berichten
    Laatst bezocht gisteren, 20:43
  • LocatieMechelen (BE)

Geplaatst op 15 januari 2020 - 21:24

Je kan natuurlijk je eigen functie maken die op vbcr stopt en een volledige string terug geeft zonder al die vbnulls, maar dat verklaart nog altijd niet waarom ie alles in stukken kapt.





Ook met taq VS 2015, VS2015 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2015] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)