`
keynesc
  • 浏览: 3373 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

ABAP Function module文档生成工具

阅读更多
用来生成function module的HTML格式的文档
*&---------------------------------------------------------------------*
*& Report  ZABAPDOC
*&
*&---------------------------------------------------------------------*
*& This report generate HTML files containing the API information about
*& the selected function modules.
*& SDN https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/u/251708914
*& This program has been developed via the ABAP Eclipse Editor
*&---------------------------------------------------------------------*

REPORT  zabapdoc MESSAGE-ID eu.

TYPE-POOLS:
  sscr.

TABLES:
  tadir,
  tlibt,
  trdir.

CLASS:
  lcl_source_scan DEFINITION DEFERRED.

DATA:
  lo_sscan   TYPE REF TO lcl_source_scan,
  lv_appl    TYPE taplt-appl,
  tofolder_string TYPE string.

SELECTION-SCREEN: BEGIN OF BLOCK a11 WITH FRAME TITLE a11.
SELECT-OPTIONS:    devclass FOR tadir-devclass,
                   funcgrp  FOR tlibt-area.
SELECTION-SCREEN: END OF BLOCK a11,
                  BEGIN OF BLOCK a20 WITH FRAME TITLE a20.
PARAMETERS:       funcmod     TYPE xfeld AS CHECKBOX DEFAULT 'X' ,
                  tofolder    TYPE char255 DEFAULT 'C:\TEMP'.
SELECTION-SCREEN: END OF BLOCK a20.

*----------------------------------------------------------------------*
*       CLASS lcx_scan_exceptions DEFINITION
*----------------------------------------------------------------------*
*       Exceptions for source scanning
*----------------------------------------------------------------------*
CLASS lcx_scan_exceptions DEFINITION INHERITING FROM cx_static_check.
ENDCLASS.                    "lcx_scan_exceptions DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_source_scan DEFINITION
*----------------------------------------------------------------------*
*       ABAP source scanner
*----------------------------------------------------------------------*
CLASS lcl_source_scan DEFINITION.
  PUBLIC SECTION.
    METHODS:
      constructor,

      f4_class
        CHANGING
          cv_class_name TYPE clike,

      f4_function_group
        IMPORTING
          iv_group_name TYPE clike,

      f4_repname
        CHANGING
          cv_repname TYPE clike,

      start.

  PROTECTED SECTION.
    TYPES:
      BEGIN OF ty_ls_objname,
        report TYPE sy-repid,
        dynnr  TYPE sy-dynnr,
      END OF ty_ls_objname.

    TYPES:
      BEGIN OF ts_comment_tab,
        report TYPE sy-repid,
        source TYPE abaptxt255,
      END OF ts_comment_tab.

    DATA:
      gv_hit_count  TYPE i,
      gv_sstring    TYPE string,
      gv_dynp_found TYPE xfeld,
      gv_vers_found TYPE xfeld,
      gt_object     TYPE STANDARD TABLE OF tadir-obj_name,
      gt_vrsd       TYPE HASHED TABLE OF vrsd
                      WITH UNIQUE KEY objname versno,
      gt_results    TYPE TABLE OF ts_comment_tab
                      .


    CONSTANTS:
      gc_x TYPE xfeld VALUE 'X'.

    METHODS:

      display,

      get_version_numbers
        IMPORTING
          iv_report TYPE clike
          iv_dynpro TYPE clike OPTIONAL
        RETURNING value(rt_vrsd) LIKE gt_vrsd,

      get_source_names,

      get_source_by_version
        IMPORTING
          iv_report TYPE clike
          iv_dynpro TYPE clike OPTIONAL
          iv_versno TYPE vrsd-versno
        RETURNING value(rt_abap) TYPE abaptxt255_tab,

      get_report_names,
      get_function_names,
      get_includes,

      get_method_includes
        IMPORTING
          iv_class_name TYPE clike,

      search_abap_source   RAISING lcx_scan_exceptions,

      search_source
        IMPORTING
          it_source TYPE abaptxt255_tab
          iv_report TYPE clike
          iv_dynpro TYPE clike OPTIONAL
        RAISING lcx_scan_exceptions,

      generateindex,

      generateinfopage
          IMPORTING
              iv_fm TYPE rs38l_fnam
              iv_report TYPE progname OPTIONAL,

      get_parametertype
          IMPORTING
              is_eparameter TYPE rsexp OPTIONAL
              is_iparameter TYPE rsimp OPTIONAL
              is_cparameter TYPE rscha OPTIONAL
              is_tparameter TYPE rstbl OPTIONAL
          RETURNING value(rl_type) TYPE string,

      get_parametertypename
          IMPORTING
              is_eparameter TYPE rsexp OPTIONAL
              is_iparameter TYPE rsimp OPTIONAL
              is_cparameter TYPE rscha OPTIONAL
              is_tparameter TYPE rstbl OPTIONAL
          RETURNING value(rl_type) TYPE string.

ENDCLASS.                    "lcl_source_scan DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_source_scan IMPLEMENTATION
*----------------------------------------------------------------------*
*       ABAP source scanner
*----------------------------------------------------------------------*
CLASS lcl_source_scan IMPLEMENTATION.

  METHOD constructor.
    DATA:
      ls_restrict    TYPE sscr_restrict,
      ls_opt_list    TYPE sscr_opt_list,
      ls_association TYPE sscr_ass.

    ls_opt_list-name       = 'RESTRICT'.
    ls_opt_list-options-cp = gc_x.
    ls_opt_list-options-eq = gc_x.

    APPEND ls_opt_list TO ls_restrict-opt_list_tab.

    ls_association-kind    = 'S'.
    ls_association-name    = 'SSTRING'.
    ls_association-sg_main = 'I'.
    ls_association-op_main = ls_association-op_addy = 'RESTRICT'.

    APPEND ls_association TO ls_restrict-ass_tab.

    CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
      EXPORTING
        program                = sy-repid
        restriction            = ls_restrict
      EXCEPTIONS
        too_late               = 1
        repeated               = 2
        selopt_without_options = 3
        selopt_without_signs   = 4
        invalid_sign           = 5
        empty_option_list      = 6
        invalid_kind           = 7
        repeated_kind_a        = 8
        OTHERS                 = 9.

  ENDMETHOD.                    "constructor

  METHOD f4_repname.
    CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4'
      EXPORTING
        object_type          = 'PROG'
        object_name          = cv_repname
        suppress_selection   = 'X'
      IMPORTING
        object_name_selected = cv_repname
      EXCEPTIONS
        cancel               = 1.
  ENDMETHOD.                                                "f4_repname

  METHOD f4_function_group.
    DATA:
      lv_fname TYPE dynfnam.

    lv_fname = iv_group_name.

    CALL FUNCTION 'RS_HELP_HANDLING'
      EXPORTING
        dynpfield                 = lv_fname
        dynpname                  = sy-dynnr
        object                    = 'FG  '
        progname                  = sy-repid
        suppress_selection_screen = 'X'.

  ENDMETHOD.                    "f4_function_group

  METHOD f4_class.
    CALL FUNCTION 'F4_DD_ALLTYPES'
      EXPORTING
        object               = cv_class_name
        suppress_selection   = gc_x
        display_only         = space
        only_types_for_clifs = gc_x
      IMPORTING
        RESULT               = cv_class_name.
  ENDMETHOD.                                                "f4_class

  METHOD display.
    DATA lv_filename TYPE string.

    WRITE: / 'API information files have been generated.'.
    CONCATENATE tofolder '\abapdoc_index.html' INTO lv_filename.
    WRITE: / 'Open',  lv_filename, 'in your browser to view the ABAPdoc.'.

  ENDMETHOD.                    "display


  METHOD get_source_by_version.
    DATA:
      lv_object_name TYPE versobjnam,
      ls_object_name TYPE ty_ls_objname,
      lt_trdir       TYPE STANDARD TABLE OF trdir,
      lt_d022s       TYPE STANDARD TABLE OF d022s.

    IF iv_dynpro IS INITIAL.
      lv_object_name = iv_report.

      CALL FUNCTION 'SVRS_GET_REPS_FROM_OBJECT'
        EXPORTING
          object_name                  = lv_object_name
          object_type                  = 'REPS'
          versno                       = iv_versno
          iv_no_release_transformation = 'X'
        TABLES
          repos_tab                    = rt_abap
          trdir_tab                    = lt_trdir
        EXCEPTIONS
          no_version                   = 1
          OTHERS                       = 2.
    ELSE.
      ls_object_name-report = iv_report.
      ls_object_name-dynnr  = iv_dynpro.

      lv_object_name = ls_object_name.

      CALL FUNCTION 'SVRS_GET_VERSION_DYNP_40'
        EXPORTING
          object_name = lv_object_name
          versno      = iv_versno
        TABLES
          d022s_tab   = lt_d022s
        EXCEPTIONS
          no_version  = 01
          OTHERS      = 02.

      CHECK sy-subrc IS INITIAL AND lt_d022s IS NOT INITIAL.

      APPEND LINES OF lt_d022s TO rt_abap.

    ENDIF.
  ENDMETHOD.                    "get_source_by_version

  METHOD get_version_numbers.
    DATA:
      ls_objname TYPE ty_ls_objname,
      lv_objtype TYPE vrsd-objtype,
      lv_objname TYPE versobjnam,
      lv_versno  TYPE versno,
      lt_vrsn    TYPE STANDARD TABLE OF vrsn,
      lt_vrsd    TYPE STANDARD TABLE OF vrsd.

    ls_objname-report = iv_report.
    ls_objname-dynnr  = iv_dynpro.
    lv_objname        = ls_objname.

    IF iv_dynpro IS INITIAL.
      lv_objtype = 'REPS'.
    ELSE.
      lv_objtype = 'DYNP'.
    ENDIF.

    CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46'
      EXPORTING
        objname                = lv_objname
        objtype                = lv_objtype
      TABLES
        lversno_list           = lt_vrsn
        version_list           = lt_vrsd
      EXCEPTIONS
        no_entry               = 1
        communication_failure_ = 2
        system_failure         = 3
        OTHERS                 = 4.

    CHECK sy-subrc IS INITIAL .

    SORT lt_vrsd BY objname versno.
    DELETE ADJACENT DUPLICATES FROM lt_vrsd COMPARING objname versno.

    rt_vrsd = lt_vrsd.

    DELETE TABLE rt_vrsd WITH TABLE KEY objname = lv_objname
                                        versno  = lv_versno.

    SORT rt_vrsd.

    CHECK iv_dynpro IS NOT INITIAL.
*   For dynpros we need to save the version information for the version display
*   this is not required for source code
    INSERT LINES OF rt_vrsd INTO TABLE gt_vrsd.

  ENDMETHOD.                    "get_version_Numbers

  METHOD search_abap_source.
    DATA:
      lt_abap TYPE abaptxt255_tab.

    FIELD-SYMBOLS:
     <lv_obj> TYPE tadir-obj_name.

    LOOP AT gt_object ASSIGNING <lv_obj>.
      READ REPORT <lv_obj> INTO lt_abap.
      IF sy-subrc IS NOT INITIAL.
        CONTINUE.
      ENDIF.

      search_source( it_source = lt_abap
                     iv_report = <lv_obj> ).

    ENDLOOP.

    "FREE gt_object.

  ENDMETHOD.                    "search_abap_source

  METHOD search_source.
    DATA:
      lt_source       TYPE abaptxt255_tab,
      lt_source_vers  TYPE abaptxt255_tab,
      lt_vrsd         TYPE STANDARD TABLE OF vrsd,
      ls_vrsd         LIKE LINE OF lt_vrsd,
      lv_number       TYPE i,
      lv_index        TYPE i.

    lt_source = it_source.

    lv_number = 1.

    DO lv_number TIMES.

      IF sy-index = 1.
        CLEAR ls_vrsd.
      ELSE.
        lv_index = sy-index - 1.
        READ TABLE lt_vrsd INDEX lv_index INTO ls_vrsd.
        CHECK sy-subrc IS INITIAL.

        lt_source_vers = get_source_by_version( iv_report = iv_report
                                                iv_dynpro = iv_dynpro
                                                iv_versno = ls_vrsd-versno ).

        IF lt_source_vers IS NOT INITIAL.
          lt_source = lt_source_vers.
        ELSE.
          CONTINUE.
        ENDIF.
      ENDIF.

      DATA: tokens       TYPE TABLE OF stokesx,
            token        TYPE stokesx,
            tokenource   TYPE stokesx,
            statement    TYPE sstmnt,
            statements   TYPE TABLE OF sstmnt,
            selectsource TYPE string,
            mat_res      TYPE ts_comment_tab,
            lv_line      TYPE abaptxt255.

      LOOP AT lt_source INTO lv_line.
        IF ( sy-tabix = 1 AND lv_line(8) = 'FUNCTION' ).
          CONTINUE.
        ELSEIF ( sy-tabix > 1 and lv_line(1) = '*' ).
              mat_res-source = lv_line.
              mat_res-report = iv_report.
              INSERT mat_res INTO TABLE gt_results.
        ELSE.
          RETURN.
        ENDIF.
      ENDLOOP.
    ENDDO.
  ENDMETHOD.                    "search_source

  METHOD get_includes.
    DATA:
     lt_inc     TYPE STANDARD TABLE OF tadir-obj_name,
     lt_inc_tmp LIKE lt_inc,
     lv_program TYPE sy-repid,
     lv_old     TYPE xfeld.

    FIELD-SYMBOLS:
      <lv_obj> TYPE tadir-obj_name.

    LOOP AT gt_object ASSIGNING <lv_obj>
      WHERE table_line(2) <> 'CL'.    "for classes we already have the includes

      REFRESH lt_inc_tmp.

      IF lv_old IS NOT INITIAL.
        CALL FUNCTION 'GET_INCLUDES'
          EXPORTING
            progname = <lv_obj>
          TABLES
            incltab  = lt_inc_tmp.

      ELSE.
        lv_program = <lv_obj>.

        CALL FUNCTION 'RS_GET_ALL_INCLUDES'
          EXPORTING
            program      = lv_program
          TABLES
            includetab   = lt_inc_tmp
          EXCEPTIONS
            not_existent = 1
            no_program   = 2
            OTHERS       = 3.

        CHECK sy-subrc IS INITIAL.
      ENDIF.

      APPEND LINES OF lt_inc_tmp TO lt_inc.
    ENDLOOP.

    SORT lt_inc.
    DELETE ADJACENT DUPLICATES FROM lt_inc.

    APPEND LINES OF lt_inc TO gt_object.

  ENDMETHOD.                    "get_includes

  METHOD get_method_includes.
    DATA: lo_name     TYPE REF TO cl_oo_include_naming,
          lo_name_tmp TYPE REF TO if_oo_clif_incl_naming,
          lt_method   TYPE seop_methods_w_include,
          lv_obj      TYPE tadir-obj_name.

    FIELD-SYMBOLS:
     <ls_method> LIKE LINE OF lt_method.

    CALL METHOD cl_oo_include_naming=>get_instance_by_name
      EXPORTING
        name           = iv_class_name
      RECEIVING
        cifref         = lo_name_tmp
      EXCEPTIONS
        no_objecttype  = 1
        internal_error = 2
        OTHERS         = 3.

    CHECK sy-subrc IS INITIAL.

    lo_name ?= lo_name_tmp.

    CALL METHOD lo_name->if_oo_class_incl_naming~get_all_method_includes
      RECEIVING
        methods_w_include           = lt_method
      EXCEPTIONS
        internal_class_not_existing = 1
        OTHERS                      = 2.

    LOOP AT lt_method ASSIGNING <ls_method>.
      lv_obj = <ls_method>-incname.
      APPEND lv_obj TO gt_object.
    ENDLOOP.
  ENDMETHOD.                    "get_method_includes

  METHOD get_report_names.
    SELECT obj_name INTO TABLE gt_object
      FROM tadir
      WHERE pgmid  = 'R3TR'
      AND   object = 'PROG'
      AND   devclass IN devclass.                     "#EC CI_SGLSELECT
  ENDMETHOD.                    "get_report_names

  METHOD get_function_names.
    DATA:
      lt_obj     TYPE STANDARD TABLE OF tadir-obj_name,
      lv_obj     TYPE tadir-obj_name,
      lv_fgroup  TYPE rs38l-area,
      lv_program TYPE progname.

    FIELD-SYMBOLS:
      <lv_obj> LIKE LINE OF lt_obj.

    SELECT obj_name INTO TABLE lt_obj
      FROM tadir
      WHERE pgmid  = 'R3TR'
      AND   object = 'FUGR'
      AND   devclass IN devclass
      AND   obj_name IN funcgrp.                      "#EC CI_SGLSELECT

    LOOP AT lt_obj ASSIGNING <lv_obj>.
      lv_fgroup = <lv_obj>.
      CLEAR lv_program.

      CALL FUNCTION 'FUNCTION_INCLUDE_CONCATENATE'
        CHANGING
          program                  = lv_program
          group                    = lv_fgroup
        EXCEPTIONS
          not_enough_input         = 1
          no_function_pool         = 2
          delimiter_wrong_position = 3
          OTHERS                   = 4.

      CHECK sy-subrc IS INITIAL AND lv_program IS NOT INITIAL.

      lv_obj = lv_program.
      APPEND lv_obj TO gt_object.
    ENDLOOP.
  ENDMETHOD.                    "get_function_names

  METHOD get_source_names.

    IF devclass[] IS NOT INITIAL.
      "get_report_names( ).
      get_function_names( ).
    ENDIF.

    IF funcgrp[] IS NOT INITIAL.
      get_function_names( ).
    ENDIF.

  ENDMETHOD.                    "get_source_names

  METHOD start.

    get_source_names( ).
    get_includes( ).

    TRY.
        search_abap_source( ).
      CATCH lcx_scan_exceptions.
        RETURN.
    ENDTRY.

    IF funcmod = 'X'. " Generate HTML files for function modules API
      generateindex( ).
    ENDIF.

    display( ).
  ENDMETHOD.                    "start
  METHOD generateindex.
    DATA: lv_string   TYPE string,
          lt_string   TYPE TABLE OF string,
          lv_funcname TYPE  rs38l_fnam,
          lv_include  TYPE  progname,
          lv_filename TYPE string.

*   Generate HTML index file.
    APPEND '<HTML><HEAD><TITLE>ABAPdoc</TITLE></HEAD>' TO lt_string.
    APPEND '<FRAMESET cols="20%,80%">' TO lt_string.
    APPEND '<FRAME src="abapdoc_all-frame.html" name="packageFrame">' TO lt_string.
    APPEND '<FRAME src="abapdoc_main.html" name="classFrame">' TO lt_string.
    APPEND '</FRAMESET></HTML>' TO lt_string.

    CONCATENATE tofolder '\abapdoc_index.html' INTO lv_filename.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename = lv_filename
        filetype = 'ASC'
      TABLES
        data_tab = lt_string.
    IF sy-subrc <> 0.
    ENDIF.

    CLEAR lt_string.

*   Generate HTML index file.
    APPEND '<HTML><HEAD><TITLE>ABAPdoc</TITLE></HEAD><BODY><br/><CENTER><B>' TO lt_string.
    APPEND 'ABAPdoc has been created via the <a href="http://www.ceon.nl/abapeclipse">ABAP Eclipse Editor</a>' TO lt_string.
    APPEND '</B></CENTER></BODY></HTML>' TO lt_string.

    CONCATENATE tofolder '\abapdoc_main.html' INTO lv_filename.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename = lv_filename
        filetype = 'ASC'
      TABLES
        data_tab = lt_string.
    IF sy-subrc <> 0.
    ENDIF.

    CLEAR lt_string.

    APPEND '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd"><HTML><HEAD>' TO lt_string.

    IF NOT funcgrp IS INITIAL.
      APPEND '<TITLE>All Function Modules of ' TO lt_string.
      APPEND funcgrp TO lt_string.
      APPEND '</TITLE>' TO lt_string.
    ENDIF.
    "append '<TITLE>All Function Modules of ' to lt_string.

    APPEND '<STYLE>body.allclasses { background-color: #4C4C4C; font-family: arial, sans-serif; font-size: 9pt; letter-spacing: 1px; font-weight: 500; color: white; }' TO lt_string.
    APPEND 'a { font-family: arial, sans-serif; font-size: 9pt; letter-spacing: 1px; font-weight: 500; color: white; }</STYLE>' TO lt_string.
    APPEND '</HEAD><BODY CLASS="allclasses">' TO lt_string.
    APPEND '<FONT CLASS="FrameHeadingFont"><B>' TO lt_string.
    IF NOT funcgrp IS INITIAL.
      APPEND 'All Function Modules of ' TO lt_string.
      APPEND funcgrp+3 TO lt_string.
    ENDIF.
    IF NOT devclass IS INITIAL.
      APPEND 'All Function Modules of package ' TO lt_string.
      APPEND devclass+3 TO lt_string.
    ENDIF.

    APPEND '</B></FONT><BR/><BR/><BR/>' TO lt_string.

    FIELD-SYMBOLS:
     <lv_obj> TYPE tadir-obj_name.

    LOOP AT gt_object ASSIGNING <lv_obj>.
      lv_include = <lv_obj>.
      CLEAR lv_funcname.
      CALL FUNCTION 'FUNCTION_INCLUDE_INFO'
        CHANGING
          funcname            = lv_funcname
          include             = lv_include
        EXCEPTIONS
          function_not_exists = 1
          include_not_exists  = 2
          group_not_exists    = 3
          no_selections       = 4
          no_function_include = 5
          OTHERS              = 6.
      IF sy-subrc = 0 AND lv_funcname IS NOT INITIAL.
        CONCATENATE '<A HREF="abapdoc_' lv_funcname '.html" TARGET="classFrame">' lv_funcname '</A><br/>' INTO lv_string.
        APPEND lv_string TO lt_string.
        generateinfopage( iv_fm = lv_funcname iv_report = lv_include ).
      ENDIF.

    ENDLOOP.

    APPEND '</BODY></HTML>' TO lt_string.

    CONCATENATE tofolder '\abapdoc_all-frame.html' INTO lv_filename.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename = lv_filename
        filetype = 'ASC'
      TABLES
        data_tab = lt_string.
    IF sy-subrc <> 0.
    ENDIF.


  ENDMETHOD.                    "generateindex
  METHOD generateinfopage.
    DATA: filename            TYPE string,
          lv_string           TYPE string,
          lt_string           TYPE TABLE OF string,
          lv_funcname         TYPE  rs38l_fnam,
          lv_include          TYPE  progname,
          lv_remote_call      TYPE rs38l-remote,
          lv_update_task      TYPE rs38l-utask,
          lv_exception_list   TYPE rsexc,
          lv_export_parameter TYPE rsexp,
          lv_import_parameter TYPE rsimp,
          lv_changing_parameter TYPE rscha,
          lv_tables_parameter TYPE rstbl,
          lv_p_docu           TYPE funct,
          lt_exception_list   TYPE TABLE OF rsexc,
          lt_export_parameter TYPE TABLE OF rsexp,
          lt_import_parameter TYPE TABLE OF rsimp,
          lt_changing_parameter TYPE TABLE OF rscha,
          lt_tables_parameter TYPE TABLE OF rstbl,
          lt_p_docu           TYPE TABLE OF funct,
          lv_stext            TYPE rs38l_ftxt.

    lv_funcname = iv_fm.

    CALL FUNCTION 'FUNCTION_IMPORT_DOKU'
      EXPORTING
        funcname                 = lv_funcname
        language                 = sy-langu
     IMPORTING
*       GLOBAL_FLAG              =
        remote_call              = lv_remote_call
        update_task              = lv_update_task
        short_text               = lv_stext
*       FREEDATE                 =
*       EXCEPTION_CLASS          =
      TABLES
        dokumentation            = lt_p_docu
        exception_list           = lt_exception_list
        export_parameter         = lt_export_parameter
        import_parameter         = lt_import_parameter
        changing_parameter       = lt_changing_parameter
        tables_parameter         = lt_tables_parameter
     EXCEPTIONS
       error_message            = 1
       function_not_found       = 2
       invalid_name             = 3
       OTHERS                   = 4
              .

    IF sy-subrc <> 0.
      RETURN.
    ENDIF.

    APPEND '<HTML><HEAD><TITLE>ABAPdoc</TITLE></HEAD>' TO lt_string.
    APPEND '<STYLE> body {font-family: arial, sans-serif; font-size: 9pt;} table{ border-collapse: collapse; } td, th{ border: 1px solid #CCCCCC; font-family: arial, sans-serif; font-size: 9pt; } tr.top { background-color: #EAFDFF; } </STYLE>' TO
lt_string.

    CONCATENATE '<BODY><table width="100%" bgcolor="#EEEEFF"><tr><td>Function Module: <B>' iv_fm '</B></td></tr></table><BR/>' INTO lv_string.
    APPEND lv_string TO lt_string.

    CONCATENATE 'Description:' lv_stext '</B><BR/>' INTO lv_string SEPARATED BY space.
    APPEND lv_string TO lt_string.

    IF lv_remote_call = 'R'.
      APPEND 'This is a remote function module<BR/>' TO lt_string.
    ENDIF.

    IF lv_update_task = 'X'.
      APPEND 'This is a update task<BR/>' TO lt_string.
    ENDIF.

    APPEND '<BR/><B>Import Parameters:</B><BR/>' TO lt_string.
    APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="20%">Parameter Name</TD><td>Typing</td><TD width="20%">Associated Type</TD><TD>Default value</TD><TD width="5%">Optional</TD>' TO lt_string.
    APPEND '<TD width="5%">Pass Value</TD><TD width="20%">Short text</TD></TR>' TO lt_string.
    LOOP AT lt_import_parameter INTO lv_import_parameter.
      APPEND '<TR><TD>' TO lt_string.
      APPEND lv_import_parameter-parameter TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      lv_string = get_parametertype( is_iparameter = lv_import_parameter ).
      APPEND lv_string TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      lv_string = get_parametertypename( is_iparameter = lv_import_parameter ).
      APPEND lv_string TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      APPEND lv_import_parameter-default TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      APPEND lv_import_parameter-optional TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      IF lv_import_parameter-reference = ''.
        APPEND 'Yes' TO lt_string.
      ENDIF.
      APPEND '</TD><TD>' TO lt_string.
      READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_import_parameter-parameter.
      IF sy-subrc = 0.
        APPEND lv_p_docu-stext TO lt_string.
      ENDIF.
      APPEND '</TD></TR>' TO lt_string.
    ENDLOOP.
    APPEND '</TABLE>' TO lt_string.

*   Export Parameters
    APPEND '<BR/><B>Export Parameters:</B><BR/>' TO lt_string.
    APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="30%">Parameter Name</TD><TD width="10%">Typing</TD><TD width="30%">Associated Type</TD><TD width="10%">Pass Value</TD><TD width="20%">Short text</TD></TR>' TO lt_string.
    LOOP AT lt_export_parameter INTO lv_export_parameter.
      APPEND '<TR><TD>' TO lt_string.
      APPEND lv_export_parameter-parameter TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      lv_string = get_parametertype( is_eparameter = lv_export_parameter ).
      APPEND lv_string TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      lv_string = get_parametertypename( is_eparameter = lv_export_parameter ).
      APPEND lv_string TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      IF lv_export_parameter-reference = ''.
        APPEND 'Yes' TO lt_string.
      ENDIF.
      APPEND '</TD><TD>' TO lt_string.
      READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_export_parameter-parameter.
      IF sy-subrc = 0.
        APPEND lv_p_docu-stext TO lt_string.
      ENDIF.
      APPEND '</TD></TR>' TO lt_string.
    ENDLOOP.
    APPEND '</TABLE>' TO lt_string.

*   Changing Parameters
    APPEND '<BR/><B>Changing Parameters:</B><BR/>' TO lt_string.
    APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="30%">Parameter Name</TD><TD width="10%">Typing</TD><TD width="30%">Associated Type</TD><TD>Default value</TD><TD>Optional</TD><TD>Pass Value</TD><TD width="20%">Short text</TD></TR>'
    TO lt_string.
    LOOP AT lt_changing_parameter INTO lv_changing_parameter.
      APPEND '<TR><TD>' TO lt_string.
      APPEND lv_changing_parameter-parameter TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      lv_string = get_parametertype( is_cparameter = lv_changing_parameter ).
      APPEND lv_string TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      lv_string = get_parametertypename( is_cparameter = lv_changing_parameter ).
      APPEND lv_string TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      APPEND lv_changing_parameter-default TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      APPEND lv_changing_parameter-optional TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      IF lv_changing_parameter-reference = ''.
        APPEND 'Yes' TO lt_string.
      ENDIF.
      APPEND '</TD><TD>' TO lt_string.
      READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_changing_parameter-parameter.
      IF sy-subrc = 0.
        APPEND lv_p_docu-stext TO lt_string.
      ENDIF.
      APPEND '</TD></TR>' TO lt_string.
    ENDLOOP.
    APPEND '</TABLE>' TO lt_string.

*   Tables
    APPEND '<BR/><B>Table Parameters:</B><BR/>' TO lt_string.
    APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="30%">Parameter Name</TD><TD width="10%">Typing</TD><TD width="30%">Associated Type</TD><TD>Optional</TD><TD width="20%">Short text</TD></TR>'
    TO lt_string.
    LOOP AT lt_tables_parameter INTO lv_tables_parameter.
      APPEND '<TR><TD>' TO lt_string.
      APPEND lv_tables_parameter-parameter TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      lv_string = get_parametertype( is_tparameter = lv_tables_parameter ).
      APPEND lv_string TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      lv_string = get_parametertypename( is_tparameter = lv_tables_parameter ).
      APPEND lv_string TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      APPEND lv_tables_parameter-optional TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_tables_parameter-parameter.
      IF sy-subrc = 0.
        APPEND lv_p_docu-stext TO lt_string.
      ENDIF.
      APPEND '</TD></TR>' TO lt_string.
    ENDLOOP.
    APPEND '</TABLE>' TO lt_string.

*   Tables
    APPEND '<BR/><B>Exceptions:</B><BR/>' TO lt_string.
    APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="30%">Exception</TD><TD width="20%">Short text</TD></TR>'
    TO lt_string.
    LOOP AT lt_exception_list INTO lv_exception_list.
      APPEND '<TR><TD>' TO lt_string.
      APPEND lv_exception_list-exception TO lt_string.
      APPEND '</TD><TD>' TO lt_string.
      READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_exception_list-exception.
      IF sy-subrc = 0.
        APPEND lv_p_docu-stext TO lt_string.
      ENDIF.
      APPEND '</TD></TR>' TO lt_string.
    ENDLOOP.
    APPEND '</TABLE>' TO lt_string.

*   Report top comment
    DATA: lv_com_results    TYPE ts_comment_tab.
    APPEND '<BR/><B>Function module comment header:</B><BR/>' TO lt_string.
    LOOP AT gt_results INTO lv_com_results WHERE report = iv_report.
      APPEND lv_com_results-source TO lt_string.
      APPEND '<BR/>' TO lt_string.
    ENDLOOP.
    APPEND '</TABLE>' TO lt_string.

    APPEND '</HTML>' TO lt_string.


    CONCATENATE tofolder '\abapdoc_' iv_fm '.html' INTO filename.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename = filename
        filetype = 'ASC'
      TABLES
        data_tab = lt_string.
    IF sy-subrc <> 0.
    ENDIF.
  ENDMETHOD.                    "generateindex
  METHOD get_parametertype.
    DATA ls_iparameter TYPE rsimp.
    IF NOT is_eparameter IS INITIAL.
      MOVE-CORRESPONDING is_eparameter TO ls_iparameter.
    ELSEIF NOT is_iparameter IS INITIAL.
      MOVE-CORRESPONDING is_iparameter TO ls_iparameter.
    ELSEIF NOT is_cparameter IS INITIAL.
      MOVE-CORRESPONDING is_cparameter TO ls_iparameter.
    ELSEIF NOT is_tparameter IS INITIAL.
      MOVE-CORRESPONDING is_tparameter TO ls_iparameter.
    ENDIF.
    IF ls_iparameter-types = 'X' OR ls_iparameter-reference = 'X'.
      rl_type = 'TYPE'.
      RETURN.
    ENDIF.
    IF NOT ls_iparameter-dbfield IS INITIAL.
      rl_type = 'LIKE'.
      RETURN.
    ENDIF.
    rl_type = 'TYPE'.
  ENDMETHOD.                    "get_parametertype
  METHOD get_parametertypename.
    DATA ls_iparameter TYPE rsimp.
    IF NOT is_eparameter IS INITIAL.
      MOVE-CORRESPONDING is_eparameter TO ls_iparameter.
    ELSEIF NOT is_iparameter IS INITIAL.
      MOVE-CORRESPONDING is_iparameter TO ls_iparameter.
    ELSEIF NOT is_cparameter IS INITIAL.
      MOVE-CORRESPONDING is_cparameter TO ls_iparameter.
    ELSEIF NOT is_tparameter IS INITIAL.
      rl_type = is_tparameter-dbstruct.
      RETURN.
    ENDIF.

    IF NOT ls_iparameter-typ IS INITIAL.
      rl_type = ls_iparameter-typ.
    ELSEIF NOT ls_iparameter-dbfield IS INITIAL.
      rl_type = ls_iparameter-dbfield.
    ENDIF.
  ENDMETHOD.                    "get_parametertype
ENDCLASS.                    "lcl_source_scan IMPLEMENTATION

INITIALIZATION.
  CREATE OBJECT lo_sscan.

  a11 = 'Function Module Selection'(a11).
  a20 = 'Generate ABAPdoc settings'(a20).

AT SELECTION-SCREEN ON VALUE-REQUEST FOR funcgrp-low.
  lo_sscan->f4_function_group( 'FUNCGRP-LOW' ).

AT SELECTION-SCREEN ON VALUE-REQUEST FOR funcgrp-high.
  lo_sscan->f4_function_group( 'FUNCGRP-HIGH' ).

AT SELECTION-SCREEN ON VALUE-REQUEST FOR tofolder.
  tofolder_string = tofolder.
  CALL METHOD cl_gui_frontend_services=>directory_browse
    EXPORTING
      window_title         = 'Select a folder'
      initial_folder       = tofolder_string
    CHANGING
      selected_folder      = tofolder_string
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc = 0.
    tofolder = tofolder_string.
  ENDIF.


START-OF-SELECTION.
  lo_sscan->start( ).




摘自sdn
分享到:
评论

相关推荐

    分布式电源接入配电网的技术挑战与解决方案:风光互补无功补偿及PSO优化

    内容概要:本文探讨了分布式电源(DG)接入配电网所带来的技术挑战及其解决方案。首先介绍了DG接入对配电网潮流分布和电压稳定性的影响,随后详细讨论了风光互补无功补偿技术的应用,旨在稳定电压和提高电能质量。接着,文章阐述了粒子群算法(PSO)在电气互联和故障点位定位中的应用,展示了其在优化电网拓扑结构和快速准确定位故障方面的优势。最后,通过Simulink建模和仿真实验,验证了所提出的方法和技术的有效性。 适合人群:从事电力系统研究、分布式电源集成、智能电网优化的专业人士,以及对相关技术感兴趣的工程技术人员。 使用场景及目标:适用于分布式电源接入配电网的设计与优化,特别是在解决电压波动、无功补偿不足和故障定位不准等问题时。目标是提升配电网的稳定性和效率,确保电力系统的可靠运行。 其他说明:文中提供了多个Matlab和Python代码示例,用于具体实现风光互补无功补偿、粒子群优化算法以及Simulink仿真模型,便于读者理解和实践。

    基于博途V15的1500系列PLC六层电梯SCL编程与梯形图实现

    内容概要:本文详细介绍了使用博途V15软件和1500系列PLC实现单部六层电梯控制系统的SCL编程方法及其梯形图实现。主要内容涵盖电梯的基本控制逻辑,如楼层升降、平层停靠、呼叫响应等。文中通过具体代码示例展示了如何定义关键变量、处理楼层呼叫信号、实现电梯运行和平层停靠逻辑。此外,还讨论了状态机的设计、方向决策算法以及开关门控制等重要环节。文章强调了SCL语言在处理复杂逻辑方面的优势,并对比了梯形图在故障诊断时的直观性。 适合人群:对工业自动化控制感兴趣的技术人员,尤其是熟悉西门子PLC编程的工程师。 使用场景及目标:适用于需要深入了解电梯控制系统编程原理和技术实现的人群。目标是帮助读者掌握SCL语言和梯形图在电梯控制中的应用,提高编程技能。 其他说明:文章提供了完整的代码片段和详细的解释,有助于读者理解和实践。同时提醒读者关注实际应用中的细节问题,如安全保护机制、信号防抖处理等。

    电力电子领域LLC谐振变换器的MATLAB/Simulink仿真及软开关实现

    内容概要:本文详细介绍了如何使用MATLAB/Simulink对全桥和半桥LLC谐振变换器进行仿真,涵盖驱动配置、谐振参数计算、软开关验证以及闭环控制等方面。首先,文章讲解了半桥LLC的基本配置,包括PWM生成、死区时间和谐振参数的设定。接着,讨论了全桥LLC的扩展及其相对于半桥的优势,如更宽的增益范围和更好的输入电压适应性。然后,深入探讨了软开关的验证方法,强调了ZVS(零电压开关)的重要性和实现方式。最后,介绍了闭环控制的设计思路,包括PID控制器的应用和参数调整技巧。 适合人群:从事电力电子设计的研究人员和技术工程师,尤其是那些希望深入了解LLC谐振变换器仿真和优化的人群。 使用场景及目标:适用于需要进行LLC谐振变换器仿真的项目,旨在帮助工程师掌握从基本配置到高级控制的完整流程,确保高效稳定的电源转换系统设计。 其他说明:文中提供了大量MATLAB代码片段,便于读者理解和实践。此外,还给出了许多实用的调试建议和注意事项,有助于避免常见错误并提高仿真成功率。

    居民健康监测系统 2025免费JAVA微信小程序毕设

    2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。

    宿舍管理系统 2025免费JAVA微信小程序毕设

    2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。

    电力系统中同步发电机短路与电弧仿真的关键技术及其实现

    内容概要:本文详细介绍了同步发电机短路仿真和电弧仿真的重要性及其具体实现方法。首先讨论了同步发电机短路仿真的核心基础——派克变换,展示了如何利用Python进行派克变换的代码实现,并解释了短路电流的计算方法,包括次暂态电流、暂态电流和稳态电流。接着,文章探讨了电弧仿真的物理特性和数学模型,特别是经典的Mayr电弧模型,并给出了Matlab代码示例。此外,还提到了电弧在不同环境条件下的特性研究,如气压、湿度等因素对电弧的影响。最后,文章强调了这两种仿真在电力系统动态分析中的应用场景,特别是在评估短路故障对发电机及周边设备的影响方面的作用。 适合人群:从事电力系统研究的专业人士、电气工程师、高校师生及相关领域的研究人员。 使用场景及目标:适用于需要深入了解同步发电机短路和电弧仿真原理的研究人员和技术人员,旨在提高电力系统的安全性、可靠性,优化保护措施的设计。 其他说明:文中不仅提供了理论知识,还附带了具体的代码实现,便于读者理解和实践。同时,文章指出了仿真过程中可能出现的问题及解决方案,如数值稳定性问题和接口时序处理等。

    学生选课系统 2025免费JAVA微信小程序毕设

    2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。

    基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明

    基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。 基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模拟浏览器行为的小红书关键词搜索和笔记爬取源码+文档说明基于Selenium模

    医笙小程序系统 2025免费JAVA微信小程序毕设

    2025免费微信小程序毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS 讲解视频:https://www.bilibili.com/video/BV1BVKMeZEYr 技术栈:Uniapp+Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode+微信开发者工具。

    工业自动化中高速追剪飞锯系统的维伦通触摸屏与台达PLC程序解析

    内容概要:本文深入探讨了高速追剪飞锯系统的实现细节,特别是维伦通触摸屏和台达PLC之间的协同工作。触摸屏作为人机交互界面,允许操作员设置如切割长度、运行速度等参数,并通过与PLC寄存器的关联实现数据传输。台达PLC则负责执行复杂的电子凸轮追剪算法,确保切割过程的高精度和稳定性。文中还介绍了关键的PLC指令,如MC_GearIn和CAM_GEN,以及它们在速度同步和位置控制中的应用。此外,文章揭示了一些调试技巧和潜在问题,如数据类型对齐、补偿算法和参数调整方法。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些对PLC编程和人机界面设计感兴趣的人。 使用场景及目标:适用于需要理解和优化高速追剪飞锯系统的场合,旨在提高生产效率和产品质量。通过学习本文,读者可以掌握如何设置和调试此类系统,从而减少故障率并提升性能。 其他说明:文章不仅提供了理论知识,还包括了许多实用的操作建议和经验分享,有助于读者更好地应对实际工作中遇到的技术挑战。

    高速永磁同步电机Maxwell仿真:50000-100000rpm转速区间的电磁与机械设计挑战

    内容概要:本文详细探讨了高速永磁同步电机(HSPMSM)在50000-100000rpm转速范围内的设计与仿真挑战。首先介绍了高速电机的应用背景及其面临的离心力和电磁损耗等问题。接着,通过具体实例展示了如何利用Maxwell软件进行电机的几何建模、材料设置、边界条件与激励设置,并进行了详细的模拟结果分析。文中特别强调了在极端转速条件下,如10万转时,电机内部的物理现象以及相应的优化措施,如采用碳纤维护套增强机械强度、调整损耗计算模型以提高精度等。 适合人群:从事电机设计与仿真的工程师和技术研究人员,尤其是对高速永磁同步电机感兴趣的从业者。 使用场景及目标:适用于希望深入了解高速永磁同步电机设计原理及仿真技巧的人群,旨在帮助他们掌握Maxwell软件的具体应用方法,解决实际工程中遇到的技术难题,如高转速下的电磁兼容性和机械可靠性问题。 其他说明:文章不仅提供了理论指导,还包括大量实用的操作步骤和代码示例,有助于读者快速上手并应用于实际工作中。此外,文中提到的一些特殊处理方式(如碳纤维护套的应用),为解决特定工况下的技术瓶颈提供了新思路。

    浪潮英信服务器 SA5212M5 用户手册

    浪潮英信服务器 SA5212M5 用户手册

    COMSOL仿真中放电电极击穿空气的电场分布与击穿电压计算

    内容概要:本文详细介绍了如何使用COMSOL进行放电电极击穿空气的仿真。首先构建了一个针尖电极和球头圆柱电极组成的模型,设置了静电和电流耦合的物理场,并进行了网格优化。通过参数化扫描和MATLAB脚本,计算不同间隙距离下的击穿电压,并利用Paschen曲线进行验证。同时探讨了电场强度在尖端的集中现象及其对击穿的影响,提出了改进网格质量和求解器设置的方法。最后,通过电场矢量图和电势分布图展示了仿真的结果。 适合人群:从事电磁场仿真、电气工程、等离子体物理等相关领域的研究人员和技术人员。 使用场景及目标:适用于需要精确计算电极间击穿电压和电场分布的研究项目,帮助设计高压设备和评估电极结构的安全性和可靠性。 其他说明:文中提供了详细的建模步骤和代码片段,便于读者复现实验结果。同时强调了网格质量、边界条件和求解器设置对仿真准确性的重要影响。

    家居项目后端资源采用ssm架构

    家居项目后端资源采用ssm架构

    互联网大厂面试题合集:并发编程面试题-重点.pdf

    整理一线大厂面试题合集

    牵牛花铅笔素材儿童教学课件模板.pptx

    牵牛花铅笔素材儿童教学课件模板

    我的日记 2025/4/19

    2024年的记录。

    互联网大厂面试题合集:Linux操作系统面试题.pdf

    整理一线大厂面试题合集

    Apollo 7.0行为预测模块升级:轨迹交互与评估器设计详解及其应用

    内容概要:本文详细解析了Apollo 7.0行为预测模块的关键升级点,主要包括新增的Inter-TNT模式、VECTORNET_EVALUATOR以及JOINTLY_PREDICTION_PLANNING_EVALUATOR。这些组件通过引入轨迹交互模拟、动态归一化、联合预测规划等创新机制,显著提高了障碍物轨迹预测的准确性和场景适应性。特别是在处理复杂交通场景如高速公路变道、十字路口交汇时表现出色。此外,文中还介绍了增量式特征更新机制的应用,有效减少了CPU占用,提升了系统的实时性能。 适用人群:适用于对自动驾驶技术感兴趣的开发者、研究人员和技术爱好者,尤其是那些希望深入了解Apollo平台行为预测模块工作原理的人群。 使用场景及目标:①帮助读者理解Apollo 7.0行为预测模块的技术细节;②指导开发者如何利用这些新技术提升自动驾驶系统的预测精度;③为研究者提供有价值的参考资料,促进相关领域的进一步探索。 其他说明:文章不仅提供了详细的代码解读,还包括了实际应用场景中的效果对比,使读者能够全面掌握新旧版本之间的差异。同时,附带的思维导图有助于快速理清各个子模块之间的调用关系和数据流向。

    用OpenGL开发的机械臂运动仿真程序,并且实现机械手臂向四个方向的旋转.rar

    OpenGL是一种强大的图形库,用于创建2D和3D图形,广泛应用于游戏开发、科学可视化、工程设计等领域。在这个项目中,我们看到一个基于OpenGL的机械臂运动仿真程序,它能够实现机械臂在四个方向上的旋转。这样的模拟对于理解机械臂的工作原理、机器人控制算法以及进行虚拟环境中的机械臂运动测试具有重要意义。 我们需要了解OpenGL的基础知识。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D和3D矢量图形。它提供了大量的函数来处理图形的绘制,包括几何形状的定义、颜色设置、光照处理、纹理映射等。开发者通过OpenGL库调用这些函数,构建出复杂的图形场景。 在这个机械臂仿真程序中,C#被用来作为编程语言。C#通常与Windows平台上的.NET Framework配合使用,提供了一种面向对象的、类型安全的语言,支持现代编程特性如LINQ、异步编程等。结合OpenGL,C#可以构建高性能的图形应用。 机械臂的运动仿真涉及到几个关键的计算和控制概念: 1. **关节角度**:机械臂的每个部分(或关节)都有一个或多个自由度,表示为关节角度。这些角度决定了机械臂各部分的位置和方向。 2. **正向运动学**:根据关节角度计算机械臂末端执行器(如抓手)在空间中的位置和方向。这涉及将各个关节的角度转换为欧拉角或四元数,然后转化为笛卡尔坐标系的X、Y、Z位置和旋转。 3. **反向运动学**:给定末端执行器的目标位置和方向,计算出各关节所需的理想角度。这是一个逆向问题,通常需要解决非线性方程组。 4. **运动规划**:确定从当前状态到目标状态的路径,确保机械臂在运动过程中避免碰撞和其他约束。 5. **OpenGL的使用**:在OpenGL中,我们首先创建几何模型来表示机械臂的各个部分。然后,使用矩阵变换(如旋转、平移和缩放)来更新关节角度对模型的影响。这些变换组合起来,形成机械臂的动态运动。 6. **四向旋转**:机械臂可能有四个独立的旋转轴,允许它在X、Y、Z三个轴上旋转,以及额外的绕自身轴线的旋转。每个轴的旋转都由对应的关节角度控制。 7. **交互控制**:用户可能可以通过输入设备(如鼠标或键盘)调整关节角度,实时观察机械臂的运动。这需要将用户输入转换为关节角度,并应用到运动学模型中。 8. **图形渲染**:OpenGL提供了多种渲染技术,如深度测试、光照模型、纹理映射等,可以用于提高机械臂模拟的真实感。例如,可以添加材质和纹理来模拟金属表面,或者使用光照来增强立体感。 这个项目结合了OpenGL的图形渲染能力与C#的编程灵活性,构建了一个可以直观展示机械臂运动的仿真环境。通过理解并实现这些关键概念,开发者不仅能够学习到图形编程技巧,还能深入理解机器人学的基本原理。

Global site tag (gtag.js) - Google Analytics