PC SOFT
DEPOT EN LIGNE
POUR WINDEVWEBDEV ET WINDEV MOBILE

Leitura de Porta Serial para Balanças Filizolla ou Toledo - Serial Port Reading for Filizolla or Toledo Scales - version 2
Publié par Boller
dans la catégorie Outils
Nouveautés



Description
Leitura de Porta Serial para Balanças Filizolla ou Toledo - Serial Port Reading for Filizolla or Toledo Scales - version 2

http://forum.PC SOFT.fr/fr-FR/PC SOFT.br.WINDEV/831-codigo-exemplo-leitura-peso-balanca-filizola-toledo-para/read.awp

//PASSO 1
// Opening port SERIAL, PARALELA OU INFRAVERMELHA
nPort = 0

//sClose(EDT_Número_da_Porta)
// apenas por segurança força o fechamento da porta caso tenha sido aberta - gnPar_ParTermBalancaPorta contem número da porta: 1(com1) 2(com2) 3(com3) ...
//Wait(5)
// é necessário aguardar para evitar atropelamento no próximo comando para a porta serial

IF EDT_Timeout_de_leitura_da_porta_em_segundos = 0

nPort = sOpen(EDT_Número_da_Porta,EDT_Tamanho_Buffer_de_input_em_bytes,EDT_Tamanho_Buffer_de_output_em_bytes,EDT_Timeout_de_leitura_da_porta_em_segundos,True)

ELSE

nPort = sOpen(EDT_Número_da_Porta,EDT_Tamanho_Buffer_de_input_em_bytes,EDT_Tamanho_Buffer_de_output_em_bytes)

END

IF ErrorOccurred THEN

Info("Não foi possivel abrir a porta, Erro: "+ErrorInfo() +" - "+ Error())
StatusPorta = False

ELSE

//info("Porta "+ EDT_Número_da_Porta +" Aberta com sucesso!")
ToastDisplay("Porta "+ EDT_Número_da_Porta +" Aberta com sucesso!",toastShort,vaBottom,haCenter,PastelGreen)

StatusPorta = True

END



//PASSO 2
// Open COM1
IF StatusPorta = True AND nPort > 0 THEN

DTRDSR, RTSCTS is int = 0

IF CBOX_DTRDSR = False THEN
DTRDSR = 0
ELSE
DTRDSR = 1
IF CBOX_DTRDSR_INATIVO = True THEN
DTRDSR = 2
END
END

IF CBOX_RTSCTS = False THEN
RTSCTS = 0
ELSE
RTSCTS = 1
IF CBOX_RTSCTS_INATIVO = True THEN
RTSCTS = 2
END
END

//bResultado is boolean = sParameter(nPort, EDT_Rate_Bauds,EDT_Parity,EDT_Data_Bits,EDT_Number_of_Stop_Bits,DTRDSR,RTSCTS,CBOX_XONXOFF)
bResultado is boolean = sParameter(EDT_Número_da_Porta, EDT_Rate_Bauds,EDT_Parity,EDT_Data_Bits,EDT_Number_of_Stop_Bits)


IF bResultado = True THEN

//info("Porta inicializada e configurada com sucesso!")
ToastDisplay("Porta "+ EDT_Número_da_Porta +" inicializada e configurada com sucesso!",toastShort,vaBottom,haCenter,PastelGreen)

ELSE

Info("ERRO A PORTA NÃO FOI CONFIGURADA CORRETAMENTE")

END

END



//PASSO 3
IF StatusPorta = True AND nPort > 0 THEN
iTbuffer is int
PesarNovamente:
bufM_peso_lido_com = ""

