Comunicação Tcip com Hardwares

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

Moderador: Moderadores

Avatar do usuário
carlaoonline
Usuário Nível 3
Usuário Nível 3
Mensagens: 190
Registrado em: 24 Ago 2014 22:38
Localização: Porto Alegre-RS

Comunicação Tcip com Hardwares

Mensagem 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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Comunicação Tcip com Hardwares

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Comunicação Tcip com Hardwares

Mensagem por JoséQuintas »

test.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Comunicação Tcip com Hardwares

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
carlaoonline
Usuário Nível 3
Usuário Nível 3
Mensagens: 190
Registrado em: 24 Ago 2014 22:38
Localização: Porto Alegre-RS

Comunicação Tcip com Hardwares

Mensagem 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
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Comunicação Tcip com Hardwares

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Comunicação Tcip com Hardwares

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Giovany Vecchi
Usuário Nível 1
Usuário Nível 1
Mensagens: 19
Registrado em: 28 Mai 2014 17:32
Localização: Jales / SP

Comunicação Tcip com Hardwares

Mensagem 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.
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

Comunicação Tcip com Hardwares

Mensagem 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
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Comunicação Tcip com Hardwares

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
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

Comunicação Tcip com Hardwares

Mensagem 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
Editado pela última vez por JoséQuintas em 21 Mar 2023 14:11, em um total de 2 vezes.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Responder