wincc实现定制宽度脉冲

已锁定

锋言锋语

西门子1847工业学习平台

  • 帖子

    4014
  • 精华

    54
  • 被关注

    134

论坛等级:至圣

注册时间:2011-07-31

钻石 钻石 如何晋级?

wincc实现定制宽度脉冲

731

3

2016-02-03 15:15:38

可以根据需要的数量, 在全局脚本定义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;

}


 使用时, 只写一次代码。然后复制按钮, 通过变量连接替换变量即可。


wincc实现定制宽度脉冲 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32978条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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