1.        概述

Asprova[1] APS是一款专业的生产排产系统,深入学习Asprova对于理解和实践APS,以及研发生产制造类软件都有很好的参考价值。Asprova经过多年的生产实践,具备强大的功能和丰富的操作界面,但也导致模型较为复杂,学习难度较大。本文以“数据结构+算法”视角抽离出可应用于实践的Asprova极简模型,便于理解和扩展。

2.        生产排程

图 1 生产排程

生产排程主要包括以下主要功能:

n  模板数据:主要包括制造BOM,出勤模式表,生产日历表等;

n  订单表:包括制造订单、库存、销售订单、采购订单,本文主要指制造订单;

n  排程逻辑:基于计划参数,进行订单展开、订单分派和计划评估;

n  生成指令:制订的计划向现场传达工作指示;

n  实绩:工厂中根据指令实行制造,便可以取得实绩。

系统依次执行如下过程:

(1)       用户:配置模板数据;

(2)       用户:配置计划参数;

(3)       用户:录入制造订单;

(4)       系统:执行排程逻辑;

(5)       用户:制作生产指令;

(6)       用户:提交工作实绩。

3.        模板数据

3.1.        制造BOM

3.1.1.       工序概略

ABC公司采购原材料M1、X并通过加工、组装、包装工序最后生产出产品AX100、AX200、BX100、BX200、CX100、CX200。用工序的概略图来表示各产品每个工序的流程。

图 2 工序概略图

3.1.2.       制造BOM

制造BOM描述所有品目的制造流程,每个品目的制造流程由多道工序顺序连接而成,每道工序关联资源。

下图以品目A为例,品目A由CT、PR和CK三道工序顺序制造而成,每道工序的资源为CT1、PR1以及CK1和CKR;

图 3 品目A制造流程

图 4 Asprova图形显示的品目A的制造流程

制造BOM用以下表格进行数据维护:

表格 1 制造BOM实例

品目

工序编号

工序代码

指令种类

指令代码

品目/资源

制造

移动时间MIN

A

10

CT

输入指令

In

M1

0.01

使用指令

M

CT1

6sp

20

PR

使用指令

M

PR1;PR2

5sp

60

30

CK

使用指令

M

CK1

6sp

60

使用指令

S0

CKR

0

用户输入制造BOM,制造BOM生成品目、工作模板、指令模板等多个数据结构。制造BOM和品目、工作模板、指令模板的关系如下图所示:

图 5 制造BOM数据结构

3.1.3.       制造BOM(IO) 类

表格 2 制造BOM类

名称

数据类型

属性名

说明

品目

对象

Item

A

工序编号

整数

ProcNo

10

工序代码

WBS引用

ProcCode

CT、PR、CK:制造品目A的工序模板

指令类别

枚举

InstructionType

(1)     输入指令;

(2)     使用指令;

指令代码

字符串

InstructionCode

(1)     In;

(2)     M

品目/资源

对象

ItemOrResource

(1)     M1;

(2)     CT1、PR1、CK1、CKR

前设置

表达式

Task1Expr

制造

表达式

Task2Expr

6sp

后设置

表达式

Task3Expr

接续方法

枚举

TimeConstraintMethod

ES

移动时间MIN

时间表达式

TimeConstraintMin

移动时间MAX

时间表达式

TimeConstraintMax

资源优先度

实数

Priority

设置分派优先度。优先大的数值。

3.2.        制造BOM生成:品目/资源

3.2.1.       品目类

制造BOM通过类中“工序编码”和“指令代码”可生成品目类,并设定与品目相关的制品、半成品以及原料等数据。

3.2.1.1.       数据结构

表格 3 品目类

名称

数据类型

属性名

说明

品目名

BSTR

Name

品目的名称。

子品目

ASOObjectList

LeftItemList

生产该品目时候投入的原料。

父品目

ASOObjectList

RightItemList

投入该品目而生产的品目。

子品目(递归)

ASOObjectList

LeftmostItemList

递归地搜索生产该品目时候所投入的原料。

父品目(递归)

ASOObjectList

RightmostItemList

投入该品目而生产的最终品目。

子对象

对象

<RO> <Multi>

Child

次级子对象。

【共同】-【子对象】:工作模板

3.2.1.2.       算法

表格 4 制造BOM

品目

工序编号

工序代码

指令种类

指令代码

品目/资源

A

10

CT

输入指令

In

M1

使用指令

M

CT1

20

PR

使用指令

M

PR1;PR2

30

CK

使用指令

M

CK1

使用指令

S0

CKR

表格 5 品目类

品目名

子品目

父品目

子对象

A

M1

AX

CT;PR;CK

AX

A;X

