cancel
Showing results for 
Search instead for 
Did you mean: 

Leitura Peso e comunicação Sap via DLL

Former Member
0 Kudos

Boa Noite senhores(as),

Gostaria de saber se algum de voces ja viram desenvovimento em abap que faça a leitura de pesos de balanças comerciais. Hoje temos uma solução via PI, mas não esta tão confiavel. Apenas para saberem, o problema esta em ler a porta de comunicação da balança com o PC, neste caso seria a porta Com1 ou Com2.

Por favor se souberem de algo, grato

Renato

Accepted Solutions (0)

Answers (3)

Answers (3)

henrique_pinto
Active Contributor
0 Kudos

Movendo para o forum correto.

Abs,

Henrique.

Former Member
0 Kudos

Renato, bom dia. Uma fizemos uma especificação para este problema. Se servir para encontrar a solução, segue abaixo.

2.1 u2013 Objetivo:

Desenvolver um modulo de função para capturar o peso da balança toledo, através de leitura na base de dados da balança via placa firex (IP, canal).

2.2 u2013 Função Pesagem:

- Ler a base PCLink6.dll onde esta gravado informações sobre a pesagem, a função abap terá que ler esta dll e extrair o peso que fica na variável NetCanal (peso liquido) Gross_Canal (peso bruto)

- A função recebe o numero da balança e retorna o peso realizado.

- processo:

1 u2013 registrar a dll no windows; (PCLink6.dll)

2 u2013 Cadastrar no R3 (transação SOLE) o CLSID (numero do registro no windows) como exemplo abaixo: nome aplicação OLE (qualquer nome)

3 u2013 Tranzacao SE37 (usar a função: zbalanca) para implentar a codificação abap referente a leitura desta DLL para recuperar o pesol

call function 'zbalanca'

exporting

i_balanca = vl_balanca

importing

e_peso = vl_peso

exceptions

get_propr_error = 1

free_obj_error = 2

create_object_error = 3

balanca_not_found = 4

others = 5.

2.3 u2013 PROGRAMA (PROGRESS) exemplo que esta funcionando hoje, para verificar estrutura estrutura da DLL.

PROCEDURE Seta_Ip EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER IPStr AS CHAR.

DEFINE RETURN PARAMETER Ret_Seta_IP AS LONG.

END PROCEDURE.

PROCEDURE W9091 EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER IP_SETADO AS LONG.

DEFINE INPUT PARAMETER Canal AS CHAR.

DEFINE RETURN PARAMETER Ret_W9091 AS LONG.

END PROCEDURE.

PROCEDURE Update_Canal EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

DEFINE RETURN PARAMETER Ret AS LONG.

END PROCEDURE.

PROCEDURE Update_NoMotion EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

DEFINE INPUT PARAMETER Tempo AS LONG.

DEFINE RETURN PARAMETER Ret AS LONG.

END PROCEDURE.

PROCEDURE WOhaus EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER IPStr AS LONG.

DEFINE INPUT PARAMETER Canal AS CHAR.

DEFINE RETURN PARAMETER Ret_WOhaus AS LONG.

END PROCEDURE.

PROCEDURE Select_Canal EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

DEFINE RETURN PARAMETER Canal_Setado AS LONG.

END PROCEDURE.

PROCEDURE Gross_Canal EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

DEFINE RETURN PARAMETER pBruto AS MEMPTR.

END PROCEDURE.

PROCEDURE Tare_Canal EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

DEFINE RETURN PARAMETER pTara AS MEMPTR.

END PROCEDURE.

PROCEDURE Net_Canal EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

DEFINE RETURN PARAMETER pLiquido AS MEMPTR.

END PROCEDURE.

PROCEDURE Estado_Canal EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

DEFINE RETURN PARAMETER Estado AS MEMPTR.

END PROCEDURE.

PROCEDURE Estado_EmMovimento EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

DEFINE RETURN PARAMETER EmMov AS MEMPTR.

END PROCEDURE.

PROCEDURE DIO_InPort EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER IPStr AS CHAR.

