WINCC脚本实例 下载本文

内容发布更新时间 : 2024/4/28 12:28:52星期一 下面是文章的全部内容请认真阅读。

1、问: 如何触发计算机扬声器的声音? 答: 编写如下C-Action: #pragma code(\

BOOL Beep(DWORD dwFreq,DWORD dwDuration); #pragma code(); Beep(500,500);

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

答: 首先必须在画面中插入报警控件,可以用如下两种方式来确认信息: (1)、确认单条信息 4版本和高于此版本的WinCC

BOOL OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName) 5版本和高于此版本的WinCC

BOOL AXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName) (2)、确认报警窗口所有可见的报警 4版本和低于此版本的WinCC

BOOL OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName) 5版本和高于此版本的WinCC

BOOL AXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)

3、问: 如何在WinCC中读取系统时间? 答: 通过如下C-Action: #pragma code(\

Void GetLocalTimes(SYSTEMTIME*lpst); #pragma code(); SYSTEMTIME time; 字串7

GetLocalTime(&time);

SetTagWord(\ SetTagWord(\ SetTagWord(\ SetTagWord(\ SetTagWord(\ SetTagWord(\ SetTagWord(\ SetTagWord(\

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

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

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

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

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

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

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

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, 字串2 char* lpszPropertyName, UINT nFlags,int x,int y) {

char*a=\ UID=DBA;PWD=SQL;DBF=E:\\\\testsql\\\\testsqlRT.DB; DBN=CC_testsql_99-12-03-12:48:26R;READ E:testsql\\\\test.sql\ Printf(\ ProgramExcute(a); }

下面是一个简单的SQL文件内容: select *from pde#hd#t#test; output to e:\\\\test2.txt FORMAT ascii 注意:文件名及路径中不要带空格。

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

答: 在\下的Project function编写程序函数:cyclicarchive BOOL cyclicarchive() {

#pragma code(\

void GetLocalTime(SYSTEMTIME*lpsz); #pragma code(); SYSTEMTIME time; Int t1;

GetLocalTime(&time); T1=time.wMinute;

If(t1==00) {

SetTagBit(\

Return(BOOL) (GetTagBit(\ } }

在Tagloging中的\中的\下的Archive type选择Cycle-selective,在\标签下的\内选择cyclicarchive函数。 字串4

7、问: How can I set and reset a WinCC variable by mouse click with C script? 答: The following function shows how you can alternately set and reset a WinCC variable by mouse click. #include \

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { BOOL z;

z=GetTagBit(\ if (z==0)

SetTagBit(\ else

SetTagBit(\ }

8、问: How can I program a waiting function (Sleep) in WinCC? 答: The following sample program shows how the \ #pragma code(\ void Sleep(int milliseconds); #pragma code()

Sleep(1000); //time specification in milliseconds Warning:

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

字串1

9、问: How can I output a SIMATIC timer minutes and seconds in WinCC? 答: If you want to output a SIMATIC Timer in minutes and seconds in WinCC, then in WinCC please use a static text in the Graphics Designer 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(\ min=hilf/60000; sec=hilf`000/1000;

sprintf(p,\ return p; }

The \ ?Data type \-bit value without sign\

?Format adaptation \

?Address: data area \字串8 10:快捷地切换画面

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

void onClick(char *lpsz PictureName,

char *lpsz ObjectName,char *lpsz PropertyName) { 字串2

SetPictureName(\\\背景画面\\\画面窗口\\\电泳处理线\\\

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

Window)属性名,\\\电泳处理 线\\\即为分级画面//的名称 这样就能方便快捷地切换画面。

字串3

11:必须始终显示的报警记录,用画面颜色闪烁来提示操作者有故障发生,可以用同样的C语言脚本(当然不是加在鼠标动作中)在背景画面的底部留下一条类似Windows状态栏的报警栏,当出现故障报警的时候在报警栏显示最近一条报警记录,操作人员可以利用按钮切换到主报警记录画面了解故障的完全信息。 字串7

12:单个部件的组态

WinCC在其内部的图库里集成很多的图形对象,如水箱、电机、阀门等等,对于污水处理用的最多的是水池,搅拌机等等。为了使组态画面贴近实际,能够更好的反应现场工况,图库里的元素并不能满足要求。我们可以利用WinCC的画图工具自己绘制适应实际的图形元素,并且使用C脚本使其产生动画效果。

对于调节池,反应池等可以用矩形来表示,以图形的填充高度来示意其液位的高度。这里要注意的是一些数值地转化,由于一些仪表例如E+H的超声波液位计,是以4~20毫安的电流信号进入PLC,对于表的参数设定好以后4毫安就对应相应池子的液位最低点,而20毫安对应于池子的液位最高点。所以在显示数字高度的时候要将PLC相对4、20毫安的数值转化为实际池子的高度范围例如,0.5~5.5米。但是对于图形填充的时候是按照百分数来表示的所以还要将PLC数值转化为0~100%的度量范围。

搅拌机的组态可以使用C脚本使其产生动画,在其运行时产生视觉上的旋转。实际上搅拌机的图形是用两个部分椭圆组成的,在椭圆的属性->几何->半径中加入代码如下: #include \\\

long _main(char* lpszPictureName, char* lpszObjectName, char* 字串2

lpszPropertyName) {

static int x=25,y,z;//x为半径的初始值为25,y为切换变量,z为搅拌机运行状态变量

z=GetTagBit(\\\搅拌机运行\\\取得PLC搅拌机的运行状态 if(z!=0) { switch(y) { case 0: x=x-4; if(x<=0) y=1; break;