“数据结构+算法”视角的Asprova

简介: Asprova APS是一款专业的生产排产系统,深入学习Asprova对于理解和实践APS,以及研发生产制造类软件都有很好的参考价值。Asprova经过多年的生产实践,具备强大的功能和丰富的操作界面,但也导致模型较为复杂,学习难度较大。


 

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公司采购原材料M1X并通过加工、组装、包装工序最后生产出产品AX100AX200BX100BX200CX100CX200。用工序的概略图来表示各产品每个工序的流程。


2 工序概略图

3.1.2.       制造BOM

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

下图以品目A为例,品目ACTPRCK三道工序顺序制造而成,每道工序的资源为CT1PR1以及CK1CKR


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

CTPRCK:制造品目A的工序模板

指令类别

枚举

InstructionType

(1)     输入指令;

(2)     使用指令;

指令代码

字符串

InstructionCode

(1)     In

(2)     M

品目/资源

对象

ItemOrResource

(1)     M1

(2)     CT1PR1CK1CKR

前设置

表达式

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

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

子对象

对象

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

工序对象

前工序

对象

PrevProc

前工序

后工序

对象

NextProc

后工序

父品目

对象

RightItem

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

输入指令

对象

InputInstruction

输入指令。

输出指令

对象

OutputInstruction

输出指令。

使用指令

对象

UseBomInstruction

使用指令。

工作/任务

对象

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

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

输入指令

对象

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

 

工作使用指令

对象

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

交货期

工作

对象

Order_Operations

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

子订单

ASOObjectList

LeftOrderList

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

父订单

ASOObjectList

RightOrderList

关联在右侧的订单。

 

4.1.2.       工作类

表格 19 工作类

名称

数据类型

属性名

说明

种类

TWorkType

Work_Type

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

工作模板

ASBMaster

Work_Bom

现在引用的主数据工作。

前工序工作

ASBOperation

PrevOperation

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

后工序工作

ASBOperation

NextOperation

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

前设置任务

ASBOperation::SetupTask

SetupTask

前设置任务

制造任务

ASBOperation::ProductionTask

ProductionTask

制造任务。

后设置任务

ASBOperation::TeardownTask

TeardownTask

后设置任务。

 

4.1.3.       制造任务:工作类

表格 20 制造任务

名称

数据类型

属性名

说明

种类

TWorkType

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多年前事了,不论是WSNCBTC还是APS,专业方向和业务在不断变迁,但Niklaus Wirth[2]提出的“算法+数据结构=程序”这个公式却依旧指导着老程序员们继续前行。

 

参考文献 [1] Niklaus Wirth[EB/OL]. https://baike.baidu.com/item/尼古拉斯·沃斯/1095875.

 

目录
相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
84 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
2月前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
33 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
2月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
36 4
|
2月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
22 0
数据结构与算法学习十四:常用排序算法总结和对比
|
2月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
37 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
2月前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
2月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
25 0
|
27天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
123 9
|
18天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
23 1
|
6天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
28 5