PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → Wx - Código Exemplo de Leitura do Peso da Balança Filizola e Toledo para Supermercados, Padarias e Restaurantes
Wx - Código Exemplo de Leitura do Peso da Balança Filizola e Toledo para Supermercados, Padarias e Restaurantes
Iniciado por adrianoboller, dez., 21 2015 4:28 PM - 6 respostas
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em dezembro, 21 2015 - 4:28 PM
Wx - Código Exemplo de Leitura do Peso da Balança Filizola e Toledo para Supermercados, Padarias e Restaurantes
// Balança de peso fixo: é a balança que somente disponibiliza o buffer quando o peso está estabilizado. por exemplo, //Toledo 9094.
// Balança de peso variável: é a balança que apresenta o peso enquanto o mesmo não está estabilizado mas disponibiliza //a leitura do buffer mesmo assim. por exemplo, Filizola BP-15


// Fixed weight scale: the scale that only provides the buffer when the weight is stabilized. for example, Toledo 9094.
// Variable weight scale: the scale that shows the weight while it is not stabilized but available reading buffer anyway. for //example, Filizola BP-15


// Échelle de poids fixe: l'échelle qui ne fournit que la mémoire tampon lorsque le poids est stabilisé. par exemple, de //Toledo 9094.
// Échelle de poids variable: l'échelle qui montre le poids alors qu'il ne se stabilise pas, mais disponible tampon de lecture //de toute façon. Par exemple, Filizola BP-15

CODE:

bufM_peso_lido_com is Buffer
// é necessário que a varável que receberá o retorno seja do tipo buffer

rM_peso_lido_com_tratado is real = 0

sM_peso_lido_verifica_1 is string = "" // armazena o valor da primeira leitura
sM_peso_lido_verifica_2 is string = "" // armazena o valor da segunda leitura
sM_peso_lido_verifica_3 is string = "" // armazena o valor da terceira leitura

bM_peso_lido_verifica_erro is boolean = False
nM_peso_lido_verifica_leitura is int = 0

sClose(gnPar_ParTermBalancaPorta)
// 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

VERIFICA_3_LEITURAS:
// em caso de balança com peso variável faço 3 lleituras para evitar uma possível leitura errada enquanto o peso não está estabailizado
IF sOpen(gnPar_ParTermBalancaPorta,1,16) THEN // abrindo a porta serial
Wait(gnPar_ParTermBalancaTimeOut)
// timeout para evitar atropelamento no próximo comando para a porta serial. tenho isso como parâmetro para cada terminal pois pode variar de balança para balança

IF sParameter(gnPar_ParTermBalancaPorta,gnPar_ParTermBalancaParametroBaudeRate,gnPar_ParTermBalancaParametroParity,gnpar_ParTermBalancaParametroDataBits,gnpar_ParTermBalancaParametroStopBits,gnPar_ParTermBalancaParametroDtrDsr) = True THEN
// parâmetros de configuração
Wait(gnPar_ParTermBalancaTimeOut)
// timeout para evitar atropelamento no próximo comando para a porta serial. tenho isso como parâmetro para cada terminal pois pode variar de balança para balança

IF sWrite(gnPar_ParTermBalancaPorta,Charact(5)) = True THEN // o caracter decimal 5 é o compreendido com o requisição
Wait(gnPar_ParTermBalancaTimeOut)
// timeout para evitar atropelamento no próximo comando para a porta serial. tenho isso como parâmetro para cada terminal pois pode variar de balança para balança

bufM_peso_lido_com = sRead(gnPar_ParTermBalancaPorta,16) // faz a leitura do buffer da porta

sClose(gnPar_ParTermBalancaPorta) // fecha a porta para uma próxima leitura, se necessário **** vide comentários no fim da rotina

