编写定制排序规则

注意: 关于创建定制规则所要求的步骤总结,请参见编写定制排产器规则。有关该主题中所述函数的详细信息,请参见排产自定义指南,该指南可从我们的技术支持网站下载。

要排列请求队列,将每个排序规则的逻辑写入负荷等级函数。您可编写并安装定制负荷等级函数,按生产工序特有的规则进行队列排序。

顺序规则逻辑

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

例如,假定按照在到期日期前的剩余时间排序规则将请求排列。在今天下午一点钟,在今天下午四点钟到期的一个负荷发出一个请求并分配了等级值 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);
相关主题