WINCC的API编程

合集下载

wincc脚本的编写

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被启动。

wincc7.0中如何用上升沿触发音频输出,起到报警的作用

wincc7.0中如何用上升沿触发音频输出,起到报警的作用

wincc7.0中如何用上升沿触发音频输出,起到报警的作用想在工控机上装音响,设备停机就报警,这个该如何做?问题补充:不想用报警控件来触发让音响报警,除了这个之外还有别的办法吗?重点是在软件上如何编写指令使连接在工控机上的音响发声。

最佳答案其实不用horn报警器也是做出来。

上次试了试完全没有问题。

用wincc的全局脚本,做语音报警,1:用周期性1s做触发器2:当变量”报警”置1时,语音报警一直持续。

当变量”报警”置0时,语音报警停止继续。

程序如下:#include”apdefap.h”intgscaction(void){#pragmacode(“winmm.dll”)voidwinapiplaysounda(char*pszsound,char*hmode,dworddwfla g);#pragmacode()if(gattagbit(“报警”))playsounda(“c:\winnt.400\media\tada.wav”,null,0x1);return0;}注意:1:音乐地址为c:\winnt.400\media\tada.wav。

为\。

是不行的。

2:0x1也可以写成0x8.playsounda函数的说明:参数char*pszsound:指定声音文件(*.wav文件)的全路径。

参数char*hmode:总为0。

参数dworddwflag:snd_sync=0x0000:声音文件播放一次,该脚本一直等到播放结束snd_async=0x0001:声音文件播放一次,同时并行处理该脚本snd_nodefault=0x0002:如果未找到该声音文件,则不播放默认值,而是什么也不播放。

snd_loop=0x0008:重复该声音文件直到下个playsounda 调用(只能通过0x0001)=>总是指定0x0009。

WINCC的API编程

WINCC的API编程

WINCC的API编程如何将其它程序的窗口置于最前面?可以通过使用Windows API 函数FindWindow找到一个窗口的句柄。

假设您希望将一个Microsoft Access 窗口置于最前面:HWND Handle= ZERO;Handle= FindWindow("OMAIN",ZERO);if(Handle){ShowWindow(Handle, SW_MINIMIZE); //ShowWindow ( Handle, SW_SHOWNORMAL );SetForegroundWindow(Handle);}elseProgramExecute("C:\\MSOffice.97\\Office\\ACCESS.EXE");如果没有发现该窗口,随后Microsoft Access 将重新启动。

FindWindow 函数的注意事项:第一个参数是窗口的类。

可以使用编译器(比如:用Visual C++ 中的Spy 命令)找到类。

第二个参数是窗口的标题(标题栏)。

可以指定两个参数中的任何一个,或者两个都指定。

在本运行时通过按下一个按钮来启动一个程序,打印一个文本文件或者打开一个显示订货号22560470WinHelp (Windows Help) via API显示订货号QUESTION:Can a user-specific Help be called in a WinCC project?ANSWER:Yes, in WinCC you can call use an API call to call a user-specific Help. With "fuCommand" you can branch to a specific topic. For this you create a new project function with the following code:#pragma code("user32.dll")BOOL WinHelpA(hwnd, lpszHelpFile, fuCommand, dwData); #pragma code()#define HELP_CONTENTS 0x0003Lvoid WinHelpApi() {HWND hwnd; /* handle of window requesting help */ char HelpFile[255];UINT fuCommand; /* type of help */DWORD dwData; /* additional data */BOOL bRetVal;LPCTSTR lpszHelp;lpszHelp = HelpFile;strcpy(HelpFile, "c:\\Win.95\\Help\\Calc.hlp");hwnd = FindWindow("PDLRTisAliveAndWaitsForYou","WinCC Runtime - ");fuCommand = HELP_CONTENTS;dwData = 0L;bRetVal=WinHelpA((DWORD) hwnd,(DWORD) lpszHelp, fuCommand, dwData);printf("hwnd: %d \r\n",hwnd);printf("HelpFile: %s \r\n",HelpFile);printf("bRetVal: %d \r\n",bRetVal);}In this example the "Help for Windows Pocket Computers" is opened. If you want to open a different Help file, replace the "HelpFile" string with the path of a different file. If the return value "bRetVal" is equal to 0, an error has occurred. You can now call this project function, for example, by clicking a button Here, we are talking about calling a Windows function. Detailed descriptions are given for instance in the documentation for Visual C++. This example is solely to demonstrate how toincorporate the call in WinCC.Print out ASCII file via Action显示订货号QUESTION:.How can I print out an ASCII file via Action?ANSWER:If you want to print out an ASCII file via Action (for example for production data acquisition), then you need to make a function call as follows:system("copy c:\\autoexec.bat \\\\nbgm312a\\ps1cs1");You must enter the path and filename in the first part of the call.A network printer is in the second part whose address is given under Printer Properties.Creating a new directory via C scripts显示订货号QUESTION:How can I create a new directory in WinCC with script functions?ANSWER:Use the following program code if you want to create a new directory in WinCC:#pragma code("kernel32.dll");BOOLCreateDirectoryA( LPCTSTR ,LPSECURITY_ATTRIBUTES ); #pragma code()'CreateDirectoryA("c:\\test",NULL);使用C 函数“Sleep”显示订货号问题:如何在WinCC 中编程“Sleep”等待功能?解答:为此,可以使用Windows API 功能“Sleep()”。

wincc-全套脚本总结

wincc-全套脚本总结
"data_FLAG",1
)
}
-------------------------------------
——————7、对话框调用——————
BOOL A;
BOOL B;
}
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
return 0;
}
=====================================================
int value;
value=GetTagBit("IM_in");//"IM_in"为触发的变量。
if(value==1)
{
SetVisible("lianxi.pdl","按钮8",TRUE);//lianxi.pdl为控制对象所在画etVisible("lianxi.pdl","按钮8",FALSE);//lianxi.pdl
SetPropWord(lpszPictureName,"qushi","ValueAxisEndValue",Hi);
————————————————————————
——————4、获取位号————————
SetTagChar("TrendTagName1","ProcessValueArchive\\PT111");//Return-Type: BOOL

WinCC实现声音报警的方法

WinCC实现声音报警的方法

#include "apdefap.h"int gscAction( void ){#pragma code("Winmm.dll")VOID WINAPI PlaySoundA(char* pszSound,char* hmode,DWORD dwFlag);#pragma code( )if (GetTagByte("TI101")>100){PlaySoundA("C:\\\\Program Files\\\\Windows NT\\\\Pinball\\\\SOUND36.WAV",NULL,1);} return 0;}报警可以用以下两种实现方法:1、建一个全局脚本,时基为2S#include "apdefap.h"int gscAction( void ){#pragma code("Winmm.dll")VOID WINAPI PlaySoundA(char* pszSound,char* hmode,DWORD dwFlag);#pragma code( )if (GetTagByte("TAG")==1) 或if (GetTagByte("TAG")>500) {PlaySoundA("d:\\ringout.wav",NULL,1);}return 0;}用以上程序就可以实现单个变量报警,开关量为1或模似量大于500都可以报警,用户可以根据自己的情况改变以上数值,如果有多个变量可以增加多个if .2、通过报警记录,先在报警记录中组态好报警记录建一个全局脚本,时基为2S#include "apdefap.h"int gscAction( void ){MSG_RTDATA_STRUCT mRT;int i;char* pszToken;//Now is my code#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()DWORD SND_ASYNC=0x0001;DWORD SND_LOOP=0x0008;DWORD alarmsum,alarmunack;LPCMN_ERROR errorunack,errorsum;#pragma code("msrtcli.dll")#pragma code()LPDWORD lpdwServiceID;MSG_SERVICE_NOTIFY_PROC lpfnNotifyProc;LPMSG_FILTER_STRUCT lpMsgFilter;DWORD dwNotifyMask;LPVOID lpvUser;LPCMN_ERROR lpError;BOOL n1;n1=MSRTGetMsgQuit(&alarmunack,errorunack);SetTagDWord("number",alarmunack);MSRTGetMsgActual(&alarmsum,errorsum);SetTagDWord("sum",alarmsum);if (alarmsum==0)sndPlaySoundA(NULL,SND_ASYNC);else{if (alarmunack>0)sndPlaySoundA("C:\\Program Files\\WindowsNT\\Pinball\\SOUND36.WAV",SND_ASYNC|SND_LOOP);elsesndPlaySoundA(NULL,SND_ASYNC);//sndPlaySoundA("C:\\windows\\media\\office97\\laser.wav",SND_ASYNC|SND_LOOP); }return 1;}这个可以实现报警记录中只要有报警发生,那么就触发声音报警。

WinCC中使用脚本实现报警

WinCC中使用脚本实现报警

WinCC中使⽤脚本实现报警WinCC中使⽤脚本实现报警wincc 2009-01-19 14:30:04 阅读99 评论0 字号:⼤中⼩在6.2⾥,新建⼀个画⾯,两个按钮,⼀个开始播放声⾳(循环播放)按钮,⼀个停⽌播放按钮(没次按钮将循环播放,退出wincc同样在播放),试验成功了,就是第⼀次反应很慢,第⼀次成功报警后,之后在调⽤就快了。

开始播放按钮代码。

#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()DWORD SND_ASYNC=0x0001;DWORD SND_LOOP=0x0008;//循环播放sndPlaySoundA("d:\\致爱丽丝.wav",SND_ASYNC|SND_LOOP);停⽌播放按钮代码。

#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()DWORD SND_ASYNC=0x0001;DWORD SND_LOOP=0x0008;//停⽌播放sndPlaySoundA(NULL,SND_ASYNC); 00000000000000000000000000000000000000000000000000积累—WinCC报警实例wincc 2009-01-19 14:33:28 阅读458 评论0 字号:⼤中⼩这是⽹友给的实际⼯程中的例⼦,以后做项⽬使⽤时可以仔细研究⼀下,再次感谢那位热⼼的⽹友,我贴出来供⼤家学习:在WinCC全局脚本编辑器中完成,达到了语⾔报警的预期效果。

具体步骤如下:A.监控系统所在项⽬创建⽂件夹Voices,所有的语⾳报警⽂件存储在该⽂件夹。

wincc开发中整理的有用代码

wincc开发中整理的有用代码

如何更改 WinCC 图形对象的变量连接?/CN/view/zh/17515413解答:在 Graphics Designer 中有两种方式可以更改 WinCC 图形对象的变量连接。

∙可以使用 Graphics Designer 中的“Linking”功能变更,或者∙使用 WinCC Explorer 中的“Cross Reference”对话框。

现在选择选项卡“Find and Replace”更改变量连接,选择您需要的行,或者如果您希望链接到整个结构,选择所有对象。

在“Replace with”框中选择一个新变量。

如果您点击“Preview”,新的变量名即与将被替代的变量名并排显示。

如果点击“Replace”,对象的链接即被更改。

所有选中的变量连接均被替换。

如何批量替换 WinCC 对象 C 脚本中的变量名呢?1.首先,C 脚本要使用一定的格式,如下:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyNam e){#pragma option(mbcs)// WINCC:TAGNAME_SECTION_START// syntax: #define TagNameInAction "DMTagName"// next TagID : 1// WINCC:TAGNAME_SECTION_END// WINCC:PICNAME_SECTION_START// syntax: #define PicNameInAction "PictureName"// next PicID : 1// WINCC:PICNAME_SECTION_END}2.将变量定义写在注释语句// WINCC:TAGNAME_SECTION_START 和 // WINCC:TAGNAME_SECTION_END 之间,格式如下:#define Tag_1 "M100_0"3.脚本内的语句直接使用 Tag_1 来代替变量 M100_0。

Wincc图像制作---C脚本的核心技术

Wincc图像制作---C脚本的核心技术

Wincc图像制作---C脚本的核心技术1. 概述Wincc图像制作是Wincc项目中的一项重要工作,它涉及到数据的采集、处理、展示等方面。

而C脚本作为Wincc图像制作的核心技术之一,具有灵活、高效、可定制性强等特点。

本文将详细介绍Wincc图像制作中C脚本的核心技术,帮助读者深入了解并掌握这一技术。

2. C脚本的基本结构C脚本是一种基于文本的脚本语言,它的基本结构包括:头文件、变量声明、函数声明、主函数和脚本主体。

2.1 头文件头文件包含了项目所需的库文件和头文件,例如:include "wincc.h"include "script.h"2.2 变量声明变量声明部分用于声明项目中使用的变量,包括全局变量和局部变量。

例如:VARi: INTs: STRING2.3 函数声明函数声明部分用于声明项目中自定义的函数。

例如:FUNCTION myFunction(p1: INT, p2: STRING) : INT...END_FUNCTION2.4 主函数主函数是C脚本的核心部分,它负责调用其他函数和处理数据。

例如:FUNCTION main()...END_FUNCTION2.5 脚本主体脚本主体是C脚本的核心部分,它包含了项目的实际代码。

例如:IF i > 10 THENs := "i大于10"ELSEs := "i小于等于10"END_IF3. C脚本的核心技术3.1 数据类型和运算符C脚本支持多种数据类型,包括整数(INT)、浮点数(REAL)、字符串(STRING)等。

同时,C脚本也支持丰富的运算符,包括算术运算符、比较运算符、逻辑运算符等。

3.2 控制结构C脚本支持多种控制结构,包括条件语句(IF...END_IF)、循环语句(FOR...END_FOR、WHILE...END_WHILE)等。

这些控制结构可以帮助我们实现复杂的逻辑判断和数据处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何将其它程序的窗口置于最前面?可以通过使用Windows API 函数FindWindow找到一个窗口的句柄。

假设您希望将一个Microsoft Access 窗口置于最前面:HWND Handle= ZERO;Handle= FindWindow("OMAIN",ZERO);if(Handle){ShowWindow(Handle, SW_MINIMIZE); //ShowWindow ( Handle, SW_SHOWNORMAL );SetForegroundWindow(Handle);}elseProgramExecute("C:\\MSOffice.97\\Office\\ACCESS.EXE");如果没有发现该窗口,随后Microsoft Access 将重新启动。

FindWindow 函数的注意事项:第一个参数是窗口的类。

可以使用编译器(比如:用Visual C++ 中的Spy 命令)找到类。

第二个参数是窗口的标题(标题栏)。

可以指定两个参数中的任何一个,或者两个都指定。

在本{ShowWindow ( Handle, SW_SHOWNORMAL );SetForegroundWindow(Handle);}关键词:编程技巧如何在WinCC 运行时通过按下一个按钮来启动一个程序,打印一个文本文件或者打开一个PDF文件?显示订货号说明:WinCC 在动态向导里提供了方便的“启动其他应用程序”功能来启动一个外部程序。

这个向导生成一个C 脚本。

为了给这个程序添加参数,可以打开该脚本并添加相关参数。

下面提供了一些例子,这里只显示了脚本中最重要的那一行语句。

例程序号.调用标准程序:1•ProgramExecute("C:\\WINDOWS\\winhlp32.exe");22560470WinHelp (Windows Help) via API显示订货号QUESTION:Can a user-specific Help be called in a WinCC project?ANSWER:Yes, in WinCC you can call use an API call to call a user-specific Help. With "fuCommand" you can branch to a specific topic. For this you create a new project function with the following code:#pragma code("user32.dll")BOOL WinHelpA(hwnd, lpszHelpFile, fuCommand, dwData);#pragma code()#define HELP_CONTENTS 0x0003Lvoid WinHelpApi(){HWND hwnd; /* handle of window requesting help */char HelpFile[255];UINT fuCommand; /* type of help */DWORD dwData; /* additional data */BOOL bRetVal;LPCTSTR lpszHelp;lpszHelp = HelpFile;strcpy(HelpFile, "c:\\Win.95\\Help\\Calc.hlp");hwnd = FindWindow("PDLRTisAliveAndWaitsForYou","WinCC Runtime - ");fuCommand = HELP_CONTENTS;dwData = 0L;bRetVal=WinHelpA((DWORD) hwnd,(DWORD) lpszHelp, fuCommand, dwData);printf("hwnd: %d \r\n",hwnd);printf("HelpFile: %s \r\n",HelpFile);printf("bRetVal: %d \r\n",bRetVal);}In this example the "Help for Windows Pocket Computers" is opened. If you want to open a different Help file, replace the "HelpFile" string with the path of a different file. If the return value "bRetVal" is equal to 0, an error has occurred. You can now call this project function, for example, by clicking a buttonHere, we are talking about calling a Windows function. Detailed descriptions are given for instance in the documentation for Visual C++. This example is solely to demonstrate how toincorporate the call in WinCC.Print out ASCII file via Action显示订货号QUESTION:.How can I print out an ASCII file via Action?ANSWER:If you want to print out an ASCII file via Action (for example for production data acquisition), then you need to make a function call as follows:system("copy c:\\autoexec.bat \\\\nbgm312a\\ps1cs1");•You must enter the path and filename in the first part of the call.• A network printer is in the second part whose address is given under Printer Properties.Creating a new directory via C scripts显示订货号QUESTION:How can I create a new directory in WinCC with script functions?ANSWER:Use the following program code if you want to create a new directory in WinCC:#pragma code("kernel32.dll");BOOL CreateDirectoryA( LPCTSTR ,LPSECURITY_ATTRIBUTES );#pragma code()'CreateDirectoryA("c:\\test",NULL);使用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-秒触发器的动作操作中断,除此以外,所有后继的动作也不被执行。

这就是说,不仅当前的动作不被处理,其它还没有启动的动作也不会被处理。

•作业不被处理是因为中断仍储存在队列中。

一旦中断结束,所有在队列中的动作将开始被处理。

但是,中断结束后,在队列中的动作不会在他们原来指定的循环中被处理。

因此,如同前面所述的那样,那么队列中剩下的动作将被一个接一个的处理而不再由触发器启动。

并且这些动作只是尽可能快的被处理掉。

(理论上同步)。

关键字:性能提高,功能调用如何打开一个应用程序并保持其始终在前台显示?显示订货号Handle = FindWindow(NULL, "Adobe Reader");}GetClassName(Handle, winclass, sizeof (winclass)-1);printf ("Window Class Name: %s \r\n", winclass);}在WinCC中如何加载用户自定义DLLs?显示订货号描述:在WinCC中,您希望使用用户自定义动态链接库,在此条目,我们演示了如何在WinCC中加载一个实例DLL。

在带有VBS的WinCC运行模式下,使用VB创建的DLLs不能被加载。

关于DLLs更多的信息可以在WinCC在线帮助系统下“使用WinCC>用于创建函数和动作的ANSI-C>在函数和动作中使用DLL”过程编号.1实例DLL:使用下面的程序代码,利用C编译器创建动态链接库"T1_C.dll"。

相关文档
最新文档