FLEXSCHE製品のご紹介

FLEXSCHEバージョン20

FLEXSCHEバージョン20.0を2021年6月24日にリリースしました。バージョン20はフレクシェ社創立20年という節目を記念するリリースであり、 215項目にもおよぶ機能拡張が施されています。そのうちの主だったものをご紹介します。(バージョン19.0とバージョン20.0の差分)

FLEXSCHE DataTuner

スケジューリングの精度と妥当性の向上を容易に実現します

「現実に沿った精度の高い計画を立てる」ことは、生産スケジューリングの大きな課題のひとつです。そのためには各工程の能力を「適切に与える」ことが必要条件といえます。

しかし最初からすべての工程の能力を把握できているとは限らず、多くの導入プロジェクトでは悩ましい問題でしょう。しかもほとんどの工程には時間的な「ゆらぎ」があるため、繰り返し計測しないと妥当な値が決まりません。

バージョン20とともにリリースされた新製品FLEXSCHE DataTuner(フレクシェ・データチューナー)は、作業実績に基づく作業時間の標本データを日々蓄積し、統計処理の結果から推定値を算出して提示することで、高精度の妥当な計画立案に寄与します。

FLEXSCHE DataTunerの概念図

推定に基づいて能力値を更新する

FLEXSCHE DataTunerの運用開始後、しばらくすると十分な数の標本データが蓄積されて分析ができるようになります。現在の能力値と新たに推定した能力値、および標本値の分布との関係を視覚化するとともに、新しい能力値の「推奨度」も提示されるので、ユーザーは手早く直観的に能力値を更新していくことができます。

データチューナーコンソール(左)とデータチューナーパネル(右)
(能力がスキルや数値仕様などでパラメタ化されている場合は多次元化して分析される)

また、同じ性能を持つ(と考えられる)複数の機械に共通の能力値を与えたけれども、実際に使ってみると有意な能力差が見つかった、ということはよくあります。FLEXSCHE DataTunerはこの差を検出すると、分割案を視覚化して提示するので、簡単な操作で能力の定義を分割することができます。

能力値設定の分割

能力値設定の分割前(左)と分割後(右)
能力の違う資源の混在を確認し、ダブルクリック操作だけで分割できます

これらの仕組みを利用すれば、最初は能力値をざっくりと与えておいて、次第に細分化・詳細化していくというような運用が無理なくできるので、生産スケジューリングシステム構築の敷居がさがるでしょう。

FLEXSCHE CarryOutと合わせて

統計的に妥当な計画は、適切な計画遂行の土台となるものですが、それだけで十分とはいえません。

前述のような「ゆらぎ」が、計画通りに製造することを妨げるからです。「ゆらぎ」を受け入れ適応しつつ計画遂行することが重要であり、そのための仕組みがFLEXSCHE CarryOutです。FLEXSCHE CarryOutを適切に運用すれば、正確な実績情報もおのずと得られるので、一石二鳥の補完的な関係にあるといえます。

FLEXSCHE DataTunerのご提供方法

オプション製品としての単体販売のほか、お得なFLEXSCHE CompletePackの一部としてもご提供します。

なお、FLEXSCHE DataTunerのライセンスの有無に関わらず、標本データを蓄積することはできます。

新しいHTML組み込み機能

リッチなHTMLコンテンツをFLEXSCHEに組み込むことができるようになりました。

これまでもDHTML機能としてFLEXSCHEにHTMLのビューを組み込むことはできましたが、組み込まれていたブラウザが新しい機能に対応していなかったためリッチなページを作成することはできませんでした。

今回、HTML5に対応した新しいブラウザを組み込んだことにより、HTML5で実現された機能を使ってより高度なWebアプリケーションをFLEXSCHE上に作成することができます。

WebアプリケーションからFLEXSCHEのオブジェクトにアクセスすることができるのでそれらにアクセスしてコマンドを送ってみたり、あるいは入力フォームを作ってレコードに反映させるなど自由にシステムを構築することができます。

簡易コンソール

簡易コンソール

この新しい機能を使って追加された機能が簡易コンソールです。

