カスタム順序設定ルールの作成

注:  カスタムルールの作成に必要な手順のサマリは、「カスタムスケジュールルールの作成」を参照してください。このトピックで説明した関数の詳細は弊社サポートサイトからダウンロードできる 『Scheduling Customization Guide』 (スケジューリングカスタマイズガイド)を参照してください。

要求キューにランク付けする には、各順序設定ルールの論理を負荷ランク関数に書き込みます。カスタムの負荷ランク関数を作成し、インストールして、製造作業固有のルール別にキューの順序を設定できます。

順序設定ルールの論理

独自の負荷ランク関数を作成する前に、順序設定ルールによる要求の処理方法を理解しておく必要があります。負荷が要求をキューに入れる、負荷ランク関数によって、その要求にランク値が与えられます。ランク値が変更されることはありません。

たとえば、順序設定ルールで納期までの残時間に基づき要求がランク付けされるとします。納期が本日 4 p.m. の負荷が本日 1 p.m. に要求をキューに入れ、ランク値 3 が割り当てられます。納期が本日 5 p.m. の負荷が本日 3 p.m. に要求をキューに入れ、ランク値 2 が割り当てられます。キュー内にはこれらの要求しかないと仮定します。これらの要求の 1 つが 3:30 に満たされたとします。満たされた要求は、ランク値が 2 の要求です。しかし、この要求は、納期までに 1.5 時間あり、ランク値 3 の要求は納期までに 0.5 時間しかありません。

要求は、内部リストでランク付けけされます。このリストはランク値に基づき低から高へキューを表します。この順序は、ランク値を -1 で掛けることにより、カスタム論理で逆にすることができます。たとえば、最新作業の最長処理時間に基づき負荷をランク付けするには、ランク関数は、最新作業の負荷の処理時間のマイナスの値を返します。

関数の命名

カスタム負荷ランク関数には、ユーザによる呼び出し可能な標準の関数名 以外の任意の名前を付けることができます。

引数


#include "factor.h"
double myrule(ldp, atrib)
LOAD       *ldp;  /* pointer to the load. */
ATTRIBUTE  *atr;  /* pointer to attribute, if any, to base ranking on. */

関数は、2 つの引数を次の順序で受け入れる必要があります。

  • 負荷(区分:ロード
  • 属性(区分:属性:

戻り値

関数は、負荷の要求のランク値である値(区分: double)を返す必要があります。

次は、最小動的スラック(納期までの最小残時間から残処理時間を差し引いた値)に基づき負荷の順序を決める負荷ランク関数の例です。


double sqrl (LOAD *ldp, ATTRIBUTE *atr)
/*-----------------------------------------------------------------
  Ranking function to cause loads to be ranked on a least dynamic
  slack basis.
     ARGS:
       ldp - pointer to load for which to evaluate the ranking code
     RETURNS: load ranking value
-----------------------------------------------------------------*/
{
     double rt, lt;
     int rn;
     rt = sermot(ldp, &rn, <);
     return(ldp->loordp->ordudt - DATENOW - rt);
}

カスタム関数のインストール

カスタム関数をスケジューラで使用できるようにするには、sedfrk 関数を呼び出すことにより、ucini1 初期化関数からインストールする必要があります。Sedfrk には、次の順序の 2 つの引数があります。

  • ランク関数にカスタム論理が含まれている順序設定ルールの番号。
  • 負荷ランク関数のアドレス。

たとえば、上記のルール例「sqrl」をルール位置 39 にインストールするには、以下のようにします。


sedfrk (39, sqrl);
関連トピック