降央卓玛演唱走天涯:画面显示问题

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 20:51:55

画面显示问题


分类: WinCC 我有3个图片,要求当一个二进制数a等于1,并且一个8位无符号整数b等于1、2、3时,分别显示1号、2号、3号图片,同时要求8位无符号整数b每固定时间间隔从1--2--3--1进行循环变化,实现3个图片的交替显示。希望回答的把c语言的语句,回答准确些,谢谢了,急。问题补充:我说的变量a,实际上是一个反馈点,我想做的是当反馈有信号时,图片就显示,同时变量b是一个中间变量,时时的从1--2--3---1变化,对应3个图片的显示,也就是说,我想要3图片的显示是分别满足a==1且b==1,和a==1且b==2,a==1且b==3。用动态对话框,只能满足一个条件,所以我想用c语言编写,但是不会。

RE 有谁共鸣
首先我要显示的是图片,不是画面,在有就是我最基本的要求就是3个图片的显示是2个变量“与”的关系,所以在图片的“显示”动态属性那用动态对话框无法实现,如果用c语言编写,那里根本就不让用SetVisible(lpszPictureName,pic,1)这个函数,所以我才头疼。

============================================

你可以使用脚本来实现 (if a=1 then (b=b+1 if b=3 then b=1) else b=0)
 也可以在PLC里面实现
 然后将3个画面的显示条件为b=1、2、3

采用时间触发 其切换时间可以自己定 不会出现显示不清楚的

回答者: liwenqun - 助理工程师  第8级 2007-6-13 08:55

补充:楼上这样做,三个图片是不是切换的很快,间隔时间就没法控制了。图片切换过快我怀疑更本看不清。
可以在PLC中做循环,间隔时间可以控制,上位机1号图片显示的条件为a=1 b=1;2号图片的显示条件为:a=1& b=2 ;3 号图片的显示条件为a=1 &b=3;

回答者: xsxzc - 初级技术员  第5级 2007-6-13 13:28

你先在主画面上放上三个“画面窗口”Pic1、Pic2、Pic3然后在把三个要循环显示的“画面”分别连接到三个画面窗口中,然后做个全局动作循环时间为10秒,等等,如果你的循环显示的周期是固定的话,让脚本周期性扫描变量的值,然后再显示相应的画面窗口,这样不就OK了,参考下面的脚本就可以了
if (GetTagBit("A")==1)
{

if (GetTagByte("B")==1)
{
SetVisible(lpszPictureName,"Pic1",TRUE);
SetVisible(lpszPictureName,"Pic2",FALSE);
SetVisible(lpszPictureName,"Pic3",FASLE);
SetTagByte("B",2);
}
else
{
      if (GetTagByte("B")==2)
      {
        SetVisible(lpszPictureName,"Pic1",FALSE);
        SetVisible(lpszPictureName,"Pic2",TRUE);
        SetVisible(lpszPictureName,"Pic3",FASLE);
        SetTagByte("B",3);
       }
       else
       {
        if (GetTagByte("B")==3)
             {
               SetVisible(lpszPictureName,"Pic1",FALSE);
               SetVisible(lpszPictureName,"Pic2",FALSE);
               SetVisible(lpszPictureName,"Pic3",TRUE);
               SetTagByte("B",1);
               }
        }
 

}
return 0;

=============================================

a为布尔变量,b为双整数。
方法一:
    你可以在全局脚本里添加代码,如下:
BOOL a;
DWORD b;
a=GetTagBit("a"); 
b=GetTagWord("b"); 
b=b+1;
SetTagDouble("b",b); 
if (b>=4) 
SetTagDouble("b",1); 
if (a==1&b==4)
{
SetVisible("NewPdl0.Pdl","one",1); 
}
else
SetVisible("NewPdl0.Pdl","one",0);  
if (a==1&b==2)
{
SetVisible("NewPdl0.Pdl","GraphicObject2",1); 
}
else
SetVisible("NewPdl0.Pdl","GraphicObject2",0); 
if (a==1&b==3)
{
SetVisible("NewPdl0.Pdl","GraphicObject3",1); 
}
else
SetVisible("NewPdl0.Pdl","GraphicObject3",0); 
    其中NewPdl0.Pdl为画面名称,GraphicObject1、2、3分别为图片名称,触发时间可根据需要设定。

方法二:
   在画面中添加控件Status Display(Smart Objects目录下),在其属性---state---Current Status中连接变量b,在Static中分别输入1、2、3,在Basic Picture中分别对应着你要显示的三张图片,在其他---显示---中添加动态连接,用变量a控制其显示,1为显示,0位不显示,然后保存画面。
在全局脚本中添加如下代码:
BOOL a;
DWORD b;
a=GetTagBit("a"); 
b=GetTagWord("b"); 
b=b+1;
SetTagDouble("b",b); 
if (b>=4) 
SetTagDouble("b",1); 
   触发时间同样可根据自己的需要选定,我试的时候用的2S。

    我已经试过了,这两种方法都可行,区别是第一种方法的三张图片可以放在不同的位置,而第二种方法的三张图片在同一个位置。

========================================

1、首先建两个全局变量:a、b
2、写一个脚本,脚本使用时间做触发器,要多长时间根据需要改!
if(b>=3||b<1),则b=1;if(b==1),则b=2;if(b==2),则b=3;
3、在三个图片的显示属性中,将条件公式写为
   A、a==1&&b==1
     B、a==1&&b==2
      C、a==1&&b==3

回答者: 未尽 - 学长  第2级 2007-6-19 17:27

在第一个画面显示属性里 用动态对话框表示:A+3*B  =4
在第二个画面显示属性里 用动态对话框表示:A+3*B  =7
在第三个画面显示属性里 用动态对话框表示:A+3*B  =10