Abap Bascula
Abap Bascula
EXPORTING
commport
= l_puerto"g_commport "'1'
settings
= '9600,N,8,1'
close_port
= 'X'
IMPORTING
peso
= l_peso
impud
= lv_edstrin
EXCEPTIONS
no_create_object = 1
no_authority
= 2
OTHERS
= 3.
FUNCTION zfmabap_captura_pserial.
*"---------------------------------------------------------------------*"*"Interfase local
*" IMPORTING
*"
REFERENCE(COMMPORT) TYPE C DEFAULT '1'
*"
REFERENCE(SETTINGS) TYPE CHAR10 DEFAULT '9600,N,8,1'
*"
REFERENCE(CLOSE_PORT) TYPE C DEFAULT 'X'
*" EXPORTING
*"
REFERENCE(PESO) TYPE DZMENG
*"
REFERENCE(IMPUD) TYPE CHAR30
*" EXCEPTIONS
*"
NO_CREATE_OBJECT
*"
NO_AUTHORITY
*"---------------------------------------------------------------------*
ENDFUNCTION.
*****************************************
*LZFGABAP001F01
*****************************************
*----------------------------------------------------------------------*
***INCLUDE LZBASCULAF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&
Form get_settings
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_COMM
text
*
-->P_SETT
text
*----------------------------------------------------------------------*
FORM get_settings.
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file
= 'C:\FC1\SCALE.INI'
RECEIVING
result
= g_resp
EXCEPTIONS
cntl_error
= 1
error_no_gui
= 2
wrong_parameter
= 3
not_supported_by_gui = 4
OTHERS
= 5.
IF g_resp = 'X'.
REFRESH ti_settings.
CLEAR ti_settings.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename
= 'C:\FC1\SCALE.INI'
filetype
= 'ASC'
has_field_separator
= space
CHANGING
data_tab
= ti_settings[]
EXCEPTIONS
file_open_error
= 1
file_read_error
= 2
no_batch
= 3
gui_refuse_filetransfer = 4
invalid_type
= 5
no_authority
= 6
unknown_error
= 7
bad_data_format
= 8
header_not_allowed
= 9
separator_not_allowed = 10
header_too_long
= 11
unknown_dp_error
= 12
access_denied
= 13
dp_out_of_memory
= 14
disk_full
= 15
dp_timeout
= 16
not_supported_by_gui
= 17
error_no_gui
= 18
OTHERS
= 19.
IF sy-subrc = 6.
RAISE no_authority.
ENDIF.
LOOP AT ti_settings.
IF sy-tabix = 1.
gcom_1o2 = ti_settings-value(1).
ENDIF.
IF sy-tabix = 2.
gcom_set = ti_settings-value.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
"get_settings
*---------------------------------------------------------------------*
* FORM open_port *
*---------------------------------------------------------------------*
* Abre el puerto de comunicacin usando la configuracin predefinida.
*---------------------------------------------------------------------*
* --> COMMPORT *
* --> SETTINGS *
*---------------------------------------------------------------------*
FORM open_port USING p_comm TYPE c
p_sett TYPE char10
CHANGING pf_opened.
DATA ls_result TYPE string.
CLEAR pf_opened.
GET PROPERTY OF o_obj 'PortOpen' = ls_result.
IF ls_result NE '1'.
SET
SET
ro.bits
SET
fer
SET
"nro. de puerto
"ratio baud/paridad/nro. bits/n
"lee todo el contenido del buf
"True = 1 abre el puerto
IF sy-subrc NE 0.
MOVE 'X' TO pf_opened.
ENDIF.
ENDIF.
ENDFORM. "open_port
*---------------------------------------------------------------------*
* FORM read_port *
*---------------------------------------------------------------------*
* Lee la info ingresada en el puerto de comunicacin
*---------------------------------------------------------------------*
* --> INPUT *
*---------------------------------------------------------------------*
FORM read_port CHANGING pf_peso TYPE dzmeng
p_impud type char30.
TYPES: BEGIN OF ty_data,
campo TYPE char8,
END OF ty_data.
DATA: wa_data TYPE ty_data,
it_data TYPE STANDARD TABLE OF ty_data.
DATA:
lc_i
lc_peso(20)
input(30)
li_buffer
li_lines
TYPE
TYPE
TYPE
TYPE
TYPE
i,
c,
c,
i,
syindex.
DO 10 TIMES.
DO 10 TIMES.
SET PROPERTY OF o_obj 'Output' = '%p'. "Envo parametro PRINT para obtener p
eso en el puerto
GET PROPERTY OF o_obj 'Input' = input. "Capturo el peso del puerto
lc_i = STRLEN( input ).
IF lc_i > 10.
EXIT.
ENDIF.
ENDDO.
p_impud = input.
SPLIT input AT space INTO TABLE it_data.
DELETE it_data INDEX 1.
li_lines = LINES( it_data ).
IF li_lines GT 0.
DELETE it_data INDEX li_lines.
ENDIF.
LOOP AT it_data INTO wa_data.
IF wa_data-campo CO '0123456789. '.
lc_peso = wa_data-campo.
IF lc_peso IS NOT INITIAL.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
pf_peso = lc_peso.
IF pf_peso < 0.
pf_peso = 0.
SET PROPERTY OF o_obj 'Output' = '%z'.
EXIT.
ENDIF.
IF pf_peso NE 0.
EXIT.
ENDIF.
ENDDO.
ENDFORM. " read_port
*&---------------------------------------------------------------------*
*& Form final
*&---------------------------------------------------------------------*
* Libera el objeto asociado al puerto de comunicacin
*----------------------------------------------------------------------*
FORM final.
SET PROPERTY OF o_obj 'PortOpen' = 0.
FREE OBJECT o_obj.
CLEAR o_obj.
ENDFORM. " final
*&---------------------------------------------------------------------*
*& Form Init
*&---------------------------------------------------------------------*
* - Verificacin objeto de autorizacin.
*
*
*
p_comm
AND p_sett
gcom_1o2 =
gcom_set =
ENDIF.
IS NOT INITIAL
IS NOT INITIAL.
p_comm.
p_sett.
ENDIF.
ENDFORM.
" INICIO
*&---------------------------------------------------------------------*
*&
Form ABRE_PORT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM abre_port TABLES p_return.
SET PROPERTY OF o_obj 'CommPort' = gcom_1o2. "nro. de puerto
SET PROPERTY OF o_obj 'Settings' = gcom_set. "ratio baud/paridad/nro. bits/n
ro.bits parada
SET PROPERTY OF o_obj 'InputLen' = 0.
"lee todo el contenido del buffe
r
SET PROPERTY OF o_obj 'PortOpen' = 1.
"True = 1 abre el puerto
IF sy-subrc <> 0.
* Mensaje: No se puede abrir el puerto &1 &2
PERFORM load_mesg TABLES p_return
USING 'E'
" TYPE
'ZBAL' " ID
'002'
" NUMBER
gcom_1o2 " MESSAGE_V1 Puerto
gcom_set " MESSAGE_V2 Configuracion puerto
''
''.
ENDIF.
ENDFORM.
" ABRE_PORT
*&---------------------------------------------------------------------*
*&
Form LEER_PORT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
<--P_PESO text
*
<--P_ERROR text
*----------------------------------------------------------------------*
FORM leer_port TABLES p_return
CHANGING peso
p_l_err.
TYPES: BEGIN OF ty_data,
campo TYPE char8,
END OF ty_data.
DATA: wa_data TYPE ty_data,
it_data TYPE STANDARD TABLE OF ty_data,
wa_data_aux TYPE ty_data,
it_data_aux TYPE STANDARD TABLE OF ty_data,
l_cont_err TYPE i, "Contador de lecturas error a la bascula
l_err.
DATA:
lc_i
lc_i2
lc_peso(20)
input(100)
input2(100)
l_tabix
TYPE i,
TYPE i,
TYPE c,
TYPE c,
TYPE c,
TYPE sy-tabix.
CLEAR: l_cont_err,
p_l_err,
wa_data,
it_data[],
lc_peso.
DO 30000000 TIMES.
CLEAR: input,
lc_i,
input2,
lc_i2.
GET PROPERTY OF o_obj 'Input' = input. "Captura peso en bascula
IF input IS NOT INITIAL.
lc_i = STRLEN( input ).
input2 = input.
CONDENSE input2 NO-GAPS.
lc_i2 = STRLEN( input2 ). "Si lc_i2 = 30 es lectura errada
ENDIF.
ENDLOOP.
ENDIF.
**** Busco el valor de la pesada
***
LOOP AT it_data INTO wa_data.
***
CONDENSE wa_data-campo NO-GAPS.
***
IF wa_data-campo CO '0123456789. '
***
AND wa_data-campo <> '0.00'
***
AND wa_data-campo <> '0.000'.
***
FIND FIRST OCCURRENCE OF '.' IN wa_data-campo.
***
IF sy-subrc = 0.
***
lc_peso = wa_data-campo.
***
IF lc_peso IS NOT INITIAL.
***
EXIT.
***
ENDIF.
***
ENDIF.
***
ENDIF.
***
ENDLOOP.
peso = lc_peso.
IF peso <= 0.
peso = 0.
ENDIF.
ENDIF.
ENDFORM.
" LEER_PORT
*&---------------------------------------------------------------------*
*&
Form CERRAR_PORT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM cerrar_port .
* SET PROPERTY OF o_obj 'InputLen' = 1.
SET PROPERTY OF o_obj 'PortOpen' = 0.
CLEAR o_obj.
FREE OBJECT o_obj.
ENDFORM.
" CERRAR_PORT
*&---------------------------------------------------------------------*
*&
Form LOAD_MESG
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_0407 text
*
-->P_0408 text
*
-->P_0409 text
*
-->P_P_COMM text
*
-->P_P_SETT text
*----------------------------------------------------------------------*
FORM load_mesg TABLES p_it_return " TYPE BAPIRET2 " ZTT_BAPIRET2
USING p_type
p_clase
p_number
p_mess1 " MESSAGE_V1 Puerto
p_mess2 " MESSAGE_V2 Configuracion puerto
p_mess3
p_mess4.
" LOAD_MESG