如何编制装箱的优化程序,使得装箱尺寸最小?

介绍:
在包装行业,需要在确保最小重量的情况下将产品装箱,如图 01 所示,三种不同重量的产品,需要确保优化为最小 300g 的重量。n

如何编制装箱的优化程序,使得装箱尺寸最小?
图01n

一个解决这种问题的方法为:比较每种情况下的重量组合,通过比较这些结果来决定最终优化的解决方案。

编号 选择物品组合 重量(总重) 结果
1 A 150g <300g
2 B 160g <300g
3 B+A 310g >=300g (优化结果)
4 C 170g <300g
5 C+A 320g >=300g
6 C+B 330g >=300g
7 C+B+A 480g >=300g

表 01 n

这些组合可以用二进制等式显示。第一位对应于产品 A,第二位对应于产品 B,第三位对应于产品 C。在此例中,序号 3 拥有最优的 310g 组合。组合“B+A”对应于二进制代码“011”。n

Combination
o.
Binary code Result
1 001 A
2 010 B
3 011 B A
4 100 C
5 101 C A
6 110 C B
7 111 C B A

表02 n

“BestWahl”(“最优选择”)下载拥有两个 S7-SCL 源程序可以实现上面显示的功能。在 OB1 中使用它们的背景数据块,分别调用功能 FB1(源文件“all combinations”)及 FB2(源文件“selected combinations”)。n

编号 功能块描述:
1 FB1(源文件“all combinations”)
FB1 根据特定的最小重量,测试所有的组合并选择最优的组合。最多可以输入 32 个需要组合的值。FB1 的参数如下: n

  • IN:“No_Measures”, 数据类型:整数
    输入需要测量的值(产品数量)n
  • IN:“Min_Weight”, 数据类型:实数
    输入组合的最小重量n
  • IN:“Measures[0] to Measures[31]”, 数据类型:实数
    输入最多 32 个决定组合的输入值n
  • OUT:“Best_Weight”,数据类型:实数
    显示计算后选择的优化组合。n
  • OUT:“Best_Choice[0] to Best_Choice[31]”,数据类型:实数
    显示(二进制)参照于最小重量的最佳组合n
  • OUT:“No Solution”, 数据类型:布尔量
    当没有组合达到最小重量时,此变量被置为“TRUE”

图02 显示了变量表 VAT_1 的第一部分。它用来监视和控制 FB1。对应于图 01中的例子,参数“Ex1”.No_Measures 接收到数值 3(产品数量为3),参数 “Ex1”.Min_Weight 接收到数值 300(最小重量300g)。A,B,C 每种产品的重量按照二进制代码(表 02)被赋给参数 “Ex1”.Measures[0],“Ex1”.Measures[1]及 “Ex1”.Measures[2]。n

如何编制装箱的优化程序,使得装箱尺寸最小?
图02n

优化的总重(此处为310.0)由变量表第二部分的参数 “Ex1”.Best_Weight 输出。变量 “Ex1”.Best_Choice[0],对应于产品 A (= TRUE)变量 “Ex1”.Best_Choice[1] 对应于产品B (= TRUE )。n

如何编制装箱的优化程序,使得装箱尺寸最小?
图03

2

FB2(源文件“selected combinations”)
参照表 2 ,可以限制选择一部分组合。如果考虑单元的最大重量,如下公式可以用来计算达到最小重量所需的最少单元数。n

  1. 组合最小数量=所需最小重量 / 最大单元重量 = 300g / 170g = 1.76 ~ 2

如果考虑单元的最小重量,如下公式可以用来计算达到最小重量所需的最多单元数n

  1. 组合最多数量=所需最小重量 / 最小单元重量 = 300g / 150g = 2.

在本例中,组合的数量即可由 7 减少到 4。如果这些组合被分为一些产品组,不同于 FB1(源文件“all combinations”)测试所有组合,FB2 仅测试选择的组。n

FB2参数如下: n

  • IN:“No_Measures”, 数据类型:整数
    输入需要测量的值(产品数量)n
  • IN:“Min_Weight”, 数据类型:实数
    输入组合的最小重量n
  • IN:“Measures[0] to Measures[31]”, 数据类型:实数
    输入最多 32 个决定组合的输入值n
  • OUT:“Best_Weight”,数据类型:实数
    显示计算后选择的优化组合n
  • OUT:“Best_Choice[0] to Best_Choice[31]”, 数据类型:实数
    显示(二进制)参照于最小重量的最佳组合。n
  • OUT:“No Solution”,数据类型:布尔量
    当没有组合达到最小重量时,此变量被置为“TRUE”n
  • OUT:“Parameter_error”, 数据类型:布尔量
    当“No_Measures”不在允许范围或“Min_Weight”为负值时,此变量被置为“TRUE”

图04 显示了变量表VAT_2 的第一部分,它用来监控及控制FB2。参数 “Ex2”.No_Measures 接收数值 8 (产品数为 8 ),参数 “Ex2”.Min_Weight receives 接收数值 300(最小所需重量 300g)。8 种产品的重量通过参数 “Ex2”.Measures[0]至 “Ex2”.Measures[7]输入。n

如何编制装箱的优化程序,使得装箱尺寸最小?
图04n

在变量监控表的第二部分,优化总重(此处为300.0)通过参数 “Ex2”.Best_Weight 来输出。当组合的二进制代码输出时,参数 “Ex2”.Best_Choice[0] 及“Ex2”.Best_Choice[2]至 “Ex2”.Best_Choice[6] 为 TRUE。n

如何编制装箱的优化程序,使得装箱尺寸最小?
图05

表03 n

性能:
程序块的运行时间取决于组合的数量,此数量和产品数量的关系可表达为:n

  • 组合数量 =2^ 产品数量- 1

因此产品数量的增长会严重影响运行时间。下表显示了在 CPU 315-2 PN/DP 使用 FB1 的运行时间与产品数量的关系。

FB1
产品数量 运行时间
2 4 ms
3 5 ms
4 10 ms
5 17 ms
6 33 ms
7 68 ms
8 132 ms
9 263 ms

表 04 n

FB2 的运行时间取决于产品数量及产品分组。表 05 提供了不同分组情况下,FB1 及 FB2 的一个运行时间比较表

产品数量

FB1 运行时间FB2 运行时间
1至9个产品分组4至9个产品分组8个产品分组8个产品分组30个产品分组
10525 ms369 ms305 ms24 ms9 ms369 ms

表 05

参考于表 04 及 05,当产品数量比较少时,推荐使用 FB1。当产品数量增长后,FB1 的运行时间变长。所以当有 10 个产品时,推荐使用 FB2。通过产品分组,FB2 的运行时间显著变少。

下载:
附件“BestWahl.zip”包括一个上面描述的STEP7项目。将此文件复制到一个单独目录,并双击打开。这个 STEP7 v5.3 项目会自动解压缩所有的子目录。可以使用 SIMATIC Manager 来打开和测试解包的项目。

如何编制装箱的优化程序,使得装箱尺寸最小? BestWahl.zip ( 61 KB )

运行及测试环境: 
程序例子可以被SIMATIC S7-300, S7-400, C7和 WinAC 的 CPU 使用,下表列出了在生成本条目及校验功能的过程中使用的组件。

测试环境: 版本:
PC 平台 Intel(R) Pentium(R) M processor 1.73 GHz
PC 操作系统: Windows XP Professional SP2
STEP 7: V5.3 SP3
S7-SCL: V5.3 SP1
S7-PLCSIM: V5.3 SP1

表 06

关键词:
重量分配

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc336873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论