编写定制排序规则

要排列请求队列,将每个排序规则的逻辑写入负荷等级函数。您可编写并安装定制负荷等级函数,按生产工序特有的规则进行队列排序。
注意: 关于创建定制规则所要求的步骤总结,请参见编写定制排产器规则。有关该主题中所述函数的详细信息,请参见排产自定义指南,该指南可从我们的技术支持网站下载。

顺序规则逻辑

在创建自己的负荷等级函数前,应该理解顺序规则处理请求的方法。当负荷放置请求时,负荷等级函数分配给请求一个等级值。等级值从不改变。

例如,假定按照在到期日期前的剩余时间排序规则将请求排列。在今天下午一点钟,在今天下午四点钟到期的负荷在今天下午三点钟发出请求并分配了等级值为 3 的请求。今天下午五点钟到期的负荷今日发出请求并接收一个等级值为 2 的请求的请求。假定这些是队列中仅有的请求。假定在 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. */

函数必须按以下顺序接受两个自变量:

  • 负荷(类型:LOAD*)。
  • 特性(类型:ATTRIBUTE)。

返回值

该函数必须返回值(类型: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 必须按以下顺序使用两个自变量:

  • 等级函数包括定制逻辑的排序规则数量。
  • 负荷等级函数的地址。

例如,要在规则位置 39 安装以上示例规则“sqrl”:


sedfrk (39, sqrl);