カスタム順序設定ルールの作成
要求キューにランク付けする には、各順序設定ルールの論理を負荷ランク関数に書き込みます。カスタムの負荷ランク関数を作成し、インストールして、製造作業固有のルール別にキューの順序を設定できます。
順序設定ルールの論理
独自の負荷ランク関数を作成する前に、順序設定ルールによる要求の処理方法を理解しておく必要があります。負荷が要求をキューに入れる、負荷ランク関数によって、その要求にランク値が与えられます。ランク値が変更されることはありません。
たとえば、順序設定ルールで納期までの残時間に基づき要求がランク付けされるとします。納期が本日 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);