可以根据需要的数量, 在全局脚本定义BOOL数组和time_t数组, 全局脚本, 循环检查, time_t存放其实时间,超过宽度就复位;
需要使用的地方, 只要把相应的BOOL元素置1, 初试时间设定一下。就可以。
全局脚本250ms:
#define COUNT 5 //脉冲数量
#define WIDTH 5 //5s 宽度
extern BOOL flag[COUNT];
extern time_t timeOri[COUNT];
extern const char* tags[COUNT];
extern int count;
int i =0;
time_t ct = time(NULL); //current time (s); //当前时间(s)
for(i = 0; i != count; ++i)
{
if(flag[i]) //如flag元素为TRUE, 则检查时间是不是达到宽度, 达到则置0, 并把相应的变量写0
{
if(ct - timeOri[i] >= WIDTH) // width reached.
{
flag[i] = FALSE;
SetTagBit(tags[i], 0);
}
}
}
return 0;
}
BOOL flag[COUNT];
time_t timeOri[COUNT];
const char* tags[COUNT] = { "tag1", "tag2", "tag3", "tag4", "tag5"};//脉冲变量
int count = COUNT;
按钮脚本:
#define TAG "tag1"
extern BOOL flag[];
extern time_t timeOr[]i;
extern const char* tags[];
int i = FindIndex(TAG);
if(-1 == i)//非法的变量名称,
printf("Error.TagName %s cannot be found. ", TAG);
else
{
SetTagBit(TAG, 1); //脉冲变量置1
flag[i] = TRUE; //对应的flag置1
timeOri[i] = time(NULL);//当前时刻, 写入timeOri作为初始时刻参与检查
}
项目函数FindIndex如下:
#pragma option(mbcs)
int FindIndex(const char* p) //返回某个变量在tags数组中的索引号
{
extern int count;
extern const char* tags[];
int i = 0;
for(i = 0; i != countT; ++i)
{
if(!strcmp(p, tags[i]))
{
return i;
}
}
return -1;
}
使用时, 只写一次代码。然后复制按钮, 通过变量连接替换变量即可。