2017-04-07 10 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