Está en la página 1de 4

Leer el puerto COMM usando ABAP sin

software de terceros
13619,559

Caso: La báscula de pesaje envía los datos de peso al puerto COMM.

Anteriormente teníamos que escribir un programa .NET usando SAP.NET Connector (usando VB.NET)
y luego desde el lado de SAP tuvimos que crear RFC para que los datos del puerto COMM se utilicen en
SAP.

Ahora no es necesario utilizar el software de terceros (VB.NET, C #, etc.) Con los siguientes pasos
podemos obtener directamente los datos de peso en el puerto COMM a SAP:

Paso 1: cree un módulo de función (código que se proporciona a continuación)

Paso 2: Registre el control ActiveX de Windows MSCOM32.OCX en la PC cliente donde está


conectado el puerto serie de la báscula. Haga clic aquí para obtener los pasos detallados sobre cómo
registrar / activar este control.

Paso 3: Implemente este control en Transaction SOLE en SAP (Cree una entrada
MSCOMMLIB.MSCOMM.1 e ingrese el CLSID. {648A5600-2C6E-101B-82B6-000000000014}

Paso 4: Active este MSCOMM32.OCX con la clave de licencia en la PC cliente donde está conectado el
puerto serie de la báscula.

Abrir RUN ejecutar: regedit

Vaya a u201CHKEY_CLASSES_ROOT \ Licenses \ u201D

Cree un nuevo nombre de clave (carpeta) con '4250E830-6AC2-11cf-8ADB-00AA00C00905'

Dar el VALOR predeterminado: kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun

Reinicie el sistema y ejecute FM. si los datos llegan al puerto serie, obtendrá el resultado.

Código FM:

FUNCTION z_serial_comport.
"---------------------------------------------------------------------
----------"
""""Local Interface:
"" IMPORTING
"" REFERENCE(MODE) TYPE I DEFAULT 0
"" REFERENCE(COMMPORT) TYPE I DEFAULT 1
"" REFERENCE(SETTINGS) TYPE C DEFAULT '2400,N,8,1'
"" REFERENCE(OUTPUT) TYPE C OPTIONAL
"" EXPORTING
"" REFERENCE(INPUT) TYPE C
"" EXCEPTIONS
"" NO_CREATE_OBJECT
"---------------------------------------------------------------------
----------"
TYPE-POOLS: sabc.
INCLUDE ole2incl.
PERFORM init.
PERFORM open_port USING commport settings.
IF mode = 0.
PERFORM read_port
CHANGING input.
ENDIF.
IF mode = 1.
PERFORM write_port
USING output
CHANGING input.
ENDIF.
PERFORM final.
ENDFUNCTION.
DATA: o_obj TYPE ole2_object.
"---------------------------------------------------------------------
----------"
FORM init.
DATA:
wa_repid LIKE sy-repid.
wa_repid = sy-repid.
CALL FUNCTION 'AUTHORITY_CHECK_OLE'
EXPORTING
program = wa_repid
activity = sabc_act_call
application = 'MSCOMMLIB.MSCOMM.1'
EXCEPTIONS
no_authority = 1
activity_unknown = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CREATE OBJECT o_obj 'MSCOMMLib.MSComm.1'.
IF sy-subrc <> 0.
RAISE no_create_object.
ENDIF.
ENDFORM. " Init
"---------------------------------------------------------------------
----------"
FORM open_port USING commport settings.
SET PROPERTY OF o_obj 'CommPort' = commport.
SET PROPERTY OF o_obj 'Settings' = settings.
SET PROPERTY OF o_obj 'InputLen' = 0.
SET PROPERTY OF o_obj 'PortOpen' = 1.
ENDFORM. "open_port
"---------------------------------------------------------------------
----------"
FORM read_port
CHANGING input.
DATA:
wa_buffer TYPE i.
DO 10 TIMES.
GET PROPERTY OF o_obj 'InBufferCount' = wa_buffer.
IF wa_buffer > 0.
GET PROPERTY OF o_obj 'Input' = input.
EXIT.
ENDIF.
ENDDO.
ENDFORM. " read_port
"---------------------------------------------------------------------
----------"
FORM write_port
USING output
CHANGING input.
DATA:
wa_buffer TYPE i.
SET PROPERTY OF o_obj 'Output' = output.
DO 10 TIMES.
GET PROPERTY OF o_obj 'InBufferCount' = wa_buffer.
IF wa_buffer > 0.
GET PROPERTY OF o_obj 'Input' = input.
EXIT.
ENDIF.
ENDDO.
ENDFORM. "write_port
"---------------------------------------------------------------------
----------"
FORM final.
SET PROPERTY OF o_obj 'PortOpen' = 0.
FREE OBJECT o_obj.
ENDFORM. " final

Puede encontrar ayuda adicional en los siguientes enlaces:

http://forums.sdn.sap.com/thread.jspa?threadID=1766170

http://www.sapfans.com/forums/viewtopic.php?f=13&t=145782&start=0&st=0&sk=t&sd=a

Saludos,

Firoz.
SeguirIgual queRSS Feed
Buenas tardes Maria saludarte,

Te envió adjunto la información que me pasaron mas el texto que sigue que alguien lo
paso también.

Primero se debe verificar o instalar dll de windows para la captura de peso.

Adicional se debe realizar las siguientes configuraciones:

- En la transacción SOLE de la aplicación OLE: MSCOMMLIB.MSCOMM.1


- Transacción SM30: Configuración tabla: Z18SC_RSP01 - Tabla Maestro Configuración
Lectura Puerto Serial Balanza/Romana.

para entrar en la sole podemos usar esta vista V_TOLE por la sm30

También podría gustarte