Clipper On Line • Ver Tópico - ModBus RTU com Harbour

ModBus RTU com Harbour

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

ModBus RTU com Harbour

Mensagempor Nascimento » 15 Set 2017 23:41

Amigos alguem aqui ja pegou algum equipamento que usa o Modbus RTU é um tipo de envio de informaçoes pela com geralmente usado com o RS485 ou mesmo com o RS232
estou precisando de uma aplicação que envie no modo de codificação modbus, e queria saber se algum dos amigos ja fez ou tem alguma luz sobre o assunto, caso não fui claro tentarei explicar melhor
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 668
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 103 vezes
Mens.Curtidas: 69 vezes

ModBus RTU com Harbour

Mensagempor Itamar M. Lins Jr. » 16 Set 2017 12:51

Ola!
Estive lendo e me parece que é a mesma coisa que usamos para balança. Mandar o sinal e pegar o peso por exemplo.
Basta saber o sinal que ativa, envia, e termina a comunicação ai do dispositivo. É uma comunicação serial como outra qualquer.

***************************
Function PegaPeso(oDlgMain)
***************************
*
*
LOCAL cString := chr(5) //"ATE0" + Chr( 13 ) + "ATI3" + Chr( 13 )
LOCAL nTimeOut := 3000 // 3000 miliseconds = 3 sec.
LOCAL nResult
LOCAL nPort := Val(SubStr(pBalanca,4,1))
LOCAL cPortName := pBalanca
LOCAL nPeso:=0

rodape(oDlgMain,3,'Lendo Peso: ' )

Do While .t.

   hb_comSetDevice( nPort, cPortName )

   If !hb_comOpen( nPort )
      Hwg_msgStop("Falha abrindo a porta: "+Str(nPort) )
      exit
   EndIf
   hb_comGetDevice( nPort )
   IF !hb_comInit( nPort, 9600, "N", 8, 1 )
      Hwg_msgStop("Falha inicializando a porta: "+Str(nPort)+" 9600:N:8:1" )
      exit
   Else
      nResult := hb_comSend( nPort, @cString, len( cString ), nTimeOut )
      IF nResult != len( cString )
         Hwg_msgStop("SEND Falhou." )
         exit
      EndIf
      Inkey(1)
      cString  := Space(32)
      nTimeOut := 500
      nResult  := hb_comRecv( nPort, @cString, len( cString ), nTimeOut )
      IF nResult == -1
         hwg_msgstop("RECV... Falha pegando peso")
         exit
      ENDIF
   EndIf
   EXIT
EndDo

nPeso := Val(SubStr(cString,2,5)) / 1000

hb_comClose( nPort )

Return nPeso


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 5556
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 205 vezes
Mens.Curtidas: 323 vezes

ModBus RTU com Harbour

Mensagempor Nascimento » 24 Set 2017 23:16

n amigo itamar, neste caso que esta explicitado é uma comunicação comum mesmo, o modbus usa umas coisinhas um pouco mais digamos chatas
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 668
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 103 vezes
Mens.Curtidas: 69 vezes

ModBus RTU com Harbour

Mensagempor jairpinho » 30 Dez 2017 22:39

vou verificar meus prg, qual tipo vai usar porta serial 232 ou rs485.
jairpinho
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 2
Data de registro: 30 Dez 2017 22:36
Cidade/Estado: Gravataí
Curtiu: 0 vez
Mens.Curtidas: 0 vez

ModBus RTU com Harbour

Mensagempor Nascimento » 31 Dez 2017 21:29

485 , mais o modbus pode ser enviado por 232 também

o modbus é um tipo de envio encriptado usando um cheksun

quem recebe faz o tratamento do que recebeu pra ver se é valido , assim é traduzido e efetuado o comando

é um modo de eliminar intermitências ou ruídos em geral
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 668
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 103 vezes
Mens.Curtidas: 69 vezes

ModBus RTU com Harbour

Mensagempor Itamar M. Lins Jr. » 03 Jan 2018 14:05

Ola!
o modbus é um tipo de envio encriptado usando um cheksun

Eu estou lendo sobe isso e não vi/li onde está a encriptação.
https://www.embarcados.com.br/protocolo-modbus/
protocolo modbus
...
Modos de transmissão
Na especificação do protocolo estão definidos dois modos de transmissão:
ASCII;
RTU.
Modo de transmissão ASCII

Quando os equipamentos são configurados para se comunicarem em uma rede Modbus usando ASCII (American Standard Code for Information Interchange), cada byte em uma mensagem é enviado como dois caracteres ASCII. Apesar de gerar mensagens legíveis pela tabela ASCII esse modo consome mais recursos da rede. A principal vantagem dessa modalidade é que permite que os intervalos de tempo sejam cerca de um segundo para correr entre os caracteres sem causar erro.

