搜档网
当前位置:搜档网 › Unity3D___GUI__C_脚本_按钮实现_物体左右前后_旋转操作

Unity3D___GUI__C_脚本_按钮实现_物体左右前后_旋转操作

Unity3D___GUI__C_脚本_按钮实现_物体左右前后_旋转操作
Unity3D___GUI__C_脚本_按钮实现_物体左右前后_旋转操作

Unity3D GUI C#脚本按钮实现物体左右前后旋转操作using UnityEngine;

using System.Collections;

public class GameScript : MonoBehaviour {

private float mTranslateSpeed=20;

private float mRotateSpeed=1000;

void OnGUI(){

GUI.backgroundColor=Color.gray;

if(GUI.Button(new Rect(10,10,80,30),"RotateLeft"))

{

transform.Rotate(Vector3.up * Time.deltaTime * (-mRotateSpeed));

}

if(GUI.Button(new Rect(90,10,80,30),"MoveForward"))

{

transform.Translate(Vector3.forward * Time.deltaTime * mTranslateSpeed);

}

if(GUI.Button(new Rect(170,10,80,30),"RotateRight"))

{

transform.Rotate(Vector3.up * Time.deltaTime * mRotateSpeed);

}

if(GUI.Button(new Rect(90,50,80,30),"MoveBack"))

{

transform.Translate(Vector3.forward * Time.deltaTime * (-mTranslateSpeed));

}

if(GUI.Button(new Rect(10,50,80,30),"MoveLeft"))

{

transform.Translate(Vector3.right * Time.deltaTime * (-mTranslateSpeed));

}

if(GUI.Button(new Rect(170,50,80,30),"MoveRight"))

{

transform.Translate(Vector3.right * Time.deltaTime * mTranslateSpeed);

}

https://www.sodocs.net/doc/c317204195.html,bel(new

Rect(270,10,200,30),"Location="+transform.position);

https://www.sodocs.net/doc/c317204195.html,bel(new

Rect(270,50,200,30),"Roated="+transform.rotation);

}

void Start () {

}

void Update () {

}

}

string a;

GUI.backgroundColor = Color.gray;

transform.RotateAround(transform.position, new Vector3(0, 1, 0), mRotateSpeed * Time.deltaTime);

a = transform.rotation.ToString();

void OnGUI()

{

// GUI.backgroundColor = Color.gray;

// transform.RotateAround(transform.position, new Vector3(0, 1, 0), mRotateSpeed * Time.deltaTime);

// https://www.sodocs.net/doc/c317204195.html,bel(new Rect(270, 50, 200, 30), "Roated=" + a);

// https://www.sodocs.net/doc/c317204195.html,bel(new Rect(270, 10, 200, 30), "Location=" + transform.position);

}

wincc 常用脚本

DeactivateRTProject ();//退出系统 #pragma code("useadmin.dll") #include"PWRT_api.h" #pragma code() char* CUser=NULL; CUser=GetTagChar("@CurrentUser"); if (strlen(CUser)==0) { PWRTSilentLogin("operator","123456");//用户“operator",密码"123456”登录} OpenPicture("@MAIN.pdl"); } 在画面中结合不同按钮来组态下面 C 操作 Login Action for login (for example, "mouse click" event): #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); Logout Action for logout (for example, "mouse click" event): #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); PWRTLogin 参数必须是CHAR 字符。它指定了显示对话框的监视器。如果只使用一个监视器,那么保留默认参数“c”或者指定“1”。 注意 可以使用PASSLoginDialog 函数来代替PWRTLogin 或者PWRTLogout 函数。这个函数需要和函数PWRTLogin 相同的参数。PWRTLogin 和PASSLoginDialog 函数可以调用登录界面,在上面可以登录或者注销。函数PWRTLogout 被正确执行并且不调用登录界面。 正确执行后这两个函数都返回“1”。然而,登录不会等到显示对话框之后。 注意 如果使用多个显示器,为了能使登录对话框显示在合适的显示器上,需要WinCC Basic Process Control (OS项目编辑器)。 不使用WinCC Basic Process Control 时,可以指定显示器编号,但登录对话框始终显示在第一个显示器上。 #include"apdefap.h"//调用函数代码 void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

WINCC脚本个人经验总结

