2017-04-07 12 views
0

POS端末をシミュレートし、MySQLデータベースから取得した画面に製品名と価格を表示するCOMポートを使用して、バーコードスキャナを使用しています。問題は、COMポートが開いていて、データを読み取る準備ができている間に、「スキャンモード」を終了し、合計金額を取得したい場合、loop until inkey=chr(13)は機能しません。Enterキーを押してCOMポート経由でバーコードを読み取る方法を教えてください。

これはFreeBasicで書かれていますが、言語固有の解決策ではなく、この問題の解決方法に関する一般的な考え方に興味があります。

dim buffer as string*20 'reads a 20 character long string 
do 
    if open com ("COM6:9600,N,,2" for input as #1) <> 0 then 
     print "Unable to open serial port. Press any key to quit application." 
     sleep 
     end 
    end if 

    get #1,,buffer 
    print buffer 
    close #1 
loop 
+0

私はループが特定のバーコードとのループでIF文を入れていた終了ことができる唯一の方法は、ループしかし、それは最も厄介な解決策です。 – Gabe

答えて

0

ループでポート接続を繰り返し開いたり閉じたりしません。代わりに、ループの前にデバイスへの接続を開きます。ループでは、イベント(キーが押された?COMポート上の新しい受信データ?)をチェックし、何らかの方法で反応します。最後に、ループが終了したら、接続を終了します。

擬似コード:

Open Connection 
Do This 
    PressedKey = CheckForPressedKey() 
    If IncomingDataOnComPort? Then 
     Load Something From DB ... 
    EndIf 
Until PressedKey Was ENTER 
Close Connection 

未テストのFreeBASIC例:読書によって

' Took the COM port parameters from your question. Don't know if correct for the device. 
Const ComPortConfig = "COM6:9600,N,,2" 

Print "Trying to open COM port using connect string "; Chr(34); ComPortConfig; Chr(34); "..." 
If (Open Com (ComPortConfig For Binary As #1) <> 0) Then 
    Print "Error: Could not open COM port! Press any key to quit." 
    GetKey 
    End 1 
End If 

Print "COM port opened! Waiting for incoming data." 
Print 
Print "Press ENTER to disconnect." 
Print 

Dim As String ComDataBuffer = "", PressedKey = "" 
Do 
    ' Key pressed? 
    PressedKey = Inkey 
    ' Incoming data on COM port ready to be read? 
    If Loc(1) > 0 Then 
     ComDataBuffer = Space(Loc(1)) 
     Get #1, , ComDataBuffer 
     Print "Received data on COM port: "; chr(34); ComDataBuffer; chr(34) 
    End If 
    ' Give back control to OS to avoid high cpu load due to permanent loop: 
    Sleep 1 
Loop Until PressedKey = Chr(13) 'ENTER 

Close #1 

Print 
Print "Disconnected. Press any key to quit." 
GetKey 
End 0 
関連する問題