章概述了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小时内与您取得联系。