生産スケジューラによる無限能力山積みと有限能力山崩しの違い

2017/08/30

生産スケジューラAsprova

通常のMRPは無限能力負荷山積みと呼ばれ、オーダが生産能力の範囲内に収まるかどうかを確認しますが、生産スケジューラの有限能力負荷山崩しでは納期遅れしない実現可能なスケジュールを作成できるかどうかを確認します。

自動車組み立て工程

インドネシアの生産スケジューラ

インドネシアの日系製造業においても生産管理システムが導入される事例が増えましたが、機械や設備の負荷を考慮した実現可能な生産計画作成という生産管理の主要課題については、Excelを使ったマニュアル作業で行われているのが現状で、今後生産スケジューラのニーズは高まるものと思われます。

続きを見る

インドネシアで課題となりやすい数量ベースと時間ベースの生産スケジュールの考え方の違い

私の経験上、インドネシアのほとんどの製造現場では、機械やラインのシフト単位、日単位のキャパに対して何個出来高を積み上げられるかという数量ベースの発想で生産計画が作成されています。

長年Excelのセルを1シフトまたは1日と考えて生産計画を作成していれば、この発想になるのがむしろ普通なわけです。

一方で生産スケジューラは、8:00~17:00のような稼働時間の空いている時間帯に作業を割り付けていくという時間ベースの発想です。

両者の違いをITっぽく表現すれば、シフト別日別にオブジェクトを生成するか、製造指図単位にオブジェクトを生成するかの違いであり、生産計画を作成するという同じ目的を持っているとはいえ、この発想の違いは簡単には埋まらないのではないかと感じます。

よってインドネシアで(おそらくアジア全般で)生産スケジューラを導入する際には、シフトまたぎや日またぎしている時間ベースに割付られた作業を、シフトの区切り時間や日の区切り時間ごとに集計し直す必要があります。

Excelというツールが人間の頭の中のロジックに合っていたのか、人間の頭がExcelの特性に影響され過ぎたのかは定かではありませんが、この現状にシステムが歩み寄る努力をしない限り、製造現場の人間には受け入れられないというのは確かなようです。

生産管理部の仕事

生産計画と負荷計画の関係

日本と同様にインドネシアでも、製造業の生産管理部門(PPIC=Production Planning Inventory Control)では、顧客からの確定受注情報や内示情報を元に、製品在庫や手番を考慮した上で、まずは日割り調整した基準生産計画(MPS=Master Production Schedule)を作成します。

このMPSを部品構成表(BOM=Bill of Material)に従って所要量展開して、リードタイムを考慮して製造オーダーを作成しますが、生産管理システムのMRP(Material Requirement and Planning)を駆使して製造オーダーを作成しているケースは、インドネシアでは非常に少なく、大抵はExcel作業になります。

こうして作成した製造オーダを時系列に並べることで、品目単位の製造予定表(月次生産計画)を作成しますが、ここまでがいわゆる生産計画(Production Planning)と呼ばれるものです。

生産計画を立案し、実際に現場への製造指図を発行するにあたり、ラインへの割付けが必要になりますが、このときのラインにかかる仕事量が負荷(Loading)であり、負荷を消化するために既存資源量で対応できるかどうかを予測し、生産準備の段階で負荷を分散させたり、残業を入れたり、ラインを追加したりするのが負荷(能力)計画(Capacity planning)です。

つまり生産計画と負荷計画は不可分の関係にあり、負荷計画の間違いは生産計画の間違い(納期遅れ)に直結します。

生産管理部門の計画作成業務

生産管理システムのMRPは、負荷計画を考慮しない無限能力バックワードで、ラインごとに製造オーダーを山積みする仮の生産計画であり、製造オーダーを消化するだけの生産資源と稼動時間が存在するかを確認しながら、マニュアルで代替資源や代替日程への平準化割付を行ないます。

MRP割付け

MRPでは工程間作業は垂直に紐付く

