Este pequeno projetinho tem o intuito de simular uma balança.
Devem pensar: Mas isto eu já sei que existe.
Tudo bem, mas eu não tenho uma balança e nem um simulador gratis. O único que conheço é da TKS ou Igara e ele não envia a string para o leitor.
Então fui a caça e criei o meu e de quebra apresento como comunicar por portas.
O teste foi feito usando Fivewin e Harbour, portanto as funções poderão fazer parte delas.
#include "FiveWin.ch"
// Protocolo Prt1 STXPPPPPETX
// Protocolo Prt2 STXPPPPPPCR
// Protocolo Prt3 STXP/I/N/SETX
#DEFINE ENQ chr(05)
#DEFINE STX chr(02)
#DEFINE ETX chr(03)
#DEFINE CR chr(13)
static hLib, hDib, oSpoolTimer, nCom
Function Main(_tempo_,cComm)
Default _tempo_ := "05", cComm := "COM4"
nCom := APRICOM( cComm )
cConteudo := STX + strZero( Random( 999999 ), 6 ) + ETX
for i = 1 to len( cConteudo )
SENDSTR( nCom, Substr( cConteudo, i, 1 ) )
next
cConteudo := ""
Return NIL
STATIC FUNCTION TASTI( nCom, nKey )
SENDSTR( nCom, CHR( nKey ) )
RETURN NIL
STATIC FUNCTION APRICOM( cComm )
LOCAL nCom, cDcb
BEGIN SEQUENCE
nCom = OPENCOMM( cComm, 16384, 16384 )
IF nCom < 0
? "Errore di apertura della porta di comunicazione."
BREAK
ENDIF
BUILDCOMMDCB( cComm+":115200,N,8,1", @cDcb )
IF !SETCOMMSTATE( nCom, cDcb )
? "Errore di impostazione della porta di comunicazione."
BREAK
ENDIF
Connect( nCom )
RECOVER
nCom = -1
END SEQUENCE
RETURN nCom
STATIC FUNCTION CONNECT( nCom )
LOCAL cStr
ENABLECOMMNOTIFICATION( nCom, 0, 1, -1 )
cStr = RECEIVESTR( nCom )
cStr = STRTRAN( cStr, CHR( 13 ), "" )
cStr = STRTRAN( cStr, CHR( 10 ), CRLF )
RETURN NIL
STATIC FUNCTION SENDSTR( nCom, cString )
LOCAL nBytes := WRITECOMM( nCom, cString )
RETURN nBytes = LEN( cString )
STATIC FUNCTION RECEIVESTR( nCom )
LOCAL cBuf := SPACE( 1000 )
RETURN LEFT( cBuf, READCOMM( nCom, @cBuf ) )
STATIC FUNCTION Random( nMaximo )
static nRandom
local nTemporal
nMaximo = if( nMaximo == NIL, 65535, nMaximo )
if nRandom == NIL
nRandom = seconds()
endif
nTemporal = ( nRandom * seconds() ) % ( nMaximo + 1 )
nRandom = nTemporal + seconds()
RETURN int( nTemporal )
Download das Ferramentas
Material usado:
BALANCA.EXE - É o visor que irá mostrar os pesos recebidos pela porta.
PoePeso - É o simulador de balança, o qual irá enviar o peso randomico para o visor. Uso: PoePeso 05 COM1
VirtualSerialPorts - Deverá ser instalado para permitir que portas seriais virtuais sejam criadas. Como os aplicativos usam somente as portas COM1, COM2, COM3 e COM4, esta portas deverão estar livres nas configurações do Windows(Pelo menos 2 delas deverão estar livres).
Exemplo:
- Coloque o balanca.exe posicionado na porta COM3 e ative-o.
- Acione o PoePeso.exe com os parametros 05 COM4. A cada execução gera um peso diferente.
Na simulação acima, tenho pra mim que foi configurada pelo Virtual Serial Ports as portas COM3 se comunicando com a COM4.
Me baseio pelo protocolo Prt1 da balança modelo 9094. Manual.
Desta forma o programador poderá testar melhor seus PDVs com leitura.