Skip to content

工作中心相关属性

概念通俗理解

  1. 工作中心通俗的讲就是“在哪里”生产,作业/工序通俗的讲就是“做什么”和“做多久”,物料清单通俗的讲就是“用什么”做。工作中心是执行生产工序的具体位置,比如一个车间,一条生产 线或一台特定机床
  2. 工作中心的表单属性 alt text (1)基本信息 代码:用来唯一标识工作中心,不允许重复理论;‘了,, 时间效率:100%,表示以标准速度工作,产能:1,表示这个中心同一时间只能处理1个生产订单 OEE 目标:90% 表示设备综合效率目标,用于绩效衡量 每小时成本:50.00 表示此中心每小时运行成本为50元,用于成本计算 (2)特定产能 用于定义“当某个具体产品在这个工作中心生产时,所特有的生产能力参数”,简单来说,它允许在同一个工作中心下的产品,设置不同的生产速度,准备时间和收尾时间,如果不填,系统将使用工作中心的默认通用设置。那什么情况下需要填写这个“特定产能”,在工作中心的生产效率因产品而异时,就需要填写 例如: 生产速率不同:
  • 在“木工加工中心”生产“简易板凳”每小时能做10个,但生产“复杂雕花衣柜”每小时只能做1个。 换产准备时间不同:
  • 从生产“床架”切换到生产“餐桌”,需要更换刀具、调整机器参数,可能需要30分钟。
  • 但从生产“餐桌A”切换到非常相似的“餐桌B”,可能只需要5分钟。 清理时间不同:
  • 生产完使用了深色油漆的产品后,清理喷枪和车间需要1小时,以免污染下个浅色产品。
  • 而生产同色系产品,清理可能只需10分钟 ** 如果所有产品在这个工作中心的生产效率都一样,则完全不需要填写此表,使用工作中心的默认能力即可。** alt text这配置表示产品: [6901028001618] 成品床-在成品仓生产 | 单位: 件 | 产能: 1 / h | 设置时间: 15 | 清理用时: 10 产品:选择在这个工作中心上生产的具体产品。 产品计量单位:自动带出该产品的单位(如“件”、“个”)。 产能:这个是最关键的 字段属性,定义的是单位时间内能生产多少件,格式为:数量/时间单位 ,时间单位可以是分钟(min)、小时(h)、天(d) 比如0.5/h 表示在该工作中心,生产“成品床”的速率是每小时0.5件(即生产一张床需要2小时)。 通俗得讲就是工作中心并行处理的能力,如设置为2,表示同时有2个工作中心同时处理。 设置时间(分钟):表示的是生产此产品前,需要花多长时间做准备工作(如上料、换模具、调机) 例如demo 数据中的 15:00 表示的是每次开始生产一张“成品床”前,需要15分钟准备木工机械和程序。 清理用时(分钟):表示的是生产此产品后,需要花多长时间做清理工作(如清扫木屑、归位工具)。 例如demo 数据中的10:00 表示的是每生产完一张“成品床”后,需要10分钟清理工作区域。
  1. 这些数据有什么用 当为“成品床”创建生产订单,且其中一道工序(如“床体木工组装”)在“木工加工中心”进行时,可以根据这里设定的数据: (1)计算总生产时间: 生产1件,所需加工时间= 1件 除于产能1件/小时 = 1小时 (2)计算总工序耗时: 总耗时 = 设置时间 + 生产时间 + 清理时间 eg:生产1张床的总工序耗时 = 15 分钟 + 60 分钟 + 10分钟 = 145 分钟 (3)用于精确排程 在安排生产计划时,会精确地预留出这15分钟的准备时间和10分钟的清理时间,使计划更符合实际,避免排程过于理想化。 (4)用于成本计算 这些时间会计入该工作中心的工时成本

  2. 填写这些字段值的技巧与注意事项 (1)产能字段的两种理解方式 方式一(推荐):单件耗时-> 1 / 耗时。例如,做一张床要2小时,则填 0.5 / h。 方式二:批量速率。例如,一个批次(4张床)需要8小时,则填 4 / 8 h,系统会自动计算为 0.5 / h。 (2)与“作业”默认时长的关系 作业中一般默认120分钟,如果在“特定产能”中为某个产品定义了不同的产能(如0.5/h),系统在执行这个产品的生产订单时,会优先使用“特定产能”里的数据,因为它更精确。 (3)设置/清理时间很重要 频繁换产或工艺复杂的产品,设置/清理时间会显著影响整体设备效率(OEE)。准确填写有助于发现生产瓶颈。