Os dispositivos monitoram constantemente a rede para o início de uma mensagem. Quando uma mensagem é iniciada pelo mestre, todos os dispositivos da rede decodificam o campo de endereço para determinar qual escravo deve receber a mensagem. O inicio de uma mensagem é reconhecido pelo caractere (:) "dois pontos".

O formato para cada byte em modo ASCII é:

Codificação do sistema: Hexadecimal, caracteres ASCII 0-9, A-F, um caractere hexadecimal contido em cada caractere ASCII da mensagem;
Bits por Byte:

1 bit de início

7 bits de dados, bit menos significativo primeiro
1 bit para paridade par / ímpar, ou sem bit de paridade
1 bit de parada, se a paridade é usado; 2 bits se sem paridade

16 bits Campo Erro check : Longitudinal Redundancy Check (LRC)

Modo de transmissão RTU (Remote Terminal Unit)

No modo RTU (Remote Terminal Unit), cada mensagem de 8 bits contém dois caracteres hexadecimais de 4 bits. A principal vantagem desse modo é que sua maior densidade de caracteres permite um melhor processamento de dados do que o modo ASCII para o mesmo baudrate (velocidade de comunicação). Cada mensagem deve ser transmitida em um fluxo contínuo de caracteres.
No modo RTU não existe um caractere específico que indique o início ou o fim de um telegrama. A indicação de quando uma nova mensagem começa ou quando ela termina é feita pela ausência de transmissão de dados na rede, por um tempo mínimo de 3,5 vezes o tempo de transmissão de um byte de dados. Sendo assim, caso um telegrama tenha iniciado após a decorrência desse tempo mínimo, os elementos da rede irão assumir que o primeiro caractere recebido representa o início de um novo telegrama. E da mesma forma, os elementos da rede irão assumir que o telegrama chegou ao fim quando, recebidos os bytes do telegrama, este tempo decorra novamente.

Se durante a transmissão de um telegrama o tempo entre os bytes for maior que este tempo mínimo, o telegrama será considerado inválido, pois o controlador irá descartar os bytes já recebidos e montará um novo telegrama com os bytes que estiverem sendo transmitidos. O tempo para transmitir uma palavra do quadro varia de 573us para taxas de comunicação acima de 19200bits/s e 9 ms para a taxa de 1200bits/s.

O campo de checagem de erros é baseado no método CRC (Cyclical Redundancy Checking).


Tem via TCP também

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 5556
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 205 vezes
Mens.Curtidas: 323 vezes

ModBus RTU com Harbour

Mensagempor Nascimento » 03 Jan 2018 22:41

Desculpe o Equivoco
é CRC dos dados enviados

CRC (Cyclical Redundancy Checking).
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 668
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 103 vezes
Mens.Curtidas: 69 vezes

ModBus RTU com Harbour

Mensagempor Nascimento » 06 Ago 2019 00:25

encontrei um codigo em VB sobre este assunto , mais não entendo nada de vb alguem aqui poderia portar para harbour? ou me dar uma orientação de como eu faria isso?
vou por o codigo em anexo
mbus.zip
comunicação modbus escrito em vb
(20.15 KiB) Baixado 60 vezes
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 668
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 103 vezes
Mens.Curtidas: 69 vezes

ModBus RTU com Harbour

Mensagempor JoséQuintas » 06 Ago 2019 23:25

Tem umas rotinas de cálculo/conversão muito doidas aí.
Vai levar bastante tempo pra converter.
De um modo geral, a parte que interessa é parecida com Harbour.

O que poderia ser diferente talvez estes:

Mid() é o mesmo que Substr()
"A" & "B", o símbolo de macro, é apenas pra concatenar, como se estivesse somando as strings
Dim ctcTable(0 TO 511) AS Byte, isso seria um array de Asciii, com o detalhe que os arrays no VB começam no ZERO e não no 1, então seriam 512 elementos. DIM seria a declaração.... compare com LOCAL ou PRIVATE
Clng(n): deve ser conversão pra tipo long, quem mexe com binário deve saber
CInt() idem pra inteiro
2 mod 3, seria o equivalente do Harbour Mod( 2, 3 )
A XOR B ... quem mexe com binário deve saber o equivalente
&H4B... é o número diretamente no fonte em hexadecimal, acho que no Harbour pode ser colocado direto
Val(), Str(), Chr(), Asc() ... mesma coisa, só não sei a saída exata de Str() quando a dígitos/espaço em branco
textn.text - isso é o conteúdo de um "get" (textbox), que é texto
Aliás... o que tem o ponto é como se fosse uma classe/objeto, comum a todas as linguagens, menos no Harbour que é ":"
oClasse:valor no VB é oClasse.Valor