AX100;AX200

KD;CK

AX100

AX

-

PK

AX200

AX

-

PK

X

-

AX

-

M1

-

A

-

表格 6 品目生成算法

3.2.2.       工作模板:BOM(工序选定器/工作模板/任务选定器) 类

3.2.2.1.       数据结构

表格 7 工作模板

名称

数据类型

属性名

说明

种类

TMasterType

Type

主数据对象类别。【工作模板】

工序

ASBProcess

Proc

工序对象

前工序

对象

<RO> <Multi>

PrevProc

前工序

后工序

对象

<RO> <Multi>

NextProc

后工序

父品目

对象

<RO> <Multi>

RightItem

将该品目当作工序的品目。

输入指令

对象

<RO> <Multi>

InputInstruction

输入指令。

输出指令

对象

<RO> <Multi>

OutputInstruction

输出指令。

使用指令

对象

<RO> <Multi>

UseBomInstruction

使用指令。

工作/任务

对象

<RO> <Multi>

Work

使用主数据工作/主数据任务的工作/任务

【前置任务】、【制造任务】

3.2.2.2.       算法

表格 8 制造BOM

品目

工序编号

工序代码

指令种类

指令代码

品目/资源

A

10

CT

输入指令

In

M1

使用指令

M

CT1

20

PR

使用指令

M

PR1;PR2

30

CK

使用指令

M

CK1

使用指令

S0

CKR

表格 9 工作模板

工序

父品目

输入指令

使用指令

CT

A

In

M

PR

A

-

M

CK

A

-

M;S0

表格 10 工作模板生成算法

1.         输入:【制造BOM类】

2.         遍历【制造BOM类】的每个[品目]-[工序]-[指令种类]

3.         输出:【工作模板】

3.2.3.       输入指令模板

3.2.3.1.       数据结构

表格 11 制造BOM

名称

数据类型

属性名

说明

品目

ASBItem

Item

该输入指令的品目。

工序

(工作/任务/选择器)

ASBMaster

Master

该指令所包括的所有对象。

输入指令管理

ASBInputInstructionMaster

InputInstructionMaster

该输入指令所参照的输入指令管理。

输入指令

对象

<RO> <Multi>

InputWorkInst

参照该使用指令模板的工作使用指令。

制造

表达式

InputBomInst

设定相对1个单位的输出指令品目,所必需的输入指令品目数量。

3.2.3.2.       算法

表格 12制造BOM

品目

工序编号

工序代码

指令种类

指令代码

品目/资源

制造

A

10

CT

输入指令

In

M1

0.01

使用指令

M

CT1

6sp

20

PR

使用指令

M

PR1;PR2

5sp

30

CK

使用指令

M

CK1

6sp

使用指令

S0

CKR

0

表格 13 输入指令模板

品目

工作/任务/选择器

输入指令管理

制造

M1

CT

In

0.01

3.2.4.       使用指令模板

3.2.4.1.       数据结构

表格 14 使用指令模板

名称

数据类型

属性名

说明

资源

ASBResource

Resource

分派可能的资源。

工序

(工作/任务/选择器)

ASBMaster

Master

该指令所包括的所有对象。

使用指令管理

ASBUseInstructionMaster

UseInstructionMaster

工作使用指令

对象

<RO> <Multi>

UseInst

参照该使用指令模板的工作使用指令。

3.2.4.2.       算法

表格 145制造BOM模板

品目

工序编号

工序代码

指令种类

指令代码

品目/资源

A

10

CT

输入指令

In

M1

使用指令

M

CT1

20

PR

使用指令

M

PR1;PR2

30

CK

使用指令

M

CK1

使用指令

S0

CKR

表格 16 使用指令模板

资源

工作/任务/选择器

使用指令管理

CT1

CT

M

PR1;PR2

PR

M

CK1

CK

M

CK1

CKR

S0

表格 17 使用指令模板生成算法

1.         输入:【制造BOM类】

2.         遍历【制造BOM类】的每个[品目]-[品目/资源]-[工序]-[指令种类]

3.         输出:【使用指令模板】

3.3.        出勤模式表

出勤模式用于设定一天中工作时间段的模式。

图 6 出勤模式

3.4.        生产日历表

生产日历设定每个源/毎日的出勤模式。

图 7 生产日历

4.        排程逻辑

4.1.        数据结构

图 8 排程算法数据结构

图 9 分派结果

4.1.1.       订单类:Order

表格 18 订单类

名称

数据类型

属性名

说明

订单种类

TOrderType

Order_Type

设定订单的种类。

订单区分

TIsReplenishmentOrder

IsReplenishmentOrder

区分是补充订单还是登录订单。

品目

