Solved

Using MScomm with several serial ports

Posted on 2008-06-20
1
636 Views
Last Modified: 2013-11-23
I have an old VB6 aplication that uses MScomm to with a scanner to scan labels. I need to modify the code so that several scanners can be attached via a multi port system. This system uses two timer controls. I have modified the code to use more timer contrls, but it always seems to go through the loop only once and does not extend to the second or third scanner.
Below is the procedure to which scanner and mscomm parameters are passed. Any ideas?
Private Sub StartScanning(mscomm As mscomm, objTimer As Timer, objTimer2 As Timer)

    Dim bStarted As Boolean

    Dim sInstring As String

    Dim bDone As Boolean
 

    On Error GoTo Errorhandler
 

    bStarted = False
 

    DoEvents

    objTimer.Enabled = True

    sInstring = ""

    txtInput.Text = ""
 

    bDone = False

    bStop = False
 

    'Tell the control to read entire buffer when Input is used

    mscomm.InputLen = 0
 

    If mscomm.PortOpen = False Then

       mscomm.PortOpen = True

    End If
 

    StatusBar1.Panels(1).Text = "Waiting for Scanned Labels ..."

    StatusBar1.Panels(1).Width = StatusBar1.Width - (StatusBar1.Panels(2).Width + StatusBar1.Panels(3).Width)
 

    sInstring = ""
 

    'Do While Not bDone

    Do While bStop = False

       DoEvents

       Do While mscomm.InBufferCount > 0

            StatusBar1.Panels(1).Text = "Reading Scanned Labels ..."

            StatusBar1.Panels(1).Width = StatusBar1.Width - (StatusBar1.Panels(2).Width + StatusBar1.Panels(3).Width)
 

            bStarted = True

            DoEvents
 

            'do not switch to line after to see newly scanned labels first - did not work

            'sInstring$ = MSComm1.Input & sInstring$
 

            'next line is the right order

            sInstring$ = sInstring$ & mscomm.Input

            txtInput.Text = sInstring
 

            objTimer.Interval = 100

            objTimer.Enabled = True

            Do While objTimer2.Enabled = True

               DoEvents

            Loop

       Loop

       If mscomm.InBufferCount = 0 And bStarted = True Then

          bDone = True

       End If

    Loop
 

    txtInput.Text = sInstring

    objTimer.Enabled = False
 

    If mscomm.PortOpen = True Then

       mscomm.PortOpen = False

    End If
 

'    ' * make the call to stop based on the control passed as parameter object

'    If bStop = True Then

'        Select Case mscomm

'        Case MSComm1

'            Call cmdStop_Click

'        Case MSComm2

'            Call cmdStop2_Click

'        Case MSComm3

'            Call cmdStop3_Click

'        End Select

'    End If
 

    Exit Sub
 

Errorhandler:

    If Err = 8005 Then

       MsgBox ("Port Already Open - Change Settings and Select a Different Port Number")

       Err.Clear

       Exit Sub

    End If

    If Err = 8002 Then

       MsgBox ("Invalid Port Number - Change Settings and Select a Different Port Number")

       Err.Clear

       Exit Sub

    End If
 

    Err.Clear

End Sub
 

 Private Sub cmdStop2_Click()

    Call StopScanning(MSComm2, gsScanner2)

 End Sub

Open in new window

0
Comment
Question by:ochang435
1 Comment
 
LVL 7

Accepted Solution

by:
Dauhee earned 250 total points
ID: 21837460
you could get a timer to kick off multiple instances of StartScanning but might be easier in long run (but more coding up front) to put into an activeX control and then place multiple controls on the form - 1 for every scanner

basically you need multi-threading so that is a workaround vb6 style :)
0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

If you haven’t already, I encourage you to read the first article (http://www.experts-exchange.com/articles/18680/An-Introduction-to-R-Programming-and-R-Studio.html) in my series to gain a basic foundation of R and R Studio.  You will also find the …
This article is meant to give a basic understanding of how to use R Sweave as a way to merge LaTeX and R code seamlessly into one presentable document.
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now