语音报警的组态 在工业现场安全是极其重要的,无论从那个角度讲我们应该利用一切手段减少故障的发生。在故障已经发生的时候,应该在第一时间以多种方式通知操作人员有故障发生。现代微处理计算机的处理速度可以完全胜任对于图形,语音地同时处理。所以我们可以利用计算机的声卡和音箱在有故障发生的时候产生语言报警,但是问题是WinCC本身并不能产生语音的功能,而且其内部的上千个函数也没有提供处理声音的函数。解决这个问题的方法归功于微软开发的WinCC与操作系统地完美结合,因为在WinCC中可以直接调用Windows的API函数。实现的具体C脚本代码如下: long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma code(\"Winmm.dll\") void WINAPI PlaySoundA(char *pszSound,char *hmode,DWORD dwflay); #pragma code() if(GetTagBit(\"112排泥备泵故障\")) PlaySoundA(\"d:\\\\\\\\winnt\\\\\\\\media\\\\\\\\Mircosoft sound.wav\",NULL,8); return 1020; }重新启动后,不使用登录窗口如何以一个缺省用户的身份自动登录?怎样确保运行期间有个缺省用户始终处于登入状态?即使另外一个用户已经预先退出。 解答: 重新启动以及在运行期间,您希望HMI系统达到最小的实用性而不使用登录窗口。然而,对于高级操作,登录功能应当保留。此外,如果没有用户登录,则有一个缺省的用户自动登录。缺省用户的权限可以在用户管理器中根据需要设定。 可使用下面的C脚本执行此项功能,请按照下列步骤进行: 将附件中的函数“Silentlogin.pas”复制到项目中的“PAS”子文件夹中。 在项目中选择Global Script > C Editor > Actions > Global Actions并打开全局动作(Global Action)“Silentlogin.pas”。 在“PWRTSilentLogin (“Login”,“Password”);”一行中,用缺省的用户名替换用户“Login”,用缺省用户的口令代替“Password”。 无限循环命令 static int a=0, b=0; if(GetTagBit("BINi_pictu_dyn_09")) { if(b==0) a++; else a--; if(a==7) b=1; if(a==0) b=0; }

wincc 常用脚本

D e a c t i v a t e R T P r o j e c t();//退出系统 #pragma code("useadmin.dll") #include"PWRT_api.h" #pragma code() char*CUser=NULL; CUser=GetTagChar("@CurrentUser"); if(strlen(CUser)==0) { PWRTSilentLogin("operator","123456");//用户“operator",密码"123456”登录 } OpenPicture("@MAIN.pdl"); } 在画面中结合不同按钮来组态下面C操作 Login Actionforlogin(forexample,"mouseclick"event): #pragmacode("useadmin.dll") #include"PWRT_api.h" #pragmacode() PWRTLogin('c'); Logout Actionforlogout(forexample,"mouseclick"event): #pragmacode("useadmin.dll") #include"PWRT_api.h" #pragmacode() PWRTLogout(); PWRTLogin参数必须是CHAR字符。它指定了显示对话框的监视器。如果只使用一个监视器,那么保留默认参数“c”或者指定“1”。 注意 可以使用PASSLoginDialog函数来代替PWRTLogin?或者PWRTLogout函数。这个函数需要和函数PWRTLogin相同的参数。PWRTLogin?和PASSLoginDialog函数可以调用登录界面,在上面可以登录或者注销。函数PWRTLogout被正确执行并且不调用登录界面。 正确执行后这两个函数都返回“1”。然而,登录不会等到显示对话框之后。 注意 如果使用多个显示器,为了能使登录对话框显示在合适的显示器上,需要WinCCBasicProcessControl(OS项目编辑器)。

wincc按钮通过脚本更改的方法

wincc按钮通过脚本更改的方法 最近才发现用脚本真的可以让画面更加高大上一点,本来想做个做个文档,但真的是做不出来就再下面总结一下用法把:拿提示文本举例吧,提示文本是把鼠标放到上面有相应的提示,我们可以 通过VB函数修改比如打我们这个设备达到允许条件然后这个文本提示允许,也可以控制它的颜色让按钮 更加明显(修改颜色我不知道为什么必须用VBGreen的方式而RGB(200,0,0)的方式不可以,所以有知道的顺便解答一下) ''按钮文本 ScreenItems("按钮1").Text="启动" ''按钮字体大小 ScreenItems("按钮1").FontSize=20 ''按钮字体样式 ScreenItems("按钮1").FontName="隶书" ''按钮粗体样式 ScreenItems("按钮1").FontBold=True ''按钮加下划线样式 ScreenItems("按钮1").FontUnderline=True ''按钮斜体样式

ScreenItems("按钮1").FontItalic=True ''按钮字体颜色 ScreenItems("按钮1").ForeColor=vbGreen ''按钮文本的字体 是否自适应大小 ScreenItems("按钮1").AdaptBorder=False ''按钮是否可见 ScreenItems("按钮1").Visible=True ''按钮的背景颜色 ScreenItems("按钮1").BackColor=vbYellow ''按钮背景的闪烁 ScreenItems("按钮1").backflashingenabled=False ''按钮的文本闪烁 ScreenItems("按钮1").FlashForeColor=False ''按钮的提示文本 ScreenItems("按钮1").ToolTipText="1#电机" ''按钮的填充图案(根据手册设置该值) ScreenItems("按钮1").FillStyle=131077 ''按钮操作权限(0不可以操作,1可以操作) ScreenItems("按钮1").enabled=False ''按钮的高 ScreenItems("按钮1").Height=150 ''按钮的宽

wincc常用C脚本..

.用户注销: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 2.用户登录: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); 3.关闭项目并退出wincc: ExitWinCC (); 4.退出运行到wincc资源管理器: DeactivateRTProject (); 按钮变三种颜色 #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma option(mbcs) if(GetTagWord("TX/ZSH001")==1) return 0x0000ff00; else if(GetTagWord("TX/ZSL001")==1) return 0x000000ff; else return 0x00c0c0c0; } 一个调用按钮变色 #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma option(mbcs) if(GetTagWord("NewTag")==0) return 0x0000ff00; else return 0x00ffffff;

