Página 4 de 4

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 08:19
por carlaoonline
Bom dia!

Meio que parecendo a "Torre de Babel" em termos de comunicação, acho que estamos indo para onde o criador do tópico quer chegar, que pelo que entendi é: Ligar/desligar os relés da placa através de um executável feito em Harbour.

Conforme trajetória das postagens a contribuição de todos, acredito ser possível pelo menos com esses dois métodos:


MÉTODO 1:
==========
Com a postagem do Itamar, ficou claro pra mim que a placa SIM aceita comandos seriais, pois ela tem uma entrada de 2 pinos conforme o mapa da mesma, SÓ FALTA SABER quais códigos são, dessa forma o Harbour consegue mandar esses sinais por um executável controlado por qualquer usuário.
Entrada Serial da placa NC 1000
Entrada Serial da placa NC 1000
E o bom dessa placa é que ela consegue atualizar o STATUS de cada relé para quem estiver usando o Site do WebServer dela, ou seja: Se ligar pela serial (ou até mesmo alimentando os pinos IN1 AO IN8) ela atualiza o status do site. (porém não sei como seria para ler o STATUS dos relés pelo Harbour)

Resposta do ChatGPT sobre a questão da serial dela:
Para ligar o relé 1 da placa NC1000 através da entrada serial de 2 pinos, você precisa enviar um comando específico para a placa. O comando para ligar o relé 1 é "REL1ON", que significa "Relé 1 ligado". Esse comando deve ser enviado em formato de string, utilizando os caracteres ASCII correspondentes a cada letra. Dependendo da linguagem de programação que você estiver utilizando, pode ser necessário converter a string para um vetor de bytes antes de enviá-la pela porta serial. Por exemplo, em Python, você pode utilizar a função "bytes()" para converter a string em bytes e a biblioteca "pyserial" para enviar os dados pela porta serial.

MÉTODO 2:
=========
E com a postagem do Quintas,
JoséQuintas escreveu:cUrl := "http://192.168.1.6/nao-sei-algum-dia-vã ... ho-e-olhar"
o := Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
o:Open( "GET", cUrl, .F.)
o:Send()
cRetorno := o:ResponseBody()
ficou claro pra mim que que é possível enviar a URL completa, já com o endereço final do comando que liga/desliga determinado relé.

No caso do comando realmente ser REL1ON, então a URL para enviar para o navegador seria:

E como saber qual código (Url) usar para cada comando pelo navegador?
Simples, ligue a placa na rede, faça ela funcionar e clica no botao de ligar o relé 01, feito isso verifica qual é o endereço que está no navegador, acredito que copiando e colando esse endereço direto no navegador deva ligar o rele, (No WebServer com arduino funciona dessa forma) a menos que a placa mande a URL com o comando para ligar o relé e em seguida mude o endereço.

O problema desse método 2 é que abrirá sempre o navegador, não sei se tem como abrir em segundo plano sem tela, ou em modo gráfico criar uma caixa de URL invisível no aplicativo e depois apagar ela.

Em um site de vendas de produto similar encontrei isso:
SPECIFICATION
RJ45 interface, via RJ45 telecommunications connection for network control.
Support for 8 Channels relay which means you could controll more to 8 different devices at the same time.
Unique dual TCP connect control, corresponding with above trait, local as TCP server
accept client control, when connect to remote server as TCP client
Supply core module detailed information
Default IP:192.168.1.4 prot:30000 http://192.168.1.4/30000 (You could change the default IP address)

HTTP comment:
http://192.168.1.4/30000/00 : Relay-01 OFF
http://192.168.1.4/30000/01 : Relay-01 ON
http://192.168.1.4/30000/02 : Relay-02 OFF
http://192.168.1.4/30000/03 : Relay-02 ON
http://192.168.1.4/30000/04 : Relay-03 OFF
http://192.168.1.4/30000/05 : Relay-03 ON

http://192.168.1.4/30000/14 : Relay-8 OFF
http://192.168.1.4/30000/15 : Relay-8 ON
http://192.168.1.4/30000/41 : Enter
http://192.168.1.4/30000/40 : Exit
http://192.168.1.4/30000/42 : Next Page
http://192.168.1.4/30000/43 : Next Page
Mas acredito que seria ":" no lugar de "/" após o 30000 e que os comando podem ser diferentes.

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 10:09
por JoséQuintas
carlaoonline escreveu:O problema desse método 2 é que abrirá sempre o navegador, não sei se tem como abrir em segundo plano sem tela, ou em modo gráfico criar uma caixa de URL invisível no aplicativo e depois apagar ela.
É a rotina que passei.
Faça um teste com qualquer site.