一方で能力計画を考慮した有限能力山崩しの生産計画の場合、現状の資源量と稼働時間という制約の中でどれだけあふれるかが確認できます。

あふれた作業を強制割付するか無視するかの違い

強制割付と無視の違い

計画パラメタにアジャストメントコマンドがあれば、あふれ(時間制約違反時や計画範囲を超えた時)の割付き方を制御できます。計画パラメタにアジャストメントコマンドがなければこれらのパラメタは無視されます。

強制割付とは期間内に収まるように無限能力で無理やり割付けることであり、無視とは文字通り何も考えず期間内には有限能力、期間外には無限能力で割付けることです。

バックワード時の割付き方

バックワードで「割付開始日時を越えた時」に何も設定しない場合には強制割付(無限能力)と同じ動きになり、計画基準日右側(計画期間内)に山積みになるのは、過去の計画を立てても意味がないからです。

バックワードで溢れた作業は計画基準日の左側(計画期間外)に山積みさせたい場合は「割付開始日時を超えた時」を「無視」(突き抜けて無限能力割付)に設定します。

フォワード時の割付き方

フォワードで「割付終了日時を越えた時」に、何も設定しない場合には無視(突き抜けて無限能力割付)と同じ動きになり、割付終了日時の右側(計画期間外)に山積みになります。

フォワードで割付終了日時の計画期間内に山積みさせたい場合は「割付終了日時を越えた時」を「強制割付」(無限能力割付)に設定します。

納期遅れしない生産計画の負荷状況を確認

生産計画担当者は、当然ながら納期遅れしないような生産計画を立てようと考えますが、必ずしも設備のキャパが十分だとは限らないので、日々どれくらい負荷がかかるか、どの辺りで負荷オーバーするかを確認し、事前に対策を打つことになります。

フォワードで割付けて時間制約違反が発生(最遅終了日時を越える時または最早開始日時を越える時)する時に限って強制割付(無限能力)にすることで、負荷オーバー(能力ショート)の資源と時期を確認します。

ちなみにバックワード割付けは元々納期を基準に考えているため納期遅れは発生せず負荷オーバーのみが発生します。

LET

最早開始日時や最遅終了日時は時間制約違反の基準であり、フォワードで最遅終了日時を越える(後工程の最早開始日時を超える)とは「前工程が遅すぎて後工程が間に合わない」状態です。

この結果を元に「いつ何パーセント負荷オーバーしているので生産計画を変更、またはオーバータイムを入れる」という判断を下すことになります。

サイクルタイムプランとキャパシティプラン

サイクルタイムベースで積み上げた作業を山崩しするのは、作業の順番をつけて負荷平準化して、時間制約違反を起さない理論上作業可能な計画を立てるためであり、作業日程計画というカレンダー(横軸)を重視した方法です。

ところが作業の順番をつけて現場に指示書を出したところで、実際には現場の諸事情によりなかなか順番どおりに作業を行なうことは困難であり、刻々と現場で発生する計画に影響を与えうる要素をシステムに反映させてリスケジュールすることは現実的ではないかもしれません。

そうだとしたら納期遅れしないという条件の下で、1日のキャパ(生産数量や稼働時間)の範囲内に作業ロットを山積みしていき「今日はそれぞれのラインでこれだけの作業ロットを消化してください」という指示書を出すほうが現実的であり、これは資源キャパという縦軸を重視した方法です。

  • 資源テーブルの「割付資源量フラグ」を「製造数量に比例」
  • 製造BOMの製造能力を1日固定に設定(タイムバケット1日)

「1日1ロット:1日のキャパ8,000個, マシン数5台, 資源量40,000個」の場合

  • 品目テーブルの製造ロットサイズMAXを1日のキャパ(数量)に設定(1日1箱)
  • カレンダーテーブルの資源量を製造ロットサイズx資源の数に設定(1日分が資源の数分山積み)

