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)等。

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

WinCC VBS利用EXCEL调用Windows API函数

WinCC VBS利用EXCEL调用Windows API函数

WinCC VBS利用EXCEL调用Windows API函数1. 简单举例在API.XLS的Sheet1中加入如下代码:Private Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByValYourGuess As Long) As LongPublic Sub ShowShutDownDlg() '显示关机界面SHShutDownDialog 0End Sub在WinCC调用之前先用EXCEL运行一下,效果如下:接下来由WinCC的VBS调用如下:Dim oExcelFile,oExcel,oWorkBook,oSheetoExcelFile= HMIRuntime.ActiveProject.Path + "APIXLSAPI.XLS" Set oExcel = CreateObject("Excel.Application")Set oWorkBook = oExcel.workbooks.OPen(oExcelFile)Set oSheet = oWorkBook.Sheets("Sheet1")oExcel.run "Sheet1.ShowShutDownDlg"oWorkBook.CloseSet oWorkBook = NothingoExcel.quitSet oExcel = nothing效果和EXCEL中是一模一样的,^_^。

2. 如何传递参数,和取得返回值但大多数时候我们需要调用一些API函数,传递某些值来获取返回值,比如FindWindow。

oExcel.run传递参数是可以的,比如EXCEL有宏:Public Sub TestMsg(Msg As String)MsgBox MsgEnd Sub那么调用的时候用oExcel.run "Sheet1. TestMsg",”TEST MSG H ERE” 即可。

WinCCVB利用EXCEL调用WindowsAPI函数

WinCCVB利用EXCEL调用WindowsAPI函数

WinCC VBS利用EXCEL调用Windows API函数By dcount 2008-11-1前面已经讨论过利用VBS的CreateObject方法来干很多以前不敢想象的事情,但Windows API却没有办法,虽有DynmicWrapper.dll这样的东西,毕竟使用起来不方便,而且功能也有限。

如果利用EXCEL作为突破口,VBS调用EXCEL的宏,而由EXCEL 的宏来调用Windows API正可以很好的解决这一问题。

1.简单举例在API.XLS的Sheet1中加入如下代码:Private Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByValYourGuess As Long) As LongPublic Sub ShowShutDownDlg() '显示关机界面SHShutDownDialog 0End Sub在WinCC调用之前先用EXCEL运行一下,效果如下:接下来由WinCC的VBS调用如下:Dim oExcelFile,oExcel,oWorkBook,oSheetoExcelFile= HMIRuntime.ActiveProject.Path + "\APIXLS\API.XLS"Set oExcel = CreateObject("Excel.Application")Set oWorkBook = oExcel.workbooks.OPen(oExcelFile)Set oSheet = oWorkBook.Sheets("Sheet1")oExcel.run "Sheet1.ShowShutDownDlg"oWorkBook.CloseSet oWorkBook = NothingoExcel.quitSet oExcel = nothing效果和EXCEL中是一模一样的,^_^。

WINCC动画脚本

WINCC动画脚本