DEFINE RETURN PARAMETER InPort AS LONG.

END PROCEDURE.

PROCEDURE DIO_OutPort EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Nip AS CHAR.

DEFINE INPUT PARAMETER Palavra AS LONG.

DEFINE RETURN PARAMETER ret AS LONG.

END PROCEDURE.

PROCEDURE Close_Canal EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

END PROCEDURE.

PROCEDURE Contadora_Canal EXTERNAL 'PcLink6.dll' PERSISTENT:

DEFINE INPUT PARAMETER Canal AS LONG.

DEFINE RETURN PARAMETER EmMov AS CHAR.

END PROCEDURE.

/*********************************************************************************************************************************************************************************/

DEFINE INPUT PARAMETER Canal AS INTEGER.

DEFINE OUTPUT PARAMETER pBruto AS CHARACTER FORMAT 'x(20)'.

DEFINE OUTPUT PARAMETER pLiquido AS CHARACTER FORMAT 'x(20)'.

DEFINE OUTPUT PARAMETER pEstado AS CHARACTER FORMAT 'x(08)'.

DEFINE OUTPUT PARAMETER pEmMovimento AS CHARACTER FORMAT 'x(01)'.

DEFINE VARIABLE Bruto AS MEMPTR.

DEFINE VARIABLE Liquido AS MEMPTR.

DEFINE VARIABLE Estado AS MEMPTR.

DEFINE VARIABLE EmMov AS MEMPTR.

DEFINE VARIABLE i-cont AS INTEGER.

DEFINE VARIABLE Sel_Canal AS INTEGER.

DEFINE VARIABLE ret AS INTEGER.

SET-SIZE( Bruto ) = 12.

SET-SIZE( Liquido ) = 12.

SET-SIZE( Estado ) = 8.

SET-SIZE( EmMov ) = 1.

ASSIGN pBruto = ''

pLiquido = ''

pEstado = ''

pEmMovimento = ''.

DO i-cont = 1 TO 12 :

PUT-BYTE( Bruto, i-cont ) = ASC( ' ' ).

PUT-BYTE( Liquido, i-cont ) = ASC( ' ' ).

END.

ASSIGN i-cont = 0.

DO i-cont = 1 TO 8 :

PUT-BYTE( Estado, i-cont ) = ASC( ' ' ).

END.

ASSIGN i-cont = 0.

DO i-cont = 1 TO 1 :

PUT-BYTE( EmMov, i-cont ) = ASC( ' ' ).

END.

IF Canal <> -1 THEN DO:

RUN Select_Canal( INPUT Canal , OUTPUT Sel_Canal ).

RUN Update_Canal( INPUT Canal, OUTPUT ret ).

/* RUN Update_NoMotion( INPUT Canal, INPUT 5000, OUTPUT ret ). */

IF ret = 0 THEN DO:

RUN Gross_Canal ( INPUT Canal, OUTPUT Bruto ).

RUN Net_Canal ( INPUT Canal, OUTPUT Liquido ).

RUN Estado_Canal( INPUT Canal, OUTPUT Estado ).

RUN Estado_EmMovimento( INPUT Canal, OUTPUT EmMov ).

END.

END.

ASSIGN pBruto = GET-STRING( Bruto , 1 )

pLiquido = GET-STRING( Liquido, 1 )

pEstado = GET-STRING( Estado , 1 )

pEmMovimento = GET-STRING( EmMov , 1 ).

Return "OK":U.

former_member182114
Active Contributor
0 Kudos

Bom dia Renato,

Veja este artigo que mostra passo-a-passo como fazer uma interface do ABAP para .DLL em C.

http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/101da8af-0ac2-2b10-b382-d39af4f1514c

Com este conhecimento você pode fazer a ponte ABAP x balança, criando um serviço/servidor em C que aceite as chamadas do ABAP usando protocolo RFC.

Atenciosamente, Fernando Da Ró

Former Member
0 Kudos

Fernado, obrigado foi de grande auxílio.

Grato Renato