回复:【万泉河】在WINCC中如何单击按钮发出一个脉冲信号?

锋言锋语

西门子1847工业学习平台

  • 帖子

    3940
  • 精华

    54
  • 被关注

    130

论坛等级:至圣

注册时间:2011-07-31

钻石 钻石 如何晋级?

发布于 2016-02-03 10:58:28

2楼

  1. 可以根据需要的数量, 在全局脚本定义BOOL数组和time_t数组, 全局脚本, 循环检查, time_t存放其实时间,超过宽度就复位;

  2. 需要使用的地方, 只要把相应的BOOL元素置1, 初试时间设定一下。就可以。

全局脚本250ms:

#define COUNT 5

#define WIDTH 5   //5s


extern BOOL flag[COUNT];

extern time_t timeOri[COUNT];

extern const char* tags[COUNT];


int i =0; 

time_t ct = time(NULL);  //current time  (s);

for(i = 0; i != COUNT; ++i)

{

if(flag[i])

          {

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"};




按钮脚本:

#define TAG "tag1"

#define COUNT 5

#define WIDTH 5   //5s

extern BOOL flag[COUNT];

extern time_t timeOri[COUNT];

extern const char* tags[COUNT];


int i = FindIndex(TAG);

if(-1 == i)
   printf("Error.TagName %s cannot be found. ", TAG);

else

{

   SetTagBit(TAG, 1); 

   flag[i] = TRUE;

   timeOri[i] = time(NULL);

}

项目函数FindIndex如下:

#pragma option(mbcs)

int FindIndex(const char* p)

{

#define COUNT 5

extern const char* tags[COUNT];


int i = 0;


for(i = 0; i != COUNT; ++i)

{

    if(!strcmp(p, tags[i]))

   {

        return i;

   } 

}


return -1;

}


好了, COUNT,和 Width可以做到头文件里, 就不用没处都声明了, 也可以做成全局变量, 这些工作自己搞吧。 以上的思路, 使用时, 只写一次代码, 然后通过变量连接替换变量即可。

不忘初心

精华帖版主置评:还算不错的思路, 有兴趣的可以一学。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3363条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。