By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,876 Members | 1,206 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,876 IT Pros & Developers. It's quick & easy.

Serial Port / RS232

P: n/a
I have a slight problem. When attempting to receive data via my serial port
I sometimes do not get the complete data. For example, I have a scanner
that reads barcodes. When reading barcode after barcode, there might be 2
or 3 barcodes in a row where I do not get the complete barcode. It will be
split up over 2 lines.
Here is my code and an example of the data received is toward the bottom.

Dim WithEvents com1 As New SerialPort

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
Try
With com1
.PortName = "Com4"
.BaudRate = 9600
.Parity = Parity.None
.DataBits = 8
.StopBits = StopBits.One
End With
com1.Open()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub

Private Sub com1_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles com1.DataReceived
Dim returnStr As String
returnStr = com1.ReadExisting 'ReadLine does not work. Any
reason why??
ReceiveSerialData(returnStr)
com1.DiscardInBuffer()
End Sub

Sub ReceiveSerialData(ByVal msg As String)
' Receive strings from a serial port.
CheckForIllegalCrossThreadCalls = False
TextBox1.Text &= msg & vbCrLf
End Sub

I cannot find anything about an EOM (End Of Message) character setting for
the Serial Port. My scanner is set up to send <CR><LFat the end of each
scan.

Here is an example of the data that I receive. I scanned 2 barcodes over
and over. You can see the barcodes are split up but I'm not sure what is
causing this. Any suggestions would be greatly appreciated.

036600826313

04740
0097742

036600826313

047400097742

036600826313

0474
00097742

036
600826313

047
400097742

036600826313

04740009
7742
Thank you all,
Tony

Mar 4 '07 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Sorry! Nevermind. I jumped the gun here. My scanner was set up with a
Preamble to send a <CRand my Postamble was DISABLED. Now that I've fixed
those, I also removed the vbCrLf in my ReceiveSerialData. Everything works
great.

"Tony K" <ki********@NOSPAMcomcast.netwrote in message
news:1F**********************************@microsof t.com...
>I have a slight problem. When attempting to receive data via my serial
port I sometimes do not get the complete data. For example, I have a
scanner that reads barcodes. When reading barcode after barcode, there
might be 2 or 3 barcodes in a row where I do not get the complete barcode.
It will be split up over 2 lines.
Here is my code and an example of the data received is toward the bottom.

Dim WithEvents com1 As New SerialPort

Private Sub Form1_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Try
With com1
.PortName = "Com4"
.BaudRate = 9600
.Parity = Parity.None
.DataBits = 8
.StopBits = StopBits.One
End With
com1.Open()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub

Private Sub com1_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles com1.DataReceived
Dim returnStr As String
returnStr = com1.ReadExisting 'ReadLine does not work. Any
reason why??
ReceiveSerialData(returnStr)
com1.DiscardInBuffer()
End Sub

Sub ReceiveSerialData(ByVal msg As String)
' Receive strings from a serial port.
CheckForIllegalCrossThreadCalls = False
TextBox1.Text &= msg & vbCrLf
End Sub

I cannot find anything about an EOM (End Of Message) character setting for
the Serial Port. My scanner is set up to send <CR><LFat the end of each
scan.

Here is an example of the data that I receive. I scanned 2 barcodes over
and over. You can see the barcodes are split up but I'm not sure what is
causing this. Any suggestions would be greatly appreciated.

036600826313

04740
0097742

036600826313

047400097742

036600826313

0474
00097742

036
600826313

047
400097742

036600826313

04740009
7742
Thank you all,
Tony
Mar 4 '07 #2

P: n/a
OK.

I had written a reply that included (with some example code -- since your
code is working, Ill include the other thoughts):

ReadLine returns data (blocking) only AFTER a newline (default is carriage
return plus line feed). I never use ReadLine. I always use ReadExisting
(or Read), and look for whatever specific terminating character I need.

Don't discard anything -- else something received while you are processing a
part of a read will go somewhere less than useful. As soon as you read
data, you have cleared that data, subsequent data may be buffered WHILE this
process is executing.

Dick

--
Richard Grier, MVP
Hard & Software
Author of Visual Basic Programmer's Guide to Serial Communications, Fourth
Edition,
ISBN 1-890422-28-2 (391 pages, includes CD-ROM). July 2004, Revised March
2006.
See www.hardandsoftware.net for details and contact information.
Mar 5 '07 #3

P: n/a
Dick,
If you don't mind I'd like to see some of your example code. Maybe I can
modify my code to complete this in a better way. The examples I've found on
MSDN just haven't been as clear as I'd like.

Thanks,
Tony

"Dick Grier" <dick_grierNOSPAM@.msn.comwrote in message
news:eB**************@TK2MSFTNGP05.phx.gbl...
OK.

I had written a reply that included (with some example code -- since your
code is working, Ill include the other thoughts):

ReadLine returns data (blocking) only AFTER a newline (default is carriage
return plus line feed). I never use ReadLine. I always use ReadExisting
(or Read), and look for whatever specific terminating character I need.

Don't discard anything -- else something received while you are processing
a part of a read will go somewhere less than useful. As soon as you read
data, you have cleared that data, subsequent data may be buffered WHILE
this process is executing.

Dick

--
Richard Grier, MVP
Hard & Software
Author of Visual Basic Programmer's Guide to Serial Communications, Fourth
Edition,
ISBN 1-890422-28-2 (391 pages, includes CD-ROM). July 2004, Revised March
2006.
See www.hardandsoftware.net for details and contact information.
Mar 7 '07 #4

P: n/a
Other events can happen while serial data is being received. Your best bet is to append new data to a string until the desired terminator is received. Handle the message and remove it from the the string. In some instances more data can arrive while (or before)handling the previous terminated message. You must preserve this data or the subsequent message will be incomplete.
Mar 7 '07 #5

P: n/a
Other events can happen while serial data is being received. Your best bet is to append new data to a string until the desired terminator is received. Handle the message and remove it from the the string. In some instances more data can arrive while (or before)handling the previous terminated message. You must preserve this data or the subsequent message will be incomplete.
Mar 7 '07 #6

This discussion thread is closed

Replies have been disabled for this discussion.