WebアプリケーションとしてFLEXSCHEのオブジェクトにアクセスしてスケジューリングルールやEDIFの定義を取得してボタンに表示しています。ボタンを押すとそれぞれのルールやEDIFが実行されます。

HTMLコードが提供されているので、これをベースに機能を追加することもできます。

スケジューリング/モデリング

作業主導ディスパッチングメソッド

資源容積による動的作業分割

資源容積による動的作業分割

資源の制約として容積を設定できるようになりました。作業が容積に収まるかは品目毎の密度を考慮して判定されます。また容積に収まるように作業を自動的に分割させることもできます。例えば、作業のリンク数量には質量を設定しており、その一方で、資源の容量は本質的には質量でなく容積(体積)で制限されるという場合、従来の容量制約のように質量に換算した値で制約しようとすると、格納する品目の密度によって制限値を変えることが必要になります。

容積をそのまま資源の制約とすることで設定がシンプルになります。

資源経路毎の探索を強化

工程間制約を資源経路毎に探索する場合の経路抽出を主要タスクだけに限定できるようになりました。副資源の選択肢が多い場合や多工程にわたって制約が連鎖する場合等のスケジューリング効率が向上します。

また、メソッド設定に「資源経路選択」ページを追加しました。各経路の評価基準をより指定しやすくなりました。

立案期間開始日時の指定

作業の割付け毎に個別に立案期間開始日時を指定できるようになりました。例えば、資源毎に計画確定期間を設定して新たな作業がその期間内に割り付かないようにする、といったことが簡単に実現できます。

作業実績の強化

作業実績細分で差分実績

作業実績細分で差分実績

実績作業の開始(または再開)から中断(または終了)までの個々の断片の情報を、作業実績細分レコード(種別:RI)として指定できるようになりました。

それらの詳細な日時は資源ガントチャートにも反映されます。また差分毎に進捗率(「区間進捗率」)を指定すると、その部分の製造ペースが在庫量チャートにも反映されます。

実績数量バックフラッシュ

実績数量バックフラッシュ

作業に実績製造量を指定したときに、作業の各消費品目の数量を、元の製造:消費の比率に応じて一律に更新できるようになりました。作業の消費する品目数が多く1つ1つの実績数量を指定するのが大変な場合に便利です。

特殊なキー

様々な特殊なキー指定にさらにバリエーションが増えました。従来は計算式での表記が必要だったものが、メニュー選択から選べる特殊書式でも実現できるようになります。

数値仕様キーとして特殊なキー文字列

作業の特殊な数値仕様キーとして関連するオブジェクト(主資源、リンク品目etc)の数値仕様を指定する際、特殊なキー指定にさらにバリエーションが増えました。数値仕様キーとして様々なオブジェクトを参照できるようになりました。

  • 全般:工程コード
  • 全般:工程局所コード
  • 全般:オーダー品目コード
  • 仕様キー:オーダー品目仕様コメント
  • タスクキー:タスク資源コード
  • コメントキー:タスク主資源コメント

例えば作業において「主資源の数値仕様<キー:オーダー品目コード>」を表す計算式は、従来は

.AssignedResource.NumSpec(.Order.Item.Code)

としなくてはなりませんでしたが、これを特殊な数値仕様キーを使うことで

.NumSpec('#tnsp.%oi')

のように表記することができます。

数値仕様キーとして特殊なキー文字列

もちろんGUIに組み込まれたキー選択から選べる特殊書式としても指定可能です。

特殊なスキルキーによる間接参照を強化

新たに以下のスキルキーを指定できるようになりました。

  • 工程のコメント
  • 工程の仕様
  • 工程の仕様のコメント

工程のコメントに参照したいスキルパターンを入れておく、といったモデリングが容易に実現できます。

作業場計画

作業場領域制約を副資源と連動

作業場内に子領域がある場合に、作業の副資源に応じて配置可能な領域を限定できるようになりました。様々なケースに応用できます。例えば、子領域毎に重量制限があるという場合、子領域に対応する副資源を用意し資源量を重量にすることで簡単に実現できます。

資源主導で作業場計画

資源主導ディスパッチングメソッドでも作業場への配置を計画できるようになりました。

ユーザーインターフェース

ジョブビューワー

作業ビューワー(左下)と2つのジョブビューワー