ASBItem

Item

订单的品目。

订单数量

double

Qty

订单数量

优先度

double

Priority

设定优先度。在计画参数的分派键[订单优先度]中使用该值,决定分派顺序。

分派方向

TOrderAssignmentDirection

AssignmentDirection

设定订单分派方向

Ø  未指定 与[根据优先度]相同。

Ø  F 正方向 将订单正向分派。

Ø  B 逆方向 将订单逆向分派。

Ø  P 遵从优先度 将订单按照优先度的分派方向分派。

交货期

DATE

LET

交货期

工作

对象<RO> <Multi>

Order_Operations

此订单的工作列表。它既包含分割父工作又包含分割子工作。如果订单是一个订单组,那么它还会包含工作组。

子订单

ASOObjectList<RO> <Multi>

LeftOrderList

与原材料方面(左侧)关联的订单。

父订单

ASOObjectList<RO> <Multi>

RightOrderList

关联在右侧的订单。

4.1.2.       工作类

表格 19 工作类

名称

数据类型

属性名

说明

种类

TWorkType<RO>

Work_Type

工作的种类。有工作/分派工作途径/制造任务/前设置任务/后设置任务/资源锁定任务。

工作模板

ASBMaster

Work_Bom

现在引用的主数据工作。

前工序工作

ASBOperation

PrevOperation

前工序工作。包括不同订单的工作以及由后订单关联的工作。

后工序工作

ASBOperation

NextOperation

后工序工作。包括不同订单的工作以及由后订单关联的工作。

前设置任务

ASBOperation::SetupTask

SetupTask

前设置任务

制造任务

ASBOperation::ProductionTask

ProductionTask

制造任务。

后设置任务

ASBOperation::TeardownTask

TeardownTask

后设置任务。

4.1.3.       制造任务:工作类

表格 20 制造任务

名称

数据类型

属性名

说明

种类

TWorkType<RO>

Work_Type

工作的种类。有工作/分派工作途径/制造任务/前设置任务/后设置任务/资源锁定任务。

工作模板

ASBMaster

Work_Bom

现在引用的主数据工作。

工作输入指令

ASBInputInstruction

InputInstructions

该工作的下面存在的工作输入指令。

工作输出指令

ASBOutputInstruction

OutputInstructions

输出指令。

工作使用指令

ASBUseInstruction

UseInstructions

该工作正下方存在的工作使用指令。

4.1.4.       工作使用指令类

表格 21 工作使用指令类

名称

数据类型

属性名

说明

资源

ASBResource

Resource

该工作使用指令被分派(上回为止)的资源。

4.2.        排程算法

4.2.1.       伪代码

表格 22 排程算法流程

1.         订单录入:输入完成品的制造订单【订单表】;

2.         订单补充:将完成品的每个子品目生成补充订单

2.1.  获得品目:【订单表】à[品目项]à【品目表】,通过迭代【品目表】找到所有子品目;

2.2.  补充订单:每个子品目补充【订单表】;

3.         订单展开:将每项工作对应资源

3.1.  生成工作:【订单表】à[品目项]à【品目表】à[子对象](共同-子对象:工序模板)à根据工序模板生成【工作表】;

3.2.  生成任务:【工作表】à[工作模板项]à【工作模板表】à[工作/任务](链接-工作/任务)-[制造项]à【制造任务表】;(工作模板表结合制造BOM生成任务)

3.3.  生成指令:【制造任务表】à [工作输入指令项]、[工作输出指令项]以及[工作使用指令项](链接);

3.4.  关联设备:[工作使用指令项]à【工作使用指令表】à[资源]

4.         分派

4.1.  分派方向:计划参数的分派方向,订单的分派方向,订单优先度决定分派方向。分派方向根据正向或者逆向,决定从哪个工作开始进行分派;

4.2.  分派顺序:订单之间的顺序,分派顺序设置:【计划参数设置】-【基本】-【分派规则】;

4.3.  实际分派:按【分派顺序】从选择【订单】,在每个【订单】中根据【分派方向】选择【工作】,确定每项【工作】中各项【任务】在【资源】上的开始时间和结束时间。

5.         计划评估

5.1.  排程后,输出【逾期订单数】、【交货期遵守率】、【平均等待时间】等评估指标。

4.2.2.       流程图

图 10 算法数据结构流程

5.        小结

通过模板数据和排程逻辑的数据结构和算法给出了Asprova APS极简的业务模型,通过这个模型可以了解制造BOM(工艺)、工序、订单、工作、任务、指令以及品目/资源等要素如何协同工作,完成生产排程流程。后续在此基础模型之上,继续深入研究Asprova的模板数据和排程逻辑的约束条件,逐步完善业务模型,不断满足工厂的实际需求。

