MAIS INFORMAÇÕES Adriano José Boller Consultor, Representante Oficial PC SOFT Email: adrianoboller@gmail.com Telefone: +55 (41) 99949-1800 Skype: adrianoboller Horário: Segunda—sexta: 8h–18h Sábados & domingos: 11h–15h
|
| |
Porta Serial V3
Posté le 21 décembre 2015 - 12:28 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 PC SOFT
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...
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 PC SOFT no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| Illustrations, screen shots |
|
| |
(To evaluate this resource, click 'Write a review') |
| | | |
No review or comment? Be the first one! |
glo_ler_tabcfglocal() sRetorno is string rValor is real Porta is 8-byte int=CommandLine(1)[[1]]
IF NOT sOpen(tabcfglocal.tabcfglocal_balanca_porta,10,1,sDefaultTimeout) THEN RESULT(0) END sParameter(tabcfglocal.tabcfglocal_balanca_porta,tabcfglocal.tabcfglocal_balanca_rate,tabcfglocal.tabcfglocal_balanca_paridade,tabcfglocal.tabcfglocal_balanca_nbdatabits,tabcfglocal.tabcfglocal_balanca_nbstopbits) nGnResultado is 8-byte int=sWrite(Porta,Charact(5)) Multitask(50) sRetorno=sRead(tabcfglocal.tabcfglocal_balanca_porta,10)[[2 TO 6]] sClose(Porta) RESULT(sRetorno)
O comando sWrite pode enviar um caracter ascii 5 para solicitar o peso para ser lido pelo sRead
Mas lembro tem que ler o manual da balança para ver os parâmetros de configuração
Dica do Paulo Viana |
| | |
|