Porta serial no Harbour

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Porta serial no Harbour

Mensagem por sygecom »

Hasse,
Relendo o topico, eu percebi que está usando Harbour e nem todas as funções da CA-TOOLS foi para o Harbour, pode pegar as funções migradas da CA-TOOLS para o Harbour cno ChangeLog do Harbour:
https://raw.github.com/harbour/core/mas ... ngeLog.txt
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Porta serial no Harbour

Mensagem por Hasse »

Bom dia Leonardo.

Realmente estou compilando com o Harbour 3.1.4, com HBCT.lib.

Estou muito satisfeito pois o aplicativo está funcionando muito bem.

Tive dificuldades na conexão serial com um aparelho de análises. No início pensei que a LIB fosse a culpada. Acabei por descobrir que a "culpa" era do aparelho, que é muito exigente. Ele requer que um ACK seja disparado imediatamente após o término de transmissão de uma linha. Qualquer atraso gera um erro.

De qualquer forma agradeço a tua sempre fraterna atenção e gentileza.

Esta foi minha primeira incursão na programação MiniGui. Preciso aprender muito ainda.

Um detalhe que eu gostaria de contornar é o seguinte:
-Para que o aplicativo esteja sempre atualizado uso um BAT para copiar o executável do Servidor para o terminal local.
CD \HBCom
COPY \Server\Apps\HBComZ1.exe
HBComZ1
-Um janela console se abre e permanece aberta até o encerramento do aplicativo HBComZ1.
-Eu já ensinei que a janela pode ser encerrada, mas os operadores nem sempre o fazem.

Existe alguma forma de "fechar" esta janela automaticamente ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Porta serial no Harbour

Mensagem por rochinha »

Amiguinho,

Voce está executando o mesmo através de arquivo de lote?

Se o programa é executado apenas para fazer uma operação e não necessita ficar ativo, force dentro dele para se fechar.

O fato de se usar arquivo de lote é prender ela pelos comandos executados dentro do lote.

Ao invés de usar este lote crie outro que execute os comandos assim:

Código: Selecionar todos

cmd.exe CD \HBCom
cmd.exe COPY \Server\Apps\HBComZ1.exe
cmd.exe HBComZ1
Tente e veja se ainda assim melhora.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Porta serial no Harbour

Mensagem por Jairo Maia »

Olá Hasse,
Hasse escreveu:Para que o aplicativo esteja sempre atualizado uso um BAT para copiar o executável do Servidor para o terminal local.
Você faz isso a cada vez que abre o sistema no terminal? Ou não entendi nada?

Se for o que entendi, você pode pelo seu aplicativo verificar a data e hora de criação do arquivo no servidor, comparar com o arquivo local, tudo isso em frações de segundos, e se forem diferentes da máquina local, então você avisa o usuário que vai sincronizar as versões, e chama o bat de atualização abortando seu sistema.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Porta serial no Harbour

Mensagem por janio »

Jairo,

Estou precisando muuuuito fazer a leitura do peso de uma balança toledo prix III plus. Peguei o seu exemplo, compilei, mas tem mim retornado sempre ERRO NA LEITURA DO PESO!

Conforme o manual, as configurações de porta para essa balança devem ser: 4800 baud, 8 bit de dados, sem paridade e 1 stop bit.

Coloquei exatamente dessa forma mas NAO FUNCIONOU! Detalhe: tenho um utilitario aqui do acbr para leitura de balanças e com ele consigo pegar o peso.

Estou fazendo algo errado??

(nao queria depender do acbr para ler peso dessa balança)
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Porta serial no Harbour

Mensagem por Nascimento »

bom nao conheço bem digamos esse tipo de balança mais digamos que vc bote 1kg ela retorna alguma string que equivala ao peso nao?

se for seguindo essa ideia , vc coloca 1kg e v o retorno que dá cria uma tabela e acho que dará certo, posso ta falando bobagem mais é pelo que digamos imaginei
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Porta serial no Harbour

Mensagem por janio »

Jairo,

Nunca trabalhei com COMUNICAÇÃO DIRETA com portas seriais.