Acho que só... a maioria do fonte é cálculo, ou informação existente na tela, ou enviando/recebendo da COM.
Seria interessante pesquisar se não tem versão em DLL.
Ou talvez, não tenho certeza, usar como VBScript de dentro do Harbour, e usar o fonte do jeito que está.

FRM = formulário, a primeira parte seria o desenho da tela, pula tudo aquilo, o que interessa é onde começa o fonte pra valer
FRX = uma espécie de resource - desenhos que complementam o frm
VBP = é o projeto, que pode ser aberto no VB6

Se for pegar firme mesmo, talvez ajude baixar o Visual Basic 6, abrir o projeto (VBP) e ver em execução, pra ter alguma referência pra comparar o resultado desses cálculos.

Tudo que precisa está nos arquivos FRM, um em cada pasta.
Vai identificar relativamente fácil aonde começa o fonte de verdade.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17601
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

ModBus RTU com Harbour

Mensagempor JoséQuintas » 06 Ago 2019 23:36

Aqui, por exemplo, trata-se apenas de atribuir valor a cada elemento do array, assim que a janela é aberta.

frmload.png


Ao enviar esse byte array para a com, seria o mesmo que enviar uma string com o Chr() de cada elemento.

cTxt := ""
FOR nCont = 1 TO Len( aArray )
   cTxt += Chr( aArray[ nCont ] )
NEXT
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17601
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

ModBus RTU com Harbour

Mensagempor JoséQuintas » 06 Ago 2019 23:41

Aqui por exemplo, não faço idéia, quem mexe com binário deve saber.

vb.png
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17601
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

ModBus RTU com Harbour

Mensagempor JoséQuintas » 06 Ago 2019 23:47

Pensando bem... parece fazer parte de algo como transformar binário em caractere...
"01010101" em "A" (apenas exemplo, sei lá qual é o binário de A)
e vice-versa.

É que em binário, trata-se de usar o AND pra fazer a soma.
E o True/False trata-se de 0 e 1

Mas quem mexe em binário pode confirmar isso.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17601
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

ModBus RTU com Harbour

Mensagempor JoséQuintas » 06 Ago 2019 23:53

O melhor mesmo vai ser usar a IDE do VB6, e vai poder conferir cada etapa disso.
Considere que sabe, e aí fica fácil. Se considerar que é do outro mundo... aí complica.

O debug do VB6 é parecido com o do Clipper, F9 marcar linha pra parar, e embaixo pode ver o valor de algo.
E o legal... basta colocar o mouse encima da variável e já vê o conteúdo.

Só tem um lado ruim:
Vai ver o que é IDE, o que é desenhar formulário... e vai achar o que tem disponível pra Harbour um lixo.
Vai achar ultramoderno.
Mas quando lembrar que a IDE é de mais de 20 anos atrás... as IDEs pra Harbour vão se tornar mais lixo ainda.
É só esse o lado ruim.

Tirando isso... o Harbour ganha disparado.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17601
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

ModBus RTU com Harbour

Mensagempor Nascimento » 07 Ago 2019 18:33

o que preciso é portar pra harbour mesmo que em modo console, vou esperar chegar uma apostila com exemplos praticos, mais vem o master em vb tambem
este protocolo vem sendo mais usado que antes, uso em PLC entre outras comunicações seriais ,muito em equipamentos industriais, por conta do ruido e pertubaçoes eletricas, o modbus da mais confiabilidade no envio

com a ajuda do amigo clareou um pouco, vamos que vamos!
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 668
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 103 vezes
Mens.Curtidas: 69 vezes

ModBus RTU com Harbour

Mensagempor Nascimento » 07 Ago 2021 15:03

JoséQuintas escreveu:Aqui, por exemplo, trata-se apenas de atribuir valor a cada elemento do array, assim que a janela é aberta.

frmload.png


Ao enviar esse byte array para a com, seria o mesmo que enviar uma string com o Chr() de cada elemento.

cTxt := ""
FOR nCont = 1 TO Len( aArray )
   cTxt += Chr( aArray[ nCont ] )
NEXT


amigo quintas ainda não desisti minha busca e meu empenho para fazer comunicação modbus via harbour , lendo muito vi que trata-se de um crc16

o que não consigo ainda é portar para o harbour todo o codigo, não tenho conhecimento nem 1 em vb
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 668
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 103 vezes
Mens.Curtidas: 69 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 12 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro