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

要求キューにランク付けする には、各順序設定ルールの論理を負荷ランク関数に書き込みます。カスタムの負荷ランク関数を作成し、インストールして、製造作業固有のルール別にキューの順序を設定できます。
注:  カスタムルールの作成に必要な手順のサマリは、「カスタムスケジュールルールの作成」を参照してください。このトピックで説明した関数の詳細については、弊社サポートサイトからダウンロードできる 『Scheduling Customization Guide』 (スケジューリングカスタマイズガイド)を参照してください。

順序設定ルールの論理

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

たとえば、順序設定ルールで納期までの残時間に基づき要求がランク付けされるとします。1 p.m.納期が 4 p.m. の負荷。今日は要求をキューに入れ、ランク値は 3 です.3 p.m。本日、5 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 つの引数を次の順序で受け入れる必要があります。

  • 負荷(区分: LOAD*)。
  • 属性(区分: 属性:

戻り値

関数は、負荷の要求のランク値である値 (区分: 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);