WINCC动画脚本电机风扇旋转(几何---起始角度):#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){static DWORD f=20;if (GetTagBit("DI电机运行信号")) {f= f+30;if (f==360) (f=0);}return f;}电机风扇旋转(几何---结束角度):#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){static DWORD i=80;if (GetTagBit("DI电机运行信号")) {i = i+30;if (i==360) (i=0);}return i;**物料水平右移动(几何---位置X)(停车后,物料回到原点)**#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){static int a=350;if (GetTagBit("DI电机运行信号") && (a<=730)) {a+=20;if (a>=720) (a=350);}if (!GetTagBit("DI电机运行信号")) (a=350);return a;}物料水平右移动(几何---位置X)(停车后,物料停在该点)#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){static int a=350;if (GetTagBit("DI电机运行信号") && (a<=730)) {a+=20;if (a>=720) (a=350);}return a;物料向上移动(几何---位置Y)(停车后,物料停在该点)#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){static int b=450;if (GetTagBit("DI电机运行信号") && (b>=290)) {b-=10;if (b<=280) (b=450);}return b;}年月日(静态文本)#include "apdefap.h"char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){time_t timer ;struct tm *ptm;char *p;time(&timer);ptm =localtime(&timer);p =SysMalloc(9);sprintf(p,"%04d/%02d/%02d",ptm->tm_year-100+2000,ptm->tm_mon+1,ptm->tm_mda y);return(p);}时分秒(静态文本)#include "apdefap.h"char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){time_t timer ;struct tm *ptm;char *p;time(&timer);ptm =localtime(&timer);p =SysMalloc(9);sprintf(p,"%02d:%02d:%02d",ptm->tm_hour,ptm->tm_min,ptm->tm_sec);return(p);}登陆到指定的用户名无须手动输入(按钮操作)#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){#pragma code("useadmin.dll")#include "PWRT_API.H"#pragma code()PWRTSilentLogin("用户名", "口令");}**显示登陆对话框无须热键(按钮操作)**#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){#pragma code ("useadmin.dll")#include "PWRT_api.h"#pragma code( )PWRTLogin('c');}退出WINCC运行(按钮操作)#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){{DeactivateRTProject ();}}单位递增按钮(到上限不提示出错)#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){DWORD value;value=GetTagDWord("AI标签");if (value>90) (value=上限);else value=value+10;SetTagDWord("AI标签",value);}单位递减按钮(到下限不提示出错)#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){DWORD value;value=GetTagDWord("AI标签");if (value<10) (value=下限);else value=value-10;SetTagDWord("AI标签",value);}**单位递增按钮(到上限提示出错)**#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){DWORD value;HWND hWnd=NULL ;hWnd=FindWindow(NULL,"Wincc-运行系统- ");value=GetTagDWord("AI标签");if (value<=90) (value=value+10);else MessageBox(hWnd,"已到达上限值!","错误",MB_OK|MB_ICONWARNING|MB_APPLMODAL);SetTagDWord("AI标签",value);}**单位递减按钮(到下限提示出错)**#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){DWORD value;HWND hWnd=NULL ;hWnd=FindWindow(NULL,"Wincc-运行系统- ");value=GetTagDWord("AI标签");if (value>0) (value=value-10);else MessageBox(hWnd," 已到达下限值!"," 错误",MB_OK|MB_ICONWARNING|MB_APPLMODAL);SetTagDWord("AI标签",value);}**自动登陆到指定的用户(画面属性--其它—授权)**#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){#pragma code("useadmin.dll")#include "PWRT_API.H"#pragma code()PWRTSilentLogin("用户名", "口令");return(0X0);}**询问框(最好用于单机启动,组启也可,2个按钮,NO不操作)**#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){HWND hWnd=NULL;int 上位启动信号;hWnd=FindWindow(NULL,"WinCC C-Course");if (GetTagBit("DI备妥")){上位启动信号=MessageBox(hWnd,"电源已备妥,您现在确定要启动吗?","启动!",MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL);printf("\r\nExample 3\r\n");if (上位启动信号==IDNO) (printf("User selected NO button \r\n"));else (SetTagByte("上位启动信号",1));}MessageBox(hWnd,"电源未备妥,请查证后重试!","启动!",MB_OK|MB_ICONHAND|MB_APPLMODAL);}**询问框(最好用于单机启动,组启也可,3个按钮,NO复位)**#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){HWND hWnd=NULL;int上位启动信号;hWnd=FindWindow(NULL,"WinCC C-Course");if (GetTagBit("DI备妥")){上位启动信号=MessageBox(hWnd," 电源已备妥,您现在确定要启动吗?","启动!",MB_YESNOCANCEL|MB_ICONQUEST ION|MB_APPLMODAL);if (上位启动信号==IDCANCEL) (printf("User selected NO button\r\n"));else{if (上位启动信号==IDYES) (SetTagByte("上位启动信号",1));else (SetTagByte("上位启动信号",0));}}MessageBox(hWnd," 电源未备妥,请查证后重试!","启动!",MB_OK|MB_ICONHAND|MB_APPLMODAL);}**搅拌器左侧扇页(几何—宽度)**#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){static int h=50;static int u=0;if (GetTagBit("DI电机运行信号")){if ((h>0)&&(h<=50)){(h-=2);return h;}if ((u>=0)&&(u<50)){(u+=2);return u;}u=0;h=50;return h;return u;}if (!GetTagBit("DI电机运行信号")){h=50;u=0;return h;return u;}}**搅拌器左侧扇页(几何—位置X,右侧扇页没有位置变化)**#include "apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){static int h=75;static int u=125;if (GetTagBit("DI电机运行信号")){if ((h>=75)&&(h<125)){(h+=2);return h;}if ((u<=125)&&(u>75)){(u-=2);return u;}u=125;h=75;return h;return u;}if (!GetTagBit("DI电机运行信号")){h=75;u=125;return h;return u;}}**显示层按钮**SubX6309X94AE2X0000X0000_X6309X94AE2X0000X60C5_X6309X94AE2X0000X653E_OnLButtonDown (ByVal Item, ByVal Flags, ByVal x, ByVal y)Dim objScreenDim CountLayerSet objScreen = HMIRuntime.Screens("layer")For CountLayer=1 To 32 Step 1yers(CountLayer).Visible = vbFalseNextyers(n).Visible = vbTrueEnd Subn=层数+1初始画面程序(画面空地--属性--事件--其它--打开画面--动作)**打印按钮**#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){WinExec("PRTSCR.EXE -hardcopy",SW_SHOWNORMAL);}**一个圈代表电机两种状态**#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){char* opentag="DI1电机运行信号";char* closetag="DI2电机运行信号";BOOL open,close;open = GetTagBit(opentag);close = GetTagBit(closetag);if (open)return CO_GREEN;if (close)return CO_BLUE;}。