「1時間1ロット:1日のキャパ8,000個, 1ロット1,000個, マシン数1台, 資源量8,000個」の場合

  • 品目テーブルの製造ロットサイズMAXを1時間のキャパ(数量)に設定(1時間1箱)
  • カレンダーテーブルの資源量を製造ロットサイズx資源の数に設定(1時間分が8個山積み)

キャパシティプラン

「山積み」による負荷の確認と「山崩し」による実現可能なスケジュールかどうかの確認

MRPの負荷計算機能では、ライン別に品目別の標準負荷(サイクルタイム)を設定し、オーダ数量に応じてラインに何分負荷をかけるかを計算し、リードタイム(日)ずらしした日に「山積み」して1日あたりのライン能力とぶつけることで、日単位の勝ち負けが確認できます。

日単位の「山積み」結果として判明したライン能力のあふれ分が、前倒し(もっと早く割付ること)すれば納期に間に合うのかどうかを知るために「山崩し」を行いますが、これを自動的にやってくれるのが生産スケジューラです。

「山崩し」するということは、時間制約違反を起さないように作業に順番をつけて、「理論上実現可能な」スケジュールを作成するということであり、作業日程計画というカレンダー(横軸)を重視した方法です。

ただし最適化されたスケジュールを作成するために、スケジューラーに対して人間が生産現場の制約条件を100%漏れなく設定することは不可能であり、そうであれば「山崩し」結果をそのまま現場のスケジュールとして反映させるという理想論よりも、「山崩し」によっておおよそ納期遅れしないことを確認できたらそれで十分。後は万が一のために余裕を持たせて何日分かの安全在庫を設定しておく、という現実的なシステム運用方法になります。

納期遅れしないという条件の下で、1日のキャパの範囲内に作業ロットをリスト化して「今日はそれぞれのラインでこれだけの作業ロットを消化してください」という指示書を出すほうが現実的であり、これは資源キャパという縦軸を重視した方法です。

工程間の重なり方法と安全在庫とロットサイズの関係

Asprova資源ガントチャート

左がSE、右がSSEEで割り付けた結果

上述の安全在庫はオーダ展開時の補充オーダ生成時に考慮されますが、補充オーダを生成するタイミングは工程間の重なり方法によって異なります。

オーダ展開では、自動補充機能によってオーダリストを満たすように製造BOMを参照しながら、受注オーダの作業入力指図の不足分の製造オーダを補充オーダ(子)として生成し、補充オーダ(子)の作業入力指図の不足分の製造オーダを補充オーダ(孫)として生成します。

工程間の重なり方法がES(End-Start)の場合には、前工程の作業が完了してからはじめて自工程の作業を開始できるため、補充オーダが生成されるタイミングが最速で自工程の作業の開始時になり、前工程の作業期間中に出荷または投入が発生すれば安全在庫を切る可能性があります。

一方で重なり方法がSSEE(Start-Start End-End)であれば、前工程が時工程より先に終了しないという条件の下で前工程と自工程をオーバーラップさせるので、補充オーダが前工程の作業中に随時生成されることになり、安全在庫を切る可能性が極力低くなります。

ただしSSEEというのは、製造ロットサイズが1個で、1個単位でモノが流動するという考え方であり、実際に現場でモノが流動する単位は製造ロット単位やパレット単位なので、必ずしもSSEEという工程間の重なりが実現できるとは限りません。

「山崩し」機能で出来ること

上述のとおり100%完全な制約条件をスケジューラに反映させることは不可能である以上、生成されるスケジュールの精度は100%ではありません。

しかし「山崩し」をすることにより、生産管理システムのMRP「山積み」機能では対応できない「納期遅れしない理論上実現可能なスケジュール」が作成でき、工程間の重なり方法をSSEEにすることで、1個流し生産のようにロットサイズを1個単位にして多数の製造オーダを生成させなくても、理論上では安全在庫を極力遵守したスケジュールを作成することが可能になります。

セミナーのアジェンダ(時間軸の占有)と週末のやりたいことリスト(日単位の山積み)の違い