从源码上分析预计时长的计算公式

首先,先看配置相关图 alt text 接下来通过源码来研究这个预计时长的计算方法 alt textalt textalt text 这个方法是用来计算工作订单的预计持续时间(分钟) 参数: 参数:

  • alternative_workcenter: 替代工作中心(False表示使用当前工作中心)
  • ratio: 比例系数,用于调整工作时间 这个比例系数指的是作业中的员工能力,也就是完成作业所需的员工人数。 alt text 方法解析: (1)首先先基本校验
self.ensure_one()  # 确保只处理单个记录
  if not self.workcenter_id:  # 如果没有关联工作中心
      return self.duration_expected  # 直接返回当前预计时间

这意思就是没有工作中心的时候,就是制造工单行上当前设置的预计时长是多少就是多少了。 (2)情况1: 没有定义操作(operation_id)

  if not self.operation_id:
      # 计算预计工作时间 = (当前预计时间 - 启动时间 - 停止时间) × 效率
      duration_expected_working = (self.duration_expected -
                                   self.workcenter_id.time_start -
                                   self.workcenter_id.time_stop) * \
                                 self.workcenter_id.time_efficiency / 100.0
  
      if duration_expected_working < 0:  # 防止负值
          duration_expected_working = 0
  
      # 最终预计时间 = 工作中心基础时间 + 调整后的工作时间
      return (self.workcenter_id._get_expected_duration(self.product_id) +
              duration_expected_working * ratio * 100.0 / self.workcenter_id.time_efficiency)

** 这里涉及到工作中心的基础时间 ** alt textalt textalt text ** 工作中心的基础时间的计算逻辑:当工作中心有特定产能的时候,使用的特定产能这边配置的设置时间+清理时间,当没有配置特定产能的时候,使用的是基础信息上配置的设置时间+清理时间。 ** (3)情况2:定义了操作

计算生产数量(转换为产品基本单位)
  qty_production = self.production_id.product_uom_id._compute_quantity(
      self.qty_production,
      self.production_id.product_id.uom_id
  )
  
  获取工作中心容量
  capacity = self.workcenter_id._get_capacity(self.product_id)
  
  计算循环次数(向上取整)
  cycle_number = float_round(
      qty_production / capacity,
      precision_digits=0,
      rounding_method='UP'
  )

这里有涉及到工作中心获取工作中心容量的逻辑: alt text 这里的capacity 就是产能,当在中心中有配置特定产品的产能时,优先使用特定产能里的产能,其次才退而选择信息页中的产能。 alt textalt text 如果有设置替代工作中心: 则用的是替代中心的预计时长

if alternative_workcenter:
    # 计算单位循环的工作时间
    duration_expected_working = (
        self.duration_expected -
        self.workcenter_id.time_start -
        self.workcenter_id.time_stop
    ) * self.workcenter_id.time_efficiency / (100.0 * cycle_number)

    if duration_expected_working < 0:
        duration_expected_working = 0

    # 计算替代工作中心容量
    capacity = alternative_workcenter._get_capacity(self.product_id)
    alternative_wc_cycle_nb = float_round(
        qty_production / capacity,
        precision_digits=0,
        rounding_method='UP'
    )

    # 返回替代工作中心预计时间
    return (
        alternative_workcenter._get_expected_duration(self.product_id) +
        alternative_wc_cycle_nb * duration_expected_working * 100.0 / alternative_workcenter.time_efficiency
    )
(4)计算当前工作中心
  获取标准周期时间
  time_cycle = self.operation_id.time_cycle
  
  预计时间 = 工作中心基础时间 + 循环次数×周期时间×效率调整
  return (
      self.workcenter_id._get_expected_duration(self.product_id) +
      cycle_number * time_cycle * 100.0 / self.workcenter_id.time_efficiency
  )

