章概述了ABAP-SAP中用于開發業務應用程序支持和開發的編程語言。
ABAP是一種在SAP ABAP運行時環境中運行的編程語言,由SAP創建并用于開發應用程序,其中包括:
R / 3的所有應用程序甚至其基礎系統的某些部分都是在ABAP中開發的。
ABAP是一種事件驅動的編程語言。用戶動作和系統事件控制應用程序的執行。
ABAP也稱為ABAP / 4。ABAP / 4中的“ 4”代表“第四代語言”或4GL。
SAP使用ABAP Workbench來開發標準和定制應用程序軟件。ABAP工作臺還用于創建字典對象。它包含以下組件-
注意 -ABAP工作臺以前稱為ABAP / 4開發工作臺。
報告程序產生列表,可以分為經典報告和交互式報告。
臨時查詢提供三種不同類型的報告-
用于訪問臨時查詢的交易代碼-
在最終用戶可以開始處理業務流程以進行分析和報告之前,必須先填充SAP數據庫。根據復雜度和要傳輸的數據量,在各個階段使用各種方法將數據傳輸到系統中。
數據可以從SAP傳輸到SAP或從SAP傳輸到非SAP系統(舊版系統)。數據也可以通過手動輸入進行傳輸。用于數據傳輸的工具如下-
SAP生成各種文檔,例如采購訂單,銷售訂單,發票,工資單等。您可以在需要時打印這些文檔。下圖顯示了打印過程在SAP系統中的工作方式。
SAP系統需要不同類型的打印方法,例如-
用戶觸發打印過程后,打印請求將發送到后臺處理服務器,該服務器包含處理所需的對話框和后臺處理工作流程。
可以使用R / 3系統的功能以交互方式編寫程序。程序可以在線執行,也可以在后臺執行。還可以安排后臺作業以特定間隔運行。
BCO連接外部數據庫的筆記
事務代碼dbco連接外部數據庫,連接外部數據庫的數據庫
我現在連接的是oracle數據庫
dbco配置(自己測試的)
連接名,自己定義;dbms,數據庫連接的類型,不同數據庫對應的不一樣的;
用戶名稱,連接的數據庫的用戶名稱;數據庫可令,連接的數據庫的密碼,后面是確定密碼;
連接信息,這里的比較重要,一般是通過basis那里獲得的,這個是要自己配置的,
在TNSNAMES.ORA這個文件下找到的,TESTOA.WORLD和我們上面的連接信息一樣
在sap應用服務器端修改TNSNAMES.ORA文件,路徑:$ORACLE_HOME\NETWORK\ADMIN
先在SAP底層ORACLE數據庫編輯TNS文件,一般由BASIS配置完成.配置完成后我們可以用事務碼:AL11查看配置是否正確,路徑:DIR_ORAHOME->network->admin->tnsnames.ora查看對應的TNS是否配置正確
TNSNAMES.ORA這個文件的詳細信息
# tnsnames.ora Network Configuration File: E:\usr\sap\IDE\SYS\profile\oracle\tnsnames.ora
# Generated by Oracle configuration tools.
################
# Filename......: tnsnames.ora
# Created.......: created by SAP AG, R/3 Rel. >=6.10
# Name..........:
# Date..........:
# @(#) $Id: //bc/700-1_REL/src/ins/SAPINST/impl/tpls/ora/ind/TNSNAMES.ORA#4 $
################
####紅色部分為手工加上去的,外部數據庫的ip地址和端口號,黑色系統默認產生的
TESTOA.WORLD=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.4.120)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=TESTOA)
)
)
IDE.WORLD=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(COMMUNITY=SAP.WORLD)(PROTOCOL=TCP)(HOST=tbides)(PORT=1527))
)
(CONNECT_DATA=
(SID=IDE)
(GLOBAL_NAME=IDE.WORLD)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
基本上dbco的配置已經算完成了,剩下的就是我們abap拿手的寫代碼連接測試和訪問外部數據庫了!測試連接是否成功的事務代碼:st04m,測試連接的程序:ADBC_TEST_CONNECTION
自己寫的測試代碼,讀取外部數據表的數據
*&---------------------------------------------------------------------*
*& Report ZTEST_CONN
*&
*&---------------------------------------------------------------------*
*&create by augus 2012.06.29
*&test dbco
*&---------------------------------------------------------------------*
REPORT ztest_conn.
PARAMETERS:
con_name TYPE dbcon-con_name.
DATA: dbn(255) type c.
DATA: BEGIN OF wa, "結構的字段名稱可以和表的不一樣
whir$fyzb_km(50) TYPE c,
whir$fyzb_je TYPE i,
whir$fyzb_zx(50) type c,
END OF wa.
data: c1 type i.
c1=200.
** 根據連接條件名,打開數據庫的連接
EXEC SQL.
CONNECT TO :con_name
ENDEXEC.
check sy-subrc=0.
**執行本地化sql語句,whir$fyzb外部數據的表名和對應的字段
EXEC SQL PERFORMING loop_output.
SELECT whir$fyzb_km, whir$fyzb_je, whir$fyzb_zx
INTO :wa
FROM whir$fyzb
WHERE whir$fyzb_je=:c1
ENDEXEC.
**關閉數據庫連接
EXEC SQL.
DISCONNECT :con_name
ENDEXEC.
uline.
write: / 'over'.
FORM loop_output.
WRITE: / wa-whir$fyzb_km, wa-whir$fyzb_je, wa-whir$fyzb_zx.
uline.
ENDFORM.
連接sqlserver數據庫
MSSQL_SERVER=192.168.8.92之間不能有空格,數據庫端服務器的ip地址或者是名稱
MSSQL_DBNAME=tb ,不能有空格,數據庫的名稱
中文亂碼
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105c8c3a4c07db3c678b85027fa3c215cc795b434465feb9233f515791d27c1156e50f0baaac6865377576e78cc8fe1d81eacf7e74d472296459db0144dc58fc895125b07dd009b8f14ef0bb8025e2ddc5a7a94323bd44730c97f1fb4d7060dd18f0033093b1ef4d022914ad9d35728b296028ef3430c7508a94&p=c4759a46d7c352ec0fbe9b74570dc6&user=baidu&fm=sc&query=SAP+oracle%CA%FD%BE%DD%BF%E2%D7%D6%B7%FB%BC%AF&qid=9bb5edf4041de375&p1=2
http://www.erp100.com/thread-237906-1-1.html
代碼示例:
*&---------------------------------------------------------------------*
*& Report ZMS_GET_GYLX
*&
*&---------------------------------------------------------------------*
*&create by augus 2012.07.02
*&獲取mes系統工藝路線表的數據
*&連接的是oracle數據庫
*&后臺執行
*&---------------------------------------------------------------------*
report zms_get_gylx.
parameters:
con_name type dbcon-con_name.
data: dbn(255) type c.
data: ztab like table of zmes_gylx with header line.
data: wa_zmes_gylx type zmes_gylx.
data: zgyms type xstring."十六進制工藝路線描述
data: zh_zgyms(200) type c."中文工藝路線描述
data: c1 type i.
c1=200.
** 根據連接條件名,打開數據庫的連接
EXEC SQL.
CONNECT TO :con_name
ENDEXEC.
check sy-subrc=0.
**執行本地化sql語句,ZMES_GYLX外部數據的表名和對應的字段
********************調用子程序讀取數據庫********************
***utl_raw.cast_to_raw,oracle的一個函數,通過轉化為十六進制,為了解決中文亂碼的問題
EXEC SQL PERFORMING loop_output.
SELECT ZGYLX, utl_raw.cast_to_raw(ZGYMS)
INTO :wa_ZMES_GYLX-ZGYLX, :zgyms
FROM ZMES_GYLX
ENDEXEC.
*************************************************************
**關閉數據庫連接
EXEC SQL.
DISCONNECT :con_name
ENDEXEC.
uline.
write: / 'over'.
*&---------------------------------------------------------------------*
*& Form loop_output
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form loop_output.
perform hex_to_utf8 using zgyms changing zh_zgyms.
* WRITE: / wa-whir$fyzb_km, wa-whir$fyzb_je, wa-whir$fyzb_zx.
* ULINE.
wa_zmes_gylx-zgyms=zh_zgyms.
insert into zmes_gylx values wa_zmes_gylx.
commit work.
endform. "loop_output
*&---------------------------------------------------------------------*
*& Form hex_to_utf8
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_HEX_SOURCE text
* -->P_RESULT text
*----------------------------------------------------------------------*
*****解決中文亂碼的問題,16進制編碼轉換
form hex_to_utf8 using p_hex_source type xsequence
changing p_result type simple.
data: cv type ref to cl_abap_conv_in_ce.
*****連接的數據的字符集是什么,就得用對應的字符集來轉換
IF con_name='ZMES'."連接mes測試機數據庫
cv=cl_abap_conv_in_ce=>create( encoding='UTF-8' ).
ELSEIF con_name='ZMES01'."連接mes正式機數據庫
cv=cl_abap_conv_in_ce=>create( encoding='4102' )."endcoding可以在表TCP00里查看uft-16對應4102
ENDIF.
TRY.
CALL METHOD cv->convert
EXPORTING
input=p_hex_source
IMPORTING
data=p_result.
CATCH cx_sy_conversion_codepage CX_SY_CODEPAGE_CONVERTER_INIT CX_PARAMETER_INVALID_TYPE."捕獲下異常
ENDTRY.
endform. "hex_to_utf8
8
文
在上一篇文章
《揭秘AGV物流機器人黑科技》
發表后,有讀者問我一個問題:“請問物聯網平臺下的EWM和TPS與AGV交互時那個是負責協議轉換的? 相關的通信協議和格式有哪些?”
我當時就想說“This is a very good question”,因為我只知道海康使用的是TCP協議,但是EWM和AGV到底是怎么對接的,我也沒搞清楚。
本著為讀者服務的精神,我決定把這個事情弄明白。于是,我動用了自己三十年的積蓄人脈,終于找到了一位來自SAP中國研究院的高人——楊彥塵(Edwin)。
接下來,我會請這位同學出場,來向大家解釋一下SAP EWM和AGV機器人究竟是如何連接起來的。
正文
在工業4.0的浪潮下,SAP的EWM已經變得越來越智能。如今AGV這個看起來萌萌噠的小伙伴也加入了EWM的朋友圈。
也有人叫我“鐵毛驢、鐵烏龜”
很多攻城獅都對EWM如何與AGV對接的問題感興趣,那么本文就來探討一下如何讓EWM和AGV做朋友吧。
首先,我們來探討以下三個名詞EWM,RCS,AGV。以及他們在集成場景下的角色。
先舉個栗子,某天你和心中的女神約飯,你打開點評軟件找到了合適的餐館,然后打開導航軟件,在志玲姐姐“向左轉,向右轉”的提示音下,開車到達了目的地,愉快地增進了你們的友誼。
在以上場景中,EWM就好像是你的點評軟件,她會智能地根據出庫或者入庫的規則,推薦目標BIN位(餐館),然后生成倉庫任務。
在傳統EWM的應用場景下,這些任務會由倉庫的工人去執行。但是在EWM和AGV集成的場景下,這些任務是由這些抗得了重擔,鉆得了貨架的AGV執行,這個時候只知道目標BIN位AGV是一臉懵逼的,此時需要老司機RCS出場。
RCS(Robot Control System)就是以上場景中的導航軟件,通常會由AGV的供應商提供。她就像倉庫中AGV的交通指揮官,是倉庫的塔臺。
RCS會知道AGV的位置在哪里,BIN位到BIN位之間的路徑有哪些,哪些路徑已經比較擁堵,然后指揮AGV更有效率的完成倉庫任務。
敲黑板,EWM是負責倉庫任務的創建,RCS負責把倉庫任務委派給合適的AGV,然后指揮AGV完成倉庫任務并且向EWM報告完成情況。
通過以上解釋,聰明的同學已經發現了,如果能解決EWM和RCS之間的通訊問題,那么EWM就能讓AGV歡快地執行倉庫任務了。
通訊問題具體怎么解決呢?以下介紹三種姿勢。
第一種情況,假設你的合作伙伴能提供一個“靈活”的RCS,也就是說,具備利用Java或者C#,以及SAP的RFC庫進行一定程度的開發。
那么我們可以利用SAP提供的Connect subsystem功能,通過IDOC進行通信(SPRO→Extended Warehouse Management→Interfaces→Non-SAP Systems→Connect Subsystem)。
在這個場景下,EWM會將創建的倉庫任務,通過消息類型/SCWM/WMTORD傳遞到RCS,在RCS指揮AGV完成任務之后,通過消息類型/SCWM/WMTOCO通知EWM,EWM再完成相關倉庫任務的確認。
想要了解更多,可以搜索SAP help portal上Interface Between EWM and Non-SAP Systems,傳送門
https://help.sap.com/viewer/search?q=Interface%20Between%20EWM%20and%20Non-SAP%20Systems&state=PRODUCTION&language=en-US&format=standard,html,pdf,others
這種做法利用了EWM的標準功能,并且能夠準確實時地更新倉庫任務的狀態。如果你是AGV的供應商,并且實現了以上接口,那么你就打開了SAP EWM客戶的大門,想想是不是有些小激動呢?
第二種情況,很不幸你遇到了一個“固執”的RCS系統,但幸運的是,RCS提供了基于Web Service的接口。
這個時候,我們可以通過開發接口程序,然后設置為定時任務,將EWM新建立的倉庫任務,通過ABAP Http Client調用Web Service的方式傳遞給RCS。
接著再讀取RCS完工的倉庫任務并且更新EWM的狀態。這種做法需要在EWM做一定程度的定制開發,并且和特定的RCS系統緊耦合在一起,是一種折衷的做法。
第三種情況,某些場景對實時性的要求很高,需要有一種辦法,讓EWM跳過RCS,直接利用IoT的方式連接到AGV,并且指揮AGV完成倉庫任務。
這種方法就是SAP EWM MFS。MFS可以讓EWM通用TCP/IP的方式,直接連接到AGV的PLC芯片,聽上去是不是很Cool!不過礙于篇幅此處就不展開了。
有興趣的小伙伴可以參閱SAP help portal上關于 MFS的相關內容,傳送門
https://help.sap.com/viewer/search?q=MFS&state=PRODUCTION&language=en-US&format=standard,html,pdf,others
謝謝各位能閱讀到這里!課堂總結啦。SAP EWM與AGV對接有間接和直接兩種模式。
SAP EWM可以通過IDOC或Web Service的方式與RCS通信,間接完成與AGV的集成。
另外也可以通過MFS + TCP/IP的方式直接與AGV集成。
希望這篇文章能夠讓大家多了解一些SAP EWM的小知識,與SAP一起,把倉庫管理變得越來越智能!
結語
不知道大家看完了以后有什么感覺?是不是被一堆專業詞匯IDOC,Web Service,IoT,調用,緊耦合。。。搞得有點迷糊。
對于大多數小伙伴來說,我們不需要去搞明白這些專業術語到底代表了什么意思,只需要了解系統運作的基本原理就足夠了,就像是SAP EWM有多種解決方案,可以根據不同的RCS/AGV的配置和實際需要使用的場景,精準地提供EWM→RCS→AGV的無縫連接,讓物流機器人效率更高,倉庫車間的智能化增強,企業的供應鏈敏捷性提升。
關于SAP EWM
SAP Extended Warehouse Management(擴展倉儲管理),搭載了物聯網技術,在集成、管理機器人方面具有很大的優勢。
它支持靈活可配置的出入庫策略,滿足不同類型貨品的多樣化庫存管理需求,支持用戶實現真正意義上的柔性化生產。
SAP EWM與ERP、MES等系統無縫對接,接收并執行物流指令,可以做到生產與物流管理的系統化、一體化、透明化和智能化。
關于作者:
楊彥塵(Edwin Yang),高級研發工程師,SAP中國研究院。
再次感謝Edwin對本文做出的貢獻!
- END -
*請認真填寫需求信息,我們會在24小時內與您取得聯系。