IF NoSpace(bufM_peso_lido_com) <> "" THEN
bufM_peso_lido_com = Middle(bufM_peso_lido_com,gnPar_ParTermBalancaParametroRetornoPosIni,gnPar_ParTermBalancaParametroRetornoDigitosdoPeso)
//gnPar_ParTermBalancaParametroRetornoPosIni - parâmetros onde indica em qual posição começa a informação do peso, na leitura do buffer
//gnPar_ParTermBalancaParametroRetornoDigitosdoPeso - parâmetros onde indica em qual posição termina a informação do peso, na leitura do buffer
rM_peso_lido_com_tratado = Val(bufM_peso_lido_com) / 1000

IF gsPar_ParTermBalancaTipoRetorno = "C" THEN // parãmetro que indica quando a balança possui peso do tipo varíavel **** vide comentários no fim da rotina
GOTO FIM
// finaliza a rotina pois balanças de peso constante somente liberam o buffer após o peso estar estabilizado
END

IF gsPar_ParTermBalancaTipoRetorno = "V" THEN // parãmetro que indica quando a balança possui peso do tipo varíavel **** vide comentários no fim da rotina
nM_peso_lido_verifica_leitura++

IF nM_peso_lido_verifica_leitura = 3 THEN
IF sM_peso_lido_verifica_1 <> sM_peso_lido_verifica_2 OR sM_peso_lido_verifica_1 <> sM_peso_lido_verifica_3 THEN
bM_peso_lido_verifica_erro = True
END
IF sM_peso_lido_verifica_2 <> sM_peso_lido_verifica_1 OR sM_peso_lido_verifica_2 <> sM_peso_lido_verifica_3 THEN
bM_peso_lido_verifica_erro = True
END
IF sM_peso_lido_verifica_3 <> sM_peso_lido_verifica_1 OR sM_peso_lido_verifica_3 <> sM_peso_lido_verifica_2 THEN
bM_peso_lido_verifica_erro = True
END

IF bM_peso_lido_verifica_erro THEN
rM_peso_lido_com_tratado = 0
Error("É Necessário Que o Peso Esteja Estabilzado!")
END
ELSE
GOTO VERIFICA_3_LEITURAS
END
END
ELSE
Error("Não Foi Possível Obter o Retorno da Porta COM")
END
ELSE
Error("Não foi Possível Enviar o Comando à Porta COM.")
END
ELSE
Error("Parâmetros Inválidos Para a Porta COM.")
END
ELSE
IF p_avisa_erro_porta_com THEN
Error("Porta COM Não Acessível!")
END
END

FIM:

sClose(gnPar_ParTermBalancaPorta) // fecha a porta de comunicação



Código fornecido para a comunidade pelo:

Sr Mário José Nogueira de Oliveira
Mais novo Consultor da Plataforma PcSoft

Empresa Assist Informática
Rua Coronel Pires Barbosa, 846
Campo do Galvão - Guaratinguetá-SP - 12.505-020
Email: mario-oliveira-br@uol.com.br
Skype: mario-guara

55 (12) 9 9778-0262
55 (12) 9 9794-7010
55 (12) 3126-1465

Bons projetos e bons estudos...

--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em novembro, 26 2017 - 4:42 PM
Exemplo





Procedure DefinePorta()

IF COMBO_Tipo_da_Porta = 1
EDT_Número_da_Porta = EDT_Número_da_Porta
NomeNumeroPorta = "COM"+EDT_Número_da_Porta
ELSE IF COMBO_Tipo_da_Porta = 2
EDT_Número_da_Porta = EDT_Número_da_Porta * -1
NomeNumeroPorta = "LPT"+EDT_Número_da_Porta
ELSE IF COMBO_Tipo_da_Porta = 3
IF Middle(EDT_Número_da_Porta,1,1) = "-"
EDT_Número_da_Porta = Middle(EDT_Número_da_Porta,2,10)
NomeNumeroPorta = "IR"+EDT_Número_da_Porta
END
END


// Opening port SERIAL, PARALELA OU INFRAVERMELHA
nPort = 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)

IF ErrorOccurred THEN

ToastDisplay("Não foi possivel abrir a porta, Erro: "+ErrorInfo() +" - "+ Error(),toastLong,vaMiddle,haCenter)

StatusPorta = False

