Olá pessoal!
Gostaria de saber se alguém jé acessou a porta serial (COM1)???
Na verdade tenho um equipamento conectado na COM1 e quero obter dados da porta!???
Acesso a porta Serial
- dr_gori
- Moderador
- Mensagens: 5026
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
No Forms, eu já vi várias vezes situações como essa.
Na verdade, o forms não conecta na serial. Quem faz isso é uma DLL (em C, Delphi, etc) e o Forms se conecta nela atravez do ORA_FFI. (que é uma interface entre a DLL e o forms)
No banco, eu nunca vi, mas creio que seja da mesma forma:
* Um programa fica escutando a porta COM e envia a informação para o oracle ler. (talvez até via texto seja possível)

Na verdade, o forms não conecta na serial. Quem faz isso é uma DLL (em C, Delphi, etc) e o Forms se conecta nela atravez do ORA_FFI. (que é uma interface entre a DLL e o forms)
No banco, eu nunca vi, mas creio que seja da mesma forma:
* Um programa fica escutando a porta COM e envia a informação para o oracle ler. (talvez até via texto seja possível)

-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Rafael O. Genaro
Olá pessoal!
Aproveitando o tópico, estou com um probleminha para realizar a transmissão de dados via porta serial (por enquanto, estou utilizando o componente MSCOMM.OCX, importando as interfaces OLE para o forms - Menu Program > Import OLE Library Interfaces. Se alguém tiver uma outra sugestão, aceito qualquer coisa
).
Eis a situação:
Eu preciso enviar informações (dados binários) para uma determinada porta serial.
Consegui fazer tudo funcionar quase perfeitamente, utilizando o método Output da biblioteca MSCOMM.OCX, apenas com um problema:
Quando eu tento enviar o byte 0x00/chr(0), ele é ignorado pela biblioteca (enviando os dados byte a byte). Se eu tentar enviar os dados em uma única string, todos os bytes a partir do caracter 0x00 são ignorados.
Andei invesitgando, e aparentemente o motivo é que strings em Visual Basic (linguagem em que o componente foi feito), são finalizadas com este caracter.
Alguém por acaso já se deparou com este problema? Ou por acaso teria alguma alternativa?
Abaixo está a minha procedure:
Valeu!
Aproveitando o tópico, estou com um probleminha para realizar a transmissão de dados via porta serial (por enquanto, estou utilizando o componente MSCOMM.OCX, importando as interfaces OLE para o forms - Menu Program > Import OLE Library Interfaces. Se alguém tiver uma outra sugestão, aceito qualquer coisa

Eis a situação:
Eu preciso enviar informações (dados binários) para uma determinada porta serial.
Consegui fazer tudo funcionar quase perfeitamente, utilizando o método Output da biblioteca MSCOMM.OCX, apenas com um problema:
Quando eu tento enviar o byte 0x00/chr(0), ele é ignorado pela biblioteca (enviando os dados byte a byte). Se eu tentar enviar os dados em uma única string, todos os bytes a partir do caracter 0x00 são ignorados.
Andei invesitgando, e aparentemente o motivo é que strings em Visual Basic (linguagem em que o componente foi feito), são finalizadas com este caracter.
Alguém por acaso já se deparou com este problema? Ou por acaso teria alguma alternativa?
Abaixo está a minha procedure:
procedure p_envida_dados
( p_porta in number
) is
comm_hnd ole2.obj_type;
begin
synchronize;
comm_hnd := ole2.create_obj('MSCOMMLib.MSComm');
MSCOMMLib_IMSComm.CommPort( comm_hnd, p_porta ); -- Define a porta serial
MSCOMMLib_IMSComm.Settings( comm_hnd, '9600,N,8,2' ); -- Define as propriedades de conexão
MSCOMMLib_IMSComm.PortOpen( comm_hnd, 1 ); -- Abre a porta
ret := MSCOMMLib_IMSComm.PortOpen( comm_hnd ); -- Verifica se a porta foi aberta
if ret = 0 then
msg('Erro ao abrir a conexão!', 'I', true);
end if;
-- Define demais parâmetros da conexão
MSCOMMLib_IMSComm.InputMode ( comm_hnd, MSCOMMLib_Constants.comInputModeBinary );
MSCOMMLib_IMSComm.NullDiscard( comm_hnd, 1 );
MSCOMMLib_IMSComm.InputLen ( comm_hnd, 0 );
MSCOMMLib_IMSComm.EOFEnable ( comm_hnd, 26 );
MSCOMMLib_IMSComm.DTREnable ( comm_hnd, 0 );
MSCOMMLib_IMSComm.RTSEnable ( comm_hnd, 0 );
--
dbms_lock.sleep(seconds => .5);
MSCOMMLib_IMSComm.InBufferCount( comm_hnd, 0 ); -- Limpa o buffer de entrada
-- teste 01 - Enviando uma única string -- InputLen = 0
-- Neste caso, só o byte "02" é enviado até o hardware
MSCOMMLib_IMSComm.Output( comm_hnd, to_variant(utl_raw.cast_to_varchar2('020005FF')));
MSCOMMLib_IMSComm.InBufferCount( comm_hnd, 0 ); -- Limpa o buffer de entrada
--
-- teste 02 - Enviando a string byte a byte -- InputLen = 1
-- Neste caso, chegam até o hardware os caracteres "0205FF" - O caracter 00 é ignorado
MSCOMMLib_IMSComm.Output( comm_hnd, to_variant(utl_raw.cast_to_varchar2('02')));
dbms_lock.sleep(seconds => .1);
MSCOMMLib_IMSComm.Output( comm_hnd, to_variant(utl_raw.cast_to_varchar2('00')));
dbms_lock.sleep(seconds => .1);
MSCOMMLib_IMSComm.Output( comm_hnd, to_variant(utl_raw.cast_to_varchar2('05')));
dbms_lock.sleep(seconds => .1);
MSCOMMLib_IMSComm.Output( comm_hnd, to_variant(utl_raw.cast_to_varchar2('FF')));
dbms_lock.sleep(seconds => .1);
MSCOMMLib_IMSComm.InBufferCount( comm_hnd, 0 ); -- Limpa o buffer de entrada
--
-- teste 03 - chamando a função Set_Ole forçando o byte a ser tratado
-- como numérico -- InputLen = 1
-- Neste caso, o forms dispara o erro 0x80020005 - Type mismatch
MSCOMMLib_IMSComm.Output( comm_hnd, to_variant(utl_raw.cast_to_varchar2('02')));
dbms_lock.sleep(seconds => .1);
-- tratmento especial para o byte 00
Init_OleArgs(1);
Set_Ole(comm_hnd, 25, 0, VT_R8);
--
dbms_lock.sleep(seconds => .1);
MSCOMMLib_IMSComm.Output( comm_hnd, to_variant(utl_raw.cast_to_varchar2('05')));
dbms_lock.sleep(seconds => .1);
MSCOMMLib_IMSComm.Output( comm_hnd, to_variant(utl_raw.cast_to_varchar2('FF')));
dbms_lock.sleep(seconds => .1);
MSCOMMLib_IMSComm.InBufferCount( comm_hnd, 0 ); -- Limpa o buffer de entrada
--
MSCOMMLib_IMSComm.PortOpen( comm_hnd, 0); -- Fecha a porta
ole2.release_obj( comm_hnd ); -- Libera o objeto OLE
end;
-
- Rank: DBA Sênior
- Mensagens: 323
- Registrado em: Qui, 21 Set 2006 10:21 am
- Localização: Barala - TT
Só uma sugestão, você pode utilizar Java para ler e tratar os dados retornados pela serial. O Java é bem perfomático para uma tarefa dessas, se quiser saber mais sobre comunicação serial no Java é só acessar aqui: http://www.viamais.net/blog/?cat=6
Depois da aplicação pronta e compilada em jar dá para você integrar ao seu forms.
Depois da aplicação pronta e compilada em jar dá para você integrar ao seu forms.
-
- Rank: Programador Júnior
- Mensagens: 29
- Registrado em: Qua, 13 Ago 2008 6:57 pm
- Localização: Blumenau - SC
Estou com um problema acho que vocês podem me ajudar, criei uma classer java que se comunica com a porta serial com6, estou utilizando o comm.jar para se comunicar com a porta, o problema é que preciso passar para o oracle uma dll, como fazer isso? Obrigado.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Google [Bot] e 1 visitante