wincc中常用C脚本

查看文章 wincc常用C动作 2010-06-27 10:31 1.用户注销: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 2.用户登录: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); 3.关闭项目并退出wincc: ExitWinCC (); 4.退出运行到wincc资源管理器: DeactivateRTProject (); 5.结束监控并关闭计算机(会弹出确认对话框) HWND hWnd = NULL;//Author:Smartsys int iRet; hWnd = FindWindow(NULL,"WinCC-运行系统 - "); iRet=MessageBox(hWnd,"结束监控并关闭计算机", "关闭操作站",MB_YESNO|MB_ICONWARNING|MB_APPLMODAL); if(iRet==IDYES) DMExitWinCCEx (DM_SDMODE_POWEROFF); 6.点击事件弹出对话框,通过点击弹出对话框的确定和取消按钮实现对变量的置位或取消: int r; r=MessageBox(NULL, "YES为开,NO为关", "确定开命令:", MB_YESNO |MB_SYSTEMMODAL); if (r==IDYES) SetTagBit("TAGNAME",TRUE); else SetTagBit("TAGNAME",FALSE); 7.开显示关显示:(要在内部变量中建立三个二进制变量COLSE_DISPLAY、DISPLAY_NO和DISPLAY_COMMENT) // Funktion: Bit in Doppelwort setzen; if (GetTagBitWait("COLSE_DISPLAY")==1 )

WINCC脚本整理