sWrite(EDT_Número_da_Porta,Charact(5))
Wait(EDT_Timeout_de_leitura_da_porta_em_segundos)
LOOP
IF sInExitQueue(EDT_Número_da_Porta) = 0 THEN BREAK
END
iTbuffer = sInEntryQueue(EDT_Número_da_Porta) //Calcula quantos Bytes tem na porta com para ser capturado
bufM_peso_lido_com = sRead(EDT_Número_da_Porta, iTbuffer) //Ler a Porta
sClose(EDT_Número_da_Porta) //Fecha a porta com
IF bufM_peso_lido_com = "IIIII" THEN
ToastDisplay("Leitura da Porta realizada com Sucesso!",toastShort,vaBottom,haCenter,PastelGreen)
GOTO PesarNovamente
ELSE IF bufM_peso_lido_com = "IIIII" THEN
Info("Peso acima da capacidade da Balança","Divida o peso e precione Enter","Que eu vou tentar ler o peso novamente")
GOTO PesarNovamente
END
IF bufM_peso_lido_com <> "" THEN

EDT_Resultado = Val(Middle(bufM_peso_lido_com,EDT_Posição_inicial_do_Peso_obtido_no_buffer,EDT_Qtde_de_caracteres_do_Peso_do_buffer)) / 1000

SetFocus(EDT_Resultado)

INIWrite("BALANCA","LEITURA",bufM_peso_lido_com,"BALANCA.INI")

INIWrite("BALANCA","DATAHORA",DateSys()+TimeSys(),"BALANCA.INI")

//Info("Leitura da Porta realizada com Sucesso!")
ToastDisplay("Leitura da Porta realizada com Sucesso!",toastShort,vaBottom,haCenter,PastelGreen)


ELSE

Info("Não veio nenhum valor da porta")

END

ELSE

Info("ERRO: Não é possivel ler a porta se não estiver configurada corretamente!")

END



//PASSO 4

IF StatusPorta = True AND nPort > 0 THEN

// Detect characters on the port
sEvent(nPort, sEveCharReceived, "Read")
sEvent(nPort, sEveCharReceived , "ReadCharacter" )
sEvent(nPort, sEveBreak, "Break")
sEndEvent(nPort, sEveBreak)

Trace(sRead(nPort, sInEntryQueue(1)))

ELSE

Info("ERRO: Não é possivel ler a porta se não estiver configurada corretamente!")

END



//PASSO 5
IF StatusPorta = True AND nPort > 0 THEN

sClose(EDT_Número_da_Porta)

ELSE

Info("Não foi inicializada e nem configurada nenhuma porta!")

END



//TODOS OS PASSOS DE UMA VEZ SÓ

// Opening port SERIAL, PARALELA OU INFRAVERMELHA
nPort = 0

//sClose(EDT_Número_da_Porta)
// apenas por segurança força o fechamento da porta caso tenha sido aberta - gnPar_ParTermBalancaPorta contem número da porta: 1(com1) 2(com2) 3(com3) ...
//Wait(5)
// é necessário aguardar para evitar atropelamento no próximo comando para a porta serial

IF EDT_Timeout_de_leitura_da_porta_em_segundos = 0

nPort = sOpen(EDT_Número_da_Porta,EDT_Tamanho_Buffer_de_input_em_bytes,EDT_Tamanho_Buffer_de_output_em_bytes,EDT_Timeout_de_leitura_da_porta_em_segundos,True)

ELSE

nPort = sOpen(EDT_Número_da_Porta,EDT_Tamanho_Buffer_de_input_em_bytes,EDT_Tamanho_Buffer_de_output_em_bytes)

END

IF ErrorOccurred THEN

Info("Não foi possivel abrir a porta, Erro: "+ErrorInfo() +" - "+ Error())
StatusPorta = False

ELSE

//info("Porta "+ EDT_Número_da_Porta +" Aberta com sucesso!")
ToastDisplay("Porta "+ EDT_Número_da_Porta +" Aberta com sucesso!",toastShort,vaBottom,haCenter,PastelGreen)

StatusPorta = True

// Open COM1
IF StatusPorta = True AND nPort > 0 THEN

DTRDSR, RTSCTS is int = 0

IF CBOX_DTRDSR = False THEN
DTRDSR = 0
ELSE
DTRDSR = 1
IF CBOX_DTRDSR_INATIVO = True THEN
DTRDSR = 2
END
END

