Selecionar tudo
-- Conexão por IP
-- Favor não alterar as informações, nem a ORDEM das chamadas, sem consultar manual ou, o
-- fornecedor da Balança ( Toledo )
-- Qualquer alteração na ordem das chamadas da DLL, pode acarretar erros e, não trazer o peso da balança.
/* PACKAGE BODY RESPONSÁVEL POR TRABALHAR COM NOVA VERSÃO DA BALANÇA TOLEDO, MODELO 6, FIREX */
PACKAGE BODY BL_TOLEDO IS
retorno1 ora_ffi.libhandletype; -- Variável utilizada no corpo do pacote
retorno2 ora_ffi.funchandletype; -- Seta_Ip
retorno3 ora_ffi.funchandletype; -- W9091
retorno4 ora_ffi.funchandletype; -- Select_Canal
retorno5 ora_ffi.funchandletype; -- Close_Canal
retorno6 ora_ffi.funchandletype; -- Update_Canal
retorno7 ora_ffi.funchandletype; -- Gross_Canal
retorno8 ora_ffi.funchandletype; -- Net_Canal
retorno9 ora_ffi.funchandletype; -- Tare_Canal
retorno10 ora_ffi.funchandletype; -- DIO_InBit
retorno11 ora_ffi.funchandletype; -- Update_NoMotion
retorno12 ora_ffi.funchandletype; -- DIO_InPortStr
retorno13 ora_ffi.funchandletype; -- DIO_OutPortStr
retorno14 ora_ffi.funchandletype; -- Estado_EmMovimento
erro_nulo EXCEPTION;
-- *********************************************************************************
FUNCTION S_Seta_Ip (TESTE_HANDLE Ora_Ffi.Funchandletype,
IPStr IN VARCHAR2)
RETURN BINARY_INTEGER;
PRAGMA interface(C, S_Seta_Ip, 11265);
FUNCTION Seta_Ip (IPStr IN VARCHAR2)
RETURN BINARY_INTEGER
IS
v_identificador NUMBER;
erro EXCEPTION;
BEGIN
v_identificador := S_Seta_Ip(retorno2, IPStr);
IF v_identificador = -1 THEN
Message( 'Impossivel setar o IP do Módulo Firex' );
RAISE erro;
END IF;
RETURN (v_identificador);
EXCEPTION
WHEN erro THEN
RAISE erro_nulo;
WHEN OTHERS THEN
message( 'BL.PLL BALANCA.Seta_Ip: ' || SQLERRM );
RAISE FORM_TRIGGER_FAILURE;
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_W9091 (TESTE_HANDLE Ora_Ffi.Funchandletype,
IP_SETADO IN BINARY_INTEGER,
Canal IN VARCHAR2)
RETURN BINARY_INTEGER;
PRAGMA interface(C, S_W9091, 11265);
FUNCTION W9091 (IP_SETADO IN BINARY_INTEGER,
Canal IN VARCHAR2)
RETURN BINARY_INTEGER
IS
v_identificador BINARY_INTEGER;
BEGIN
v_identificador := S_W9091(retorno3, IP_SETADO, Canal);
RETURN (v_identificador);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_Select_Canal (TESTE_HANDLE Ora_Ffi.Funchandletype,
CANAL_SETADO IN BINARY_INTEGER)
RETURN BINARY_INTEGER;
PRAGMA interface(C, S_Select_Canal, 11265);
FUNCTION Select_Canal (CANAL_SETADO IN BINARY_INTEGER)
RETURN BINARY_INTEGER
IS
v_identificador BINARY_INTEGER;
BEGIN
v_identificador := S_Select_Canal(retorno4, CANAL_SETADO);
RETURN (v_identificador);
END;
-- *********************************************************************************
-- *********************************************************************************
PROCEDURE S_Close_Canal (TESTE_HANDLE Ora_Ffi.Funchandletype,
CANAL_SETADO IN BINARY_INTEGER);
PRAGMA interface(C, S_Close_Canal, 11265);
PROCEDURE Close_Canal (CANAL_SETADO IN BINARY_INTEGER)
IS
BEGIN
S_Close_Canal(retorno5, CANAL_SETADO);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_Update_Canal (TESTE_HANDLE Ora_Ffi.Funchandletype,
CANAL_SETADO IN BINARY_INTEGER)
RETURN BINARY_INTEGER;
PRAGMA interface(C, S_Update_Canal, 11265);
FUNCTION Update_Canal (CANAL_SETADO IN BINARY_INTEGER)
RETURN BINARY_INTEGER
IS
v_identificador BINARY_INTEGER;
BEGIN
v_identificador := S_Update_Canal(retorno6, CANAL_SETADO);
RETURN (v_identificador);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_Gross_Canal (TESTE_HANDLE Ora_Ffi.Funchandletype,
CANAL_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2;
PRAGMA interface(C, S_Gross_Canal, 11265);
FUNCTION Gross_Canal (CANAL_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2
IS
v_bruto VARCHAR2(20);
BEGIN
v_bruto := S_Gross_Canal(retorno7, CANAL_SETADO);
RETURN (v_bruto);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_Net_Canal (TESTE_HANDLE Ora_Ffi.Funchandletype,
CANAL_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2;
PRAGMA interface(C, S_Net_Canal, 11265);
FUNCTION Net_Canal (CANAL_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2
IS
v_liquido VARCHAR2(20);
BEGIN
v_liquido := S_Net_Canal(retorno8, CANAL_SETADO);
RETURN (v_liquido);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_Tare_Canal (TESTE_HANDLE Ora_Ffi.Funchandletype,
CANAL_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2;
PRAGMA interface(C, S_Tare_Canal, 11265);
FUNCTION Tare_Canal (CANAL_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2
IS
v_tara VARCHAR2(20);
BEGIN
v_tara := S_Tare_Canal(retorno9, CANAL_SETADO);
RETURN (v_tara);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_DIO_InPortStr (TESTE_HANDLE Ora_Ffi.Funchandletype,
IP_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2;
PRAGMA interface(C, S_DIO_InPortStr, 11265);
FUNCTION DIO_InPortStr (IP_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2
IS
v_identificador VARCHAR2(32000);
BEGIN
v_identificador := S_DIO_InPortStr(retorno12, IP_SETADO);
RETURN (v_identificador);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_DIO_InBit (TESTE_HANDLE Ora_Ffi.Funchandletype,
IP_SETADO IN BINARY_INTEGER,
ID_ENTRADA IN BINARY_INTEGER)
RETURN PLS_INTEGER;
PRAGMA interface(C, S_DIO_InBit, 11265);
FUNCTION DIO_InBit (IP_SETADO IN BINARY_INTEGER, ID_ENTRADA IN BINARY_INTEGER)
RETURN PLS_INTEGER
IS
v_identificador PLS_INTEGER;
BEGIN
v_identificador := S_DIO_InBit(retorno10, IP_SETADO, ID_ENTRADA);
RETURN (v_identificador);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_DIO_OutPortStr (TESTE_HANDLE Ora_Ffi.Funchandletype,
IP_SETADO IN BINARY_INTEGER,
PALAVRA IN CHAR)
RETURN BINARY_INTEGER;
PRAGMA interface(C, S_DIO_OutPortStr, 11265);
FUNCTION DIO_OutPortStr (IP_SETADO IN BINARY_INTEGER, PALAVRA IN CHAR)
RETURN BINARY_INTEGER
IS
v_identificador BINARY_INTEGER;
BEGIN
v_identificador := S_DIO_OutPortStr(retorno13, IP_SETADO, PALAVRA);
RETURN (v_identificador);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION S_Update_NoMotion (TESTE_HANDLE Ora_Ffi.Funchandletype,
CANAL_SETADO IN BINARY_INTEGER,
TEMPO IN BINARY_INTEGER)
RETURN BINARY_INTEGER;
PRAGMA interface(C, S_Update_NoMotion, 11265);
FUNCTION Update_NoMotion (CANAL_SETADO IN BINARY_INTEGER
,TEMPO IN BINARY_INTEGER)
RETURN BINARY_INTEGER
IS
v_identificador BINARY_INTEGER;
BEGIN
v_identificador := S_Update_NoMotion(retorno11, CANAL_SETADO, 0);
RETURN (v_identificador);
END;
-- *********************************************************************************
-- *********************************************************************************
FUNCTION Estado_EmMovimento (TESTE_HANDLE Ora_Ffi.Funchandletype,
CANAL_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2;
PRAGMA interface(C, Estado_EmMovimento, 11265);
FUNCTION Estado_EmMovimento (CANAL_SETADO IN BINARY_INTEGER)
RETURN VARCHAR2
IS
v_identificador BINARY_INTEGER;
BEGIN
v_identificador := Estado_EmMovimento(retorno14, CANAL_SETADO);
RETURN (v_identificador);
END;
-- *********************************************************************************
-- *********************************************************************************
-- Procedimento Padrão para leitura de peso
PROCEDURE PR_LER_PESO (peso_bruto IN OUT BINARY_INTEGER
,peso_liquido IN OUT BINARY_INTEGER
,peso_tara IN OUT BINARY_INTEGER
,IPStr IN VARCHAR2
,Canal IN VARCHAR2
,p_open IN VARCHAR2)
IS
IP_SETADO BINARY_INTEGER;
CANAL_SETADO BINARY_INTEGER;
v_result BINARY_INTEGER;
v_estado_mov VARCHAR2(01);
v_bruto VARCHAR2(20);
v_liquido VARCHAR2(20);
v_tara VARCHAR2(20);
v_conta NUMBER := 0;
V_CONTA1 number := 0;
--
v_sensor_ativo VARCHAR2(01);
v_porta_entrada NUMBER;
VALIDA_SENSOR VARCHAR2(32000) := NULL;
ativa_saida_0 BINARY_INTEGER;
--
msg_erro VARCHAR2(1000);
erro_conexao EXCEPTION;
erro_sensor EXCEPTION;
erro_estado_mov EXCEPTION;
v_flg_obstaculo VARCHAR2(01);
--
v_erro VARCHAR2(1000);
erro EXCEPTION;
BEGIN
ABREDLL(P_OPEN);
-- Executar a conexão
IP_SETADO := Seta_Ip(IPStr);
IF IP_SETADO >= 0 THEN
CANAL_SETADO := W9091(IP_SETADO, Canal);
IF CANAL_SETADO < 0 THEN
CLEAR_MESSAGE;
MESSAGE('ERRO NO MOMENTO DE SETAR O CANAL (W9091)!') ;
WHILE CANAL_SETADO < 0 AND V_CONTA <= 100 LOOP
CANAL_SETADO := W9091(IP_SETADO, Canal);
v_conta := v_conta + 1;
END LOOP;
IF CANAL_SETADO < 0 THEN
msg_erro := 'ERRO NO MOMENTO DE SETAR O CANAL (W9091)!: '||CANAL_SETADO;
RAISE erro_conexao;
END IF;
END IF;
ELSE
msg_erro := 'ERRO NO MOMENTO DE SETAR O IP (Seta_Ip)!: '||IP_SETADO;
RAISE erro_conexao;
END IF;
-- Limpa campos do peso
v_bruto := 0;
v_liquido := 0;
v_tara := 0;
v_result := Select_Canal(CANAL_SETADO);
IF v_result < 0 THEN
msg_erro := 'ERRO NO MOMENTO DE SELECIONAR O CANAL (Select_Canal)!';
RAISE erro_conexao;
END IF;
V_CONTA1 := 0;
--
IF v_erro IS NOT NULL THEN
RAISE erro;
END IF;
-- Se o veículo estiver posicionado corretamente na balança
IF msg_erro IS NULL THEN
v_result := Update_Canal(CANAL_SETADO);
IF v_result < 0 THEN
msg_erro := 'ERRO NO MOMENTO DE ATUALIZAR O CANAL (Update_Canal)!';
RAISE erro_conexao;
END IF;
v_bruto := Gross_Canal(CANAL_SETADO);
v_tara := Tare_Canal(CANAL_SETADO);
v_liquido := 0;
peso_bruto := TO_NUMBER(NVL(v_bruto,0));
peso_tara := TO_NUMBER(NVL(v_tara,0));
peso_liquido := TO_NUMBER(NVL(v_liquido,0));
END IF;
-- Libera Conexão
Close_Canal(CANAL_SETADO);
EXCEPTION
WHEN erro_conexao THEN
MESSAGE('Erro na conexão da Balança: '||msg_erro);
MESSAGE('Erro na conexão da Balança: '||msg_erro);
-- Libera Conexão
Close_Canal(CANAL_SETADO);
RAISE FORM_TRIGGER_FAILURE;
WHEN erro_sensor THEN
MESSAGE(msg_erro);
MESSAGE(msg_erro);
-- Libera Conexão
Close_Canal(CANAL_SETADO);
RAISE FORM_TRIGGER_FAILURE;
WHEN erro THEN
MESSAGE(v_erro);
MESSAGE(v_erro);
-- Libera Conexão
Close_Canal(CANAL_SETADO);
RAISE FORM_TRIGGER_FAILURE;
WHEN erro_estado_mov THEN
MESSAGE(msg_erro);
MESSAGE(msg_erro);
RAISE FORM_TRIGGER_FAILURE;
WHEN OTHERS THEN
MESSAGE('PR_LER_PESO : ' || SQLERRM);
MESSAGE('PR_LER_PESO : ' || SQLERRM);
-- Libera Conexão
Close_Canal(CANAL_SETADO);
RAISE FORM_TRIGGER_FAILURE;
END PR_LER_PESO;
PROCEDURE ABREDLL (P_OPEN VARCHAR2)
IS
vout VARCHAR2(01);
BEGIN
-------------------------------------------------------------------------------------------------------------------------------
/* CONSIDERAÇÕES IMPORTANTÍSSIMAS SOBRE A DLL */
-------------------------------------------------------------------------------------------------------------------------------
-- DLL À SER UTILIZADA!
-------------------------------------------------------------------------------------------------------------------------------
-- UTILIZAR A QUE O PROGRAMA DE INSTALAÇÃO FORNECE. JOGAR EM C:\WINDOWS\SYSTEM32 (PCLINK6.DLL).
--
-- ****************************************************************************************************************************
-- *** NÃO ALTERAR A ORDEM DAS PROCEDURES E FUNÇÕES ABAIXO (PRINCIPALMENTE DAS CHAMADAS) !!!! ***
-- ****************************************************************************************************************************
--- Área Global
IF P_OPEN = 'não' THEN
BEGIN
retorno1 := Ora_Ffi.Load_Library(:PARAMETER.P_DIRETORIO_padrão_DLL, :PARAMETER.P_NOME_padrão_DLL);
-- Place the first error on the TOOL_ERR stack into the package header variables available for it.
EXCEPTION
WHEN OTHERS THEN
FFI_ERROR := TRUE;
FFI_Error_Text := TOOL_ERR.MESSAGE;
FFI_Error_Code := TOOL_ERR.CODE;
FOR iErrors IN 1..TOOL_ERR.NERRORS LOOP
Message('1-Erro ao localizar e abrir a DLL('||:PARAMETER.P_NOME_padrão_DLL||'): '||chr(10)||
'Verifique o caminho informado na FUNÇÃO e, se o arquivo encontra-se no diretório. '||chr(10)||
'Erro:'||chr(13)||chr(10)||
TOOL_ERR.MESSAGE);
TOOL_ERR.POP;
END LOOP;
TOOL_ERR.CLEAR;
END;
ELSE
BEGIN
retorno1 := ora_ffi.find_library(:PARAMETER.P_NOME_padrão_DLL);
-- Place the first error on the TOOL_ERR stack into the package header variables available for it.
EXCEPTION
WHEN OTHERS THEN
FFI_ERROR := TRUE;
FFI_Error_Text := TOOL_ERR.MESSAGE;
FFI_Error_Code := TOOL_ERR.CODE;
FOR iErrors IN 1..TOOL_ERR.NERRORS LOOP
Message('2-Erro ao localizar e abrir a DLL('||:PARAMETER.P_NOME_padrão_DLL||'): '||chr(10)||
'Verifique o caminho informado na FUNÇÃO e, se o arquivo encontra-se no diretório. '||chr(10)||
'Erro:'||chr(13)||chr(10)||
TOOL_ERR.MESSAGE);
TOOL_ERR.POP;
END LOOP;
TOOL_ERR.CLEAR;
END;
END IF;
-- *********************************************************************************
-- Utilizado para função Seta_Ip
/* Registra a função da DLL. */
retorno2 := Ora_Ffi.Register_Function(retorno1, 'Seta_Ip', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno2, Ora_Ffi.C_CHAR_PTR);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno2, Ora_Ffi.C_INT);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função W9091
/* Registra a função da DLL. */
retorno3 := Ora_Ffi.Register_Function(retorno1, 'W9091', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno3, Ora_Ffi.C_INT);
Ora_Ffi.Register_Parameter (retorno3, Ora_Ffi.C_CHAR_PTR);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno3, Ora_Ffi.C_INT);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função Select_Canal
/* Registra a função da DLL. */
retorno4 := Ora_Ffi.Register_Function(retorno1, 'Select_Canal', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno4, Ora_Ffi.C_INT);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno4, Ora_Ffi.C_INT);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função Close_Canal
/* Registra a função da DLL. */
retorno5 := Ora_Ffi.Register_Function(retorno1, 'Close_Canal', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno5, Ora_Ffi.C_INT);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função Update_Canal
/* Registra a função da DLL. */
retorno6 := Ora_Ffi.Register_Function(retorno1, 'Update_Canal', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno6, Ora_Ffi.C_INT);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno6, Ora_Ffi.C_INT);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função Gross_Canal
/* Registra a função da DLL. */
retorno7 := Ora_Ffi.Register_Function(retorno1, 'Gross_Canal', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno7, Ora_Ffi.C_INT);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno7, Ora_Ffi.C_CHAR_PTR);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função Net_Canal
/* Registra a função da DLL. */
retorno8 := Ora_Ffi.Register_Function(retorno1, 'Net_Canal', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno8, Ora_Ffi.C_INT);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno8, Ora_Ffi.C_CHAR_PTR);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função Tare_Canal
/* Registra a função da DLL. */
retorno9 := Ora_Ffi.Register_Function(retorno1, 'Tare_Canal', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno9, Ora_Ffi.C_INT);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno9, Ora_Ffi.C_CHAR_PTR);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função DIO_InBit
/* Registra a função da DLL. */
retorno10 := Ora_Ffi.Register_Function(retorno1, 'DIO_InBit', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno10, Ora_Ffi.C_INT);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno10, Ora_Ffi.C_INT);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função Update_NoMotion
/* Registra a função da DLL. */
retorno11 := Ora_Ffi.Register_Function(retorno1, 'Update_NoMotion', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno11, Ora_Ffi.C_INT);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno11, Ora_Ffi.C_INT);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função DIO_InPortStr
/* Registra a função da DLL. */
retorno12 := Ora_Ffi.Register_Function(retorno1, 'DIO_InPortStr', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno12, Ora_Ffi.C_INT);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno12, Ora_Ffi.C_CHAR_PTR);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função DIO_OutPortStr
/* Registra a função da DLL. */
retorno13 := Ora_Ffi.Register_Function(retorno1, 'DIO_OutPortStr', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno13, Ora_Ffi.C_INT);
Ora_Ffi.Register_Parameter (retorno13, Ora_Ffi.C_CHAR_PTR);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno13, Ora_Ffi.C_INT);
-- *********************************************************************************
-- *********************************************************************************
-- Utilizado para função Estado_EmMovimento
/* Registra a função da DLL. */
retorno14 := Ora_Ffi.Register_Function(retorno1, 'Estado_EmMovimento', Ora_Ffi.C_Std);
/* Registra a variável da função e da DLL. */
Ora_Ffi.Register_Parameter (retorno14, Ora_Ffi.C_INT);
/* Registra o Tipo de Retorno da DLL. */
Ora_Ffi.Register_Return (retorno14, Ora_Ffi.C_CHAR_PTR);
-- *********************************************************************************
exception
when erro_nulo then
raise form_trigger_failure;
END;
END BL_TOLEDO;