例えばセミナーを開催する場合のアジェンダを作る際には、開始時間から終了時間までの時間軸にイベントを割り付けていくのが普通です。

  • 受付開始時刻(14:30)からはじまって主催者の挨拶10分(15:00-15:10)、1人目登壇者60分(15:10-16:10)、休憩時間10分(16:10-16:20)、2人目登壇者40分(16:20-17:00)、3人目登壇者50分(17:00-17:50)、質疑応答10分(17:50-18:00)・・・

これは参加者が聴講したい登壇者の出番に合わせて来場できるように登壇時間を明確にしたり、登壇者がその日の夕方の飛行機で帰京しなければならないので、前半の登壇に起用したりなど、「何時何分に何のイベントがあります」という、時間軸に対するタスクのアサインが重視されるからです。

一般的にスケジュールを作成する場合、システム開発導入プロジェクトで作成されるWBS(Work Breakdown Structure)のように、縦軸にタスク、横軸に時間軸を設定し、いつからいつまでにタスクを完了させるということを明確にします。

一方で溜まっている残作業を週末にまとめて終わらせたいという「やりたいことリスト」を思い描く際の考え方は、週末に活動可能な時間の中でどれだけ作業を積み上げられるかが重要であって、どのタスクから先に実行するかは土曜日になってから考えれば十分であり、計画段階での重要な問題ではありません。

  • 土曜日の夕方には嫁の妹夫婦が遊びに来るので、作業時間は朝から夕方5時まで実質8時間ある。案件1の残作業(2時間)、ブログ更新(2時間)、睡眠不足解消のための昼寝(2時間)、洗車(1時間)、買い物と印刷屋での用事(2時間)、時間足りなさそうなので(キャパオーバーしそうなので)洗車は明日にしよう・・・

セミナーのアジェンダ(時間軸の占有)と週末のやりたいことリスト(日単位の山積み)

最大資源量を必要資源量で消費していくという考え方

このように「週末やりたいことリスト」を思い描く際には、無意識のうちに「時間軸にタスクを割り付ける」という一般的なスケジュールの思考方法から「活動可能な時間をタスクごとの必要時間で消費する」という発想の転換が出来ているわけです。

これをもっと抽象化すると、1日8時間という「最大資源量」を、案件1を完遂するための「必要資源量」2時間、ブログ更新のための「必要資源量」2時間、昼寝するための「必要資源量」2時間、洗車屋に行って帰ってくるための「必要資源量」1時間、諸々の用事を済ますための「必要資源量」2時間で消費していく、という考えになります。

別の例として、トンネル炉による熱処理工程にて、1日あたりベルトコンベアにセット可能な台車数が1000台、これを「オーダ数x資源必要量1台」で消費していきます。

  • 1日あたりベルトコンベアにセット可能な台車数1000台⇒主資源(トンネル炉)の最大資源量
  • オーダ数x必要資源量1台⇒品目ごとの必要資源量
    1. 割付け資源量フラグが「通常」
      作業ごとに製造BOMの必要資源量に指定した数だけ資源量を消費します。
    2. 割付け資源量フラグが「製造数量に比例させる」
      作業の製造数量に製造BOMの必要資源量に指定した数値を掛け算した資源量を消費します
  • トンネル炉の熱処理時間⇒固定リードタイム1日

トンネル炉にて熱処理をほどこす品目の大きさは様々であり、対応する台車の在庫数に制限がある場合は、台車の最大資源量に在庫数を設定し、トンネル炉(主資源)の熱処理時間と同じく、台車通過時間を固定リードタイム1日で設定します。

  • 品目ごとの対応する台車の在庫数⇒副資源(台車)の最大資源量
  • 台車通過時間⇒固定リードタイム1日

また小さい品目ほど台車に搭載する数が多くなりますので、品目ごとの出力指図に搭載可能数を設定することにより、熱処理工程では1個のオーダに対して搭載可能数分の出力が得られる、つまりトンネル炉の1個あたり熱処理時間は搭載可能数に反比例して短くなります。