mamp Posted March 7, 2010 Report Share Posted March 7, 2010 alguem faz comunicacao com a balanca elgin DP-15 plus ela faz comunciacacao com o computador atraves da serial alguem ja usou ou usa? obrigado nao uso WS Marcos Macedo(Recife-PE) macedomarcos@hotmail.com Quote Link to comment Share on other sites More sharing options...
mamp Posted March 7, 2010 Author Report Share Posted March 7, 2010 alguem faz comunicacao com a balanca elgin DP-15 plus ela faz comunciacacao com o computador atraves da serial alguem ja usou ou usa? obrigado nao uso WS Marcos Macedo(Recife-PE) macedomarcos@hotmail.com Quote Link to comment Share on other sites More sharing options...
mkyx Posted March 7, 2010 Report Share Posted March 7, 2010 Talves eu esteja enganado, pois nunca usei essa balança, mas a comunicação serial é um padrão em todos os equipamentos eletrônicos, você poderia testar a rotina abaixo, onde não se precisa especificar que balança vc vai usar, mas esta rotina lê a porta serial do equipamento. Espero ter ajudado. . . . . peso:=pegapeso() . // aqui vc faz o tratamento da variavel peso, ex.: multiplica por preço unitário, etc. (peso*pu) etc. . . return .t. function pegapeso() NHANDLE:=Init_Port("COM1",9600,8,0,1,8000) // conf da porta serial OutBufClr(NHANDLE) // Limpa o Buffer de Saida OUTCHR(NHANDLE,CHR(5)) SysWait(0.3) Bytes := InbufSize(NHANDLE) DADOS=SPACE(20) Buffer := InChr( NHANDLE, Bytes, @DADOS) //LER BUFFER DE ENTRADA DA BALANCA UnInt_Port(nHandle) dados=alltrim(dados) ** a comando abaixo pega a quantidade lida da balança Q=val(substr(dados,2,5))/1000 IF Q=0 PU=1 VLU:=TRANSFORM(PU,"@E 9999.99") ENDIF RETURN Q //retorna a quantidade para ser manipulada pelo programa * Pompeo Guaratinguetá - SP (12) 9777-9386 E-Mail: mkyx@ig.com.br MSN: mkyx@ig.com.br Skype: pardes.mky www.adentech.com.br www.rmahost.com xH 1.1.0 Hb 8.02 - BCC 55 Quote Link to comment Share on other sites More sharing options...
mamp Posted March 11, 2010 Author Report Share Posted March 11, 2010 obrigado pompeo, vou testar, obs: Voce é de Guaratingueta?, eu tambem sou de la, mas desde 1989 estou em recife, adione-me no msn pra gente trocar figuras(macedomarcos@hotmail.com) nao uso WS Marcos Macedo(Recife-PE) macedomarcos@hotmail.com Quote Link to comment Share on other sites More sharing options...
mkyx Posted March 11, 2010 Report Share Posted March 11, 2010 Caracas, meu, que coincidência, eu sou de Recife, e moro em Guaraginguetá-SP desde 1979. Blz Pompeo Guaratinguetá - SP (12) 9777-9386 E-Mail: mkyx@ig.com.br MSN: mkyx@ig.com.br Skype: pardes.mky www.adentech.com.br www.rmahost.com xH 1.1.0 Hb 8.02 - BCC 55 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 12, 2010 Report Share Posted March 12, 2010 ahhhammmm............. kkkkkkkkkkkkk, huuummmm... Será???? João Santos - São Paulo. kmt_karinha@pop.com.br joao@pleno.com.br Fone: (11) 3106-2832 / 8243-5632 FWH 2.7 - xHARBOUR WorkShop.Exe "Burro Carregado de Açucar, Até o Fiofó é Doce" Quote Link to comment Share on other sites More sharing options...
mamp Posted May 9, 2010 Author Report Share Posted May 9, 2010 pompeo usei a rotina mas da os erros de nao encontrar as funcoes Init_Port() OutBufClr() OUTCHR() Inchr() UnInt_Port() Tem que acrescentar alguma lib ou algum .CH ao meu projeto? OBS:Joao a fraze correta é. Um burro carregado de açucar, ate o PEIDO é doce. (fraze muito usada no jogo de Truco, muito jogado ai em Sao paulo) nao uso WS Marcos Macedo(Recife-PE) macedomarcos@hotmail.com Quote Link to comment Share on other sites More sharing options...
mamp Posted May 10, 2010 Author Report Share Posted May 10, 2010 eu escrevi algo e o topico nao foi pra frente nao uso WS Marcos Macedo(Recife-PE) macedomarcos@hotmail.com Quote Link to comment Share on other sites More sharing options...
sygecom Posted May 10, 2010 Report Share Posted May 10, 2010 Tens que linkar a hbcomm.lib para usar essas funções que citou. Mas se serve como conselho, sincera mente se vai implantar do zero melhor usa as funções da própria Fivewin para isso que são bem melhores que essas da Hbcomm, as da hbcomm se colocar em loop para buscar o peso varias vez ela da GPF nas da Fivewin não acontece isso mas não funciona via TS e nem a Hbcomm, procure aqui no forum que tem uns post com as funções da Fivewin, procure por: OPENCOMM() FlushComm() BuildCommDcb() CloseComm() Agora se você está compilando com a ultima versão do Harbour ai o melhor de todas que está em \harbour\contrib\hbwin que funciona até via TS as porta serial, é simplesmente a melhor para comunicação serial. Leonardo Machado Alvorada-RS Hwgui + x[H]arbour leonardodemachado@hotmail.com Quote Link to comment Share on other sites More sharing options...
mamp Posted May 12, 2010 Author Report Share Posted May 12, 2010 Leonardo, desculpa a ignorancia 1 - O que é GPF? 2 - O que é via TS? obg nao uso WS Marcos Macedo(Recife-PE) macedomarcos@hotmail.com Quote Link to comment Share on other sites More sharing options...
sygecom Posted May 12, 2010 Report Share Posted May 12, 2010 GPF: http://pt.wikipedia.org/wiki/General_Protection_Fault TS(Terminal Service): http://pt.wikipedia.org/wiki/Terminal_Service Leonardo Machado Alvorada-RS Hwgui + x[H]arbour leonardodemachado@hotmail.com Quote Link to comment Share on other sites More sharing options...
dorneles Posted June 23, 2017 Report Share Posted June 23, 2017 Alguem conseguiu fazer a conumunicacao com essa balanca? balanca elgin DP-15 plus Quote Link to comment Share on other sites More sharing options...
kapiaba Posted June 23, 2017 Report Share Posted June 23, 2017 Não, mas se for como na lógica abaixo, basta usar a HBCOMM.LIB que vai de boa. //--iniciando a porta nPorta=2 //COM2 nVeloc=9600 cParid="N" nBits=8 nParad=1 cInicia="P" nTemp=0.5 nTama=15 DO WHILE .T. COM_HARD(.T.) nConf := Com_Init(nPorta,nVeloc,cParid,nBits,nParad) if .not. nConf COM_CLOSE(nPorta) Wait "Falha na inicializacao da porta" EXIT endif //--envia o caracter de inicio para a balanca nRest= COM_SEND(nPorta,cInicia) //CHR(80)) //--aguarda um tempo para a leitura inkey(nTemp) //--recebe os dados da porta COM resulta=COM_READ(nPorta,nTama) //--limpa o buffer COM_FLUSH(nPorta) COM_HARD(.F.) //--fecha a porta COM_CLOSE(nPorta) ? resulta wait"Resultado da pesagem" EXIT ENDDO Quote Link to comment Share on other sites More sharing options...
mkyx Posted June 24, 2017 Report Share Posted June 24, 2017 na compilação, eu uso as libs: xhbcomm.lib e xhbcommdll.lib Quote Link to comment Share on other sites More sharing options...
Helio_hbinfo Posted June 30, 2017 Report Share Posted June 30, 2017 Boa noite Eu usei esta rotina para capturar dados da balanca TOLEDO, espero que ajude //-----------------------------------------------// // Modulo : TOLEDO.PRG // // Comentário : Acesso a balanca toledo // // Data : 24/08/2004 - Sandro // // Atualização : // // Comentário : os Parametros Peso e // // Tara devem ser fornecidos por referencia // // Exemplo : // // Peso := 0 // // Tara := 0 // // Erro := Toledo("9091","COM1",@Peso, @tara) // // Msginfo( "Peso: "+str(Peso) ) // //-----------------------------------------------// //#include "fivewin.ch" //------------------------------------------ FUNCTION Toledo( Modelo, Porta, Peso, Tara ) //------------------------------------------ STATIC TamPacote := 100 LOCAL Com, baudRate, databits, parity, stopbit, TamBuff, Bytes, buffer, x, erro LOCAL l_Erro := .F., time_out:=0 LOCAL c_Peso, c_Tara, c_liq, l_tara, l_check, c_check LOCAL swa, swa_bit0, swa_bit1, swa_bit2, swa_bit3, swa_bit4, swa_bit5, swa_bit6, swa_bit7 LOCAL swb, swb_bit0, swb_bit1, swb_bit2, swb_bit3, swb_bit4, swb_bit5, swb_bit6, swb_bit7 //----- Se Nao especificar modelo, encerra comunicação IF ValType( Modelo ) <> "C" //IF isWorking() // UnInt_Port() // ENDIF Peso := NIL RETURN( 0 ) ENDIF IF ! Upper( Modelo ) $ '9091,9094,8132,8510,8530,ID1,2090' Peso := NIL RETURN( - 1 ) ENDIF IF ! Upper( Porta ) $ 'COM1,COM2,COM3,COM4' Peso := NIL RETURN( - 2 ) ENDIF Com := Porta //"COM1" baudRate := 4800 databits := 7 parity := 2 stopbit := 2 TamBuff := 8000 DADOS :="" // NHANDLE:=Init_Port( Porta, baudRate , databits , parity , stopbit , TamBuff ) IF EMPTY(NHANDLE) Peso := NIL UnInt_Port(nhandle) RETURN( - 16 ) ? 'ERRO DE LEITURA NA BALANÇA' ENDIF // OutBufClr(NHANDLE) // Limpa o Buffer de Saida l_Erro := .T. time_out := 0 DO WHILE l_ErrO=.T. Buffer := "" DO WHILE time_out < 100000 //IF(NETNAME()='DAF',60000,40000) // Bytes := InbufSize(NHANDLE) IF Bytes >= TamPacote // Buffer := InChr( NHANDLE, Bytes, @DADOS) IF Len( DADOS) - Len( StrTran( DADOS, Chr( 13 ), "" ) ) >= 2 EXIT ENDIF ENDIF time_out:= time_out+1 ENDDO IF time_out >= 100000 //IF(NETNAME()='DAF',60000,40000) IF TamPacote = 100 Peso := NIL UnInt_Port(nhandle) RETURN( - 30 ) ELSE TamPacote := 100 LOOP ENDIF ENDIF l_Erro := .F. DADOS := SubStr( DADOS, At( Chr( 13 ), DADOS) + 1 ) TamBuff := At( Chr( 13 ), DADOS) IF Upper( Modelo ) $ '9091,8132,8510,2090' DO WHILE .T. IF SubStr( DADOS, 1, 1 ) <> Chr( 2 ) .and. SubStr( DADOS, 2, 1 ) <> Chr( 2 ) Peso := NIL UnInt_Port(nhandle) RETURN( - 34 ) ENDIF IF SubStr( DADOS, 2, 1 ) = Chr( 2 ) DADOS:= SubStr( DADOS, 2 ) l_check := .T. ELSE l_check := .F. ENDIF Bytes := At( Chr( 13 ), DADOS) IF Bytes = 0 Peso := NIL UnInt_Port(nhandle) RETURN( - 34 ) ENDIF IF l_check c_check := SubStr( DADOS, Bytes + 1, 1 ) IF c_check <> checksum( SubStr( DADOS, 1, Bytes ) ) Peso := NIL UnInt_Port(nhandle) RETURN( - 35 ) ENDIF ENDIF DADOS := SubStr( DADOS, 1, Bytes - 1 ) swa := AscBin( Asc( SubStr( DADOS, 2, 1 ) ) ) swb := AscBin( Asc( SubStr( DADOS, 3, 1 ) ) ) swa_bit7 := SubStr( swa, 1, 1 ) swa_bit6 := SubStr( swa, 2, 1 ) swa_bit5 := SubStr( swa, 3, 1 ) swa_bit4 := SubStr( swa, 4, 1 ) swa_bit3 := SubStr( swa, 5, 1 ) swa_bit2 := SubStr( swa, 6, 1 ) swa_bit1 := SubStr( swa, 7, 1 ) swa_bit0 := SubStr( swa, 8, 1 ) swb_bit7 := SubStr( swb, 1, 1 ) swb_bit6 := SubStr( swb, 2, 1 ) swb_bit5 := SubStr( swb, 3, 1 ) swb_bit4 := SubStr( swb, 4, 1 ) swb_bit3 := SubStr( swb, 5, 1 ) swb_bit2 := SubStr( swb, 6, 1 ) swb_bit1 := SubStr( swb, 7, 1 ) swb_bit0 := SubStr( swb, 8, 1 ) IF Upper( Modelo ) = '2090' IF swa_bit6 <> '0' .or. swa_bit5 <> '1' Peso := NIL UnInt_Port(nhandle) RETURN( - 34 ) ENDIF ELSE IF swa_bit6 <> '0' .or. swa_bit5 <> '1' .or. swb_bit4 <> '1' .or. swb_bit5 <> '1' Peso := NIL UnInt_Port(nhandle) RETURN( - 34 ) ENDIF ENDIF IF swb_bit2 = '1' Peso := NIL UnInt_Port(nhandle) RETURN( - 32 ) ENDIF c_Peso := SubStr( DADOS, 5, 6 ) IF swb_bit0 = '1' c_Tara := SubStr( DADOS, 11, 6 ) IF Empty( c_Tara ) c_Tara := '000000' ENDIF l_tara := .T. ELSE c_Tara := '000000' l_tara := .F. ENDIF IF swa_bit2 = '0' .and. swa_bit1 = '0' .and. swa_bit0 = '1' c_Peso := SubStr( c_Peso, 1, 6 ) c_Tara := SubStr( c_Tara, 1, 6 ) ELSEIF swa_bit2 = '0' .and. swa_bit1 = '1' .and. swa_bit0 = '0' c_Peso := SubStr( c_Peso, 1, 6 ) c_Tara := SubStr( c_Tara, 1, 6 ) ELSEIF swa_bit2 = '0' .and. swa_bit1 = '1' .and. swa_bit0 = '1' c_Peso := SubStr( c_Peso, 1, 5 ) + '.' + SubStr( c_Peso, 6, 1 ) c_Tara := SubStr( c_Tara, 1, 5 ) + '.' + SubStr( c_Tara, 6, 1 ) ELSEIF swa_bit2 = '1' .and. swa_bit1 = '0' .and. swa_bit0 = '0' c_Peso := SubStr( c_Peso, 1, 4 ) + '.' + SubStr( c_Peso, 5, 2 ) c_Tara := SubStr( c_Tara, 1, 4 ) + '.' + SubStr( c_Tara, 5, 2 ) ELSEIF swa_bit2 = '1' .and. swa_bit1 = '0' .and. swa_bit0 = '1' c_Peso := SubStr( c_Peso, 1, 3 ) + '.' + SubStr( c_Peso, 4, 3 ) c_Tara := SubStr( c_Tara, 1, 3 ) + '.' + SubStr( c_Tara, 4, 3 ) ELSEIF swa_bit2 = '1' .and. swa_bit1 = '1' .and. swa_bit0 = '0' c_Peso := SubStr( c_Peso, 1, 2 ) + '.' + SubStr( c_Peso, 3, 4 ) c_Tara := SubStr( c_Tara, 1, 2 ) + '.' + SubStr( c_Tara, 3, 4 ) ELSE l_Erro := .T. EXIT ENDIF IF swb_bit1 = '1' c_Peso := '-' + AllTrim( c_Peso ) ENDIF IF swb_bit0 = '1' c_liq := c_Peso c_Peso := "" ELSE c_liq := "" ENDIF EXIT ENDDO IF ! l_Erro c_Peso := AllTrim( c_Peso ) c_liq := AllTrim( c_liq ) c_Tara := AllTrim( c_Tara ) IF ! Empty( c_Peso ) FOR x = 1 TO Len( c_Peso ) IF ! SubStr( c_Peso, x, 1 ) $ '0123456789.-' l_Erro := .T. Erro := - 31 EXIT ENDIF NEXT ELSE IF ! Empty( c_liq ) FOR x = 1 TO Len( c_liq ) IF ! SubStr( c_liq, x, 1 ) $ '0123456789.-' l_Erro := .T. Erro := - 31 EXIT ENDIF NEXT ELSE l_Erro := .T. ENDIF ENDIF IF l_tara .and. ! l_Erro FOR x = 1 TO Len( c_Tara ) IF ! SubStr( c_Tara, x, 1 ) $ '0123456789.-' l_Erro := .T. Erro := - 31 EXIT ENDIF NEXT ENDIF IF ! Empty( c_liq ) .and. Empty( c_Peso ) .and. ! l_Erro IF ! Empty( c_Tara ) c_Peso := AllTrim( Str( Val( c_liq ) + Val( c_Tara ) ) ) ELSE c_Peso := c_liq ENDIF ENDIF ENDIF ELSEIF Upper( Modelo ) $ '9096,8530' DO WHILE .T. IF SubStr( DADOS, 1, 1 ) <> Chr( 2 ) .and. SubStr( DADOS, 2, 1 ) <> Chr( 2 ) Peso := NIL UnInt_Port(nhandle) RETURN( - 34 ) ENDIF IF SubStr( DADOS, 2, 1 ) = Chr( 2 ) DADOS:= SubStr( DADOS, 2 ) l_check := .T. ELSE l_check := .F. ENDIF Bytes := At( Chr( 13 ), DADOS) IF Bytes = 0 Peso := NIL UnInt_Port(nhandle) RETURN( - 34 ) ENDIF IF l_check c_check := SubStr( DADOS, Bytes + 1, 1 ) IF c_check <> checksum( SubStr( DADOS, 1, Bytes ) ) Peso := NIL UnInt_Port(nhandle) RETURN( - 35 ) ENDIF ENDIF DADOS := SubStr( DADOS, 1, Bytes - 1 ) swa := AscBin( Asc( SubStr( DADOS, 2, 1 ) ) ) swb := AscBin( Asc( SubStr( DADOS, 3, 1 ) ) ) swa_bit7 := SubStr( swa, 1, 1 ) swa_bit6 := SubStr( swa, 2, 1 ) swa_bit5 := SubStr( swa, 3, 1 ) swa_bit4 := SubStr( swa, 4, 1 ) swa_bit3 := SubStr( swa, 5, 1 ) swa_bit2 := SubStr( swa, 6, 1 ) swa_bit1 := SubStr( swa, 7, 1 ) swa_bit0 := SubStr( swa, 8, 1 ) swb_bit7 := SubStr( swb, 1, 1 ) swb_bit6 := SubStr( swb, 2, 1 ) swb_bit5 := SubStr( swb, 3, 1 ) swb_bit4 := SubStr( swb, 4, 1 ) swb_bit3 := SubStr( swb, 5, 1 ) swb_bit2 := SubStr( swb, 6, 1 ) swb_bit1 := SubStr( swb, 7, 1 ) swb_bit0 := SubStr( swb, 8, 1 ) IF swa_bit6 <> '1' .or. swa_bit5 <> '1' .or. swb_bit5 <> '1' UnInt_Port(nhandle) RETURN(-33) ENDIF IF swb_bit2 = '1' UnInt_Port(nhandle) RETURN(-32) ENDIF c_Peso := SubStr( DADOS, 6, 5 ) IF swb_bit0 = '1' c_Tara := SubStr( DADOS, 11, 5 ) IF Empty( c_Tara ) c_Tara := '00000' ENDIF l_tara := .T. ELSE c_Tara := '00000' l_tara := .F. ENDIF IF swa_bit2 = '0' .and. swa_bit1 = '0' .and. swa_bit0 = '0' c_Peso := c_Peso + "0" c_Tara := c_Tara + "0" ELSEIF swa_bit2 = '0' .and. swa_bit1 = '0' .and. swa_bit0 = '1' c_Peso := SubStr( c_Peso, 1, 5 ) c_Tara := SubStr( c_Tara, 1, 5 ) ELSEIF swa_bit2 = '0' .and. swa_bit1 = '1' .and. swa_bit0 = '0' c_Peso := SubStr( c_Peso, 1, 4 ) + '.' + SubStr( c_Peso, 5, 1 ) c_Tara := SubStr( c_Tara, 1, 4 ) + '.' + SubStr( c_Tara, 5, 1 ) ELSEIF swa_bit2 = '0' .and. swa_bit1 = '1' .and. swa_bit0 = '1' c_Peso := SubStr( c_Peso, 1, 3 ) + '.' + SubStr( c_Peso, 4, 2 ) c_Tara := SubStr( c_Tara, 1, 3 ) + '.' + SubStr( c_Tara, 4, 2 ) ELSEIF swa_bit2 = '1' .and. swa_bit1 = '0' .and. swa_bit0 = '0' c_Peso := SubStr( c_Peso, 1, 2 ) + '.' + SubStr( c_Peso, 3, 3 ) c_Tara := SubStr( c_Tara, 1, 2 ) + '.' + SubStr( c_Tara, 3, 3 ) ELSE l_Erro := .T. EXIT ENDIF IF swb_bit1 = '1' c_Peso := '-' + AllTrim( c_Peso ) ENDIF IF swb_bit0 = '1' c_liq := c_Peso c_Peso := "" ELSE c_liq := "" ENDIF EXIT ENDDO IF ! l_Erro c_Peso := AllTrim( c_Peso ) c_liq := AllTrim( c_liq ) c_Tara := AllTrim( c_Tara ) IF ! Empty( c_Peso ) FOR x = 1 TO Len( c_Peso ) IF ! SubStr( c_Peso, x, 1 ) $ '0123456789.-' l_Erro := .T. Erro := - 31 EXIT ENDIF NEXT ELSE IF ! Empty( c_liq ) FOR x = 1 TO Len( c_liq ) IF ! SubStr( c_liq, x, 1 ) $ '0123456789.-' l_Erro := .T. Erro := - 31 EXIT ENDIF NEXT ELSE l_Erro := .T. ENDIF ENDIF IF l_tara .and. ! l_Erro FOR x = 1 TO Len( c_Tara ) IF ! SubStr( c_Tara, x, 1 ) $ '0123456789.-' l_Erro := .T. Erro := - 31 EXIT ENDIF NEXT ENDIF IF ! Empty( c_liq ) .and. Empty( c_Peso ) .and. ! l_Erro IF ! Empty( c_Tara ) c_Peso := AllTrim( Str( Val( c_liq ) + Val( c_Tara ) ) ) ELSE c_Peso := c_liq ENDIF ENDIF ENDIF ELSE Peso := NIL UnInt_Port(nhandle) RETURN( - 1 ) ENDIF ENDDO Peso := Val( c_Peso ) Tara := Val( c_Tara ) UnInt_Port(nhandle) msgalert(peso,tara) TamPacote := TamBuff * 2 RETURN ( 0 ) //---------------------------- FUNCTION Toledo_erro( Erro ) //---------------------------- LOCAL mens := "" IF Erro = - 1 mens := 'Erro de parametros (Toledo)' ELSEIF Erro = - 2 mens := 'Canal de comunicacao invalido (Toledo)' ELSEIF Erro = - 3 mens := 'Numero de interrupcao invalido (Toledo)' ELSEIF Erro = - 4 mens := 'Numero de Bits invalido (Toledo)' ELSEIF Erro = - 5 mens := 'Taxa de comunicacao invalida (Toledo)' ELSEIF Erro = - 6 mens := 'Numero de stop Bits invalido (Toledo)' ELSEIF Erro = - 7 mens := 'Paridade invalida (Toledo)' ELSEIF Erro = - 8 mens := 'Tamanho de buffer invalido (Toledo)' ELSEIF Erro = - 9 mens := 'Tipo de controle de fluxo invalido (Toledo)' ELSEIF Erro = - 10 mens := 'Canal de comunicacao ja está aberto (Toledo)' ELSEIF Erro = - 11 mens := 'Canal de comunicacao nao esta aberto (Toledo)' ELSEIF Erro = - 12 mens := 'Memoria insuficiente para a operacao (Toledo)' ELSEIF Erro = - 13 mens := 'Buffer de Transmissao cheio (Toledo)' ELSEIF Erro = - 14 mens := 'Buffer de recepcao vazio (Toledo)' ELSEIF Erro = - 15 mens := 'Estado de sinal invalido (Toledo)' ELSEIF Erro = - 16 mens := 'Porta invalida ou erro de hardware (Toledo)' ELSEIF Erro = - 17 mens := 'Codigo de configuracao invalido (Toledo)' ELSEIF Erro = - 18 mens := 'Erro de recepcao (Toledo)' ELSEIF Erro = - 19 mens := 'Erro no Fechamento do canal (Toledo)' ELSEIF Erro = - 20 mens := 'Erro na transmissao (Toledo)' ELSEIF Erro = - 30 mens := 'Erro de Time-out Balanca (Toledo)' ELSEIF Erro = - 31 mens := 'Erro de Comunicacao na Balanca. Dados nao numericos (Toledo)' ELSEIF Erro = - 32 mens := 'Balanca excedeu a faixa de peso suportada. (Toledo)' ELSEIF Erro = - 33 mens := 'Erro de Comunicacao na Balanca (Toledo)' ELSEIF Erro = - 34 mens := 'Protocolo de balança inválido (Toledo)' ELSEIF Erro = - 35 mens := 'Erro de consistência de CheckSum (Toledo)' ELSE mens := 'Erro desconhecido (Toledo)' ENDIF mens := '(' + AllTrim( Str( Erro ) ) + ')' + ' -> ' + mens RETURN( mens ) //---------------------------------- STATIC FUNCTION Checksum( Pacote ) //---------------------------------- LOCAL f_tam := 0, f_asc := 0, f_bin := "", f_co2 := "" , f_pos f_tam := Len( Pacote ) FOR f_pos = 1 TO f_tam f_asc := f_asc + Asc( SubStr( Pacote, f_pos, 1 ) ) NEXT f_bin := AscBin( f_asc ) f_co2 := f_bin f_co2 := StrTran( f_co2, '1', '2' ) f_co2 := StrTran( f_co2, '0', '1' ) f_co2 := StrTran( f_co2, '2', '0' ) f_co2 := AscBin( BinAsc( f_co2 ) + 1 ) f_co2 := '0' + SubStr( f_co2, ( Len( f_co2 ) - 7 ) + 1, 7 ) RETURN( Chr( BinAsc( f_co2 ) ) ) //------------------------------- STATIC FUNCTION ascbin( f_asc ) //------------------------------- priv f_bin, f_tam IF ValType( f_asc ) # "N" msgstop( "erro de parametros. Funcção AscBin" ) quit ENDIF IF f_asc < 0 msgstop( "erro de parametros. Funcção AscBin" ) quit ENDIF f_bin = "" DO WHILE f_asc >= 2 f_bin = Str( ( f_asc % 2 ), 1 ) + f_bin f_asc = Int( f_asc / 2 ) ENDDO f_bin = Str( f_asc, 1 ) + f_bin IF ( Len( f_bin ) % 8 ) <> 0 f_tam := ( Int( Len( f_bin ) / 8 ) + 1 ) * 8 f_bin = repl( "0", f_tam - Len( f_bin ) ) + f_bin ENDIF RETURN( ( f_bin ) ) //------------------------------- STATIC FUNCTION binasc( f_bin ) //------------------------------- PRIVATE f_asc, f_tam, f_pot, p IF ValType( f_bin ) # "C" msgstop( "erro de parametros. Função BinAsc" ) quit ENDIF f_asc := 0 f_pot := 0 FOR p = Len( f_bin ) TO 1 STEP - 1 IF subst( f_bin, p, 1 ) = "1" f_asc := f_asc + ( 2 ** f_pot ) ELSEIF subst( f_bin, p, 1 ) <> "0" msgstop( "erro de parametros. Função BinAsc" ) quit ENDIF f_pot := f_pot + 1 NEXT RETURN f_asc //--------------------------- Final da rotina ----------------------------------- Quote Link to comment Share on other sites More sharing options...
marcioe Posted March 21, 2018 Report Share Posted March 21, 2018 Olá amigos, tambem estou precisando fazer a integração com esse modelo de balanca elgin DP-15 Se Alguem Puder me ajudar. Desde já agradeço Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 21, 2018 Report Share Posted March 21, 2018 //--iniciando a porta nPorta=2 //COM2 nVeloc=9600 cParid="N" nBits=8 nParad=1 cInicia="P" nTemp=0.5 nTama=15 DO WHILE .T. COM_HARD(.T.) nConf := Com_Init(nPorta,nVeloc,cParid,nBits,nParad) if .not. nConf COM_CLOSE(nPorta) Wait "Falha na inicializacao da porta" EXIT endif //--envia o caracter de inicio para a balanca nRest= COM_SEND(nPorta,cInicia) //CHR(80)) //--aguarda um tempo para a leitura inkey(nTemp) //--recebe os dados da porta COM resulta=COM_READ(nPorta,nTama) //--limpa o buffer COM_FLUSH(nPorta) COM_HARD(.F.) //--fecha a porta COM_CLOSE(nPorta) ? resulta wait"Resultado da pesagem" EXIT ENDDO Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 21, 2018 Report Share Posted March 21, 2018 INFORMAÇÕES EM PORTUGUES HBComm Lib: https://www.4shared.com/office/3qGrRumrei/README_COM.html Quote Link to comment Share on other sites More sharing options...
marcioe Posted March 21, 2018 Report Share Posted March 21, 2018 Obrigado amigo... Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 21, 2018 Report Share Posted March 21, 2018 Tente também, direto em Fivewin, com a classe: Class TComm http://wiki.fivetechsoft.com/doku.php?id=fivewin_class_tcomm Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 21, 2018 Report Share Posted March 21, 2018 // TERMINAL.PRG - teste a porta da balança. // Working sample of a simple ASCII terminal program - Developed by Enrico M. Giordano #include "Fivewin.ch" FUNCTION MAIN() LOCAL oDlg LOCAL oGet, cTxt := "" LOCAL nCom DEFINE DIALOG oDlg; SIZE 500, 500; TITLE "Terminale" @ 0, 0 GET oGet VAR cTxt MEMO READONLY // SIZE... oGet:bKeyDown = { | nKey | Tasti( nCom, nKey ) } ACTIVATE DIALOG oDlg; ON INIT ( oGet:AdjClient(),; nCom := APRICOM( oDlg, oGet ),; IF( nCom < 0, oDlg:End(), ) ); CENTER IF nCom >= 0; CLOSECOMM( nCom ); ENDIF RETURN NIL STATIC FUNCTION TASTI( nCom, nKey ) SENDSTR( nCom, CHR( nKey ) ) RETURN NIL STATIC FUNCTION APRICOM( oDlg, oGet ) LOCAL nCom, cDcb BEGIN SEQUENCE nCom = OPENCOMM( "COM1", 16384, 16384 ) IF nCom < 0 ? "Errore di apertura della porta di comunicazione." BREAK ENDIF BUILDCOMMDCB( "COM1:115200,N,8,1", @cDcb ) IF !SETCOMMSTATE( nCom, cDcb ) ? "Errore di impostazione della porta di comunicazione." BREAK ENDIF oDlg:bCommNotify = { | nCom | Connect( nCom, oGet ),; EnableCommNotification( nCom, oDlg:hWnd, 1, -1 ) } IF !ENABLECOMMNOTIFICATION( nCom, oDlg:hWnd, 1, -1 ) ? "Errore di abilitazione della notifica." BREAK ENDIF RECOVER nCom = -1 END SEQUENCE RETURN nCom STATIC FUNCTION CONNECT( nCom, oGet ) LOCAL cStr ENABLECOMMNOTIFICATION( nCom, 0, 1, -1 ) cStr = RECEIVESTR( nCom ) cStr = STRTRAN( cStr, CHR( 13 ), "" ) cStr = STRTRAN( cStr, CHR( 10 ), CRLF ) oGet:Append( cStr ) 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 ) ) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.