IF CBOX_RTSCTS = False THEN
RTSCTS = 0
ELSE
RTSCTS = 1
IF CBOX_RTSCTS_INATIVO = True THEN
RTSCTS = 2
END
END

//bResultado is boolean = sParameter(nPort, EDT_Rate_Bauds,EDT_Parity,EDT_Data_Bits,EDT_Number_of_Stop_Bits,DTRDSR,RTSCTS,CBOX_XONXOFF)
bResultado is boolean = sParameter(EDT_Número_da_Porta, EDT_Rate_Bauds,EDT_Parity,EDT_Data_Bits,EDT_Number_of_Stop_Bits)


IF bResultado = True THEN

//info("Porta inicializada e configurada com sucesso!")
ToastDisplay("Porta "+ EDT_Número_da_Porta +" inicializada e configurada com sucesso!",toastShort,vaBottom,haCenter,PastelGreen)

IF StatusPorta = True AND nPort > 0 THEN
iTbuffer is int
PesarNovamente:
bufM_peso_lido_com = ""

sWrite(EDT_Número_da_Porta,Charact(5))
Wait(EDT_Timeout_de_leitura_da_porta_em_segundos)
LOOP
IF sInExitQueue(EDT_Número_da_Porta) = 0 THEN BREAK
END
iTbuffer = sInEntryQueue(EDT_Número_da_Porta) //Calcula quantos Bytes tem na porta com para ser capturado
bufM_peso_lido_com = sRead(EDT_Número_da_Porta, iTbuffer) //Ler a Porta
sClose(EDT_Número_da_Porta) //Fecha a porta com
IF bufM_peso_lido_com = "IIIII" THEN
ToastDisplay("Leitura da Porta realizada com Sucesso!",toastShort,vaBottom,haCenter,PastelGreen)
GOTO PesarNovamente
ELSE IF bufM_peso_lido_com = "IIIII" THEN
Info("Peso acima da capacidade da Balança","Divida o peso e precione Enter","Que eu vou tentar ler o peso novamente")
GOTO PesarNovamente
END
IF bufM_peso_lido_com <> "" THEN

EDT_Resultado = Val(Middle(bufM_peso_lido_com,EDT_Posição_inicial_do_Peso_obtido_no_buffer,EDT_Qtde_de_caracteres_do_Peso_do_buffer)) / 1000

SetFocus(EDT_Resultado)

INIWrite("BALANCA","LEITURA",bufM_peso_lido_com,"BALANCA.INI")

INIWrite("BALANCA","DATAHORA",DateSys()+TimeSys(),"BALANCA.INI")

//Info("Leitura da Porta realizada com Sucesso!")
ToastDisplay("Leitura da Porta realizada com Sucesso!",toastShort,vaBottom,haCenter,PastelGreen)


IF StatusPorta = True AND nPort > 0 THEN

// Detect characters on the port
sEvent(nPort, sEveCharReceived, "Read")
sEvent(nPort, sEveCharReceived , "ReadCharacter" )
sEvent(nPort, sEveBreak, "Break")
sEndEvent(nPort, sEveBreak)

Trace(sRead(nPort, sInEntryQueue(1)))

ELSE

Info("ERRO: Não é possivel ler a porta se não estiver configurada corretamente!")

END



ELSE

Info("Não veio nenhum valor da porta")

END

ELSE

Info("ERRO: Não é possivel ler a porta se não estiver configurada corretamente!")

END


ELSE

Info("ERRO A PORTA NÃO FOI CONFIGURADA CORRETAMENTE")

END

END


END

IF StatusPorta = True AND nPort > 0 THEN

sClose(EDT_Número_da_Porta)

ELSE

Info("Não foi inicializada e nem configurada nenhuma porta!")

END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PC SOFT no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Illustrations, copies d'écran
none
none
Avis des utilisateurs
(Pour noter la ressource, cliquez sur Ecrire un avis)
Aucun avis ou commentaire ? Soyez le premier !