作業ビューワーのジョブビュー(作業のネットワークをグラフィカルに表示するもの)を独立したビューとしても表示できるようになりました。

大きな作業グラフを表示したい場合に、ドッキングしてある作業ビューワーでは、小さく描画されたり、スクロールしなければならなかったりと、どうしても見づらくなってしまいます。ビューであれば大きく表示できますし、ウィンドウ分離してマルチモニタ環境で全画面表示したりすることが容易です。

また複数のジョブビューを同時に作ることができるので、さまざまな作業グラフを並べて見ることもできます。

複数プロジェクトのマージ表示

3つのプロジェクトをマージしてチャートを構成

複数のプロジェクトに分かれているデータを一つのウィンドウにまとめて表示することができるようになりました。

それぞれのプロジェクトから出力されたスナップショットファイルをひとつのプロジェクトにインポートし、それらを参照する自動行構成ルールを使うことで、各データのチャート行が混在した時系列チャートを自由に作成することができます。

各所に[レコードによる全検索]を追加

以前のバージョンで追加された「一括検索機能」を強化して、様々な箇所(例:資源ガントチャートのタスクポップアップメニュー)からレコードを全検索できるようになりました。

例えば作業を検索すれば、資源ガントチャート、オーダーガントチャート、作業データ、作業ビューワーなどなど、様々な場所でレコードが見つかります。

検索結果はパネルに一覧で表示され、それぞれの場所に素早くジャンプできます。

スプラッシュウィンドウのリニューアル

FLEXSCHE起動時やバージョン情報の確認時に表示される画面を従来よりもグラフィカルにリニューアルし、表示される情報も増やしました。

スケジューリングパネルをフォルダで管理

スケジューリングパネルをフォルダで管理

スケジューリングパネル上で任意にフォルダを作ることができるようになりました。フォルダに中には子フォルダやルールを配置できます。スケジューリングルールをその処理内容や用途に応じて自由にカテゴライズして管理できます。

オーダーガントチャートで引当先も表示

オーダーガントチャート行で、オーダー引当や作業連結で接続した別オーダーの作業も表示できるようになりました。上流の引当先の更に上流や、下流の引当先の更に下流も含まれます。これにより、関係する別オーダーの作業の割付き日時を把握しやすくなりました。

数値仕様キーとして特殊なキー文字列

別オーダーの作業は、同じ段に表示することも、別の段にすることも、更には個別に指定することもできます。

作業分割を下流へ伝播

1つの作業を分割する際、同様の分割処理を下流作業に適用できるようになりました。分割作業連結された下流作業にも適用することができます。結合操作についても同様で、下流作業もまとめて結合が可能になります。

作業分割メソッドで下流へ伝播

また、作業分割メソッドによる自動分割についても同様の機能を追加しました。従来も2つの作業分割メソッドと作業マーキングメソッドを工夫すれば可能ではありましたが、より簡単に下流作業へ分割適用できるようになります。

FLEXSCHE EDIF

EDIF構成ツールに新たなフィルタ

従来のEDIFグループによるテーブルマッピングフィルタに加え、そのテーブルマッピングに関連付けられているFLEXSCHEテーブル、外部テーブルでもフィルタできるようになりました。工程関連のテーブルマッピングのみとか、特定のcsvと連携しているテーブルマッピングのみ、といったものが簡単にフィルタできます。

EDIF構成ツールに新たなフィルタ

計算式による柔軟性の拡張

EDIFインポートでキー付きフィールドに計算式を指定できるようになりました。例えば数値仕様をインポートするときにひとつのフィールドで取り込む場合に従来のやり方では"100/NS1;200/NS2"のようにあらかじめ決められたフォーマットでデータを用意しておく必要がありましたが、計算式を指定できるようになったので計算式で複数のフィールドを参照して加工せずにそのまま取り込むことができます。

またEDIFフィールド分離のキー指定にも計算式を指定できるようになりました。例えば複数の数値仕様を連番で取り込む時に、反復変数で決められた回数取り込むようにしてキーに計算式で反復変数を参照すればマッピングの定義を簡潔にすることができます。

取り込みたいデータ

計算式によるキー指定

FLEXSCHE WebViewer