WINCC-使用对话框实现用户登录的方法

WINCC-使用对话框实现用户登录的方法

WINCC-使用自定义的对话框实现用户登录?1、首先建立两个输入输出域,分别定义为1,2,在输入输出域的对象属性-属性-输出/输入-输出值连接变量@CurrentUserName,对象属性-事件-属性主题-输出/输入-输入值-更改添加代码:SetOutputValueChar(lpszPictureName,lpszObjectName,GetInputValueChar(lpszPictureName,lpszObjec tName));2、在登录按钮中加处以下脚本:#include "USEGENAP.H"#pragma code ("UseAdmin.DLL")#include "pwrt_api.h"#pragma code ()if (PWRTSilentLogin(GetInputValueChar(lpszPictureName,"1"),GetInputValueChar(lpszPictureName,"2")) == FALSE){if(MessageBox (NULL, "错误,请重新输入!" , "提示", MB_ICONEXCLAMATION| MB_SYSTEMMODAL ));}else{//OpenPicture("你要进入的画面");}其中"USERNAME","PASSWORD"可以用存储用户名和密码的变量替换.如:PWRTSilentLogin(GetTagChar("user"),GetTagChar("PassWord"))当登录成功时,函数返回值为真;如登录失败,则返回值为假。

3、在退出按钮中添加代码:#pragma code ("useadmin.dll")#include "PWRT_api.h"#pragma code()if(PWRTLogout()){MessageBox (NULL, "用户已退出!" , "提示", MB_ICONEXCLAMATION| MB_SYSTEMMODAL );}以下为空。

Wincc常用C脚本及常用功能

Wincc常用C脚本及常用功能

