登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:WINCC用户归档脚本问题

点击:714 回复:0

我做的用户归档脚本,用于实现整点,当班的归档操作,但是,有时候整点归档会连续动作两次,请帮我看看问题出在哪里
程序如下:
脚本1:
               if  (GetTagWord("minute")==0) SetTagBit("tmp_bit_3",1); //Return-Type:  WORD  
else  SetTagBit("tmp_bit_3",0);    //小时触发,  每时0分
if  ((GetTagWord("tmp_hour")  !=  GetTagWord("hour"))  &  ((GetTagWord("hour")-GetTagWord("tmp_hour"))==1  |  (GetTagWord("hour")-GetTagWord("tmp_hour"))==  -23)) SetTagBit("tmp_bit_8",1);
else  SetTagBit("tmp_bit_8",0);//小时脉冲
SetTagWord("tmp_hour",GetTagWord("hour");
if  (GetTagBit("tmp_bit_3")  &  GetTagBit("tmp_bit_8")) SetTagBit("tmp_bit_15",1);  
脚本2:
#include  "apdefap.h"
int  gscAction(  void  )
{
         if  (GetTagBit("tmp_bit_15"))
{
                     if    (!GetTagBit("tmp_bit_25"))            //  &  (GetTagWord("tmp_time_hour")  !=  GetTagWord("hour")))                      //若出现小时归档的缺少,极有可能是因为此句条件不满足,直接跳到了SHIFT
         { //int  tmp;
SetTagWord("tmp_time_hour",GetTagWord("hour"));
SetTagSDWord("hour_archive_id",-1);
SetTagSDWord("hour_archive_job",6);
                                                                                             //此处为正点归档的累计,省略
SetTagBit("tmp_bit_25",1); //hour归档中。。。。。
       }
if  (GetTagSDWord("hour_archive_job")  !=  6  &  GetTagSDWord("@UA_total_Job")  !=  6  &  GetTagBit("tmp_bit_25")  )    
{    
                                           SetTagBit("tmp_bit_15",0);  
//                               SetTagBit("tmp_bit_20",0);  
             if  (GetTagBit("tmp_bit_18")  |  GetTagBit("tmp_bit_17")) SetTagBit("tmp_bit_21",1); //hour动作完成,若有班归档的信号,转移归档操作
// else  SetTagBit("tmp_bit_21",0);
             SetTagBit("tmp_bit_25",0); //hour归档完毕
   
             }    
 }
return  0;  
}
注:
hour取自SYSTEM  INFO中系统时间小时值,minute为分值,tmp_hour为一个内部变量  ,用于存储上次执行时的小时值。
11-08-04 13:52

工控新闻

更多新闻资讯