O manual da balança diz:

Obtendo o peso da balança:
[ENQ]

Vc envia o codigo "05" para obter o peso da balança... não entendi!

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Porta serial no Harbour

Mensagem por Hasse »

Bom dia

Não conheço as exigências da citada balança, mas há algumas regras que a "maioria" das comunicações seriais usa.

1)-Abrir a Porta Serial.

2)-Início da comunicação:

Código: Selecionar todos

OutBufClr( nHandle )                    && Limpa o Buffer de Saída da porta serial
OutChr( nHandle, ACK )                  && Envia um Ack (06) para o aparelho remoto.
3)-Veja no manual se o [ENQ] não necessita de um comando que precede esta instrução. Tipo [STX] + [ENQ], onde
STX é CHR(2)

4)-Para você receber o retorno de uma serial você precisa criar uma variável para receber esta informação, tipo:

Código: Selecionar todos

nRead := InBufSize( nHandle )                      && Lê o tamanho da string a ser recebida.
cRead := Space( nRead )                            && Cria a variável no tamanho correto.
InChr( nHandle, nRead, @cRead)                     && Arquiva a leitura na variável cRead
A partir deste ponto você pode ler e manipular o resultado que veio da balança, lembrando que todas as comunicação seriais são em modo texto puro.

A porta serial é uma forma de comunicação muita antiga, e por isso eu a chamo de "burra", ou seja, via programação, você precisa dizer exatamente o que você deseja, e seguindo estritamente as exigências impostas pelo fabricante.
Como exemplo cito: Alguns fabricantes exigem que, após recebido o retorno da informação solicitada, é necessário que se retorne o equivalente ao "recebido corretamente" ou "não recebido corretamente". Isto é feito com os valores [ACK] -> chr(6) e [NAK] -> chr(21) respectivamente. Caso isto não seja feito, o aparelho remoto entra em "erro".
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Porta serial no Harbour

Mensagem por janio »

Hasse,

Não sei se vc viu o codigo-exemplo disponibilizado pelo Jairo. Os códigos de comunicação que ele usa são um pouco diferentes dos postados por vc, talvez por ele utilizar outra lib.

Mas assim... ele disponibilizou um codigo e dizendo ele que consegue obter o peso de varios modelos de balanças toledo com esse codigo.

Não estou conseguindo sucesso com o mesmo codigo e gostaria de saber o pq.

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Porta serial no Harbour

Mensagem por Hasse »

Certamente, meu caro colega, existem várias lib's para comunicação serial, mas a forma de comunicação segue mais ou menos a mesma filosofia.
Os comando e função podem diferir em seus nomes, mas os parâmetros é que são importantes.

Como não trabalho com balanças, não posso te ajudar neste aspecto. Neste momento, credito que o Jairo seria o colega indicado para te ajudar.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Porta serial no Harbour

Mensagem por Jairo Maia »

Olá Jânio,

Este é o protocolo para essa balança.

ENQ é o caracter 5 na tabela ASCII, e note que não é string, mas sim numérico. Se no exemplo você colocou entre aspas não funciona.

Qual exemplo você baixou? Tem como postar o link? Isso porque já publiquei mais de um, e gostaria de ver se o exemplo pode ter algum problema.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Porta serial no Harbour

Mensagem por janio »

Ola Jairo,

Baixei o que vc postou aqui mesmo neste topico. Ta primeira página (TESTEBAL.ZIP).
https://pctoledo.org/forum/viewto ... 45&t=14136

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Porta serial no Harbour

Mensagem por Jairo Maia »

Jânio,

Compile esse exemplo e tente com ele. Acho que quando subi o arquivo subi o que não estava testado e ele tem erro.

A Prix III Ligth sei que é 4800, mas como a sua é Plus, tente também com outras velocidades. Este é o que uso para testes de protocolos:

Código: Selecionar todos

/*

  Le peso de vßrias balanþas usando a HBCT.LIB

  Compilar: HBMK2 Nome_Exemplo -lhbct

*/

#include "inkey.ch"
#include "hbgtinfo.ch"