Wincc常用C脚本及常用功能打开用户管理器ProgramExecute("Passcs.exe"); 取消激活#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y){#pragma option(mbcs)HWND hwnd=NULL;int iRet;hwnd=FindWindow(NULL,"WinCC-运行系统 - "); //获得句柄iRet=MessageBox(hwnd,"是否取消激活?","Deactivate",MB_OKCANCEL|MB_ICONWARNING|MB_APPLMODAL);if(iRet==1)DeactivateRTProject (); //Return-Type: BOOL}关闭计算机#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y){#pragma option(mbcs)HWND hwnd=NULL;int iRet;hwnd=FindWindow(NULL,"WinCC-运行系统 - ");iRet=MessageBox(hwnd,"是否关闭计算机?","ShutDown",MB_OKCANCEL|MB_ICONWARNING|MB_APPLMODAL);if(iRet==1)DMExitWinCCEx(DM_SDMODE_SYSTEM); }==================================================================== ==登陆代码:#pragma code(“useadmin.dll”)#include <pwrt_api.h>#pragma code()PWRTLogin (…e?);==================================== 取消激活(Deactivate)DeactivateRTProject();====================================== Wincc变量操作GetTagDWord(“变量名称”); 获取Wincc变量值SetTagDWord(“变量“,设定值); 设置Wincc变量对文本读写操作写操作#include "apdefap.h"void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y) {#pragma option(mbcs)FILE* lpFile;char *shuzhu[6]={"tag_1","tag_2","tag_3","tag_4","tag_5","tag_6"};char* lpszStr;int i,j;lpszStr=SysMalloc(60); //Return-Type: void*lpFile = fopen("D:\\test.txt", "w+");for(i=0;i<6;i++){lpszStr=GetTagChar(shuzhu[i]); strcat(lpszStr,"\r\n");if(lpFile == NULL){ printf("can not open file\r\n"); return;}fprintf(lpFile, lpszStr); }SysFree(lpszStr);fclose(lpFile);}读操作#include "apdefap.h"void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y) {#pragma option(mbcs)char* shuzhu[6]={"tag_1","tag_2","tag_3","tag_4","tag_5","tag_6"}; char tmp[255];int i=0;int ChrNumLine=38;FILE *fp;fp=fopen("D:\\test.txt","r"); if (fp==NULL){return;}else{rewind(fp);while(!feof(fp)){fgets(tmp,ChrNumLine,fp);SetTagChar(shuzhu[i],tmp);i++;}}fclose(fp);}画面窗口显示界面切换SetPictureName(lpszPictureName,"PicWindow_button","produce_manage_bu tton.pdl");SetVisible(lpszPictureName,"PicWindow_button",1);注:PicWindow_button是画面窗口名称;produce_manage_button.pdl是要显示的子画面。

在WINCC中使用WinSock控件进行TCP_IP通讯的例程

在WINCC中使用WinSock控件进行TCP_IP通讯的例程

在WINCC中使用WinSock控件进行TCP/IP通讯的例程目录一、WinSock控件介绍(以VB语言表述) (1)1、WinSock控件的主要属性 (1)2、WinSock控件的主要方法 (2)3、WinSock控件的主要事件 (3)二、WinSock控件在WINCC中的使用 (3)1、WinSock控件注册 (3)2、在WinCC中添加WinSock控件 (4)三、服务器端程序介绍 (4)四、WinCC画面模板与结构变量的配合使用 (6)1、结构变量定义 (6)2、画面模板组态 (7)3、调用画面模板及修改变量前缀 (7)4、将画面模板中的对象连接到变量 (8)五、建立TCP/IP连接 (8)六、接收数据包的处理 (10)附:在VBS中进行数据处理的局限性及变通解决方法 (12)摘要:关键词:VB、VBS、WINCC、WINSOCK、DLL、UNICODE、ANSI、ASCII、画面模板、结构变量、数据转换。

该文档的软件环境:Microsoft Windows XP Professional 版本2002SP3SIMATIC WinCC V6.2 SP2 ASIA‘SIMATIC STEP7 V5.4+SP5+HF3 ChineseTCP&UDP测试工具V1.02目的:使用WINCC用户程序作为客户端程序,与服务器通讯,通讯协议为标准TCP/IP协议,取得服务器发送过来的数据包,按数据包格式文本规定,解析数据包数据,并将相关数据显示在用户程序画面中。

一、WinSock控件介绍(以VB语言表述)1、WinSock控件的主要属性1) Protocol属性通过Protocol属性可以设置WinSock控件连接远程计算机使用的协议。

可选的协议是TCP和UDP对应的VB的常量分别是sckTCPProtocol和sckUDPProtocol,Winsock控件默认协议是TCP。

注意:虽然可以在运行时设置协议,但必须在连接未建立或断开连接后。

WINCC实现有声报警的方法

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\\Windows NT\\Pinball\\SOUND36.WAV",SND_ASYNC|SND_LOOP); elsesndPlaySoundA(NULL,SND_ASYNC);//sndPlaySoundA("C:\\windows\\media\\office97\\laser.wav",SND_ASYNC|SND_LOOP);}return 1;}这个可以实现报警记录中只要有报警发生,那么就触发声音报警。

  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"。

相关文档
最新文档