サーバーのSSL対応

FLEXSCHE WebViewerサーバーをSSLに対応しました。証明書を指定することで、セキュリティで保護された通信を行うことができるようになります。

計算式

計算式の並列実行

計画の自動立案の中で大きなウェイトを占める作業割付けの探索処理はパフォーマンス向上のために並列実行されますが、作業時間や時間制約の定義を計算式で行っていると、その計算時は並列実行されていませんでした。

これを並列化することにより、そのようなマスタ設定をしているケースでもスケジューリング時間が短縮されるようになりました。

サンプルケース

  • 作業数:1万
  • 候補資源数:50
  • 製造時間と最小時間制約に計算式を指定
並列化 Off8.0秒
並列化 On6.4秒

20%の高速化を実現

計算式の編集

計算式編集画面の強化

計算式編集画面の強化

従来のコメントだけではなく、定数や文字列も色分けして表示されるようになり編集時の視認性が上がりました。また関数を選択した状態でヘルプボタンを押すと関数のヘルプページが開くようになりました。

複数行文字列の構文(ヒアドキュメント)

改行を含む文字列を出力したい時に文字列を改行文字で連結するのではなく、そのまま表記することができるようになりました。文字列の先頭に「@」をつけます。

エラーの詳細化

計算式のテスト時にエラーが発生した場合にエラーの詳細を表示するようにしました。文法の間違いの詳細や実行時のエラーの詳細が表示され、エラーの起きた場所が特定できる場合にはそこにジャンプすることができます。

計算式でスクリプトレットを実行

従来の計算式でもかなり多くのことができますが、データ保護および構造的な事情により、超えられない壁がどうしても存在します。例えば、複雑な配列構造とツリー構造を持つ資源表オブジェクトへのアクセスはほとんどできません。

バージョン20で追加されたScriptファンクションを使うと、FLEXSCHEのCOMモデルに完全にアクセスできるスクリプト(ただしJScriptのみ)を計算式中で利用することができます。従来の解決策である「外部ファンクション」と比べ、スクリプトファイルを別に用意する必要がなく、パフォーマンス上も有利です。
※「スクリプトレット」の意味は「小さなスクリプト」です。

スクリプトレットには、JScriptの単一の評価式による「簡易記法」と、制御構造や関数定義を含みreturn文で結果を返す「完全記法」の二つの記法があります。

次の例では簡易記法で、コンテクスト資源の時系列要素の数(これは従来の計算式では得られません)を返します。

Long.Script("=_arg1.PrimaryTimeSeries.Count",$_object)

次の例は完全記法で、コンテクスト工程の資源表にリンク数量に比例しない能力値が含まれているかを調べます。