ELSE

ToastDisplay("Porta "+ nPort +" Aberta com sucesso!",toastLong,vaMiddle,haCenter)

StatusPorta = True

IF StatusPorta = True AND nPort > 0

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)

IF bResultado = True THEN

ToastDisplay("Porta inicializada e configurada com sucesso!",toastLong,vaMiddle,haCenter)

IF StatusPorta = True AND nPort > 0 THEN

BufferRead = ""

BufferRead = sRead(EDT_Número_da_Porta,EDT_Tamanho_Buffer_de_input_em_bytes)

IF BufferRead <> "" THEN

EDT_Resultado = BufferRead

ToastDisplay("Leitura da Porta realizada com Sucesso!",toastLong,vaMiddle,haCenter)

IF StatusPorta = True AND nPort > 0 THEN

sClose(EDT_Número_da_Porta)

SetFocus(EDT_Resultado)

ELSE

ToastDisplay("Não foi inicializada e nem configurada nenhuma porta!",toastLong,vaMiddle,haCenter)

END

ELSE

ToastDisplay("Não veio nenhum valor da porta",toastLong,vaMiddle,haCenter)

END

ELSE

ToastDisplay("ERRO: Não é possivel ler a porta se não estiver configurada corretamente!",toastLong,vaMiddle,haCenter)

END

ELSE

ToastDisplay("ERRO A PORTA NÃO FOI CONFIGURADA CORRETAMENTE",toastLong,vaMiddle,haCenter)

END

END

END


//Abrir a porta
// Opening port SERIAL, PARALELA OU INFRAVERMELHA
nPort = 0

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 "+ nPort +" Aberta com sucesso!")
StatusPorta = True

END




//Configurar a porta
// 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)


IF bResultado = True THEN

Info("Porta inicializada e configurada com sucesso!")

ELSE

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

END

END




//Ler a porta
IF StatusPorta = True AND nPort > 0 THEN

BufferRead = ""

BufferRead = sRead(EDT_Número_da_Porta,EDT_Tamanho_Buffer_de_input_em_bytes)

IF BufferRead <> "" THEN

EDT_Resultado = BufferRead

SetFocus(EDT_Resultado)

Info("Leitura da Porta realizada com Sucesso!")

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




//Verificar eventos da porta
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




//Fechar Porta
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
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em novembro, 26 2017 - 7:12 PM
Configuracao usada na Filizola





Pesagem





Muito obrigado Sergio Luiz Fernandes

Pela Ajuda com os testes com as balanças e o ajuste do código

Skype: personalize

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensagem modificada, novembro, 26 2017 - 7:15 PM
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em novembro, 26 2017 - 8:09 PM
Serviço do Windows usando o exemplo WD Service

// Automatic Procedure:
// The procedure is automatically run, after the project initialization code, with a delay set to 1 second
// It will be run in a thread (without having to call ThreadExecute), without using HFSQL
// It will be repeated in loop, with a timeout set to 5 seconds between each call
//
Procedure LeituraPortaSerial()

// Opening port SERIAL, PARALELA OU INFRAVERMELHA

LerConfig()

nPort = 0

IF TimeoutPorta = 0

nPort = sOpen(Numero_da_Porta,Tamanho_Buffer_de_input_em_bytes,Tamanho_Buffer_de_output_em_bytes,TimeoutPorta,True)

ELSE

nPort = sOpen(Numero_da_Porta,Tamanho_Buffer_de_input_em_bytes,Tamanho_Buffer_de_output_em_bytes)

END

IF ErrorOccurred THEN

ToastDisplay("Não foi possivel abrir a porta, Erro: "+ErrorInfo() +" - "+ Error(),toastShort,vaBottom,haCenter,PastelGreen)
StatusPorta = False

ELSE

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

StatusPorta = True

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

//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(Numero_da_Porta, Rate_Bauds,Parity,Data_Bits,Number_of_Stop_Bits)


IF bResultado = True THEN