切换按钮 001SetTagBit("TE_BOOL",!GetTagBit("TE_BOOL")); 002BOOL A A=GetTagBit("TE_BOOL"); if(A)SetTagBit("TE_BOOL",0); ElseSetTagBit("TE_BOOL",1); 003SetTagBit("TE_BOOL ",1-GetTagBit("TE_BOOL ")); I O域处的xx输入输出 在I/O域的输出值事件处的动作 Float F_TAG; F_TAG =GetTagFloat("TE_FLOAT"); return(F_TAG /100); WINCC运行画面最小化 HWND WinCCHwnd; WinCCHwnd=FindWindow("PDLRTisAliveAndWaitsForYou",NULL); CloseWindow(WinCCHwnd); WINDOWSxx提供的标准对话框 {BOOL bool1; HWND Hwnd; int iRet; Hwnd = FindWindow(NULL,"WinCC-运行系统- ");

if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-运行系统- "); if (!Hwnd) printf("\r\nGetWinCC Handle Failed!"); iRet=MessageBox(Hwnd,"确认合闸","确认对话框 ",MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEM MODAL); switch (iRet){case IDYES: printf("user do YES\r\n"); SetTagBit("TE_QUEST",1); break; case IDNO: printf("user do NO\r\n"); SetTagBit("TE_QUEST",0); break; case IDCANCEL: printf("user do CANCEL\r\n"); break;}} 本画框的功能是点击按钮的时候弹出windows询问对话框其中“确认合闸”为对话内容,对话框的名称为“确认对话框” 用户不同显示不同的按钮 你可以在用户管理器给每个用户不同的权限,使他们对按钮有不同的操作权,这是最简便的。但是如果一定要根据用户不同显示不同的按钮就要用C脚本了

WINCC中使用C脚本获得操作记录的方法(原创)

WINCC中使用C脚本获得操作记录的方法(原创)

目录 1应用范围 (4) 1.1详述 (4) 1.2适用的系统 (5) 2硬、软件配置 (5) 3解决方法 (5) 附件 附件文档号说明

1 应用范围 1.1 详述 在生产中,有很多时候需要记录操作员的操作,以便进行事故分析。WINCC本身提供了一些对象可以产生操作记录,但是在复杂的情况下是无法兼顾既获得操作记录又满足特殊操作的要求。这时,可以使用C脚本来获得操作记录。 目前,在WINCC中以下对象可以很方便地获得操作记录: ●任何对象,将Event\Direct Connection\Operator Input Message选中。 图1 通过DirectConnection获得操作记录的组态 ●Check Box对象和Option Group对象,将property\Operator Input Message属性选择为yes。 图2 Check Box对象和Option Group对象获得操作记录的组态

IO Field对象和Slider对象:将property\Operator Input Message属性选择为yes;或将property\Operator Activities Report属性选择为yes。Operator Input Message和Operator Activities Report的区别是后者可以输入操作理由,确认之后操作记录的Comment中可以查看到操作理由。 图3 IO Field对象和Slider对象获得操作记录的组态 以上方法可以快捷地实现获取操作记录的功能,但是在某些情况下,功能要求更复杂,通过以上方法并不能满足要求。比如:操作员操作一个启动按钮,要求系统能够记录操作员操作信息。在单步操作的情况下,通过Direct Connection能够很方便地实现这一功能。但是在两步操作的情况下,需要操作员先确认,在得到确认之后操作才能生效,由于Direct Connection并没有提供操作确认功能,显然通过Direct Connection并不能满足要求。在这一的情况下,可以考虑采用C脚本来实现这一功能,通过MessageBox()函数来完成操作确认的功能,然后通过特别的函数来使系统产生操作记录。 1.2 适用的系统 该方法适用于安装有WINCC的系统中。 2 硬、软件配置 安装有WINCC软件,无版本限制。 3 解决方法 通过C脚本产生操作记录主要完成两部分组态工作,首先要在Alarm Logging中组态消息类型和定制消息内容;然后编写C脚本来产生操作记录。 第一步:在Alarm Logging中组态消息类型和定制消息内容。 1.新建消息并定义消息类型。系统产生的消息(包括了操作记录)和定制的消息都存储在Alarm Logging中,编号从1000000开始的消息为系统使用的消息,不能组态。如果需要定制消息,可 以使用1~1000000之间的消息号。在WINCC explorer中打开Alarm Logging,新建一条消息,

wincc-全套脚本总结

——————1、wincc全局脚本动作-------隐藏控件—————— #include "apdefap.h" int gscAction( void ) { // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" // next TagID : 1 // WINCC:TAGNAME_SECTION_END int value; value=GetTagBit("IM_in");//"IM_in"为触发的变量。 if(value==1) { SetVisible("lianxi.pdl","按钮8",TRUE);//lianxi.pdl为控制对象所在画面名,“按钮8”为对象名称 } else { SetVisible("lianxi.pdl","按钮8",FALSE);//lianxi.pdl } // WINCC:PICNAME_SECTION_START // syntax: #define PicNameInAction "PictureName" // next PicID : 1 // WINCC:PICNAME_SECTION_END return 0; } ===================================================== 说明:在触发器里选择变量IM_in ——————2、wincc全局脚本动作----提示框—————— #include "apdefap.h" int gscAction( void ) { // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" // next TagID : 1 // WINCC:TAGNAME_SECTION_END int value;

wincc常用C脚本

精心整理1.用户注销: #pragmacode("useadmin.dll") #include"PWRT_api.h" #pragmacode() PWRTLogout(); 2.用户登录: #pragmacode("useadmin.dll") #include"PWRT_api.h" #pragmacode() PWRTLogin('c'); 3.关闭项目并退出wincc: ExitWinCC(); 4.退出运行到wincc资源管理器: DeactivateRTProject(); 按钮变三种颜色 #include"apdefap.h" long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName) { #pragmaoption(mbcs) if(GetTagWord("TX/ZSH001")==1) return0x0000ff00; else if(GetTagWord("TX/ZSL001")==1) return0x000000ff; else return0x00c0c0c0; } 一个调用按钮变色 #include"apdefap.h" long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName) {

#pragmaoption(mbcs) if(GetTagWord("NewTag")==0) return0x0000ff00; else return0x00ffffff; } 5.结束监控并关闭计算机(会弹出确认对话框) HWNDhWnd=NULL;//Author:Smartsys intiRet; hWnd=FindWindow(NULL,"WinCC-运行系统-"); iRet=MessageBox(hWnd,"结束监控并关闭计算机", "关闭操作站",MB_YESNO|MB_ICONWARNING|MB_APPLMODAL); if(iRet==IDYES) ???DMExitWinCCEx(DM_SDMODE_POWEROFF); 6.点击事件弹出对话框,通过点击弹出对话框的确定和取消按钮实现对变量的置位或取消: intr; r=MessageBox(NULL,"YES为开,NO为关","确定开命令:",MB_YESNO|MB_SYSTEMMODAL); if(r==IDYES) SetTagBit("TAGNAME",TRUE); else SetTagBit("TAGNAME",FALSE); 7.开显示关显示:(要在内部变量中建立三个二进制变量COLSE_DISPLAY、DISPLAY_NO和DISPLAY_COMMENT)//Funktion:BitinDoppelwortsetzen; if(GetTagBitWait("COLSE_DISPLAY")==1) {SetTagBit("COLSE_DISPLAY",0); SetTagBit("DISPLAY_NO",0);//Return-Type:BOOL SetTagBit("DISPLAY_COMMENT",0); } else??? {SetTagBit("COLSE_DISPLAY",1); SetTagBit("DISPLAY_NO",1);//Return-Type:BOOL SetTagBit("DISPLAY_COMMENT",0); } 8.开阀确认: BOOLa; a=GetTagBit("30T制水启动");//Return-Type:shortint if(a==0) {

最新WINCC脚本整理

切换按钮 001 SetTagBit("TE_BOOL",!GetTagBit("TE_BOOL")); 002 BOOL A A=GetTagBit("TE_BOOL"); if(A) SetTagBit("TE_BOOL",0); Else SetTagBit("TE_BOOL",1); 003 SetTagBit("TE_BOOL ",1-GetTagBit("TE_BOOL ")); I O 域处的格式化输入输出 在I/O域的输出值事件处的动作 Float F_TAG; F_TAG =GetTagFloat("TE_FLOAT"); return(F_TAG /100); WINCC运行画面最小化 HWND WinCCHwnd; WinCCHwnd=FindWindow("PDLRTisAliveAndWaitsForYou",NULL); CloseWindow(WinCCHwnd); WINDOWS中提供的标准对话框 { BOOL bool1; HWND Hwnd; int iRet; Hwnd = FindWindow(NULL,"WinCC-运行系统- "); if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-运行系统- "); if (!Hwnd) printf("\r\nGetWinCC Handle Failed!"); iRet=MessageBox(Hwnd,"确认合闸","确认对话框",MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL); switch (iRet) {

WINCC脚本实例

1、问:如何触发计算机扬声器的声音? 答:编写如下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; 字串7 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对话框设置日期时间?

WINCC-C脚本大全

WINCC C脚本的标准函数 1 2009-08-06 17:04 标准函数 该系统包含标准函数。可以按需要修改这些函数。此外,还可以自己创建标准函数。 该系统包括一个标准函数集。 一、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常用C脚本

1.用户注销: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 2.用户登录: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); 3.关闭项目并退出wincc: ExitWinCC (); 4.退出运行到wincc资源管理器: DeactivateRTProject (); 按钮变三种颜色 #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma option(mbcs) if(GetTagWord("TX/ZSH001")==1) return 0x0000ff00; else if(GetTagWord("TX/ZSL001")==1) return 0x000000ff; else return 0x00c0c0c0; } 一个调用按钮变色 #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma option(mbcs) if(GetTagWord("NewTag")==0) return 0x0000ff00; else return 0x00ffffff;

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,所有的语音报警文件存储在该文件夹。通过C脚本代码获取通 用路径。实现脚本如下: B.实现的具体C脚本代码如下: #include "apdefap.h" int gscAction( void ) { //引用API语音函数 #pragma code ("winmm.dll"); VOID WINAPI PlaySoundA(char * pszSound,char * hmode,DWORD dwFlag); #pragma code();

WinCC加密

WinCC是西门子公司推出的监控组态软件,它集成了SCADA、组态、Script语言、ActiveX 和OPC等先进技术,为用户提供了Windows操作系统环境下使用各种通用软件的功能。作为SIMATIC全集成自动化系统的重要组成部分,WinCC确保了与SI—MArC S5、S7和505系列PLC以及TDC连接的方便和通讯的高效,被越来越广泛地应用于化工、冶金、水电等领域“。WinCC组态环境和运行环境没有完全分离,软件使用者可以轻易进入组态环境,查看源程序,修改组态界面。而对于工程项目,软件组态环境的加密是十分重要的。一方面,加密可以保护工程软件编写人员的知识产权,对其劳动成果加以尊重;另一方面。可以防止未经授权的人随意改动程序而造成的经济损失和安全事故。通过某工厂的实际项目设计,本文深入系统研究了C/S(Client/Server)模式下WinCC软件组态环境的加密问题。 2、C/S模式的使用 本项目使用的是WinCC V6 SP2 ASIA,操作系统为Windows XP。采用C/S模式,配置一台服务器,两台客户机,组态多用户项目。服务器通过TCP/IP协议完成与下位机TDC 的实时通讯,接收下位机传送的外部过程数据。服务器进行复杂的运算,并将结果发送给下位机。服务器中WinCC集成了OEM数据库实例SQL Server 2000,可以进行内部变量及外部变量的实时快速归档,以及报警事件的归档。客户机上没有组态项目,只需登录服务器,运行服务器上的项目。因而,客户机不需要购买组态授权,只需一定点数的运行授权即可,这种模式可以降低软件造价。在C/S模式下,通过不同的客户机可以观看不同的监控画面,完成监控、报表、历史数据查询等多种功能。然而,在联网状态下任何一台客户机也可轻易地访问服务器的组态环境,可以修改组态界面,更改脚本代码。所以在C/S模式下,保护软件安全更为困难和必要。 3、ANSI·C和VBScript脚本的加密 虽然WinCC提供了标准的智能对象、窗口对象及ActiveX控件等组态工具。但是对于复杂的运算、后台任务等需要借助于脚本来完成。WinCC提供了两种脚本:ANSI.C和VBScript。在画面中组态的对象可以直接输入ANSI—C或者VBScript脚本代码。对于不重要的代码,采取这种方式比较省事。对于具有重要功能的代码,应该使用全局脚本编辑器。全局脚本编辑器位于WinCC资源浏览器下。包括C—Editor和VBS—Editor。需要多次引用或者需要加密的脚本,可以在全局脚本编辑器中编制项目函数(C)或者项目模块(VBS)。在画面中组态对象时,在其属性或者事件中就可以引用这些项目函数或者项目模块。全局脚本编辑器为函数和模块提供了加密功能。打开C—Editor或者VBS—Editor,点击菜单按钮“信息/触发”图标,在弹出的对话框界面为该脚本输入口令。同样,对于动作,也可以输入口令。这样,即使用户进入了组态环境,想更改脚本,也需要输入正确的口令才能看到脚本源代码。 4、应用C脚本对动作进行加密 在生产实际中,一些特殊的按钮,被不熟悉生产工艺的人随意操作,可能会引发安全事故。所以必须为这些按钮分配操作权限。只有被授权的用户,在输入用户名和密码之后,才能执行操作。分配操作权限的操作必须通过用户管理器来完成。在WinCC运行画面,WinCC提供了热键来自动弹出用户登录对活框。热键需要设置和记忆,加重了编程者和使用者的负担。所以在需要髓录用户的地方,设置了按钮,应用ANSI-C语言,编写了弹出输入用户密码的对话框的函数UserPW.fct,代码如下:

相关主题