Bool.Script(@"
  var procRec = _arg1;
  var cBOR = procRec.CountOfBORRecs;
  for(iBOR=0;iBOR<cBOR;iBOR++) {
    var borRec = procRec.BORRec(iBOR);
    var cTasks = borRec.CountOfTasks;
    for(iTask=0;iTask<cTasks;iTask++) {
      var cUsables = borRec.CountOfUsables(iTask);
      for(iUsable=0;iUsable<cUsables;iUsable++) {
        var cUTs = borRec.CountOfUsingTimes(iTask,iUsable,SDTaskPart.SDTPartManufacture);
        for(iUT=0;iUT<cUTs;iUT++) {
          var method = borRec.UsingTimeMethod(iTask,iUsable,SDTaskPart.SDTPartManufacture,iUT);
          if(method==SDUTCMethodDuration||(method==SDUTCMethodCapacity&&
            (borRec.CapacityUnit(iTask,iUsable,SDTaskPart.SDTPartManufacture,iUT)
              &SDBCUnitPer_Mask)==SDBCUnitPer_None))
            return true;
        }
      }
    }
  } return false",$_object)

このように強力なスクリプトレットではありますが、作用を及ぼすこともできるので、内部状態を壊し得る危険がある「諸刃の剣」とも言えます。FLEXSCHEにおけるプログラミングを正しく理解した上で、どうしても必要なときだけお使いください。

S字形曲線の関数

製造業では、生産量の累積に伴って単位コストが低下していく現象、いわゆる「経験曲線効果」のように、ノンリニアな計算が求められることは少なくないでしょう。図のように量産し始めたときは不慣れで効率は低く、量産が進むと次第に効率が上がり、最終的に理論上限値に近いところまで到達する、というような場合です。

S字形曲線の関数

上記の様子を生産計画にも反映出来るように、Math.Logisticを始め、複数のS字形曲線のtakt関数を追加しました。例えば、Logistic曲線の場合、下記のtakt式で

$y := Math.Logistic(x, x_0, L, k)

(x_0, L, k)をパラメータとした曲線の自変数xの関数値が返されます。パラメータである(x_0, L, k)が上記右のようにLogistic曲線を制御しています。

上記のtakt関数を用いてかつ累積生産量を保有変数で集計すれば、「累積生産量の増加に伴う生産効率の向上」が再現可能になるでしょう。

他にも、Math.Erf及びMath.TanhといったS字形曲線を表す関数が追加されています。

追加した関数の一覧

計算式で使える関数がさらに増えて、できることが一層広がりました。

バージョン20で追加した関数

基本型
Doubleクラス <Double>.RoundToSigDigits
Stringクラス <String>.Right
コンテナ型
Listクラス <List>.Reverse_
<List>.Shuffle
<List>.Shuffle_
オブジェクト型
Recordクラス <Record>.ContextData
Intentoryクラス <Inventory>.Duplicate
<Inventory>.PeggedRecords
<Inventory>.PeggedQty
Itemクラス <Item>.FindProcGraphs
Operationクラス <Operation>.ResultSubdivisions
<Operation>.ShapeEnvelopeTransform
<Operation>.ResourceRestrictionProtected
OperationGraphクラス <OperationGraph>.ResourceRestrictionProtected
<OperationGraph>.ResourceRestrictionType
Orderクラス <Order>.Duplicate
<Order>.PeggedRecords
ProcGraphクラス <ProcGraph>.LinkRelations
Connectionクラス <Connection>.Duplicate
Resourceクラス <Resource>.SearchForTaskForward
<Resource>.SearchForTaskBackward
Resultクラス <Result>.Duplicate
ResultSubdivisionクラス <ResultSubdivision>.ProgressRate
BeforeTestクラス <BeforeTest>.LinkItem
AfterTestクラス <AfterTest>.RequiredQtyMax
<AfterTest>.CheckPlacementValidity
VirtualOperationクラス <VirtualOperation>.DistanceToPreviousAssignedTime
<VirtualOperation>.DistanceToNextTime
FreeCalendarクラス <FreeCalendar>.Duplicate
Relationクラス <Relation>.SharedRatio
全てのレコードクラス <全てのレコード>.MakeList
その他
Projectクラス <Project>.ShiftBoundaries
<Project>.ActiveTimeChart
TimeChartクラス <TimeChart>.RowResources
<TimeChart>.RowItems
<TimeChart>.RowOrders
Mathクラス Math.Logistic
Math.Softplus
Math.Tanh
Math.Erf
Math.DensityNormal
Math.DensityPoisson
Math.Factorial
Math.Nchoosek
Math.Gamma

開発者向け

スクリプトファイルの再読み込み頻度を低減

スクリプトはその場で書き換えて簡単に試行錯誤できるのがメリットですが、変更を反映させるために実行のたびに読み込み直すため、無駄なオーバーヘッドがありました。

そこで、スクリプトファイルの最終更新日時をチェックして必要なときだけ読み込み直すように改良しました。特に外部ファンクションのように、コンパクトな処理が繰り返し実行されるような場合に大幅に高速化します。

その他

評価版として開くときにライセンスのセットアップに誘導する

FLEXSCHEを製品版として使用開始するときにはライセンス設定を行う必要がありますが、ライセンスの種類によってインストールすべきものや場所が異なるため、手順が煩雑になる場合があります。

FLEXSCHE起動時にライセンス情報が見つからない場合に、そのまま評価版として起動するか、製品版としてセットアップするかを選択することができるようになりました。セットアップ用のウィザード画面では案内に従ってスムーズにセットアップを完了することができます。

Setup helper 1
Setup helper 1

FLEXSCHE製品のご紹介

PAGETOP