这里的标准周期时间指的是操作中的默认时长 alt text cycle_number = float_round(qty_production / capacity, precision_digits=0, rounding_method='UP') 循环次数指的是从数量除了产能,得到需要循环几次

(5)公式 预计时间的通用公式如下: 预计总时间 = 固定时间 + 生产时间 其中: 固定时间 = 工作中心基础时间(启动/停止等) 生产时间 = 循环时间 * 效率调整系数

(5.1)解析如下: 固定时间计算 workcenter_id._get_expected_duration(self.product_id) 这个方法通常包括:

  • 工作中心的基本设置时间
  • 特定产品的额外准备时间
  • 标准化的固定操作时间 循环次数计算 生产数量转换为产品基本单位 qty_production = 单位转换(生产数量, 产品基本单位)

获取工作中心对该产品的容量 capacity = 工作中心.容量(产品)

计算循环次数(向上取整) //向上取整的意义:确保有足够的循环完成所有生产数量 循环次数 = CEIL(生产数量 / 容量) 效率调整 效率调整系数 效率调整系数 = 100.0 / 工作中心.时间效率

(6)计算流程图

开始计算预计时间 开始计算预计时间 ↓ 是否有工作中心? ├── 否 → 返回当前预计时间 ↓ └── 是 ↓ 是否有操作定义? ├── 否 → 使用简化计算 │ ↓ │ 工作时间 = (当前时间 - 启动 - 停止) × 效率 │ ↓ │ 总时间 = 基础时间 + 工作时间 × 效率调整 │ └── 是 → 使用标准计算 ↓ 计算生产数量(单位转换) ↓ 获取工作中心容量 ↓ 计算循环次数(向上取整) ↓ 是否计算替代工作中心? ├── 是 → 计算替代工作中心预计时间 │ ↓ │ 计算单位循环时间 │ ↓ │ 计算替代工作中心循环次数 │ ↓ │ 总时间 = 替代基础时间 + 循环次数×单位时间×效率调整 │ └── 否 → 计算当前工作中心预计时间 ↓ 获取周期时间 ↓ 总时间 = 基础时间 + 循环次数×周期时间×效率调整

三. 结合demo 数据演示计算

一般正常常用的的制造工单都会关联工作中心,都会配置特定产能,以及在物料清单中关联作业以及工作中心 alt text 1,制造订单 产品:成品床-在成品仓生产 计划数量:1件 生产数量:1.00件 alt textalt text 现在来计算这个260 以及 210 是怎么计算出来的 2,首先看一下工作中心的配置 alt textalt text 可以看到木工加工中心有配置特定产能,则优先使用产品相关的特定产能的值 木工加工中心:

  • 产品:成品床-在成品仓生产 (产品ID: 6901028001618)
  • 产能:0.50 件/小时
  • 设置时间:10分钟
  • 清理用时:10分钟
  • 时间效率:100%! alt textalt text 喷涂与烘干中心也配置了特定产能的产能产能数据如下: 喷涂与烘干中心:
  • 产品:成品床-在成品仓生产 (产品ID: 6901028001618)
  • 产能:0.67 件/小时
  • 设置时间:10分钟
  • 清理用时:20分钟
  • 时间效率:100%!

3,操作作业数据 alt text 床体木工组装操作:

  • 默认时长:120分钟
  • 员工能力:1.00 alt text 表面上漆与烘干操作:
  • 默认时长:90分钟
  • 员工能力:1.00 ** 公式:预计总时间 = 工作中心基础时间 + 循环次数 × 时间周期 × (100 / 时间效率)** 其中:
  • 工作中心基础时间 = 设置时间 + 清理用时
  • 循环次数 = CEIL(生产数量 / 工作中心产能)
  • 时间周期 = 操作默认时长
  • 时间效率 = 工作中心时间效率百分比

演示计算过程 (1)第一个工单:床体木工组装(预计260分钟) 收集参数:

  • 工作中心:木工加工中心
  • 产品:成品床-在成品仓生产
  • 生产数量:1件
  • 工作中心产能:0.50件/小时
  • 设置时间:10分钟
  • 清理用时:10分钟
  • 操作默认时长:120分钟
  • 时间效率:100%!