初学Pascal已经是20多年前事了,不论是WSN、CBTC还是APS,专业方向和业务在不断变迁,但Niklaus Wirth[2]提出的“算法+数据结构=程序”这个公式却依旧指导着老程序员们继续前行。

参考文献

[1] Asprova[EB/OL]. www.asprova.cn/.

[2] Niklaus Wirth[EB/OL]. https://baike.baidu.com/item/尼古拉斯·沃斯/1095875.

“数据结构+算法”视角的Asprova相关推荐

  1. 数据结构算法-队列技术点

    基本描述 排队,做核酸这些大家都有吧, 学校打饭是不是按照队伍的形式来 打饭? 队列原理精讲 队列:是一个先进先出 的一种数据结构, 队列:受限线性结构; 队列::只允许前面出队后面入队 出队的时候有 ...

  2. 数据结构算法集---C++语言实现

    /// // // // 堆栈数据结构 stack.h // // // /// #include<iostream.h> template<class Type>class ...

  3. 横空出世,席卷Csdn [评微软等公司数据结构+算法面试100题]

    横空出世,席卷Csdn ---评微软数据结构+算法面试100题 作者:July 时间:2010年10月-11月.版权所有,侵权必究. --------------------------------- ...

  4. 微软等数据结构+算法面试100题全部答案集锦

    微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...

  5. 横空出世,席卷互联网--评微软等公司数据结构+算法面试100题

    横空出世,席卷互联网                                                                          ---评微软数据结构+算法面试1 ...

  6. [整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]

    精选微软等公司,数据结构+算法,经典面试100题                                       --------之前40题 --------------- ------- ...

  7. Interview:算法岗位面试—10.29下午上海某电子(偏传统ML算法,外企)数据结构算法+晚上国内某保险公司(偏AI算法,世界500强)技术面试之分类算法、回归算法、聚类算法等细节考察

    ML岗位面试:10.29下午上海某电子(偏传统ML算法,外企)数据结构算法+晚上国内某保险公司(偏AI算法,世界500强)技术面试之分类算法.回归算法.聚类算法等细节考察 Interview:算法岗位 ...

  8. [最新答案V0.4版]微软等数据结构+算法面试100题[第41-60题答案]

    [最新答案V0.4版]微软等数据结构+算法面试100题[第41-60题答案] 作者 July.Csdn网友 二零一一年一月四日 ------------------------------------ ...

  9. 7.使用php描述冒泡排序,PHP 数据结构 算法描述 冒泡排序 bubble sort

    PHP 数据结构 算法描述 冒泡排序 bubble sort 复制代码 代码如下: /** * 冒泡排序 bubble sort * * 原理:多次循环进行比较,每次比较时将最大数移动到最上面.每次循 ...

最新文章

  1. json java typeof_java解析json
  2. window.opener方法的使用 js跨域
  3. 解决“错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题
  4. HTML`CSS_网站页面不同浏览器兼容性问题解决
  5. 关于大数据的那些事儿
  6. 用心推荐三个嵌入式方向精品号
  7. Opencv中的Laplacian(拉普拉斯算法)
  8. [oracle] Instant Client 即时客户端
  9. Android APP极光推送取消关联启动配置
  10. 关于商业企业创业的思考
  11. 英安特1600说明书_英安特AW-BM1600-8A电话线/GSM/IP三网合一报警控制主机
  12. POJ 2540 Hotter Colder(半平面交求可行域)
  13. 高数笔记(三):函数的连续性和间断性,闭区间上连续函数的性质
  14. JQuery中$是什么?
  15. Cocos Creator 下载图片动态替换纹理
  16. html前台日历,calendar.html
  17. 通过淘宝接口获取手机号码归属地
  18. eclipse汉化方式(下载,安装,中英切换)
  19. matlab绘图:将图导出在ppt上使用的三维矢量图
  20. ALIENTEK 战舰ENC28J60 LWIP和UIP补充例程(LWIP WEB有惊喜)

热门文章

  1. 单片机C语言任何位置跳转到任何指定地址 -转
  2. [Java] 蓝桥杯ALGO-115 算法训练 和为T
  3. [Java] 蓝桥杯ALGO-39 算法训练 数组排序去重
  4. [swift] LeetCode 234. Palindrome Linked List
  5. PAT 1066. 图像过滤(15)-乙级
  6. lsof查找放进linux回收站中的删除文件,并彻底删除或恢复文件
  7. 通过MBean server监控weblogic应用
  8. 如何安装和配置 AngularJS Eclipse
  9. java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException
  10. 如何聊离职原因,向面试官展示自己的忠诚