使用WinCC>用于创建函数和动作的ANSI-C>ANSI-C函数描述>标准函数〉Windows"," />

最新wincc函数实例资料

最新wincc函数实例资料
最新wincc函数实例资料

如何在WinCC运行时通过按下一个按钮来启动一个程序,打印一个文本文件或者打开一个PDF文件?

显示订货号

说明:WinCC在动态向导里提供了方便的“启动其他应用程序”功能来启动一个外部程序。这个向导生成一个C脚本。为了给这个程序添加参数,可以打开该脚本并添加

也可以在WinCC在线帮助中找到相关描述,在目录"WinCC信息系统> 使用WinCC >用于创建函数和动作的ANSI-C > ANSI-C 函数描述> 标准函数〉

Win dows",如果您使用的是VBS,则在目录"使用WinCC >用于创建程序和动作的VBS > VBScript实例> 常规例程"。

*在编写C动作时,当指定路径时必须输入双斜线("\"),否则会被解释为一个控制字符。

*当调用某些文件类型(如 Microsoft Excel 文件)时,需要输入不止一 个函数参数。因此,如果路径规范里包含一个路径, 需要在函数参数里面 将该路径放在反斜线和双引号标志之间, (如, ProgramExecute("C:\\Programme\\Microsoft

OfficeWOFFICE11WEXCEL.EXE \" C:\\temp\\New FolderWMappe1.xls \""))。 ?注意当操作员打开系统窗口的时候,可能会有操作系统级别的系统操作。 执行完程序之后关闭这些窗口。

?您可以用Win32 API 函数终止一个程序,更多信息和例程可参考条目号 2976503。

使用C 函数“ Sleep

显示订货号

问题:

如何在WinCC

中编程“ Sleep ”等待功能?

解答:

为此,可以使用 Windows API 功能“ Sleep() ”。下 用“ Sleep ”功能。

F 面的样例程序演示了如何使 #pragma code("Kernel32.dll") void Sleep(i nt Millisec on ds);

#pragma code()

Sleep(1000); //time in milliseco nds

警告.

“ Sleep ”函数对动作处理性能有很大的负面影响。 请注意以下几点:

因此,如果想用此函数的话,

*使用Sleep()时,C 脚本的处理在特定的一段时间内被中断。 在此期间内, 任何对于被中断功能的请求将不被处理。

?而且,使用相同触发器的所有动作将不再被处理。 使用相同的触发器意味 着用同一个循环触发器所有动作或变量触发器的所有动作将不再被处理。 如果同步地调用动作,这种调用通过一个变量触发器或事件被周期性地 或非周期性地启动,而且所有这些功能使用了 Sleep()函数,那么所有的 动作会被终止。最坏情况下是; 由于启动这四个动作将终止对所有动作 的处理。

?如果说,在一个带10-秒延迟触发器的动作中使用了Sleep()函数。那么所有被循环调用的动作将被中断。结果是,如:用1-秒触发器的动作操

作中断,除此以外,所有后继的动作也不被执行。这就是说,不仅当前的动

作不被处理,其它还没有启动的动作也不会被处理。

?作业不被处理是因为中断仍储存在队列中。一旦中断结束,所有在队列中的动作将开始被处理。但是,中断结束后,在队列中的动作不会在他们原来指

定的循环中被处理。因此,如同前面所述的那样,那么队列中剩下的动作将被一个接一个的处理而不再由触发器启动。并且这些动作只是尽可能快的被

处理掉。(理论上同步)。

如何打开一个应用程序并保持其始终在前台显示?显示订货号

描述:

以Adobe Reader 8.0作为示例,我们将演示如何打开一个程序窗口并始终在前台显示。

No.程序

1 在按钮事件的“鼠标动作”中创建以下C语言函数,例如:

#in elude "apdefap.h"

void OnClick(char* IpszPictureName, char* IpszObjectName, char*

IpszPropertyName)

{

HWND Han dle = NULL;

Handle = FindWin dow("AcrobatSDIWi ndow",NULL);

if (Ha ndle)

{

ShowWi ndow(Ha ndle, SW_SHOWNORMAL);

} else {

ProgramExecute("C:/Program Files/Adobe/Reader

8.0/Reader/AcroRD32.exe");

Han dle = Fin dWi ndow(NULL, "Adobe Reader");

}

SetWi ndowPos (Ha ndle, HWND_TOPMOST, 400, 200, 520, 420, 0);

}

、八亠、、八

注意:

为了参数传递,Windows 函数“ HWNDindWindow(LPCSTRpClassName, LPCSTRpWi ndowName) 需要窗口的类名或者窗口自己的名子。可以很

容易的通过打开相关程序获得窗口的名字(没有文档)。窗口名字会显示在标题栏。然而使用窗口名字时,当打开文档时窗口名字也许会发生改变。

这也是为什么最好使用“ lpClassName ”参数的原因。

2 在按钮事件的鼠标动作中以下的C语言函数,从窗口名称中确定了窗口的

类名:

为了显示“ printf() ”函数的输出,可以在WinCC画面中加载“ GSC- Diag no stics ”应用程序窗口或者启动“ apdiag.exe ”程序。

#in clude "apdefap.h"

void OnClick(char* IpszPictureName, char* IpszObjectName, char*

IpszPropertyName)

{

char win class[256];

HWND Han dle = NULL;

Han dle = Fin dWi ndow(NULL, "Adobe Reader");

if (!Handle) {

ProgramExecute("C:/Program Files/Adobe/Reader

8.0/Reader/AcroRD32.exe");

Han dle = Fin dWi ndow(NULL, "Adobe Reader");

}

GetClassName(Ha ndle, win class, sizeof (wi nclass)-1); printf ("Wi ndow

Class Name: %s \r\n", win class);

}

在WinCC中如何加载用户自定义DLLs? 显示订货号

描述:

在WinCC中,您希望使用用户自定义动态链接库,在此条目,我们演示了如何在WinCC中加载一个实例DLL。在带有VBS的WinCC运行模式下,使用VB创建的DLLs不能被加载。

关于DLLs更多的信息可以在WinCC在线帮助系统下“使用WinCC用于创建函数

和动作的ANSI-C>在函数和动作中使用DLL'

* varl (signed 32-bit value) ? result (sig ned 32-bit value)

在一个按钮的事件的“鼠标单击” C 动作中输入下面的C 脚本:

#in elude "apdefap.h"

void OnClick(char* IpszPictureName, char* IpszObjectName, char* IpszPropertyName) {

#pragma code ("c:/temp/T1_C.dll") int aufruf1(i nt a); #pragma code ()

int value;

value = GetTagDouble("var1"); //Return-Type: double

SetTagDouble("result",aufruf1(value)); //Return-Type: BOOL } 3 结果:

『ESLI IT

300

图.01 关键字: 函数调用,API

调用打印机的状态框 显示订货号

问题:如何从WinCC 调用打印机的状态框 ? 解答:

“控制打印机”从控制面板上调用该框。

F 面的动作必须在一个按钮下加以编辑,比方说: #in elude "apdefap.h"

void OnClick(char* IpszPictureName, char* IpszObjectName, char* IpszPropertyName) {

//打印机框的调用

ProgramExecute("C:\\WIN.95\\co ntrol.exe prin ters"); }

200

Call 'aufrufl

当在WinCCW本中结合一个DLL时,使用的内存空间增加了

显示订货号

问题:

如果使用Visual C++创建的一个DLL文件时,发现PC上使用的内存增加了。对于这种情况,应该怎么办?

解答:

检查是否用正式发行的版本创建了DLL^所提供WinCC是正式发行的版本。这意味着WinCC也可以使用Microsoft DLL MFC42.DL啲发行版本。

如果在测试版本中有DLL文件,那么全局脚本中必须另外加载MFC42.DLL的测试版本。另外,这会增加对内存的用量。

在WinCC中始终使用DLL文件的发行版本。

可按如下方法创建发行版本:

1.

2. 打开DLL的项目文件。

3.

3. 检查是否DLL已在Win32 Release组态下被创建。

4. 如有必要,把活化的组态切换到“ Win 32 Release ”。在Microsoft Visual

C++ Studio中的“创建”-> “定义活化的组态”中做该切换

5. 重新创建DLL。

7.

6. 用DLL的发行版本替换测试版本的DLL。

在WinCC中通过C脚本输出声音

A 丁显示订货号

问题:

如何在WinCC中通过C脚本输出声音?

解答:

附件是一个小实例。该C动作位于按钮后,这样只需单击该按钮就可产生声音。

C动作: #in elude "apdefap.h"

void OnClick(char* IpszPictureName, char* IpszObjectName, char* IpszPropertyName, UIN

{

#pragma code ("Wi nm m.dll ")

VOID WINAPI PlaySou ndA ( char* pszSou nd, char* hmode, DWORD dwflag );

#pragma code()

PlaySou ndA("C:\\Wi nn t.400\\Media\\tada.wav",NULL,1);

}

该功能需要有声卡。

PlaySou ndA函数的说明:

1. 参数char* pszSound :

指定声音文件(*.wav文件)的全路径。

2. 参数char* hmode :

总为0。

3. 参数DWORD dwflag

SND_SYNC = 0x0000声音文件播放一次,该脚本一直等到播放结束

SND_ASYNC = 0x0001声音文件播放一次,同时并行处理该脚本

SND_NODEFAULT = 0x0002如果未找到该声音文件,则不播放默认值,而是什么也不播放。

SND_LOOP = 0x0008重复该声音文件直到下个PlaySoundA调用(只能通过0x0001)=>

这些参数也可通过逐位逻辑’或’进行组合(女口:SND_ASYNC | SND_LOOP)

注意事项:

如果想使用计算机内部扬声器的蜂鸣声而不是声音文件,则实现如下脚本:由于寻址内部扬声器,无需声卡。

#in elude "apdefap.h"

void OnClick(char* IpszPictureName, char* IpszObjectName, char* IpszPropertyName, UIN

{

#pragma code ("Kernel32.dll")

BOOL Beep( DWORD dwFreq, DWORD dwDuratio n); //dwFreq 定义蜂鸣声的频率,单位:

Hz

指定蜂鸣声的持续时长,单位:ms

#pragma code()

Beep(1000,100);

}

如何创建Windows MessageBox并且确定操作员按下的是哪个按钮?

显示订货号

这个参数疋义了 MessageBox 的外观和仃为。匕是不同 Flags 的组合(逐位进仃 或 操作)。以下列出了一些主要的标记: MB_OK, MB_OKCANCEL, MB_YESNO,

MB_YESNOCANCEL,

MB_ABORTRETRYIGNORI MB_CANCELTRYCONTINl MB_HELP,

MB_RETRYCANCEL

使用这些标记中的一个可以定义

MessageBox 中显示哪些按钮。 E,

JE, MB 」CONEXCLAMATION, MB_ICONQUESTION, MB 」CONWARNING,

MB 」CONINFORMATION, MB_ICONQUESTION, MB_ICONASTERISK, MB 」CONSTOP, MB_ICONERROR, MB_ICONHAND 使用这些标记中的一个可以定义 MessageBox 中显示的图标。 MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3, MB DEFBUTTON4 使用这些标记中的一个可以定义默认 的按钮。

MB_SETFOREGROUND

MessageBox 显示在最前面。

MB SYSTEMMODAL _

MessageBox 疋义为系统模式。消息直

到确认之前一直显示在最前面。

重要事项: “ MB _SYSTEMM O

AL

记应该总用于 避免发生阻塞整个系统的可能。 MessageBox()函数的返回值: 返回值 描述 IDABORT, IDCANCEL,

IDCONTINUE 注意事

项: IDIGNORE, IDNO, IDOK, IDRETRY, 函数的返回值是“ int ”类型并告知操作员按下的是哪个按钮。 ? 如果MessageBox 有“ Cancel ”键,并且操作员使用 “ESC 键终止 MessageBox,系统将返回IDCANCEL 的值。 ?如果函数使用失败,将返回“ 0”。更多的错误信息可通过

WINCC常用功能

WINCC常用功能(2012-06-13 11:22:46) 标签:wincc 功能 问题 文化分类:自动控制 1问:如何触发计算机扬声器的声音? 答:编写如下C-Action: #pragmacode("kernel32.dll"); BOOLBeep(DWORDdwFreq,DWORDdwDuration); #pragmacode(); 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: #pragmacode("kernel32.dll"); VoidGetLocalTimes(SYSTEMTIME*lpst); #pragmacode(); SYSTEMTIMEtime; 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" voidonClick(char*lpszPictureName,char*lpszObjectName, char*lpszPropertyName) {ProgramExcute("c:\\win98\\control.exetimedate.cpl");} 其中执行的程序路径,需根据具体情况填写。 5、问:如何在WinCC中调用SQL语言? 答:1、创建一个SQL文件,此文件在ISQL中建立,文件内包含所要执行的SQL语句。Windows对话框实现。具体如下: 2、在WinCC中用CScript调用上述SQL文件,如下所示: #include"apdefap.h" voidOnLButtonDown(char*lpszPictureName, char*lpszObjectName, char*lpszPropertyName, UINTnFlags,intx,inty) { char*a="c:\\siemens\\common\\SQLANY\\ISQL-q-b-c UID=DBA;PWD=SQL;DBF=E:\\testsql\\testsqlRT.DB; DBN=CC_testsql_99-12-03-12:48:26R;READ E:testsql\\test.sql"; Printf("%s\r\n",a); ProgramExcute(a); } 下面是一个简单的SQL文件内容: select*frompde#hd#t#test; outputtoe:\\test2.txtFORMATascii 注意:文件名及路径中不要带空格。 6、问:如何整点启动归档? 答:在"GlobleScript"下的Projectfunction编写程序函数:cyclicarchive BOOLcyclicarchive() { #pragmacode("kernel.dll"); voidGetLocalTime(SYSTEMTIME*lpsz); #pragmacode(); SYSTEMTIMEtime; Intt1; GetLocalTime(&time); T1=time.wMinute; If(t1==00) { SetTagBit("startarchive",1); Return(BOOL)(GetTagBit("startarchive")); } } 在Tagloging中的"Propertiesofprocesstag"中的"archivetag"Tab下的Archivetype选择Cycle-selective,在"Event"标签下的"StartEvent"内选择cyclicarchive函数。 7、问:HowcanIsetandresetaWinCCvariablebymouseclickwithCscript? 答:ThefollowingfunctionshowshowyoucanalternatelysetandresetaWinCCvariablebymouseclick. #include"apdefap.h" voidOnClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName) { BOOLz; z=GetTagBit("MyBitVariable"); if(z==0) SetTagBit("MyBitVariable",1); else SetTagBit("MyBitVariable",0); } 8、问:HowcanIprogramawaitingfunction(Sleep)inWinCC? 答:Thefollowingsampleprogramshowshowthe"Sleep"isused. #pragmacode("Kernel32.dll") voidSleep(intmilliseconds);

wincc标准函数介绍

标准函数 该系统包含标准函数。可以按需要修改这些函数。此外,还可以自己创建标准函数。 该系统包括一个标准函数集。 一、Alarm - 简短描述 Alarm组包含控制WinCC报警控件的函数。标准函数可用于工具栏中的每一个按钮。这些函数可用来创建自定义工具栏,例如选择画面,或者定义控件上的设置。 1.void AcknowledgeMessage(DWORD MsgNr)函数,确认消息系统中带编号的消息,该编号被传递为参数。 使用标准函数操作WinCC报警控件的实例 {//确认选择的报警记录消息 AcknowledgeMessage(GetTagWord("U08i_MsgNr")); } 指定待确认的消息号。在本例中是从变量读取的。 2.BOOL AXC_OnBtnArcLong(char* lpszPictureName, char* pszMsgWin)函数,在消息窗口中该函数表示消息存储在长期归档中。 使用标准函数操作WinCC报警控件的实例 {// 跳转到WinCC报警控件中的第一条消息 AXC_OnBtnMsgFirst("gs_alarm_00","Control1"); } AXC_OnBtnMsgFirst函数参数: “gs_alarm_00”是在其中组态WinCC报警控件的画面的名称。 Control 1是WinCC报警控件的对象名。 3.BOOL AXC_OnBtnArcShort(char* lpszPictureName, char* pszMsgWin)函数,在消息窗口中该函数表示消息存储在短期归档中。 使用标准函数操作WinCC报警控件的实例 {// 跳转到WinCC报警控件中的第一条消息 AXC_OnBtnMsgFirst("gs_alarm_00","Control1"); } AXC_OnBtnMsgFirst函数参数: “gs_alarm_00”是在其中组态WinCC报警控件的画面的名称。 Control 1是WinCC报警控件的对象名。 Control 1是WinCC报警控件的对象名。 4.BOOL AXC_OnBtnComment(char* lpszPictureName, char* pszMsgWin)函数 外部消息窗口操作,该函数显示先前所选消息的注释。 使用标准函数操作WinCC报警控件的实例 {// 跳转到WinCC报警控件中的第一条消息 AXC_OnBtnMsgFirst("gs_alarm_00","Control1"); } AXC_OnBtnMsgFirst函数参数: “gs_alarm_00”是在其中组态WinCC报警控件的画面的名称。 Control 1是WinCC报警控件的对象名。 5.BOOL AXC_OnBtnEmergAckn(char* lpszPictureName, char* pszMsgWin)函数,外部消息窗口操作,此函数打开确认对话框(紧急确认/复位)。

winccfleXible系统函数

WinCC Flexible 系统函数 报警 ClearAlarmBuffer 应用 删除HMI设备报警缓冲区中的报警。 说明 尚未确认的报警也被删除。 语法 ClearAlarmBuffer (Alarm class number) 在脚本中是否可用:有 (ClearAlarmBuffer) 参数 Alarm class number 确定要从报警缓冲区中删除的报警: 0 (hmiAll) = 所有报警/事件 1 (hmiAlarms) = 错误 2 (hmiEvents) = 警告 3 (hmiSystem) = 系统事件 4 (hmiS7Diagnosis) = S7 诊断事件 可组态的对象 对象事件 变量数值改变超出上限低于下限 功能键(全局)释放按下 功能键(局部)释放按下 画面已加载已清除 数据记录溢出报警记录溢出 检查跟踪记录可用内存很少可用内存极少 画面对象按下 释放 单击 切换(或者拨动开关)打开 断开 启用 取消激活 时序表到期 报警缓冲区溢出

ClearAlarmBufferProtoolLegacy 应用 该系统函数用来确保兼容性。 它具有与系统函数“ClearAlarmBuffer”相同的功能,但使用旧的ProTool编号方式。语法 ClearAlarmBufferProtoolLegacy (Alarm class number) 在脚本中是否可用:有 (ClearAlarmBufferProtoolLegacy) 参数 Alarm class number 将要删除其消息的报警类别号: -1 (hmiAllProtoolLegacy) = 所有报警/事件 0 (hmiAlarmsProtoolLegacy) = 错误 1 (hmiEventsProtoolLegacy) = 警告 2 (hmiSystemProtoolLegacy) = 系统事件 3 (hmiS7DiagnosisProtoolLegacy) = S7 诊断事件 可组态的对象 对象事件 变量数值改变超出上限低于下限 功能键(全局)释放按下 功能键(局部)释放按下 画面已加载已清除 变量记录溢出报警记录溢出 检查跟踪记录可用内存很少可用内存极少 画面对象按下 释放 单击 切换(或者拨动开关)打开 断开 启用 取消激活 时序表到期 报警缓冲区溢出 SetAlarmReportMode 应用 确定是否将报警自动报告到打印机上。 语法 SetAlarmReportMode (Mode) 在脚本中是否可用:有 (SetAlarmReportMode) 参数 Mode

wincc中使用vbs常用函数.

wincc 中使用vbs 常用函数 1. 函数array() 功能: 创建一个数组变量 格式:array(list) 参数:list 为数组变量中的每个数值列,中间用逗号间隔 例子: <% i = array ( “1”, ”2”, ”3”) %> 结果: i 被赋予为数组 2. 函数Cint() 功能: 将一表达式/ 其它类型的变量转换成整数类型(int) 格式:Cin t(expressio n_r) 参数:expression」是任何有效的表达式/其它类型的变量 例子: <% f = ” 234” response.write cINT(f) + 2 %> 结果: 236 函数Cint() 将字符” 234”转换成整数234.如果表达式为空, 或者无效时, 返回值为0; 3. 函数:Creatobject() 功能: 创建及返回一个ActiveX 对象. 格式:Creatobject(obname)

参数bname 是对象的名称 例子: <% Set con = Server.CreateObject( “ADODB.Connection”) %> 结果: 4. 函数Cstr() 功能: 将一表达式/其它类型的变量转换成字符类型(string) 格式:Cstr(expression_r) 参数:expression」是任何有效的表达式/其它类型的变量例子: <% s = 3 + 2 response.write ”The result is: ” & cStr(s) %> 结果: 函数Cstr() 将整数 5 转换成字符” 5”. 5. 函数Date() 功能: 返回当前系统(server 端) 的日期 格式: Date() 参数:无 例子<% date () %> 结果:05/10/00

WINCC报表详解

在工业生产中报表一直占有非常重要的部分,它一般用来记录现场的工艺参数和统计信息。早期是由人工抄录然后统计出相关的报表。进入计算机控制阶段,这份工作就需要工控软件来实现。对于工控行业的工程师来说:如何开发适合用户需求的报表一直是个难题。论坛上很多人都在寻求灵活高效的解决方法。 经过这段时间的网上讨论。综合网友们的意见和建议,我们做了总结。并结合WinCC软件本身作了相关的说明。希望能对大家在以后的报表开发中有所帮助。 接下来就从报表的需求分析、WinCC报表系统的应用、复杂报表的WinCC报表系统实现这几个部分来分别介绍。最后总结出WinCC报表系统在应用的优缺点和常见的问题的解决方法。 一.报表的需求分析 从需求上来讲报表一般分为:内容上的需求、样式上和任务上的需求。 1.内容需求内容上一般涉及到数据的求和、平均、最大值、最小值等计算,同时也会涉及到关系的处理,比如班组相关对应信息的统计分析等。下面是一个很典型的报表需求,就很能说明这样的问题: 图1. 月报表分析 此报表是典型的工业现场应用,在数据采集没有难度。唯一的难度在于四班三倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法。此类报表在连续生产的行业需求很广泛。比如:钢铁冶金行业需要一天24小时不停运转的系统。 还有一种内容上是分总的关系,就是一部分是简单的数据记录,另一部分是对上一部分 数据的统计,比如汇总、求和、平均等。如下图也是很典型的应用。

图2. 总分报表 另外一种就是涉及到混合排列的问题,一张表上既有分项数据,中间也涉及到统计信息,同时也会添加一些实时的信息在上面。如下图。 图3. 复杂报表 这是一个复杂的报表,中间涉及到分项的记录,数据求平均,和一些操作信息的记录。既有历史数据也有实时信息。 当然更复杂的报表需求也是有的,比如说涉及到一张报表上既有实时信息又有历史信息同时还涉及趋势视图、报警信息等。用户自己可以灵活的定义报表的内容和样式。比如下图。

Wincc系统函数

报警 1、ClearAlarmBuffer 应用:删除HMI设备报警缓冲区中的报警。说明:尚未确认的报警也被删除。 2、ClearAlarmBufferProtoolLegacy 应用:该系统函数用来确保兼容性。 它具有与系统函数“ClearAlarmBuffer”相同的功能,但使用旧的ProTool编号方式。参数:Alarm class number 将要删除其消息的报警类别号: -1 (hmiAllProtoolLegacy) = 所有报警/事件 0 (hmiAlarmsProtoolLegacy) = 错误 1 (hmiEventsProtoolLegacy) = 警告 2 (hmiSystemProtoolLegacy) = 系统事件 3 (hmiS7DiagnosisProtoolLegacy) = S7 诊断事件 3、SetAlarmReportMode 应用:确定是否将报警自动报告到打印机上。 4、ShowAlarmWindow 应用:隐藏或显示 HMI 设备上的报警窗口。 5、ShowSystemAlarm 应用:将已传递参数的值显示为 HMI 设备上的系统报警。 编辑位 1、InvertBit 应用:对给定的“Bool”型变量的值取反。如果变量具有值 1(真),它将被设置为 0(假)。如果变量具有值 0(假),它将被设置为 1(真)。说明:不要使用循环事件或递归事件或具有外部变量的系统函数。 在画面中创建一个开关。该开关连接到外部布尔类型变量“Tag1”。将系统函数“InvertBit”分配给“更改”事件。该系统函数连接到外部变量“Tag1”。 在运行期间,这会导致无法预料的行为。 2、InvertBitInTag 应用:对给定变量中的位取反:如果变量中的位为值 1(真),它将被设置为 0(假)。如果变量中的位为值 0(假),它将被设置为 1(真)。 在改变了给定位之后,系统函数将整个变量传送回 PLC。不检查此过程期间变量中是否有其它位发生更改。在变量被传送回 PLC 之前,操作员和 PLC 对变量具有只读访问权限。 说明:如果 PLC 支持 BOOL 型变量,不要使用该系统函数。而是使用“InvertBit”系统函数。不要使用循环事件或递归事件或具有外部变量的系统函数。 在画面中创建一个开关。该开关连接到外部布尔类型变量“Tag1”。将系统函数“InvertBitInVariable”分配给“更改”事件。该系统函数连接到外部变量“Tag1”。 在运行期间,这会导致无法预料的行为。 3、ResetBit 应用:将“Bool”型变量的值设置为 0(假)。 4、ResetBitInTag 应用:将给定变量中的一个位设置为 0(假)。 在改变了给定位之后,系统函数将整个变量传送回 PLC。不检查此过程期间变量中是否有其它位发生更改。在指示的变量被传送回 PLC 之前,操作员和 PLC 对变量具有只读访问权限。说明:如果 PLC 支持 BOOL 型变量,不要使用该系统函数。而使用系统函数“ResetBit”。 5、SetBit 应用 将“Bool”型变量的值设置为 1(真)。

最新wincc生成excel

1 给wincc中通过vbs写excel的方式做报表的初学者一点脚本我对该帖子不做任何限制,都可以自由拷贝使用。方便初学者学习! //log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次 //如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。 //本程序主要是演示数据记录的过程。 //在c:\建立一个excel文件,该文件可以是你的报表模版 Option Explicit Function action Dim objExcelApp,objExcelbook,objExcelSheet Dim tagshijian,sheetname,username,zhushi Dim tagday Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a1 8,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a3 5,a36,a37,a38,a39,a40

Dim i,j,t,count Dim msg Dim patch,fn Dim d,m,y,oh,mm,ss d=" " m="-" y="-" oh=":" mm=":" ss="" msg="记录报表成功" fn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now)) patch="c:\"&fn&".xls" Set a1=HMIRuntime.Tags("a1") Set a2=HMIRuntime.Tags("a2") Set a3=HMIRuntime.Tags("a3") Set a4=HMIRuntime.Tags("a4") Set a5=HMIRuntime.Tags("a5")

wincc经典问题

、问:如何触发计算机扬声器的声音? 答:编写如下C-Action: #pragma code("kernel32.dll"); 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("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对话框实现。具体如下: #i nclude"apdefap.h" void onClick(char*lpszPictureName,char*lpszObjectName, char*lpszPropertyName) {ProgramExcute("c:\\win98\\control.exe timedate.cpl");} 其中执行的程序路径,需根据具体情况填写。

wincc的n个经典问题解答之三

wincc的n个经典问题解答之三 作者:激情如火,2005-12-27 17:23:00 发表于:《Siemens自动化软件论坛》共有15人回复, 送留言 部分非本人原创,整理在一起旨在给大家提供方便! 41:用C编程解决授权点数不够用的问题(acsun提供) 当需要的工艺参数超过WinCC版本限制的Tag数目,可以用C语言编程实现多个工艺参数打称重系统有146个参数超过了WinCC的128个Tag的限制就可以用C语言编程决这一问题而不需 基本思想就是把多个参数在下位机内存中连续排列然后在WinCC中定义一个Tag它的长度是多个分成多个参数 例如下位机有两个参数LTN44001和LTN44023都是16位整数分别存放在DD99.DW146和DD99.DW1在WinCC中定义一个外部Tag命名为PackageTag类型为32位整数并联地址为DD99.DBD146再定LTN44023在 Global Script全局脚本中C语言编程如下 Union { Long Dword Int Word[2] }union Union.Dword=GetTagDword("PackageTag") SetTagWord("LTN44001",Union.Word[0]) SetTagWord("LTN44023",Union.Word[0]) 这样两个参数LTN44001和LTN44023就通过一个Tag传送上来了理论上只要下位机内存足够可以版本外部Tag数目的限制. 42:如何在WinCC里用C语言调用SQL语言? 1、创建一个SQL文件。 此文件在ISQL中创建,文件内容是所希望执行的SQL语句。 2、在WinCC的C Script中编写程序调用此SQL文件,如以下程序所示: #i nclude "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

wincc中使用vbs的常用函数

wincc中使用vbs的常用函数 1.函数array() 功能:创建一个数组变量 格式:array(list) 参数:list为数组变量中的每个数值列,中间用逗号间隔 例子: <%i=array(“1”,”2”,”3”)%> 结果:i被赋予为数组 2.函数Cint() 功能:将一表达式/其它类型的变量转换成整数类型(int) 格式:Cint(expression) 参数:expression是任何有效的表达式/其它类型的变量 例子: <% f=”234” response.write cINT(f)+2 %> 结果:236 函数Cint()将字符”234”转换成整数234.如果表达式为空,或者无效时,返回值为0; 3.函数:Creatobject() 功能:创建及返回一个ActiveX对象. 格式:Creatobject(obname) 参数bname是对象的名称 例子: <% Set con=Server.CreateObject(“ADODB.Connection”) %> 结果: 4.函数Cstr() 功能:将一表达式/其它类型的变量转换成字符类型(string) 格式:Cstr(expression) 参数:expression是任何有效的表达式/其它类型的变量 例子: <% s=3+2 response.write”The result is:”&cStr(s) %> 结果:函数Cstr()将整数5转换成字符”5”. 5.函数Date() 功能:返回当前系统(server端)的日期

格式:Date() 参数:无 例子<%date()%> 结果:05/10/00 6.函数Dateadd() 功能:计算某个指定的时间和 格式:dateadd(timeinterval,number,date) 参数:timeinterval是时间单位(月,日..);number是时间间隔值,date是时间始点. 例子: <% currentDate=#8/4/99# newDate=DateAdd(“m”,3,currentDate) response.write newDate %><% currentDate=#12:34:45PM# newDate=DateAdd(“h”,3,currentDate) response.write newDate %> 结果: 11/4/99 3:34:45PM 其中 “m”=”month”; “d”=”day”; 如果是currentDate格式,则, “h”=”hour”; “s”=”second”; 7.函数Datediff() 功能:计算某量个指定的时间差 格式:datediff(timeinterval,date1,date2[,firstdayofweek[,firstdayofyear]]) 参数:timeinterval是时间单位;date1,date2是有效的日期表达式,firstdayofweek,firstdayofyear是任意选项. 例子: <% fromDate=#8/4/99# toDate=#1/1/2000# response.write”There are”&_ DateDiff(“d”,fromDate,toDate)&_ “days to millenium from8/4/99.” %> 结果:There are150days to millenium from8/4/99. 8.函数day() 功能:返回一个整数值,对应于某月的某日 格式:day(date)

wincc生成excel

给wincc中通过vbs写excel的方式做报表的初学者一点脚本 我对该帖子不做任何限制,都可以自由拷贝使用。方便初学者学习! //log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次 //如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。//本程序主要是演示数据记录的过程。 //在c:\建立一个excel文件,该文件可以是你的报表模版 Option Explicit Function action Dim objExcelApp,objExcelbook,objExcelSheet Dim tagshijian,sheetname,username,zhushi Dim tagday Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21, a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40 Dim i,j,t,count Dim msg Dim patch,fn Dim d,m,y,oh,mm,ss d=" " m="-" y="-" oh=":" mm=":" ss="" msg="记录报表成功" fn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now)) patch="c:\"&fn&".xls" Set a1=HMIRuntime.Tags("a1") Set a2=HMIRuntime.Tags("a2") Set a3=HMIRuntime.Tags("a3") Set a4=HMIRuntime.Tags("a4") Set a5=HMIRuntime.Tags("a5") Set a6=HMIRuntime.Tags("a6") Set a7=HMIRuntime.Tags("a7") Set a8=HMIRuntime.Tags("a8") Set a9=HMIRuntime.Tags("a9") Set a10=HMIRuntime.Tags("a10") Set a11=HMIRuntime.Tags("a11") Set a12=HMIRuntime.Tags("a12") Set a13=HMIRuntime.Tags("a13") Set a14=HMIRuntime.Tags("a14") Set a15=HMIRuntime.Tags("a15")

WINCC VBSCRIPT常用函数

WinCC VBscript常用函数 1.数值型函数: abs(num):返回绝对值 sgn(num):num>01;num=00;num<0-1;判断数值正负 hex(num):返回十六进制值直接表示:&Hxx最大8位 oct(num):返回八进制值直接表示:&Oxx最大8位 sqr(num):返回平方根num>0 int(num):取整int(99.8)=99;int(-99.2)=100 fix(num):取整fix(99.8)=99;fix(-99.2)=99 round(num,n):四舍五入取小数位round(3.14159,3)=3.142中点数值四舍五入为近偶取整round(3.25,1)=3.2 log(num):取以e为底的对数num>0 exp(n):取e的n次幂通常用num^n sin(num):三角函数,以弧度为值计算(角度*Pai)/180=弧度con(num); tan(num);atn(num) 2.字符串函数: len(str):计算字符串长度中文字符长度也计为一! mid(str,起始字符,[读取长度]):截取字符串中间子字符串 left(str,nlen):从左边起截取nlen长度子字符串 right(str,nlen):从右边起截取nlen长度子字符串 Lcase(str):字符串转成小写 Ucase(str):字符串转成大写 trim(str):去除字符串两端空格 Ltrim(str):去除字符串左侧空格 Rtrim(str):去除字符串右侧空格 replace(str,查找字符串,替代字符串,[起始字符,替代次数,比较方法]):替换字符串 注:默认值:起始字符1;替代次数不限;比较方法区分大小写(0) InStr([起始字符,]str,查找字符串[,比较方法]):检测是否包含子字符串可选参数需同时选返回起始位置 InStrRev(str,查找字符串[,起始字符][,比较方法]):反向检测是否包含子字符串返回起始位置 space(n):构造n个空格的字符串 string(n,str):构造由n个str第一个字符组成的字符串 StrReverse(str):反转字符串 split(str,分割字符串[,次数][,比较方法]):以分割字符串为分割标志将字符串转为字符数组可选参数需同时选 3.数据类型转换函数:

WinCC和EXCEL数据传递

1、DDE简介 动态数据交换(DDE)是基于Windows的消息机制,两个Windows应用程序通过相互之间传递消息进行“对话”,这两个程序被分别称为“服务器”和“客户”。DDE服务器是一个维护着其他Windows程序可能使用的数据程序,而DDE 客户则是从服务器获得这些数据的程序。 DDE对话是由客户程序发动的。客户程序将一条称为WM_DDE_INTITIATE的消息发给当前运行的所有Windows 程序,这条消息指明了客户程序所需要的数据类别,拥有这些数据的DDE服务器可以响应这条消息,这样一个对话就 开始了。 DDE的对话方式有3种: ①服务器数据变化时,直接把数据送给客户,由客户对这些数据进行处理,这类对话方式称为热链;②服务器的数据变化时,服务器通知客户,再由客户取数据,这种方式称为温链;③由客户申请数据、 服务器发送数据的方式称为冷链。 一、Wincc作为DDE的客户端,Excel作为DDE服务器(本地) 1、在变量管理上按鼠标右键--添加新的驱动程序--选“windows dde.chn” 图1 2、在DDE上按鼠标右键--新驱动程序连接--点属性,在其连接属性中: “计算机名称”为空;“应用程序”为excel;“主题”为[]工作表名,比如[DDE.xls]sheet1。

图2 3、在DDE\excel下建变量,在变量属性中选择地址,条目名称填:r行数c列数,比如r1c1(表示第一行 第一列的单元格),重复步骤3可以加入更多的DDE变量 图3 4、Excel程序 图4 Wincc程序 图5 5完成

用OPC做比较省事。 WinCC做OPC Server,Excel做OPC Client。 这种情况下,WinCC端不需要做任何设置,只要在Excel 里用少量的代码就能实现双方的通讯。 对于WINCC与S7-300的通讯,首先要确定PLC的通讯口类型,PLC一般都集成了MPI/DP口,还可以安装通讯模块。计算机(PC)上安装适当的通讯卡(不同的通讯卡支持的通讯协议不同)。看你需要啦! 其次是WINCC软件里的通讯协议要与PC机对应。WINCC提供了SIMATIC S7 PROTOCOL SUITE 通讯驱动程序,包含了多种通讯协议! 最终还有自己亲自实际操作了才有深刻的了解的!! Sub X6309X94AE9X0000X6539_OnClick(Byval Item) Dim fso,myfile Set fso = CreateObject("scripting.FileSystemObject") Set MyFile = fso.GetFile("d:\Excelcode.xls") Dim ObjExcelApp Set objExcelApp = CreateObject("Excel.Application") 'objExcelApp.Visible = True objExcelApp.Workbooks.Open MyFile '上面的程序段是为了打开d盘下叫Excelcode.xls名字的excel文件 objExcelApp.worksheets ("sheet1").Cells(1, 1).VAlue = HMIRuntime.Tags("usercodenew1").read objExcelApp.ActiveWorkbook.Save '上面两行的作用是将wincc变量"usercodenew1"的值写到Excel表中的A1格子里面,并且保持一下 Dim coldold Set coldold=HMIRuntime.Tags("usercodeold1") coldold.Value = objExcelApp.worksheets ("sheet1").Cells(1, 1).value '上面这两句的作用是将刚才保持到Excel表格中的数据重新读回wincc,存到"usercodeold1"变量中,当然现在其实并没有存入"usercodeold1"变量,只是存在了叫coldold的临时变量里面 objExcelApp.Workbooks.Close objExcelApp.Quit Set ObjEXceLapp = Nothing '到这里为止,我们可以通过上面的语句关闭刚才打开的excel程序了 coldold.Write '最后是把读到的excel值从临时变量coldold中写入它对应的"usercodeold1"变量中 End Sub 上面这个例子已经调试通过。网上有很多wincc值写入excel中的例子,一直找不到从excel中读取数据到wincc中的例子,结合网上朋友的一些经验,这里给出个小例子,供大家参考。

Wincc中弹出对话框函数MessageBox参数以及应用

Wincc 中对话框弹出函数MessageBox 参数以及应用 按键显示: 常数 值 描述 MB_OK 0x00000000 消息框中包含的一个按钮: 确定 这是默认值. MB_OKCANCEL 0x00000001 消息框中包含的两个按钮: 确定和取消. MB_ABORTRETRYIGNORE 0x00000002 消息框中包含的三个按钮: 中止, 重试和忽略. MB_YESNOCANCEL 0x00000003 消息框中包含的三个按钮: 是,否和取消 MB_YESNO 0x00000004 消息框中包含的两个按钮: 是和否 MB_RETRYCANCEL 0x00000005 消息框中包含的两个按钮: 重试和取消 MB_CANCELTRYCONTINUE 0x00000006 Windows 2000: 消息框中包含的三个按钮: 取消, 重试, 继续. 使用这个消息框类型代替 //MessageBox(NULL,"这是一个默认的只有确定的消息框!","标题", MB_OK ); //MessageBox(NULL,"这是一个确定取消的消息框!","标题", MB_OKCANCEL ); //MessageBox(NULL,"这是一个是或否的消息框!","标题", MB_YESNO ); //MessageBox(NULL,"这是一个是或否或取消的消息框!","标题", MB_YESNOCANCEL ); //MessageBox(NULL,"这是一个重试或取消的消息框!","标题",MB_RETRYCANCEL ); //MessageBox(NULL,"这是一个中止, 重试和忽略的消息框!","标题",MB_ABORTRETRYIGNORE ); 在消息框内显示的图标是以下值之一。 //MessageBox(NULL,"这是一个错误的消息框!","标题", MB_ICONHAND ); //MessageBox(NULL,"这是一个错误的消息框!","标题", MB_ICONSTOP ); //MessageBox(NULL,"这是一个错误的消息框!","标题", MB_ICONERROR ); //MessageBox(NULL,"这是一个询问的消息框!","标题", MB_ICONQUESTION); //MessageBox(NULL,"这是一个警告的消息框!","标题", MB_ICONEXCLAMATION );

WINCC c语言基础

要使对象动态化,在WinCC中有多种不同的选项可用。其中包括变量连接.动态对话框和直接连接。通过它们可以实现复杂的动态。然而,随着要求的增加它们会有限制。对于用户来说,组态C动作、项目函数或动作可以有更广的范围。它们在WinCC 脚本语言C中创建。对于许多应用来说,不必具备非常全面的C语言知识。它足以为现有函数提供参数。然而,为了使用WinCC脚本语言C的全部功能,需要具备有关这种编辑语言的基本知识。本课程可以为用户提供这些知识。 本课程用来为不熟悉C语言的人员提供有关编辑语言C的常规应用的基本知识。具备C语言编辑经验的编程员可以学习C语言应用于WinCC时的特性。 C脚本的开发环境 对于C脚本的创建,WinCC提供两个不同的编辑器。一个是图形编辑器中的动作编辑器,用于在对象处创建C动作;另一个是全局脚本编辑器,用于创建项目函数和全局动作。脚本语言的语法与采用ANSI的标准C语言相一致。 在WinCC中编辑语言C的另一个应用领域是关于动态向导的创建。为此,可以使用一个单独的编辑器。 图形编辑器的动作编辑器 在图形编辑器中,可以通过C动作使对象属性动作化。同样,也可以使用C动作来响应对象事件。 1.动作编辑器 对于C动作的组态,可以使用动作编辑器。此编辑器可以在对象属性对话框中通过以下方法打开,即点击鼠标右键期望的属性或事件,然后从显示的弹出式菜单中选择C动作。已经存在的C动作在属性或事件处用绿色箭头标记。 在动作编辑器中,可以编写C动作。对于属性的C动作,必须定义触发器。对于事件的C 动作,由于事件本身就是触发器所以不必再定义。完成的C动作必须进行编译,如果编译程序没有检测到错误,则可以通过单击确定退出动作编辑器 2.动作的结构 通常,一个C动作相当与C中的一个函数。C动作由两种不同类型:为属性创建动作和为事件创建的动作。通常,属性的C动作用于根据不同的环境条件控制此属性的值(例如变量的值)。对于这种类型的C动作,必须定义触发器来控制其执行。事件的C动作来响应此事件。 3.属性的C动作 #include apdefap h long-main(char* * *lpszPropertyName)

相关文档
最新文档