计算步骤: (1.1)计算工作中心基础时间 基础时间 = 设置时间 + 清理用时 = 10 + 10 = 20分钟 (1.2)计算循环次数 循环次数 = CEIL(生产数量 / 工作中心产能) = CEIL(1 / 0.5) = CEIL(2) = 2次 因为产能是0.5件/小时,生产1件需要2个循环。 (1.3)计算总时间 总时间 = 基础时间 + 循环次数 × 时间周期 × (100 / 时间效率) = 20 + 2 × 120 × (100/100) = 20 + 2 × 120 × 1 = 20 + 240 = 260分钟

(2) 第二个工单:表面上漆与烘干(预计210分钟) 收集参数:

  • 工作中心:喷涂与烘干中心
  • 产品:成品床-在成品仓生产
  • 生产数量:1件
  • 工作中心产能:0.67件/小时
  • 设置时间:10分钟
  • 清理用时:20分钟
  • 操作默认时长:90分钟
  • 时间效率:100%! 计算步骤: (2.1)计算工作中心基础时间 基础时间 = 设置时间 + 清理用时 = 10 + 20 = 30分钟 (2.2)计算循环次数 循环次数 = CEIL(生产数量 / 工作中心产能) = CEIL(1 / 0.67) = CEIL(1.4925) = 2次 因为产能是0.67件/小时,生产1件需要1.5个循环,向上取整为2次。 (2.3)计算总时间 总时间 = 基础时间 + 循环次数 × 时间周期 × (100 / 时间效率) = 30 + 2 × 90 × (100/100) = 30 + 2 × 90 × 1 = 30 + 180 = 210分钟

3)相关的源码验证如下: capacity = self.workcenter_id._get_capacity(self.product_id) 从图片数据得知: 木工加工中心:capacity = 0.5 喷涂与烘干中心:capacity = 0.67

qty_production = self.production_id.product_uom_id._compute_quantity( self.qty_production, self.production_id.product_id.uom_id ) 生产数量 = 1件 cycle_number = float_round(qty_production / capacity, precision_digits=0, rounding_method='UP') 木工加工中心:1 / 0.5 = 2.0 → 向上取整 = 2 喷涂与烘干中心:1 / 0.67 = 1.4925 → 向上取整 = 2 计算基础时间: time_start = 10分钟(设置时间) time_stop = 10分钟/20分钟(清理用时) 基础时间 = time_start + time_stop 获取操作周期时间: 床体木工组装:time_cycle = 120分钟 表面上漆与烘干:time_cycle = 90分钟

床体木工组装工单:260分钟 20分钟(基础时间:10分钟设置 + 10分钟清理)

  • 240分钟(生产时间:2个循环 × 120分钟/循环 × 100%!效(MISSING)率) = 260分钟

表面上漆与烘干工单:210分钟 30分钟(基础时间:10分钟设置 + 20分钟清理)

  • 180分钟(生产时间:2个循环 × 90分钟/循环 × 100%!效(MISSING)率) = 210分钟

为什么产能小于1会导致循环次数为2? 木工加工中心产能:0.50件/小时,表示每小时只能完成0.5件 喷涂与烘干中心产能:0.67件/小时,表示每小时只能完成0.67件 生产1件产品:由于两个工单的产能都小于1,所以生产1件产品都需要超过1个循环

向上取整规则的影响 根据代码中的 float_round函数和 rounding_method='UP': 床体木工组装:1 ÷ 0.5 = 2.0 → 取整后为2 表面上漆与烘干:1 ÷ 0.67 ≈ 1.4925 → 向上取整为2

时间效率的作用 两个工作中心的时间效率都是100%,所以效率因子为1,没有额外的时间调整。

四、业务含义解读 (1)为什么这样设计? 保守估算:向上取整确保生产时间充足 考虑产能限制:产能小于1表示无法并行处理,需要多次循环 包含准备时间:设置和清理时间独立于生产时间 效率因素:可调整实际生产与理论时间的差异 (2)产能配置建议 如果希望减少预计时长: 提高产能:从0.5/0.67提高到≥1.0 优化操作:减少操作默认时长 减少准备时间:优化设置和清理流程