REQUEST HB_GT_WVT_DEFAULT

FuncTion Main()

  HB_GtInfo( HB_GTI_FONTNAME, "Lucida Console" )
  HB_GtInfo( HB_GTI_FONTSIZE, 26 )
  HB_GtInfo( HB_GTI_FONTWIDTH, 12 )

  SetColor( "GR+/N" )

  Private nPesoLido := 0.000
  Private nBal_ComPorta := 1
  Private nBal_BaudRate := 9600  // 300, 600, 1200, 2400, 4800, 9600, 19200
  Private cBal_Parity := "N"     // (E)ven, (O)dd, (M)ark, (S)pace, (N)one
  Private nBal_DataLength := 8   // 7, 8
  Private nBal_StopBits := 2     // 1, 2
  Private nBal_String := 5       // Caracter ASCII para Iniciar transmissao
  Private nBal_BytesReturn := 20 // Bytes de retorno

  Do While .T.

    Clear Screen

    @ 06, 22 Say "Porta.................: " Get nBal_ComPorta Pict "9"
    @ 08, 22 Say "Velocidade............: " Get nBal_BaudRate Pict "99999"
    @ 10, 22 Say "Paridade..............: " Get cBal_Parity Pict "!"
    @ 12, 22 Say "Comprimento de Dados..: " Get nBal_DataLength Pict "9"
    @ 14, 22 Say "Bits de Parada........: " Get nBal_StopBits Pict "9"
    @ 16, 22 Say "Caractere de Leitura..: " Get nBal_String Pict "999"
    @ 18, 22 Say "Bytes de Retorno......: " Get nBal_BytesReturn Pict "999"
    Read

    If LastKey()=K_ESC
      Exit
    Endi
	
    Clear Screen

    While LastKey() != K_ESC
      
      Set Key K_F2 To PegarPeso()
      @ 10, 23 Say "Pressione F2 para capturar o Peso"
      @ 12, 23 Say "Peso..: " Get nPesoLido
      @ 14, 23 Say "Pressione ESC para Sair"
      Read
    EndDo

  EndDo

Return Nil

Function PegarPeso()
  Local cLeitura
  Local nInicioPeso
  Local nTempo := 0
  Local lFalhouLeitura := .F.

  nPesoLido := 0

  If Com_Open( nBal_ComPorta, 1024, 1024) == .F.
    Alert( "Erro na abertura da Porta!" )
    Return ( nPesoLido )
  EndIf

  Com_Init( nBal_ComPorta, nBal_BaudRate, cBal_Parity, nBal_DataLength, nBal_StopBits )

  Com_Send( nBal_ComPorta, Chr( nBal_String ) )

  /* 
     Evita loop permanente por falha na leitura
  */
  While Com_Count( nBal_ComPorta ) < 7
   InKey( 0.1 )
   If ++nTempo = 5
    lFalhouLeitura := .T.
    Exit
   Endi
  EndDo

  If !lFalhouLeitura

    cLeitura := Com_Read( nBal_ComPorta )
    MemoWrit("PesoLido.txt", cLeitura )

    nInicioPeso := At( Chr( 2 ), cLeitura )
    If nInicioPeso > 0
      nPesoLido := ( Val( Subs( cLeitura, nInicioPeso + 1, 5 ) ) / 1000 )
    EndIf

  EndIf
  
  Com_Close( nBal_ComPorta )

  If nPesoLido > 0
    M->nPesoLido := nPesoLido
  Else
    Hb_Alert( "Erro na Leitura do Peso!" )
  Endif

Return ( nPesoLido )
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Porta serial no Harbour

Mensagem por janio »

Obrigado, Jairo!

Vou olhar! A Plus eh 4800 também.

Janio

PS: Esse eh o manual da balança
Anexos
IMG_9680.jpg
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Porta serial no Harbour

Mensagem por janio »

Jairo, PERFEITO!

Funcionou de primeira! MUITO OBRIGADO!

Unica coisa q mudei foi q coloquei a velocidade 4800 e StopBits para 1

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder