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/