Talvez importante: "GET" é quando tem retorno, "POST" é quando não tem retorno.

Código: Selecionar todos

cRetorno := o:ResponseBody()
Aí pega o retorno, que pode ser até a página que seria supostamente aberta no navegador.

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 10:17
por JoséQuintas
test.png

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 10:20
por JoséQuintas
Pra usuário que não sabe pensar:

Não precisa pedir a função MsgExclamation()
Use console e troque por ? cRetorno
ou use função equivalente de sua lib, ou MemoEdit(), ou textbox multiline, ou qualquer outra coisa que mostre texto.

Nota: não tem a ver com os usuários deste post, é que já aconteceu com outras rotinas postadas

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 10:26
por carlaoonline
... estamos avançando
JoséQuintas escreveu:Talvez importante: "GET" é quando tem retorno, "POST" é quando não tem retorno.
JoséQuintas escreveu:Aí pega o retorno
Com esse detalhe pode ser a "chave" para "LER" o STATUS de como estão os relés, pois pela aplicação Harbour ele pode até enviar o sinal (nesse caso estamos falando do método 2 -> Url) MAS até então não tem como saber se determinado relé está realmente ligado ou não (até porque ele pode enviar um sinal pelo Harbour e outro usuario enviar outro sinal pela Web)

No caso , o retorno pode ser um número decimal de 8bits (210 por exemplo) que convertido em binario nos dará algo do tipo "11010010" que seria o status dos relés

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 10:31
por Itamar M. Lins Jr.
Olá!
No harbour não sei qual a classe pois uso fivewin. Mai deve tambem ter.
Até onde sei FIvewin não tem nada (comunicação extra) é tudo do Harbour ou xHarbour.
Fivewin ´é uma lib gráfica.
Poderá se quiser colocar os códigos "do fivewin" para podermos comprovar.

Saudações,
Itamar M. Lins Jr.

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 11:35
por JoséQuintas
carlaoonline escreveu:MAS até então não tem como saber se determinado relé está realmente ligado ou não (até porque ele pode enviar um sinal pelo Harbour e outro usuario enviar outro sinal pela Web)
No caso , o retorno pode ser um número decimal de 8bits (210 por exemplo) que convertido em binario nos dará algo do tipo "11010010" que seria o status dos relés
Temos sim.
Se o endereço trás a página com toda informação, temos tudo.

Desde o começo, falta ligar, acessar e ver o que aparece.

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 11:47
por Giovany Vecchi
Até onde sei FIvewin não tem nada (comunicação extra) é tudo do Harbour ou xHarbour.
Fivewin ´é uma lib gráfica.
Poderá se quiser colocar os códigos "do fivewin" para podermos comprovar.
No fivewin é a Classe tSocket que esta em .\Class\tSocket.prg

Pesquisando no harbour verifiquei que é a clesse Hb_Socket.
Pesquisa na net que encontra.

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 12:09
por Nascimento
vou aguardar o vendedor, enviar um codigo exemplo, assim que ele me enviar, fica mais facil, pq acredito que seja em html, e da pra usar o hb_socket()
aguardemos as cenas dos proximos capitulos

Comunicação Tcip com Hardwares

Enviado: 03 Mar 2023 21:28
por JoséQuintas
Itamar M. Lins Jr. escreveu:Até onde sei FIvewin não tem nada (comunicação extra) é tudo do Harbour ou xHarbour.
Fivewin ´é uma lib gráfica.
E desde quando lib gráfica não tem outras coisas ?
É o que mais elas tem, pra ficar igual no harbour e xharbour.

Comunicação Tcip com Hardwares

Enviado: 21 Mar 2023 11:22
por Nascimento

Código: Selecionar todos

 resposta :=" “ 
sMensag = chr(255)+chr(170)+chr(0)+chr(1)+chr(0)+chr(255)+chr(255)+chr(03)
hb_inetInit()

socket:=hb_inetConnect("192.168.2.100",60000)
status:=hb_inetstatus(socket)
buffersizes:=hb_inetGetRcvBufSize(socket)

respuetaSend:=hb_inetSendAll(socket,AllTrim(sMensag))

respostaIn:=hb_inetRecvAll(socket,@resposta) 
amigos é assim que deveria funcionar pelo manual acima envio em chr pela tabela ascii que é o equivalente em hex FF AA 00 01 00 FF FF 03