wincc函数实例(DOC)
(完整word版)WINCC函数

(完整word版)WINCC函数1.切换画面按钮 (2)2.设定BIT变量当前值 (2)3.取当前登陆用户 (2)4.取硬盘剩余容量 (3)5.以图像模式显示(灯、钮)等 (5)6.自定义对象 (6)7.OK返回值 (19)8.小键盘 (19)9.PID传递页面C脚本 (23)10.将变量B的值赋给变量A(无符号16位) (25)11.乒乓键 (26)12.C脚本、脉冲延时 (27)13.CONFIGURATION TOOOL (28)14.用“笔组”实现一张页面做趋势 (28)15.滑竿,SLIDER CONTROL的使用 (34)16.切换语言 (35)1.切换画面按钮#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) {SetPictureName(lpszPictureName,"PictureWindow1","HS_M ODE.Pdl"); //设定PictureWindow1填充为页面HS_MODE.Pdl SetTagChar("TT","操作模式"); //Return-Type: BOOL //设定字符串变量TT当前值为“操作模式”以显示页眉}2.设定BIT变量当前值SetTagBit("N3_VALVE_RESET",0);3.取当前登陆用户 @CurrentUser。
wincc脚本的编写

TlgTrendWindowPressZoomInButton函数参数:
“TrendControl_01”是WinCC趋势控件的对象名。
40. BOOL TlgTrendWindowPressZoomOutButton(char* lpszWindowName)函数,恢复趋势窗口到缺省大小(1:1)。
39. BOOL TlgTrendWindowPressZoomInButton(char* lpszWindowName)函数,将打开趋势窗口中的放大镜。 只能用鼠标选择比例缩放区域。
使用标准函数操作WinCC趋势控件的实例
{//放大
TlgTrendWindowPressZoomInButton("TrendControl_01");
id="blog_text" class="cnt" >35. BOOL TlgTrendWindowPressOpenTimeSelectDlgButton(char* lpszWindowNumber)函数,打开定义显示时间段的对话框。
使用标准函数操作WinCC报警趋势的实例
{//开始/停止
Axes - 简短描述
Axes组中的函数仅用于棒图对象。
该函数可用来修改或调用各种棒图对象属性。
1. BOOL GetAlignment(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,使用棒图对象时,它指明文本在棒图的左面还是右面。
之后,运行时诊断被直接启动并由事件触发,须在对象上组态该事件。
如果该事件发生,硬件诊断功能从关联PLC的STEP7被启动。
WinCC部分函数说明说明书

WinCC部分函数说明凡是C与VB脚本函数名称一样的是实现一样的功能,只是调用环境不一样以下是部分CAPI1、int soundonce(char *src)//声音播放,仅仅播放一次,未使用src=声音文件位置2、void ccsleep(float sec) //暂停一段时间sec=时间S3、int ccGetPicStr(char *DesStr, char *SourPrefix, char *SourStrem, char *SourFomat) //生成图片的地址DesStr=生成后的地址SourPrefix=源前缀SourStrem=图片名称SourFomat=格式以下是部分VB函数说明,没有涉及到的请参照同名C函数的注释说明1、is_Correct_Pre_Visible(Byval pre_loc,Byval cur_val) ''用来修正一种情况的显示错误Pre_loc=前一轮出的牌位置Cur_loc=当前出的牌位置以下请自行参照源代码中的注释1、实现声音播放:SendSound、SendGetSound、SendUngetSound、GetSound2、实现牌面动态布局:GetGroupLeftByObj动作以及其他未涉及到函数的说明请参照源码中的注释PLC端部分函数、函数块说明(依次)1、未使用,2、产生一个随机整数3、等待一小段时间(西门子有提供标准块)(请注意该函数与硬件挂钩不基于时间单位)4、识别牌类型5、摸牌6、手牌转换成选中的牌7、判定是否是双已经连对并返回和8、判定是否是四带二并返回和(含飞机)9、判定是否是顺子并返回和10、判定是否是三带一并返回和(含飞机)11、判定是否是三不带并返回和(含飞机)12、抓牌调用了513、选中牌转换成手牌(14、选中牌转换成当前出牌15、洗牌16、排序从小到大。
tiawincc 报警控件的标准函数的应用实例

tiawincc 报警控件的标准函数的应用实例一、概述tiawincc是一款常用的报警控件,提供了丰富的标准函数,用于实现报警功能。
这些函数可以帮助开发人员更方便地实现报警功能,提高开发效率。
本文档将介绍一些常用的标准函数的应用实例,帮助读者更好地理解和应用这些函数。
二、标准函数应用实例1.创建报警控件函数:CreateControl()用法:CreateControl(parent,id,x,y,width,height)参数说明:parent-父控件的句柄id-控件的标识符x,y,width,height-控件的位置和大小应用实例:在窗口中创建一个报警控件,并将其放置在指定的位置和大小。
2.设置报警颜色和字体函数:SetColor()和SetFont()用法:SetColor(color)和SetFont(font)参数说明:color-报警的颜色font-报警的字体应用实例:设置报警颜色为红色,报警字体为宋体。
3.设置报警声音函数:SetSound()用法:SetSound(soundPath)参数说明:soundPath-报警声音文件的路径应用实例:设置报警声音为系统默认的报警声音文件。
4.添加报警事件处理函数函数:AddEventHandler()用法:AddEventHandler(eventId,eventProc)参数说明:eventId-事件的标识符eventProc-处理事件的函数指针应用实例:为某个事件添加一个处理函数,当该事件发生时,调用该处理函数进行处理。
5.清除报警事件处理函数函数:RemoveEventHandler()用法:RemoveEventHandler(eventId)参数说明:eventId-事件的标识符应用实例:清除某个事件的处理函数,避免不必要的处理。
三、总结通过以上几个标准函数的应用实例,我们可以看到tiawincc报警控件提供了丰富的功能,可以方便地实现报警功能。
WINCCC函数用法大全

函数名: stpc py功能:拷贝一个字符串到另一个用法: c har *stpcp y(cha r *de stin, char *sou rce);程序例:#inclu de <s tdio.h>#inclu de <s tring.h> intmain(void){ ch ar st ring[10];c har *str1= "ab cdefg hi";stpcp y(str ing,str1); prin tf("%s\n", stri ng);r eturn 0; }函数名: st rcat功能: 字符串拼接函数用法: cha r *st rcat(char*dest in, c har *sourc e); 程序例:#in clude <str ing.h>#i nclud e <st dio.h>i nt ma in(vo id) { char dest inati on[25]; cha r *bl ank = " ", *c = "C++", *B orlan d = "Borla nd";strcp y(des tinat ion,Borla nd);s trcat(dest inati on, b lank); strc at(de stina tion, c);print f("%s\n",desti natio n); re turn0;}函数名: str chr 功能:在一个串中查找给定字符的第一个匹配之处\用法: c har *strch r(cha r *st r, ch ar c);程序例:#incl ude <strin g.h>#inc lude<stdi o.h>int main(void){ char stri ng[15]; ch ar *p tr, c = 'r';s trcpy(stri ng, "Thisis astrin g");ptr = strc hr(st ring, c);if (p tr) pri ntf("The c harac ter %c isat po sitio n: %d\n",c, pt r-str ing); elsep rintf("The char acter wasnot f ound\n");retur n 0;} 函数名:strcm p功能: 串比较用法:int s trcmp(char *str1, ch ar *s tr2);看As ic码,s tr1>s tr2,返回值 >0;两串相等,返回0程序例:#i nclud e <st ring.h>#inclu de <s tdio.h>int m ain(v oid){ c har *buf1= "aa a", *buf2= "bb b", *buf3= "cc c"; i nt pt r;p tr =strcm p(buf2, bu f1);if (p tr >0) prin tf("b uffer 2 is grea ter t han b uffer 1\n"); el se prin tf("b uffer 2 is less than buff er 1\n"); ptr= str cmp(b uf2,buf3); if(ptr> 0) pr intf("buff er 2is gr eater than buff er 3\n");else pr intf("buff er 2is le ss th an bu ffer3\n"); re turn0;}函数名: st rncmp i功能: 将一个串中的一部分与另一个串比较, 不管大小写用法:int s trncm pi(ch ar *s tr1,char*str2, uns igned maxl en);程序例:#i nclud e <st ring.h>#inclu de <s tdio.h>int m ain(v oid){ cha r *bu f1 ="BBB", *bu f2 ="bbb"; intptr;ptr = strc mpi(b uf2,buf1); if(ptr> 0) pri ntf("buffe r 2 i s gre aterthanbuffe r 1\n"); i f (pt r < 0)p rintf("buf fer 2 is l ess t han b uffer 1\n");if (ptr == 0)p rintf("buf fer 2 equa ls bu ffer1\n"); ret urn 0;}函数名: strc py功能:串拷贝用法: char *str cpy(c har *str1, char *str2); 程序例:#in clude <std io.h>#in clude <str ing.h>i nt ma in(vo id) { ch ar st ring[10];char*str1 = "a bcdef ghi"; str cpy(s tring, str1); p rintf("%s\n", s tring); re turn0;}函数名: st rcspn功能: 在串中查找第一个给定字符集内容的段用法: in t str cspn(char*str1, cha r *st r2);程序例:#i nclud e <st dio.h>#i nclud e <st ring.h>#inclu de <a lloc.h>int m ain(v oid){ c har *strin g1 ="1234567890"; c har *strin g2 ="747D C8";int l ength; le ngth= str cspn(strin g1, s tring2); p rintf("Cha racte r whe re st rings inte rsect is a t pos ition %d\n", le ngth); re turn0;}函数名: st rdup功能: 将串拷贝到新建的位置处用法: char *str dup(c har *str);程序例:#inclu de <s tdio.h>#inclu de <s tring.h> #incl ude <alloc.h> intmain(void){char*dup_str,*stri ng ="abcd e"; dup_s tr =strdu p(str ing); prin tf("%s\n", dup_str); free(dup_str); ret urn 0;}函数名: str icmp功能: 以大小写不敏感方式比较两个串用法: i nt st ricmp(char *str1, ch ar *s tr2);程序例:#inclu de <s tring.h> #incl ude <stdio.h> intmain(void){ ch ar *b uf1 = "BBB", *b uf2 = "bbb"; int ptr; ptr= str icmp(buf2, buf1);if (ptr > 0) pr intf("buff er 2is gr eater than buff er 1\n");if (p tr <0)print f("bu ffer2 islessthanbuffe r 1\n"); i f (pt r ==0)print f("bu ffer2 equ als b uffer 1\n");re turn0;}函数名: s trerr or功能:返回指向错误信息字符串的指针用法: cha r *st rerro r(int errn um);程序例:#i nclud e <st dio.h>#i nclud e <er rno.h>i nt ma in(vo id) { char *buf fer;b uffer = st rerro r(err no);p rintf("Err or: %s\n", buff er);r eturn 0; }函数名: st rcmpi功能: 将一个串与另一个比较,不管大小写用法: in t str cmpi(char*str1, cha r *st r2);程序例:#i nclud e <st ring.h>#inclu de <s tdio.h>int m ain(v oid){ cha r *bu f1 ="BBB", *bu f2 ="bbb"; intptr;ptr = strc mpi(b uf2,buf1); if(ptr> 0) pri ntf("buffe r 2 i s gre aterthanbuffe r 1\n"); i f (pt r < 0)p rintf("buf fer 2 is l ess t han b uffer 1\n");if (ptr == 0)p rintf("buf fer 2 equa ls bu ffer1\n"); ret urn 0;}函数名: strn cmp 功能:串比较用法: int strn cmp(c har *str1, char *str2, in t max len);程序例:#inclu de <s tring.h> #incl ude <stdio.h> int main(void){char*buf1 = "a aabbb", *b uf2 = "bbb ccc", *buf3 = "ccc";int p tr; p tr =strnc mp(bu f2,bu f1,3); if (ptr > 0) prin tf("b uffer 2 is grea ter t han b uffer 1\n"); els ep rintf("buf fer 2 is l ess t han b uffer 1\n");pt r = s trncm p(buf2,buf3,3);if (p tr >0)print f("bu ffer2 isgreat er th an bu ffer3\n"); else pr intf("buff er 2is le ss th an bu ffer3\n"); ret urn(0);}函数名: s trncm pi功能:把串中的一部分与另一串中的一部分比较,不管大小写用法: in t str ncmpi(char *str1, ch ar *s tr2);程序例:#inclu de <s tring.h> #incl ude <stdio.h> intmain(void){ ch ar *b uf1 = "BBB ccc", *buf2 = "bbbcc c"; in t ptr; ptr = st rncmp i(buf2,buf1,3); if (ptr > 0) prin tf("b uffer 2 is grea ter t han b uffer 1\n");if (ptr < 0) pr intf("buff er 2is le ss th an bu ffer1\n"); if(ptr== 0) pr intf("buff er 2equal s buf fer 1\n"); retu rn 0;} 函数名: str ncpy功能: 串拷贝用法: ch ar *s trncp y(cha r *de stin, char *sou rce,int m axlen); 程序例: #inc lude<stdi o.h>#inc lude<stri ng.h>in t mai n(voi d){charstrin g[10]; char *str1 = "abcde fghi"; str ncpy(strin g, st r1, 3); str ing[3] = '\0';p rintf("%s\n", s tring); ret urn 0;}函数名: st rnicm p功能: 不注重大小写地比较两个串用法: i nt st rnicm p(cha r *st r1, c har *str2, unsi gnedmaxle n); 程序例:#in clude <str ing.h>#i nclud e <st dio.h>i nt ma in(vo id) { char *buf1 = "BBBcc c", *buf2= "bb bccc"; intptr;ptr = strn icmp(buf2, buf1, 3); if (ptr > 0) prin tf("b uffer 2 is grea ter t han b uffer 1\n");if (ptr < 0) pr intf("buff er 2is le ss th an bu ffer1\n"); if(ptr== 0) pr intf("buff er 2equal s buf fer 1\n"); retu rn 0;} 函数名:strns et功能:将一个串中的所有字符都设为指定字符用法:char*strn set(c har *str,charch, u nsign ed n);程序例:#incl ude <stdio.h> #incl ude <strin g.h>int main(void){c har *strin g = "abcde fghij klmno pqrst uvwxy z"; ch ar le tter= 'x'; pri ntf("strin g bef ore s trnse t: %s\n",strin g); st rnset(stri ng, l etter, 13); prin tf("s tring afte r st rnset: %s\n", s tring);re turn0;}函数名: s trpbr k功能: 在串中查找给定字符集中的字符用法: char *str pbrk(char*str1, cha r *st r2);程序例:#i nclud e <st dio.h>#i nclud e <st ring.h>int m ain(v oid){ cha r *st ring1 = "a bcdef ghijk lmnop qrstu vwxyz"; cha r *st ring2 = "o nm";c har *ptr;ptr = strp brk(s tring1, st ring2);if (ptr)p rintf("str pbrkfound firs t cha racte r: %c\n",*ptr); else pr intf("strp brk d idn't find char acter in s et\n");re turn0;}函数名: str rchr功能: 在串中查找指定字符的最后一个出现用法: char *str rchr(char*str, char c);程序例:#i nclud e <st ring.h>#inclu de <s tdio.h>int m ain(v oid){ cha r str ing[15]; ch ar *p tr, c = 'r';st rcpy(strin g, "T his i s a s tring"); pt r = s trrch r(str ing,c); if (ptr)p rintf("The char acter %c i s atposit ion:%d\n", c,ptr-s tring); els ep rintf("The char acter wasnot f ound\n");r eturn 0; }函数名: st rrev功能: 串倒转用法: ch ar *s trrev(char *str);程序例: #inc lude<stri ng.h>#in clude <std io.h>in t mai n(voi d){char*forw ard = "str ing"; prin tf("B efore strr ev(): %s\n", fo rward); str rev(f orwar d); pr intf("Afte r str rev(): %s\n",forwa rd);r eturn 0; }函数名: str set 功能:将一个串中的所有字符都设为指定字符用法: char *str set(c har *str,charc); 程序例:#in clude <std io.h>#in clude <str ing.h>i nt ma in(vo id) { char stri ng[10] = "123456789"; char symb ol ='c';print f("Be forestrse t():%s\n", str ing);strse t(str ing,symbo l); pr intf("Afte r str set(): %s\n",strin g); re turn0;}函数名: str spn 功能:在串中查找指定字符集的子集的第一次出现用法: in t str spn(c har *str1, char *str2); 程序例:#in clude <std io.h>#in clude <str ing.h>#i nclud e <al loc.h>i nt ma in(vo id) { char *str ing1= "1234567890";char*stri ng2 = "123DC8";int l ength; len gth = strs pn(st ring1, str ing2); prin tf("C harac ter w herestrin gs di fferis at posi tion%d\n", len gth);retur n 0;}函数名: strs tr功能:在串中查找指定字符串的第一次出现用法: c har *strst r(cha r *st r1, c har *str2);程序例:#incl ude <stdio.h> #incl ude <strin g.h>int main(void){c har *str1= "Bo rland Inte rnati onal", *st r2 ="nati on",*ptr; ptr= str str(s tr1,str2); prin tf("T he su bstri ng is: %s\n", p tr);r eturn 0; }函数名:strto d功能: 将字符串转换为doub le型值用法: dou ble s trtod(char *str, cha r **e ndptr);程序例: #inc lude<stdi o.h>#inc lude<stdl ib.h>in t mai n(voi d){charinput[80], *end ptr;d ouble valu e;pr intf("Ente r a f loati ng po int n umber:");g ets(i nput); valu e = s trtod(inpu t, &e ndptr); pri ntf("The s tring is %s the numb er is %lf\n", i nput, valu e); re turn0;}函数名: str tok 功能:查找由在第二个串中指定的分界符分隔开的单词用法:char*strt ok(ch ar *s tr1,char*str2);程序例: #inc lude<stri ng.h>#in clude <std io.h>in t mai n(voi d){charinput[16]= "ab c,d";char*p; /* str tok p laces a NU LL te rmina tor in fron t ofthe t oken, if f ound*/ p = strt ok(in put,",");if (p) p rintf("%s\n", p);/* A se condcallto st rtokusing a NU LL asthe f irstparam eterretur ns apoint er tothe c harac ter f ollow ing t he to ken */ p = strt ok(NU LL, ",");i f (p) pr intf("%s\n", p); retu rn 0;} 函数名:strto l功能: 将串转换为长整数用法:longstrto l(cha r *st r, ch ar **endpt r, in t bas e); 程序例:#in clude <std lib.h>#i nclud e <st dio.h>i nt ma in(vo id) { char *str ing = "87654321", *e ndptr; long lnum ber;/* st rtolconve rts s tring to l ong i ntege r */lnumb er =strto l(str ing,&endp tr, 10); pr intf("stri ng =%s l ong = %ld\n", s tring, lnu mber); ret urn 0;}函数名:strup r功能: 将串中的小写字母转换为大写字母用法: cha r *st rupr(char*str);程序例:#incl ude <stdio.h> #incl ude <strin g.h>int main(void){c har *strin g = "abcde fghij klmno pqrst uvwxy z", *ptr;/* co nvert s str ing t o upp er ca se ch aract ers */ ptr= str upr(s tring); pri ntf("%s\n", ptr); ret urn 0;}函数名: swab功能: 交换字节用法:voidswab(char *fro m, ch ar *t o, in t nby tes);程序例:#inclu de <s tdlib.h> #incl ude <stdio.h> #incl ude <strin g.h>cha r sou rce[15] ="rFna koBl rna d";c har t arget[15];in t mai n(voi d){swab(sourc e, ta rget, strl en(so urce)); pri ntf("Thisis ta rget: %s\n", ta rget); retu rn 0;} 。
WINCC C脚本的标准函数

WINCC C脚本的标准函数标准函数该系统包含标准函数。
可以按需要修改这些函数。
此外,还可以自己创建标准函数。
该系统包括一个标准函数集。
一、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报警控件的画面的名称。
Wincc系统函数.doc

报警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对变量具有只读访问权限。
wincc函数实例

如何在 WinCC 运行时通过按下一个按钮来启动一个程序,打印一个文本文件或者打开一个PDF文件?显示订货号∙当调用某些文件类型(如 Microsoft Excel文件)时,需要输入不止一个函数参数。
因此,如果路径规范里包含一个路径,需要在函数参数里面将该路径放在反斜线和双引号标志之间,(如,ProgramExecute("C:\\Programme\\MicrosoftOffice\\OFFICE11\\EXCEL.EXE \"C:\\temp\\NewFolder\\Mappe1.xls\""))。
∙注意当操作员打开系统窗口的时候,可能会有操作系统级别的系统操作。
执行完程序之后关闭这些窗口。
∙您可以用Win32 API函数终止一个程序,更多信息和例程可参考条目号2976503。
使用C函数“Sleep”显示订货号问题:如何在WinCC中编程“Sleep”等待功能?解答:为此,可以使用Windows API功能“Sleep()”。
下面的样例程序演示了如何使用“Sleep”功能。
#pragma code("Kernel32.dll")void Sleep(int Milliseconds);#pragma code()Sleep(1000); //time in milliseconds警告:“Sleep”函数对动作处理性能有很大的负面影响。
因此,如果想用此函数的话,请注意以下几点:∙使用Sleep()时,C 脚本的处理在特定的一段时间内被中断。
在此期间内,任何对于被中断功能的请求将不被处理。
∙而且,使用相同触发器的所有动作将不再被处理。
使用相同的触发器意味着用同一个循环触发器所有动作或变量触发器的所有动作将不再被处理。
如果同步地调用动作,这种调用通过一个变量触发器或事件被周期性地或非周期性地启动,而且所有这些功能使用了Sleep()函数,那么所有的动作会被终止。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何在 WinCC 运行时通过按下一个按钮来启动一个程序,打印一个文本文件或者打开一个PDF文件?显示订货号∙当调用某些文件类型(如 Microsoft Excel文件)时,需要输入不止一个函数参数。
因此,如果路径规范里包含一个路径,需要在函数参数里面将该路径放在反斜线和双引号标志之间,(如,ProgramExecute("C:\\Programme\\MicrosoftOffice\\OFFICE11\\EXCEL.EXE \"C:\\temp\\NewFolder\\Mappe1.xls\""))。
∙注意当操作员打开系统窗口的时候,可能会有操作系统级别的系统操作。
执行完程序之后关闭这些窗口。
∙您可以用Win32 API函数终止一个程序,更多信息和例程可参考条目号2976503。
使用C函数“Sleep”显示订货号问题:如何在WinCC中编程“Sleep”等待功能?解答:为此,可以使用Windows API功能“Sleep()”。
下面的样例程序演示了如何使用“Sleep”功能。
#pragma code("Kernel32.dll")void Sleep(int Milliseconds);#pragma code()Sleep(1000); //time in milliseconds警告:“Sleep”函数对动作处理性能有很大的负面影响。
因此,如果想用此函数的话,请注意以下几点:∙使用Sleep()时,C 脚本的处理在特定的一段时间内被中断。
在此期间内,任何对于被中断功能的请求将不被处理。
∙而且,使用相同触发器的所有动作将不再被处理。
使用相同的触发器意味着用同一个循环触发器所有动作或变量触发器的所有动作将不再被处理。
如果同步地调用动作,这种调用通过一个变量触发器或事件被周期性地或非周期性地启动,而且所有这些功能使用了Sleep()函数,那么所有的动作会被终止。
最坏情况下是;由于启动这四个动作将终止对所有动作的处理。
∙如果说,在一个带10-秒延迟触发器的动作中使用了Sleep()函数。
那么所有被循环调用的动作将被中断。
结果是,如:用1-秒触发器的动作操作中断,除此以外,所有后继的动作也不被执行。
这就是说,不仅当前的动作不被处理,其它还没有启动的动作也不会被处理。
∙作业不被处理是因为中断仍储存在队列中。
一旦中断结束,所有在队列中的动作将开始被处理。
但是,中断结束后,在队列中的动作不会在他们原来指定的循环中被处理。
因此,如同前面所述的那样,那么队列中剩下的动作将被一个接一个的处理而不再由触发器启动。
并且这些动作只是尽可能快的被处理掉。
(理论上同步)。
如何打开一个应用程序并保持其始终在前台显示?显示订货号显示订货号描述:在WinCC中,您希望使用用户自定义动态链接库,在此条目,我们演示了如何在WinCC中加载一个实例DLL。
在带有VBS的WinCC运行模式下,使用VB创建的DLLs不能被加载。
关于DLLs更多的信息可以在WinCC在线帮助系统下“使用WinCC>用于创建函数T1_C.zip显示订货号问题:如何从WinCC调用打印机的状态框?解答:“控制打印机”从控制面板上调用该框。
下面的动作必须在一个按钮下加以编辑,比方说:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){// 打印机框的调用ProgramExecute("C:\\WIN.95\\control.exe printers");}当在WinCC脚本中结合一个DLL时,使用的内存空间增加了显示订货号问题:如果使用Visual C++创建的一个DLL文件时,发现PC上使用的内存增加了。
对于这种情况,应该怎么办?解答:检查是否用正式发行的版本创建了DLL。
所提供WinCC是正式发行的版本。
这意味着WinCC也可以使用Microsoft DLL MFC42.DLL的发行版本。
如果在测试版本中有DLL文件,那么全局脚本中必须另外加载MFC42.DLL的测试版本。
另外,这会增加对内存的用量。
在WinCC中始终使用DLL文件的发行版本。
可按如下方法创建发行版本:1.打开DLL的项目文件。
2.检查是否DLL已在Win32 Release组态下被创建。
3.如有必要,把活化的组态切换到“Win32 Release”。
在Microsoft VisualC++ Studio中的“创建”->“定义活化的组态”中做该切换。
4.重新创建DLL。
5.用DLL的发行版本替换测试版本的DLL。
在 WinCC 中通过 C 脚本输出声音显示订货号问题:如何在 WinCC 中通过 C 脚本输出声音?解答:附件是一个小实例。
该 C 动作位于按钮后,这样只需单击该按钮就可产生声音。
C 动作:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UIN {#pragma code ("Winmm.dll ")VOID WINAPI PlaySoundA ( char* pszSound, char* hmode, DWORD dwflag );#pragma code()PlaySoundA("C:\\Winnt.400\\Media\\tada.wav",NULL,1);}该功能需要有声卡。
PlaySoundA 函数的说明: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)注意事项:如果想使用计算机内部扬声器的蜂鸣声而不是声音文件,则实现如下脚本:由于寻址内部扬声器,无需声卡。
#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UIN {#pragma code ("Kernel32.dll")BOOL Beep( DWORD dwFreq, DWORD dwDuration); //dwFreq定义蜂鸣声的频率,单位:Hz指定蜂鸣声的持续时长,单位:ms#pragma code()Beep(1000,100);}如何创建 Windows MessageBox 并且确定操作员按下的是哪个按钮?显示订货号( 26 KB )图 01为何不能在 WinCC 中使用 Windows 消息框?显示订货号描述:不能在 WinCC 中使用 Windows 消息框有多个原因:∙只要打开消息框,就阻塞系统只要打开 Windows 消息框,WinCC 运行系统保持“阻塞”状态,直到用户关闭消息框。
一旦关闭消息框,就缓冲并处理消息框外的鼠标单击事件。
∙可能阻塞整个系统打开消息框时如果没有置位 "MB_SYSTEMMODAL" 标志,则系统不能操作。
这种情况下,如果在消息框外单击鼠标左键,则消息框切换到后台,而单击的应用程序(通常为 WinCC 运行系统)切换到前台。
打开消息框时不能操作 WinCC 运行时。
但要关闭消息框,则消息框必须返回前台。
但是这在通过组合键(例如,"ALT-TAB")切换任务被阻止的情况下是不能实现的。
只能通过断开/接通计算机来实现。
当仍然需要使用消息框时,使用 "MB_SYSTEMMODAL" 标志来确保系统保持可操作。
∙按钮文本语言取决于 Windows 操作系统的语言在 Windows 消息框按钮上显示的文本取决于当前为操作系统设定的语言。
对于多种语言,则需要使用多语言版本(MUI)的操作系统。
在运行时中,必须改变操作系统的语言。
欲知详情,请参见条目号21923800。
∙必须手动组态消息文本和标题的语言切换条目号22907359介绍了如何组态消息文本和标题的语言切换。
补救措施:可使用 WinCC 工具来模拟 Windows 消息框功能。
为此,可以将一个 WinCC 画面窗口切换为可见。
该画面窗口应包含所要求的相关消息文本和按钮。
如果操作一个按钮,则触发期望动作,画面窗口再次“切换”为隐藏状态。
可使用 WinCC Dynamic Wizard "Picture Functions > Display WCCDialog box" 来组态该任务。
注意事项:只有在尚未运行 OS 项目编辑器时系统才能使用该向导,因为这将安装 PCS 7 标准向导。
通过 Start > SIMATIC > WinCC > Tools > Dynamic Wizard Editor 来启动动态向导编辑器,可以通过 Dynamic Wizard > Generate CWD or Read in Wizard Script 功能导入缺少的向导。
为什么应该使用内部 C 函数“SysMalloc()”来提供内存?显示订货号描述:使用 C 脚本保留内存或许是必要的。
例如,对一个应用程序而言,通过一个 C 函数将图形目标的“Text”属性动态化。
在这种情况下应使用内部函数“SysMalloc()”。
“SysMalloc()”为动作保留内存。
为该动作分配存储区域。
一旦此动作处理完毕,而且结果也已发送,系统将再次释放内存。
使用“SysFree()”函数,可以提早释放内存。
如果使用其它函数保留内存,例如,“malloc()”,则必须明确地释放内存,避免内存不足。
如何知道硬盘剩余空间的大小?解答:1. 通过所附的脚本可以确定硬盘上剩余磁盘空间的大小(盘最大至 4 GB):getDiskFreeSpace.pdf ( 1 KB )2.也可以通过 WinCC 的系统信息通道来确定硬盘上剩余磁盘空间大小。