视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Wincc 50个常见问题
2025-09-26 22:00:00 责编:小OO
文档
Wincc 50个常见问题

Wincc 50个常见问题1

2009-08-06 17:07

1、问: 如何触发计算机扬声器的声音?

  答: 编写如下C-Action:

  #pragma code("kernel32.dll");

  BOOL Beep(DWORD dwFreq,DWORD dwDuration);

  #pragma code();

  Beep(500,500);

  

2、问: 如何通过C脚本来确定报警信息?

  答: 首先必须在画面中插入报警控件,可以用如下两种方式来确认信息:

  (1)、确认单条信息

  4版本和高于此版本的WinCC

  BOOLOnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)

  5版本和高于此版本的WinCC

  BOOLAXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)

  

  (2)、确认报警窗口所有可见的报警

  4版本和低于此版本的WinCC

  BOOLOnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)

  

  5版本和高于此版本的WinCC

  BOOLAXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)

  

  

3、问: 如何在WinCC中读取系统时间?

  答: 通过如下C-Action:

  #pragma code("kernel32.dll");

  Void GetLocalTimes(SYSTEMTIME*lpst);

  #pragma code();

  SYSTEMTIME time;

  GetLocalTime(&time);

  SetTagWord("Varname",time.wYear);

  SetTagWord("Varname",time.wMonth);

  SetTagWord("Varname",time.wDayOfWeek);

  SetTagWord("Varname",time.wDay);

  SetTagWord("Varname",time.wHour);

  SetTagWord("Varname",time.wMinute);

  SetTagWord("Varname",time.wSecond);

  SetTagWord("Varname",time.wMilliseconds);

  

4、问: 如何经Windows对话框设置日期时间?

  答: 通过调用Windows对话框实现。具体如下:

  #include"apdefap.h"

  void onClick(char*lpszPictureName,char*lpszObjectName,

  char*lpszPropertyName)

  {ProgramExcute("c:\\\\win98\\\\control.exe timedate.cpl");}

  其中执行的程序路径,需根据具体情况填写。

  

  

5、问: 如何在WinCC中调用SQL语言?

  答: 1、创建一个SQL文件,此文件在ISQL中建立,文件内包含所要执行的SQL语句。Windows对话框实现。具体如下:

  2、在WinCC中用C Script 调用上述SQL文件,如下所示:

  #include"apdefap.h"

  void OnLButtonDown(char* lpszPictureName,

  char* lpszObjectName,

  char* lpszPropertyName,

  UINT nFlags,int x,int y)

  {

  char*a="c:\\\\siemens\\\\common\\\\SQLANY\\\\ISQL-q-b-c

  UID=DBA;PWD=SQL;DBF=E:\\\estsql\\\estsqlRT.DB;

  DBN=CC_testsql_99-12-03-12:48:26R;READ

  E:testsql\\\est.sql";

  Printf("%s\\r\\n",a);

  ProgramExcute(a);

  }

  下面是一个简单的SQL文件内容:

  select *from pde#hd#t#test;

  output to e:\\\est2.txt FORMAT ascii

  注意:文件名及路径中不要带空格。

6、问: 如何整点启动归档?

  答: 在"Globle Script"下的Project function编写程序函数:cyclicarchive

  BOOL cyclicarchive()

  {

  #pragma code("kernel.dll");

  void GetLocalTime(SYSTEMTIME*lpsz);

  #pragma code();

  SYSTEMTIME time;

  Int t1;

  GetLocalTime(&time);

  T1=time.wMinute;

  If(t1==00)

  {

  SetTagBit("startarchive",1);

  Return(BOOL) (GetTagBit("startarchive"));

  }

  }

  在Tagloging中的"Properties of process tag"中的"archivetag"Tab下的Archivetype选择Cycle-selective,在"Event"标签下的"StartEvent"内选择cyclicarchive函数。

  

7、问: How can I set and reset a WinCC variable by mouse click with Cscript?

  答: The following function shows how you can alternately set andreset a WinCC variable by mouse click.

  #include "apdefap.h"

  void OnClick(char* lpszPictureName, char* lpszObjectName, char*lpszPropertyName)

  {

  BOOL z;

  z=GetTagBit("MyBitVariable");

  if (z==0)

  SetTagBit("MyBitVariable",1);

  else

  SetTagBit("MyBitVariable",0);

  }

  

8、问: How can I program a waiting function (Sleep) in WinCC?

  答: The following sample program shows how the "Sleep" isused.

  #pragma code("Kernel32.dll")

  void Sleep(int milliseconds);

  #pragma code()

  Sleep(1000); //time specification in milliseconds

  Warning:

  If you use Sleep(), processing the C script is interrupted forthe time indicated. Requests for the interrupted function cannot beprocessed during this time.

  

9、问: How can I output a SIMATIC timer minutes and seconds inWinCC?

  答: If you want to output a SIMATIC Timer in minutes and secondsin WinCC, then in WinCC please use a static text in the GraphicsDesigner to which you interface the following action:

  char* _main(char* lpszPictureName, char* lpszObjectName, char*lpszPropertyName)

  {

  char *p;

  DWORD hilf;

  int min, sec;

  p=SysMalloc(10);

  hilf=GetTagDWord("Time");

  min=hilf/60000;

  sec=hilf%60000/1000;

  sprintf(p,"%d min %d sec",min,sec);

  return p;

  }

  The "Time" variable linked to the I/O field must have thefollowing properties:

  •Data type "32-bit value withoutsign"

  •Format adaptation"DwordToSimaticBCDTimer"

  •Address: data area "Times" and addressing"Word"

10:快捷地切换画面

通常要将所有的设备都显示在一张画面里是不可能的,所以将设备按照处理工艺的功能步骤分级在多张画面内,以一个污水处理厂为例分为电泳线、前处理线、生化线、加药线等,之间的切换使用按钮的鼠标动作来实现。这对于用WinCC现成的鼠标动作来实现是很简单的,但是不是要在每张图上都使用相同数量且位置排列顺序一致的按钮呢?(出于对操作的一致性考虑,不能让操作人员在不同的图上,不同的位置找想要操作的按钮)这个问题的解决我们使用WinCC的脚本编程,在按钮动作中调用它的内部函数来实现。首先,组态一幅背景画面,其中包括要显示的静态文本、OLE(例如,时钟)、所有的图形切换按钮及推出关机按钮。第二,在背景画面中插入智能对象(Smart Object)中的画面窗口(PictureWindow),并且使其的尺寸与其分级画面相同。第三,在相应的切换按钮的属性->事件->鼠标动作中编写如下C语言脚本代码:

       #include\\"apdefap.h\\"

       void onClick(char *lpsz PictureName,

       char *lpsz ObjectName,char *lpsz PropertyName)

       {

       SetPictureName(\\"背景画面\\", \\"画面窗口\\", \\"电泳处理线\\");

       }//\\"背景画面\\"即为始终显示地静态背景的属性名,\\"画面窗口\\"即为在背景画//面中插入地画面窗口(Picture

     Window)属性名,\\"电泳处理  线\\"即为分级画面//的名称

这样就能方便快捷地切换画面。

下载本文
显示全文
专题