“数据结构+算法”视角的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.

 

目录
相关文章
|
29天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
45 1
|
1月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
104 4
|
6天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
46 20
|
1月前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
29天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
1月前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
103 23
|
1月前
|
算法
数据结构之蜜蜂算法
蜜蜂算法是一种受蜜蜂觅食行为启发的优化算法,通过模拟蜜蜂的群体智能来解决优化问题。本文介绍了蜜蜂算法的基本原理、数据结构设计、核心代码实现及算法优缺点。算法通过迭代更新蜜蜂位置,逐步优化适应度,最终找到问题的最优解。代码实现了单链表结构,用于管理蜜蜂节点,并通过适应度计算、节点移动等操作实现算法的核心功能。蜜蜂算法具有全局寻优能力强、参数设置简单等优点,但也存在对初始化参数敏感、计算复杂度高等缺点。
62 20
|
29天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
62 1
|
1月前
|
机器学习/深度学习 算法 C++
数据结构之鲸鱼算法
鲸鱼算法(Whale Optimization Algorithm,WOA)是由伊朗研究员Seyedali Mirjalili于2016年提出的一种基于群体智能的全局优化算法,灵感源自鲸鱼捕食时的群体协作行为。该算法通过模拟鲸鱼的围捕猎物和喷出气泡网的行为,结合全局搜索和局部搜索策略,有效解决了复杂问题的优化需求。其应用广泛,涵盖函数优化、机器学习、图像处理等领域。鲸鱼算法以其简单直观的特点,成为初学者友好型的优化工具,但同时也存在参数敏感、可能陷入局部最优等问题。提供的C++代码示例展示了算法的基本实现和运行过程。
53 0
|
1月前
|
算法 vr&ar 计算机视觉
数据结构之洪水填充算法(DFS)
洪水填充算法是一种基于深度优先搜索(DFS)的图像处理技术,主要用于区域填充和图像分割。通过递归或栈的方式探索图像中的连通区域并进行颜色替换。本文介绍了算法的基本原理、数据结构设计(如链表和栈)、核心代码实现及应用实例,展示了算法在图像编辑等领域的高效性和灵活性。同时,文中也讨论了算法的优缺点,如实现简单但可能存在堆栈溢出的风险等。
47 0