//info("Porta inicializada e configurada com sucesso!")
ToastDisplay("Porta "+ Numero_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(Numero_da_Porta,Charact(5))
Wait(TimeoutPorta)

LOOP
IF sInExitQueue(Numero_da_Porta) = 0 THEN BREAK
END

iTbuffer = sInEntryQueue(Numero_da_Porta) //Calcula quantos Bytes tem na porta com para ser capturado
bufM_peso_lido_com = sRead(Numero_da_Porta, iTbuffer) //Ler a Porta
sClose(Numero_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
ToastDisplay("Peso acima da capacidade da Balança, Divida o peso e precione Enter,Que eu vou tentar ler o peso novamente",toastShort,vaBottom,haCenter,PastelGreen)
GOTO PesarNovamente
END

IF bufM_peso_lido_com <> "" THEN

bufM_peso_lido_com = Val(Middle(bufM_peso_lido_com,Posicao_inicial_do_Peso_obtido_no_buffer,Qtde_de_caracteres_do_Peso_do_buffer)) / 1000

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

INIWrite("BALANCA","DATAHORA",DateSys()+TimeSys(),"BALANCA_RESULTADO.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)))

INIWrite("BALANCA","RETORNO",sRead(nPort, sInEntryQueue(1)),"BALANCA_RESULTADO.INI")

ELSE

ToastDisplay("ERRO: Não é possivel ler a porta se não estiver configurada corretamente!",toastShort,vaBottom,haCenter,PastelGreen)

END


ELSE

ToastDisplay("Não veio nenhum valor da porta",toastShort,vaBottom,haCenter,PastelGreen)

END

ELSE

ToastDisplay("ERRO: Não é possivel ler a porta se não estiver configurada corretamente!",toastShort,vaBottom,haCenter,PastelGreen)

END


ELSE

ToastDisplay("ERRO A PORTA NÃO FOI CONFIGURADA CORRETAMENTE",toastShort,vaBottom,haCenter,PastelGreen)

END

END


END

IF StatusPorta = True AND nPort > 0 THEN

sClose(Numero_da_Porta)

ELSE

ToastDisplay("Não foi inicializada e nem configurada nenhuma porta!",toastShort,vaBottom,haCenter,PastelGreen)

END



Procedure LerConfig()

Numero_da_Porta = INIRead("CONFIGURACAO","Numero_da_Porta","","CONFIGURA_BALANCA.INI")
IF Numero_da_Porta = "" THEN
Numero_da_Porta = 1
END

Rate_Bauds = INIRead("CONFIGURACAO","Rate_Bauds","","CONFIGURA_BALANCA.INI")
IF Rate_Bauds = "" THEN
Rate_Bauds = 2400
END

Data_Bits = INIRead("CONFIGURACAO","Data_Bits","","CONFIGURA_BALANCA.INI")
IF Data_Bits = "" THEN
Data_Bits = 8
END

Number_of_Stop_Bits = INIRead("CONFIGURACAO","Number_of_Stop_Bits","","CONFIGURA_BALANCA.INI")
IF Number_of_Stop_Bits = "" THEN
Number_of_Stop_Bits = 0
END

Parity = INIRead("CONFIGURACAO","Parity","","CONFIGURA_BALANCA.INI")
IF Parity = "" THEN
Parity = 1
END

TimeoutPorta = INIRead("CONFIGURACAO","TimeoutPorta","","CONFIGURA_BALANCA.INI")
IF TimeoutPorta = "" THEN
TimeoutPorta = 5
END

Tamanho_Buffer_de_input_em_bytes = INIRead("CONFIGURACAO","Tamanho_Buffer_de_input_em_bytes","","CONFIGURA_BALANCA.INI")
IF Tamanho_Buffer_de_input_em_bytes = "" THEN
Tamanho_Buffer_de_input_em_bytes = 4096
END

Tamanho_Buffer_de_output_em_bytes = INIRead("CONFIGURACAO","Tamanho_Buffer_de_output_em_bytes","","CONFIGURA_BALANCA.INI")
IF Tamanho_Buffer_de_output_em_bytes = "" THEN
Tamanho_Buffer_de_output_em_bytes = 4096
END

Posicao_inicial_do_Peso_obtido_no_buffer = INIRead("CONFIGURACAO","Posicao_inicial_do_Peso_obtido_no_buffer","","CONFIGURA_BALANCA.INI")
IF Posicao_inicial_do_Peso_obtido_no_buffer = "" THEN
Posicao_inicial_do_Peso_obtido_no_buffer = 2
END

Qtde_de_caracteres_do_Peso_do_buffer = INIRead("CONFIGURACAO","Qtde_de_caracteres_do_Peso_do_buffer","","CONFIGURA_BALANCA.INI")
IF Qtde_de_caracteres_do_Peso_do_buffer = "" THEN
Qtde_de_caracteres_do_Peso_do_buffer = 5
END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em novembro, 26 2017 - 8:12 PM
//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
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em abril, 13 2018 - 12:14 AM
Download

http://repository.windev.com/publish.awp…

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em março, 31 2023 - 11:47 PM
// Summary: <specify the procedure action>
// Syntax:
//Evento_HREADSEEK_Pesagem (<numid>, <botao_numero>)
//
// Parameters:
// numid:
// botao_numero: <specify the role of botao_numero>
// Example:
// <Specify a usage example>
//// Automatic error processing: call the 'Evento_Exception' procedure
//
// Automatic exception processing: call the 'Evento_Exception' procedure
//

PROCEDURE Evento_HREADSEEK_Pesagem(numid, botao_numero)

nPort is int = ""
sPorta is string = ""
sPeso_texto is string = ""
rPeso is real = ""
p is int = ""

IF numid <> "" OR numid <> 0

HReset(T001_Balancas)

IF HReadSeek(T001_Balancas,T001_Balanca_ID,numid,hIdentical) = True THEN

EDT_Peso_Atual = 0

//Fechar todas as portas menos a do mouse com1
vezes is int = T001_Balancas.T001_Timer_Loop
IF vezes = 0 THEN
vezes = 1
END


sClose(T001_Balancas.T001_Port)


sPorta = "COM"+T001_Balancas.T001_Port

nPort = T001_Balancas.T001_Port

// Open Serial port
bPorta_OK_01 is boolean = sOpen(sPorta, T001_Balancas.T001_TamanhoBufferInput, T001_Balancas.T001_TamanhoBufferOutput)

IF ErrorOccurred THEN

Error(ErrorInfo(), HErrorInfo())

ELSE IF NOT ErrorOccurred AND bPorta_OK_01 = True

// I/O configuration
bPorta_OK_02 is boolean = sParameter(nPort, T001_Balancas.T001_Rate, T001_Balancas.T001_Parity, T001_Balancas.T001_Nb_Data_Bits, T001_Balancas.T001_Nb_Stop_Bits, T001_Balancas.T001_DTR_DSR, T001_Balancas.T001_RTS_CTS, T001_Balancas.T001_XON_XOFF)

IF bPorta_OK_01 = True AND bPorta_OK_02 = True

sWrite(nPort,"PesoAtual")

LOOP(vezes)

sPeso_texto = sRead(nPort, sInEntryQueue(nPort))

IF MSGS_DEBUG = True
Info("READ: "+sPeso_texto)
END

Trace(sPeso_texto)

IF ErrorInfo() THEN
IF MSGS_DEBUG = True THEN
Error(HErrorInfo(),ErrorInfo())
END
END

sPeso_texto = Replace(sPeso_texto,Charact(T001_Balancas.T001_CHR_Inicio),"")
sPeso_texto = Replace(sPeso_texto,Charact(T001_Balancas.T001_CHR_Fim),"")

IF PositionOccurrence(sPeso_texto,Charact(10),1,FromBeginning) = 0
sPeso_texto = sPeso_texto + CRLF
END

IF PositionOccurrence(sPeso_texto,Charact(13),1,FromBeginning) = 0
sPeso_texto = sPeso_texto + CRLF
END

IF PositionOccurrence(sPeso_texto,CRLF,1,FromBeginning) = 0
sPeso_texto = sPeso_texto + CRLF
END

posicao_chr1013 is int = PositionOccurrence(sPeso_texto,CRLF,1,FromBeginning)

sPeso_texto = Middle(sPeso_texto,1,posicao_chr1013)
sPeso_texto = Replace(sPeso_texto,CRLF,"")
rPeso = Val(NoSpace(sPeso_texto))

ToastDisplay(rPeso,toastShort,vaMiddle,haCenter)

Wait(T001_Balancas.T001_Timeout)

END

END

END

sClose(nPort)

IF botao_numero = 1
STC_PESO_BALANCA_01 = rPeso
ELSE IF botao_numero = 2
STC_PESO_BALANCA_02 = rPeso
ELSE IF botao_numero = 3
STC_PESO_BALANCA_03 = rPeso
ELSE IF botao_numero = 4
STC_PESO_BALANCA_04 = rPeso
ELSE IF botao_numero = 5
STC_PESO_BALANCA_05 = rPeso
ELSE IF botao_numero = 6
STC_PESO_BALANCA_06 = rPeso
END

IF rPeso > grPESO_MAXIMO AND MSGS_DEBUG = True
Info("Peso acima da capacidade da Balança","Divida o peso e precione Enter","Que eu vou tentar ler o peso novamente")
END

IF rPeso = 0 AND MSGS_DEBUG = True
Info("Não veio nenhum valor da balança")
END

IF rPeso < 0 AND MSGS_DEBUG = True
Info("Veio peso com valor negativo")
END

Wait(gnTimeOut)
Evento_GravarArquivoIni(numid,rPeso)

END

END


//CASE EXCEPTION:



// Summary: <specify the procedure action>
// Syntax:
//Evento_GravarArquivoIni (<id>, <peso>)
//
// Parameters:
// id:
// peso: <specify the role of peso>
// Example:
// <Specify a usage example>
//
PROCEDURE Evento_GravarArquivoIni(id, peso)

HReset(T001_Balancas)

IF HReadSeek(T001_Balancas,T001_Balanca_ID,id,hIdentical) = True THEN

T001_Balancas.T001_UltimaPesagem = peso
T001_Balancas.T001_DataHoraPesagem = DateSys()+TimeSys()
HModify(T001_Balancas)

INIWrite(T001_Balancas.T001_Balanca,"Numero",T001_Balancas.T001_NUM_BALANCA,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Marca",T001_Balancas.T001_Marca,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Modelo",T001_Balancas.T001_Modelo,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Setor",T001_Balancas.T001_Setor,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Porta","COM"+T001_Balancas.T001_Port,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Rate",T001_Balancas.T001_Rate,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Parity",T001_Balancas.T001_Parity,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Nb_Data_Bits",T001_Balancas.T001_Nb_Data_Bits,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Nb_Stop_Bits",T001_Balancas.T001_Nb_Stop_Bits,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"DTR_DSR",T001_Balancas.T001_DTR_DSR,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"RTS_CTS",T001_Balancas.T001_RTS_CTS,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"XON_XOFF",T001_Balancas.T001_XON_XOFF,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"TamanhoBufferInput",T001_Balancas.T001_TamanhoBufferInput,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"TamanhoBufferOutput",T001_Balancas.T001_TamanhoBufferOutput,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"T001_CHR_Inicio",T001_Balancas.T001_CHR_Inicio,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"CHR_Fim",T001_Balancas.T001_CHR_Fim,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Timeout",T001_Balancas.T001_Timeout,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"TimerLoop",T001_Balancas.T001_Timer_Loop,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"Loop",T001_Balancas.T001_Loop,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"DataHoraPesagem",T001_Balancas.T001_DataHoraPesagem,fCurrentDir()+fSep()+"Config.ini")

INIWrite(T001_Balancas.T001_Balanca,"UltimaPesagem",T001_Balancas.T001_UltimaPesagem,fCurrentDir()+fSep()+"Config.ini")

END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/