wincc的n个经典问题解答

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

wincc的n个经典问题解答

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");

V oid 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对话框实现。具体如下:

#include"apdefap.h"

void onClick(char*lpszPictureName,char*lpszObjectName,

char*lpszPropertyName)

{ProgramExcute("c:\\win98\\control.exe timedate.cpl");}

其中执行的程序路径,需根据具体情况填写。

5、问:如何在WinCC中调用SQL语言?

答:1、创建一个SQL文件,此文件在ISQL中建立,文件内包含所要执行的SQL语句。Windows对话框实现。具体如下:

2、在WinCC中用C Script 调用上述SQL文件,如下所示:

#include"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

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 *from pde#hd#t#test;

output to e:\\test2.txt FORMAT ascii

注意:文件名及路径中不要带空格。

6、问:如何整点启动归档?

答:在"Globle Script"下的Project function编写程序函数:cyclicarchive

BOOL cyclicarchive()

{

#pragma code("kernel.dll");

void GetLocalTime(SYSTEMTIME*lpsz);

#pragma code();

SYSTEMTIME time;

Int t1;

GetLocalTime(&time);

T1=time.wMinute;

If(t1==00)

{

SetTagBit("startarchive",1);

Return(BOOL) (GetTagBit("startarchive"));

}

}

在Tagloging中的"Properties of process tag"中的"archive tag"Tab下的Archive type选择Cycle-selective,在"Event"标签下的"StartEvent"内选择cyclicarchive函数。

7、问:How can I set and reset a WinCC variable by mouse click with C script?

答:The following function shows how you can alternately set and reset a WinCC variable by mouse click.

#include "apdefap.h"

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

BOOL z;

z=GetTagBit("MyBitVariable");

if (z==0)

SetTagBit("MyBitVariable",1);

else

SetTagBit("MyBitVariable",0);

}

8、问:How can I program a waiting function (Sleep) in WinCC?

答:The following sample program shows how the "Sleep" is used.

#pragma code("Kernel32.dll")

void Sleep(int milliseconds);

#pragma code()

Sleep(1000); //time specification in milliseconds

Warning:

If you use Sleep(), processing the C script is interrupted for the time indicated. Requests for the interrupted function cannot be processed during this time.

9、问:How can I output a SIMATIC timer minutes and seconds in WinCC?

答:If you want to output a SIMATIC Timer in minutes and seconds in WinCC, then in WinCC please use a static text in the Graphics Designer to which you interface the following action:

char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

char *p;

DWORD hilf;

int min, sec;

p=SysMalloc(10);

hilf=GetTagDWord("Time");

min=hilf/60000;

sec=hilf%60000/1000;

sprintf(p,"%d min %d sec",min,sec);

return p;

}

The "Time" variable linked to the I/O field must have the following properties:

?Data type "32-bit value without sign"

?Format adaptation "DwordToSimaticBCDTimer"

?Address: data area "Times" and addressing "Word"

21:WINCC--如何在程序中动态修改用户密码

1、点击“开始”--》“设置”--》“控制面板”--》“管理工具”--》“数据源(ODBC)”,打开ODBC数据源管理器

2、在用户DSN页面的用户数据源中找到与当前项目所关联的一项,其名称为“CC_项目名_项目建立日期时间”,记下该项的名称

3、在脚本中加入以下代码:

#pragma code("UseGen.dll")

#include "USEGENAP.H"

#pragma code()

LPCMN_ERROR err; //定义的LPCMN_ERROR型变量,在函数调用中需使用

if (PWGENConnect("CC_ass_04-09-21_16:35:22",err)) //建立与数据库的联接,其中CC_ass_04-09-21_16:35:22用第二步中记下的名称取代

{

if (PWGENChangePassword(GetTagChar("user"),GetTagChar("oldpassword"),GetTagChar("passw ord"),err)) //修改密码,user,oldpassword,password分别为存贮用户名,原密码,新密码的内部变量,类型为文本变量8位字符集

{

//密码修改成功后的操作,如给用户提示等

}

}

PWGENDisconnect(err); //断开与数据库的联接

4、编译运行程序

5、工作完成

6、与用户管理相关的函数定义存贮在APPLIB目录下的USEGENAP.H文件中,可根据上面示例自行完成添加用户,修改权限等功能。

22:WinCC6.0 中归档时和5.1版本为什么不同了?

WinCC V6.0 的后台数据库采用了MS SQL Server 2000,所以归档方式与V5.1 有所不同,它的运行数据存放在数据片段(segment)当中,工程师可以根据尺寸需求组态最大容量或根据时间周期启动新的数据库归档片段。将归档数据连续的写入数据库,单个数据片段的尺寸到达或者时间界限到达时,系统会自动开启另一个数据片段进行归档。当数据片段的总体尺寸达到最大时,最早的数据片段就会被覆盖,重新开始新的归档。

23:WinCC6.0 中如何设定归档周期?

WinCC V6.0 版本中的快慢速归档的归档周期界限可以由用户自行设

定,该参数在快速归档属性的第三个标签项中设置。

24:如何计算慢速归档数据库的尺寸?

慢速归档时一条变量归档记录占用32 字节的空间,每个变量以2 分钟为归档周期,一周之内会产生5040 条记录,若有5000 个变量的归档,则单个数据片段的大小计算为:32×5000×5040=806400000 byte ==> 约等于800MB

考虑到留出20%的余量,设定单个数据片段为1G

所有数据归档期限是两个月,因此所有段的尺寸为单个片段尺寸乘以单个片段的个数,即:1GB×9=9GB

25:如何计算快速速归档数据库的尺寸?

快速归档时一条变量归档记录占用3 字节的空间,每个变量以2 秒钟为归档周期,一周之内会产生302400 条记录,若有50 个变量的归档,则单个数据片段的大小计算为:3×50×302400=45360000 byte ==> 约等于46MB

考虑到留出20%的余量,设定单个数据片段为60MB

所有数据归档期限是两个月,因此所有段的尺寸为单个片段尺寸乘以单个片段的个数,即:60MB×9=540MB

26:所有的归档变量都可以计算出它占用的数据库大小吗?

只有周期连续归档的数据才能定量的计算其占用的数据库尺寸,因此当您对应设定的时间期限计算并设置数据库尺寸大小时,需要考虑其他数据归档类型的数据,留出相应的余量。

27:WinCC V5.1 中文版的安装要求是什么?

1)WinCC V5.1 亚洲版只有V5.1 这一个版本,不再有后继版本,WinCC V5.1 亚洲版应安装在Windows 2000 SP2 操作系统上

2) WinCC 的语言版本应和操作系统的语言版本相对应,不建议将中文WinCC 装在英文操作系统上

28:有没有快捷的方法如何将WinCC的实时数据通过OPC DA记录到MS Access、MS SQL Server和Oracle数据库中?

可以使用WinCC Industrial Data Bridge将WinCC的实时数据通过OPC DA记录到MS Access、MS SQL Server和Oracle数据库中,但是需要授权,分为以128、512、2K和10K

29:WinCC 能提供的最高变量刷新速度是多少?

对于一般的网络通讯方式来说,WinCC 能提供的最高刷新速度是250 毫秒,但WinCC 采用RawData 归档数据链接的方式可以实现对S7-400PLC 的高速数据采集。

30:如何实现WinCC 高速数据采集?

WinCC 采用RawData 归档数据链接的方式可以实现对S7-400PLC 的高速数据采集。原理是PLC 将每个循环周期所采集的过程值(或PLC 以其他方式得到的数据或数据包)以一定的顺序存放在具有一定的格式的DB 块中,当到达一定的数量后,PLC 可以调用系统功能块SFB37(AR_Send)将这个DB 块主动地发送给WinCC, 然后WinCC 会在后台

自动调用标准化DLL 来拆解数据,并将其按时间顺序保存在数据库中。在WinCC 的过程画面中,可以使用在线趋势控件或在线表格控件来查看所采集的数据。

由于是批量传送,可以有效地提高通讯效率,使高速数据采集成为可能,而这时所谓的采集频率就取决于你对保存在DB 块中的各过程值间的时间间隔的定义。可以定义的最小的时间间隔是1 毫秒。但如果是PLC 每个循环周期采样一次,那么定义的时间间隔应大于PLC 循环周期。DB 块的最大尺寸是16KB。

技巧:可以考虑使用多DB 块进行缓冲并添加程序控制DB块的写入和发送顺序,能够实现连续的采集,但要充分考虑CPU 的负载和循环周期。

31:WinCC 高速数据采集的前提条件是什么?

1)WinCC 的版本为V5.1 或更高

2)S7-400 系列CPU

3)WinCC 站与S7 400 站建立S7 连接(包括MPI,ProfiBus,TCP/IP,工业以太网都可以实现)

32:为什么我无法从WinCC里调用STEP 7 变量?

从WinCC里调用STEP 7 变量的前提条件是,WinCC的项目文件必须是集成在STEP 7项目中的。

在安装所有Simatic 软件前,请查阅软件的安装注意事项,确定操作系统与软件的兼容性。该文档一般位于:CD\Documents\<语言版本>\InstallNotes.chm。

要使用WinCC与STEP 7的集成功能,WinCC和STEP 7必须安装在同一台计算机上,必须在安装WinCC之前安装STEP 7。STEP 7 与WinCC的版本必须一致。

33:如何把现成的WinCC项目集成到STEP 7 项目中?

如果你在一台计算机上已经安装了兼容的WinCC和STEP 7,并且有了一个单独使用的WinCC项目,想把它集成到一个已有的STEP 7项目中去。那么,你必须先添加与集成相关的WinCC组件。把WinCC光盘放入光驱,并启动WinCC的安装程序。添加与集成相关的WinCC组件。

按如下步骤把已有WinCC项目文件插入STEP 7项目文件

1.在STEP 7项目文件中插入一个OS站,然后把它改名为已有的WinCC项目名称。

2.在STEP 7项目里删除因仅插入OS站而产生的WinCC项目文件,其位置在STEP 7 项目文件夹里的wincproj文件夹下,例如:d:\siemens\STEP7\S7proj\STEP7_Integration\wincproj\'Name of the OS'

3.最后在项目复制器里用’Save as’把已有的WinCC项目文件存储到STEP 7项目路径下。项目复制器位于开始菜单项"Start > SIMATIC > WinCC > Tools"。

注意:对于集成STEP 7项目里的WinCC项目,你也可以使用压缩工具(Packer)来归档WinCC项目。

34:wincc怎样和s7plc-sim连接?

要访问PLCSIM模拟软件,必须按如下方法操作,按照以下的顺序来安装程序:

STEP 7 V 5.x

PLCSIM V4.x以上

WinCC V5.x

选择用户自定义安装。对于SIMATIC WinCC V5

SP1及以下版本的用户,在“通讯”组件下,必须选择“S7Dos”和“对象管理器”组件。

对于SIMATIC WinCC V5

SP2及更高版本的用户,“S7Dos”是自动安装的。就是说不再需要在“用户自定义安装”下选择该选项。在PG/PC界面上做如下设置:在控制面板中双击“设置PG/PC界面”。在“应用程序的访问点”域中,选择“MPI

(WinCC)”。在“使用的界面参数”域中选择“<无>”。启动应用程序STEP 7:

启动SIMATIC管理器

启动PLCSIM

打开要模拟的项目或组态一个项目。

在项目中添加一个OS。

在PLCSIM中加载项目。

启动WinCC并创建一个新项目或打开已有的项目。

WinCC

添加“SIMATIC S7 PROTOCOL SUITE”到变量管理器。

在MPI下添加一个新连接。

右击该连接然后选择“属性”。

点击“属性”按钮。

在“连接”标签中指定MPI地址和已在STEP 7中组态好的CPU的插槽。

确认所做的指定。

激活WinCC项目。

进入“开始 > SIMATIC > WinCC > 工具 > 通道诊断”。在“通道连接”下可以显示连接的状态。

如果连接没能设好:在WinCC资源管理器中的“系统参数 - MPI > 单元”中,启用选项“自动设置”。

在“系统参数 - MPI > 通道”中,取消“使用PLC的循环读取服务”选项。

wincc和西门子PLC仿真通讯需要PLCSIM ,先将PLCSIM

运行,建立一个WINCC项目,使用MPI通讯即可,说白了跟MPI通讯一样,只是PLC是用PLCSIM 在计算机上模拟的

但是有一点要注意的是,这种方式下不能使用输入区(I区),凡是有输入的地方都要用M区来代替

可以使用输入区(I区),只是有些特殊功能不能用。

35:WINCC-如何使用自定义的对话框实现用户登录?

在登录按钮中加处以下脚本:

#pragma code("useadmin.dll")

#include "PWRT_API.H"

#pragma code()

if (PWRTSilentLogin("username", "PassWord"))

{

//登录成功后的处理

}

其中"USERNAME","PASSWORD"可以用存储用户名和密码的变量替换.如:

PWRTSilentLogin(GetTagChar("user"), GetTagChar("PassWord"))

当登录成功时,函数返回值为真;如登录失败,则返回值为假。

36:WINCC-如何使用自定义的对话框实现用户退出?

实现登陆:

#pragma code(""useadmin.dll)

#include "PWRT_api.h"

#Pragma code()

PWRTlogin('1');

实现退出:

#pragma code(""useadmin.dll)

#include "PWRT_api.h"

#Pragma code()

PWRTlogout();

37:如何把GIF图片放到wincc中?

首先插入aniGIF.ocx这个ole控件,然后双击它,在GIF属性中选择您需要显示的GIF图片就可以了。

38:如何将低版本创建的项目移植到WinCCV6.0中?

将项目移植到WinCC V6.0的工作步骤:

WinCC V6.0与其以前的版本相比在数据组织方面有着显著的不同。为了使在WinCC V5.0 Service Pack2或WinCC V5.1中创建的项目在WinCC V6.0中也能工作,项目数据必须首先通过移植作相应的调整。为此,WinCC V6.0提供了一个项目移植器,用于自动移植项目的组态数据、运行系统数据和归档数据在移植之前,建议为原版本的项目做一个备份。与此有关的信息参见WinCC信息系统中的主题“使用WinCC”>“使用项目”>“复制和归档项目”。

已归档的文件:如果必须访问先前版本的归档数据,则必须将归档移植到WinCC V6.0。请使用项目移植器移植归档数据和dBASE III归档。

多用户项目:为了使利用WinCC V5.0 SP2或V5.1所创建的多用户项目在WinCC V6.0中能够正常工作,可进行如下操作:

移植系统中所有服务器上的单个多用户项目。如果原来的项目使用了多客户机,则分别单独移植多客户机的项目数据。正常操作中的冗余系统,不用取消激活操作就可在冗余系统中对项目进行升级。此时,将按规定的次序升级服务器、客户机和多客户机。章节“在正常操作中升级冗余系统”中提供了有关的详细说明。

警惕:为了不影响系统操作,必须遵守所描述的步骤次序,且完成所有步骤时不能有任何长时间的中断。

早于WinCC V5.0 Service Pack 2的WinCC版本:对于早于WinCC V5.0 SP2的WinCC版本所创建的项目,必须一步一步地进行移植,将系统先升级到WinCC V5.1,并移植项目。安装WinCC V6.0,并使用项目移植器移植项目。

39:wincc6.0中支持ab plc的驱动吗?

WinCC V6.0将不再提供下列通讯通道:

Allen Bradley DH DH+ DH485

Allen Bradley Serial DF1

Applicom Multi Protocol Interface

GE Fanuc SNP SNPX

Mitsubishi FX

Modbus Protocol Suite

Modbus Serial

SIMATIC S5 PMC Ethernet

SIMATIC S5 PMC Profibus

SIPART

可以用OPC来替代。某些通道需附加件的支持。

40:WINCC的授权坏了,显示“Authorization SIK/SIMATIC WINCC RT 128 PowerTags is faulty.”,重新安装显示已经存在此授权,请问要怎么处理?

可以询问原来的销售商索要一个激活码,可以在authorsw中manageauthorization中右键单击选择“recover autrorization”输入激活码激活授权即可。

41:用C编程解决授权点数不够用的问题(acsun提供)

当需要的工艺参数超过WinCC版本限制的Tag数目,可以用C语言编程实现多个工艺参数打包成一个Tag传送.例如某个配料称重系统有146个参数超过了WinCC的128个Tag的限制就可以用C语言编程决这一问题而不需要购买更高的授权.

基本思想就是把多个参数在下位机内存中连续排列然后在WinCC中定义一个Tag它的长度是多个参数之和取得这个Tag后编程将其分成多个参数

例如下位机有两个参数LTN44001和LTN44023都是16位整数分别存放在DD99.DW146和DD99.DW148

在WinCC中定义一个外部Tag命名为PackageTag类型为32位整数并联地址为DD99.DBD146再定义两个内部tag名为LTN44001和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传送上来了理论上只要下位机内存足够可以传送任意数量的参数而不受WinCC版本外部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

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);

ProgramExecute(a);

}

下面是一个简单的SQL文件内容:

select * from pde#hd#t#test;

output to E:\\test2.txt FORMAT ascii

注意:文件名及路径中不要带空格。

43:如何整点启动归档?

在"Global Script"下的Project functions编写函数:cyclicarchive

BOOL cyclicarchive()

#pragma code ("kernel32.dll");

void GetLocalTime (SYSTEMTIME* lpst);

#pragma code();

SYSTEMTIME time;

Int t1;

GetLocalTime(&time);

t1=time.wMinute;

if(t1==00)

{

SetTagBit("startarchive",1);

return(BOOL)(GetTagBit("startarchive"));

}

}

在Tagloging中的"Properties of process tag"中的"Archive Tag"tab下的Archiving type选择Cycle-selective,在"Event"标签下的"Start Event"内选择cyclicarchive函数。

44:如何在按键组合被禁用的情况下,从WinCC运行环境进入WinCC Control Center?

最好是做一个按钮,该按钮需要用用户权限保护,在该钮中编写如下C-action:

低于WinCC 5.0版本:

#pragma code ("user32.dll");

BOOL SetForegroundWindow(HWND);

#pragma code();

HWND handle;

handle=FindWindow("MCPFrameWndClass",NULL);

If (!SetForegroundWindow(handle))

Printf ("\r\n SetForeground fails");

WinCC 5.0版本以及更高的版本:

#pragma code("user32.dll");

BOOL SetForegroundWindow(HWND);

#pragma code();

HWND handle;

handle=FindWindow("WinCCExplorerFrameWndClass",NULL);

If (!SetForegroundWindow(handle))

Printf ("\r\n SetForeground fails");

45:WinCC如何实现鼠标OnMouseOV er事件?

用WINDOWAPI函数GetCusorPos获取当前鼠标位置,用GetWindowRect函数获取窗口位置,两值相减得鼠标在WINCC frame上的相对位置。用全局脚本(设定为1s定时刷新),然后获取要OnMouseOver事件的物体的位置,并与鼠标位置相比较,如一致则触发自己定义的动作。

#i nclude "apdefap.h"

int gscAction( void )

{

#pragma code("user32.dll");

BOOL GetCusorPos(POINT lpPoint); //获取鼠标的位置(绝对位置-对应屏幕分辨率)BOOL GetWindowRect(HWND hwnd,LPRECT lpRect); //获取窗体 位置

#pragma code();

POINT pPos;

RECT rRec;

HWND hwnd;

BOOL bRet,bRet2;

long lLeft,lTop,lWidth,lHeight;

long lX,lY;

char szStr[100];

hwnd=FindWindow(NULL,"WinCC-Runtime - "); //如语言为中文应为"WinCC 运行系统-" if (hwnd==0) {printf("\r\nError! WinCc Handle is %d",hwnd);goto over;}

bRet=GetCursorPos(&pPos);

if (bRet==0) goto over;

bRet2=GetWindowRect(hwnd,&rRec);

if (bRet2==0) goto over;

lX=pPos.x-rRec.left; //鼠标对{置

lY=pPos.y-rRec.top; //鼠标 位置

//如果为非全屏模式,需将上述数值中的高height判断减去标题栏的宽度

//printf("The Current Cusor Pos is x:%d,y:%d\r\n",pPos.x,pPos.y);

//printf("The Cusor Pos in Window is x:%d,y:%d\r\n",pPos.x-lLeft2,pPos.y-lTop2);

lLeft=GetLeft("NewPdl0.Pdl","Text1"); //Return - Type :long int

lTop=GetTop("NewPdl0.Pdl","Text1"); //Return - Type :long int

lWidth=GetWidth("NewPdl0.Pdl","Text1"); //Return - Type :long int

lHeight=GetHeight("NewPdl0.Pdl","Text1"); //Return - Type :long int

if ((lX>=lLeft)&&(lY>=lTop)&&(lX<=lLeft+lWidth)&&(lY<=lTop+lHeight)) {

sprintf(szStr,"%d,%d",lX,lY);

SetText("NewPdl0.Pdl","Text1",szStr); //Return - Type :char*

}

//printf("The Text1 Pos is x:%d,y:%d\r\n",lLeft2,lTop-lTop2);

over:

return 0;

}

46:如何实现ASP与WinCC V6数据库sql server 2000的连接?

WinCC V6用ODK获取DSN名,{后生成网址字符串,再用shellExecuteA函数打开网页//----------------------------------------------------------------------------------

#pragma code("shell32.dll")

long ShellExecuteA(HWND,LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR,int);

#pragma code()

char dsnStr[100];

HWND hwnd;

sprintf(dsnStr,"http://dcount/test.asp?dsnStr=%s",GetDSN(1)); //Return-Type: LPCTSTR printf("\r\n%s",dsnStr);

hwnd=FindWindow(NULL,"WinCC - Runtime ");

ShellExecuteA(hwnd,"open",dsnStr,NULL,"C:\\",SW_SHOWNORMAL);

//-------------------------------------------------------------------------------------

ASP方面需要注意的是连接字符串的形式与普通acess ODBC不太一样,而且需要用户名和密码

由于WINCC封装的sa用户的密码暂时不知道,所以必须用SQL Server EnterPrise Manager 建立自己的用户,添加system Administrator权限就可以了!否则会出现错误提示Microsoft OLE DB Provider for SQL Server 错误 '80040e4d'

Login failed for user 'sa'.

'--------------------------------------------------------------------------------------

dsnStr=request("dsnStr")

set conn=server.createobject("adodb.connection")

set rs=server.createobject("adodb.recordset")

conn.Provider = "sqloledb"

conn.open "Server=DCOUNT\WINCC;Database=" & dsnStr & ";UID=dcount;pwd=;"

rs.open "select * from test",conn,1,1

response.write rs.recordcount

do while not rs.eof

response.write rs("f1") & "---" & rs("f2") & "---" & rs("f3")

rs.movenext

loop

rs.close

conn.close

47:如何在退出WINCC监控时直接关闭电脑?

1.利用动态向导

2.在脚本中加入 DMExitWinCCEx (DM_SDMODE_SYSTEM);也可以

48:如何通过WINCC API函数读出当前报警消息?

1、使用GMsgFunction中读出当前报警信息的ID(dwMsgNr);

2、使用MSRTGetMsgCSData函数读出该报警信息ID对应文本库TEXTLIB中的文本ID (dwTextID1);

3、使用MSRTGetMsgText函数读出该文本ID的文本。

信息到达处理:如果读取文本成功,则置文本变量MSG。

信息离去处理:如果MsgNr与上一次相同,则复位MSG,如果不是,则继续保持信息。具体函数说明请看ODK文档

BOOL GMsgFunction( char* pszMsgData)

{

#pragma code("msrtcli.dll")

#i nclude "msrtapi.h"

#pragma code();

MSG_TEXT_STRUCT tMeld;

MSG_CSDATA_STRUCT sM;

CMN_ERROR err;

BOOL bRet;

DWORD dwTextID1;

DWORD dwMsgNum;

char szMsg[255];

#define TAG_MSG "MSG"

MSG_RTDATA_STRUCT mRT;

memset( &mRT, 0, sizeof( MSG_RTDA TA_STRUCT ) );

if( pszMsgData != NULL )

{

printf( "Meldung : %s \r\n", pszMsgData );

sscanf( pszMsgData, "%ld,%ld,%04d.%02d.%02d,%02d:%02d:%02d:%03d,%ld, %ld, %ld, % d,%d",

&mRT.dwMsgNr, // Meldungsnummer

&mRT.dwMsgState, // Status MSG_STATE_COME, .._GO, .._QUIT, .._QUIT_S YSTEM

&mRT.stMsgTime.wYear, // Tag

&mRT.stMsgTime.wMonth, // Monat

&mRT.stMsgTime.wDay, // Jahr

&mRT.stMsgTime.wHour, // Stunde

&mRT.stMsgTime.wMinute, // Minute

&mRT.stMsgTime.wSecond, // Sekunde

&mRT.stMsgTime.wMilliseconds, // Millisekunde

&mRT.dwTimeDiff, // Zeitdauer der anstehenden Meldung

&mRT.dwCounter, // Interner Meldungsz?hler

&mRT.dwFlags, // Flags( intern )

&mRT.wPValueUsed,

&mRT.wTextValueUsed );

//***************************************************************************** *********code for dcount

if (mRT.dwMsgState==MSG_STATE_COME)//信息到达处理

{

dwMsgNum=mRT.dwMsgNr;

printf("\r\nThe Alarm Message No is %d !\r\n",dwMsgNum);

bRet=MSRTGetMsgCSData(dwMsgNum,&sM,&err);

if (bRet==TRUE)

{

dwTextID1=sM.dwTextID[0];

printf("\r\nThe TextID of The MessageNr %d is %d !\r\n",dwMsgNum,dwTextID1);

bRet=MSRTGetMsgText(1,dwTextID1,&tMeld,&err);

if (bRet==TRUE)

{

sprintf(szMsg,"%s",tMeld.szText);

printf("\r\nThe Text of TextID %d is %s !\r\n",dwTextID1,szMsg);

}

}

}

if (mRT.dwMsgState==MSG_STATE_GO)//信息离去处理

{

dwMsgNum=mRT.dwMsgNr;

if (dwMsgNum==GetTagDWord(TAG_MSG_NR)) SetTagChar(TAG_MSG,"");

}

//***************************************************************************** *********code for dcount

// Meldungsdaten einlesen

// Prozesswerte lesen, falls gew???????§???1nscht

}

printf("Nr : %d, St: %x, %d-%d-%d %d:%d:%d.%d, Dur: %d, Cnt %d, Fl %d\r\n" ,

mRT.dwMsgNr, mRT.dwMsgState, mRT.stMsgTime.wDay, mRT.stMsgTime.wMonth, mRT.stM sgTime.wYear,

mRT.stMsgTime.wHour, mRT.stMsgTime.wMinute, mRT.stMsgTime.wSecond, mRT.stMsgTime .wMilliseconds, mRT.dwTimeDiff,

mRT.dwCounter, mRT.dwFlags ) ;

SetTagChar(TAG_MSG,szMsg);

return( TRUE );

}

49:如何实现用户登陆日志(wincc中用c脚本实现?)( 柳树成林原创)

用户登陆日志:(包括用户的登陆退出信息,以便查询在什么时间段是哪个用户在使用这个监控软件)

#i nclude "apdefap.h"

int gscAction( void )

{

#pragma code("kernel32.dll")

VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);

#pragma code()

char* username;

char buf[128];

static char preuser[128];

unsigned a,b,c,d,e,f;

FILE* fp;

SYSTEMTIME sysTime;

//读取系统时间,并且复制给变量a,b,c,d,e,f

GetLocalTime(&sysTime);

a=sysTime.wHour;

b=sysTime.wMinute;

c=sysTime.wSecond;

f=sysTime.wYear;

e=sysTime.wMonth;

d=sysTime.wDay;

//得到当前用户名称

username = GetTagChar("@CurrentUser");

fp= fopen("c:\\wincclog.txt", "a+");

if(strcmp(username, preuser)!=0) //如果当前用户名称和前一个用户名不同

{

if((strcmp(username, "") != 0)&&(strcmp(preuser, "") == 0)) //如果当前用户名称不空同时前一个用户名为空

{

sprintf(buf, "用户:%s\t登陆时间是:\t %d-%d-%d,%d-%d-%d\n", username,a,b,c,d,e,f); fputs(buf, fp);

}

else

{

if((strcmp(username, "") == 0)&&(strcmp(preuser, "") != 0)) //如果当前用户名称为空同时前一个用户名不空

{

sprintf(buf, "用户:%s\t退出时间是:\t %d-%d-%d,%d-%d-%d\n", preuser,a,b,c,d,e,f);

fputs(buf, fp);

}

else

{

sprintf(buf, "用户:%s\t退出时间是:\t %d-%d-%d,%d-%d-%d\n", preuser,a,b,c,d,e,f);

fputs(buf, fp);

sprintf(buf, "用户:%s\t登陆时间是:\t %d-%d-%d,%d-%d-%d\n", username,a,b,c,d,e,f);

fputs(buf, fp);

}

}

}

strcpy(preuser, username);

fclose(fp);

return 0;

}

50:在wincc画面编辑器里注册的OCX控件,由于开发时没有考虑到wincc标准控件中具备层次哪个属性!所以不能够通过画面编辑器里的菜单进行设置OCX控件的层次关系!

建议不要把wincc中注册的OCX控件和wincc本身的标准控件重叠放置,否则wincc本身的标准控件将被覆盖!

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部分考试题目

WinCC部分 笔试考题: 1、生成一个新的项目的时候,该项目默认的路径是。该项目的路径由用户自己选择想要放置的驱动器和文件夹。 A.安装WinCC的目录中的projects文件夹中,不能。 B.安装WinCC的目录中的projects文件夹中,可以。 C.C:\ Program Files\WINCC\projects文件夹中,不能。 D.C:\ Program Files\WINCC\projects文件夹中,可以。 答案:B 2、一个项目的要和西门子400系列的PLC进行通讯,我们要在变量标签中添加一个驱动器,该驱动器是。它的作用是。A.SIMATIC S5 Ethernet ,使PLC和WinCC进行通讯。 B.SIMATIC S5 Programmers Port ,在PLC和WinCC之间生成一个逻辑接口。C.SIMATIC S5 Profibus ,使PLC和WinCC进行通讯。 D.SIMATIC S7 Protocol ,在PLC和WinCC之间生成一个逻辑接口。 答案:D 3、当我们要调用一个历史趋势图的控件,并将变量的数值反映到趋势图当中,我们需要将这个变量建立到,主要设置其属性。 A.变量管理器、类型和地址。 B.报警记录、报警等级。 C.变量记录、采集周期。 D.报表设计、周期或时间。 答案:C 4、在WinCC项目名称的属性里有一个刷新周期,如果刷新周期如果设置得比较长,会对生产造成什么影响? 答:会造成WinCC项目对现场实际情况的采集数据失真,使画面不能反映现场的实际情况。(或刷新周期是WinCC系统访问一次过程数据的时间,设置的时间过长,会造成数据失真) 5、当我们要将计算机A里运行过的项目拷贝到另一台计算机B里,并且要在同一个网络上进行同时运行时候,我们需要修改和注意那些方面的问题? 答:1、我们要检查两台计算机的名称是否重复,如果重复,我们要将计算机B的名称进行修改。 2、我们要检查计算机B的IP地址,不能与计算机A和PLC的IP地址重复。 3、我们要将计算机B里刚拷贝过来的项目打开,修改其计算机属性里的计算机名, 使它和计算机B的名字相同。查看变量标签中的驱动器里的TCP/IP属性,看 其网卡的驱动和计算机里的网卡是否一致。

WINCC安装出现的2个问题及解决方法

WINCC安装出现的2个问题及解决方法 [530] 有一种似是而非的说法:“WINCC应该在WIN2000下运行更为稳定和方便。” 我觉得在6.0之前似乎是这样的。但这种说法现在不具有指导意义了,WINCC可以在WINCXP下很完美的运行。目前XP的先进程度是2000不能比拟的。 还有一种似是而非的说法是:“WINCC应该安装在纯净的XP系统之下,所以我们应该使用XP光盘一步一步的安装,而不能使用市面上常用的GHOST盘来克隆XP”。这种说法有一定的道理,但是也不是全部,因为大家应该都有感觉,并不是所有的克隆XP都不能安装WINCC。那么到底原因是什么呢?原因是在于市面上某些克隆XP为了系统速度将WINDOWS 的一些服务关闭了,而这些不常用的服务正是WINCC正常运行的关键。下面就两个典型错误来阐述: 1、WINCC在创建项目时出现“找不到网络路径”错误,一旦出现,项目即不能被创建,WINCC无法正常运行。这种错误是由于在安装WINCC的时候没有关闭防火墙所致。WINCC安装时系统会提醒使用者关闭防火墙,很多使用者忽略了,在大多数不关闭防火墙就安装的情况下,WINCC也能正常运行,但是有一定概率出现这个“找不到网络路径”错误。 那么解决办法呢?最根本的解决办法是重装系统(这个也是网上大多数同仁推荐的),但是这很麻烦。我推荐的办法是,先关闭防火墙(所有的!包括WINDOWS自带的,各种杀毒软件附加的,和360SAFE!!)看错误是否能解决,经验证有可能能恢复正常,如果WINCC 能创建项目了,那么在创建项目之后再把防火墙都启动,使系统仍受其保护。如果还是不能恢复正常,就进入安全模式将防火墙卸载再回到正常启动的XP,看是否芙饩觯 绻 芙饩鼍椭刈胺阑鹎剑 绻 舛疾恍校 蔷椭缓弥刈跋低沉恕K 苑阑鹎皆赪INCC之后再安装是非常重要的,这一点在使用瑞星防火墙的用户尤其关键,如果将瑞星装在WINCC前面,系统都进不去!!! 2、WINCC出现“Automation License Manager has not been started Please start the service”错误。这个错误会在两种情况下出现: (1)系统硬件发生了变化,WINCC对系统要求似乎比较高,某些同仁实在受不了开发机器缓慢的速度,就直接给系统添加了内存。殊不知一旦系统硬件发生变化,WINCC即认为重新被安装在了其他机器上了,根据授权的原则,就会出现这个错误。 (2)对于某些克隆XP的用户来说是由于系统默认将Automation License Manager service关闭了所致。 那么解决办法呢?网上大多数方法是进入“控制面板”----“管理工 具”--------“服务”-----将“Automation License Manager service”开启,似乎是很完美的,在有些时候的确能解决问题。但是有些情况下却不行,WINCC仍然报“Automation License Manager has not been started Please start the service”错,这个时候我们就需要检查一下,进入“服务”之后发现刚刚开启的“Automation License Manager service”居然又是关闭的了!!!仔细观察才发现原来在这个服务上面的“Automation

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)函数,外部消息窗口操作,此函数打开确认对话框(紧急确认/复位)。

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系统函数

报警 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 授权的使用方法及常见问题处理

WinCC7.0授权的使用方法及常见问题处理 WinCC 软件受法律保护,且只能在具有有效许可证的完整状态下使用。安装的每个软件以及所用的每个选件都需要获得有效的许可证,才能不受限制地使用 WinCC。从WinCC7.0开始,亚洲版(Asia)的WinCC实行硬狗授权的模式,即WinCC在使用的过程中既要检测系统里是否安装了匹配的授权文件,同时还检测LICENSE_KEY硬件狗是否插在电脑上。下面就如何正确使用WinCC7.0授权以及在使用过程中出现的常见问题的处理方法进行简单介绍。 1授权的使用方法 购买了WinCC7.0的授权后,会得到一套WinCC安装软件和一个用来安装授权的LICENSE_KEY,LICENSE_KEY中包含所购买WinCC功能的授权,LICENSE_KEY外观如图1。 图1 安装好WinCC软件后,将此LICENSE_KEY插到电脑的USB口上,然后通过Automation License Manager (授权管理器,随WinCC软件一起提供,且使用Automation License Manager不需要授权)将 LICENSE_KEY中的授权导入到电脑中,只有标记有“Hardlock”字样的LICENSE_KEY,在传送完授权后仍然需要插到电脑上。导入授权的方法如下:打开Automation License Manager,如果安装了SIMATIC Logon,将会弹出一个登录对话框,如图2, 图2 点“Cancel”将进入如下界面,如图3。 图3

用鼠标选中“LICENSE_KEY”,右边会列出LICENSE_KEY中的授权文件,选中LICENSE_KEY中的授权文件拖拽到电脑的目标盘(不建议放到系统盘,避免系统崩溃造成授权文件丢失);或者用鼠标选中 LICENSE_KEY中的授权文件,点击右键,如图4。 图4 选Transfer(传送),选中目标路径,如图5,至此WinCC的授权导入就完成了。 图5 注意:a. WinCC的一套授权只能同时在一台电脑中使用(不支持复制),如果想将授权转移到其他电脑中使用,按照如上方法将授权传送回LICENSE_KEY,传送授权时需要关闭WinCC,正在使用的授权是不能传送的。授权的状态检查可以参考图4,点击Check,会弹出授权状态信息,如图6。 图6 b.WinCC7.0授权只有RT和RC类授权检测硬件狗,也就是说这两种型号授权对应的LICENSE_KEY必须插在电脑上,而其他型号的WinCC授权,只需要将授权文件通过Automation License Manager将授权文件导入电脑,对应的LICENSE_KEY是不需要插在电脑上的,比如,一用户购买了WinCC7.0的一套RC128点授权和一套Server授权,那用户就会收到两个LICENSE_KEY,将LICENSE_KEY中的授权文件导入到电脑中,此时只需将RC128点的LICENSE_KEY硬件狗插在电脑上, Server授权的LICENSE_KEY是不需要插在电脑上

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问答_1

1、WINCC在进入某一画面时出现 Unhandled exception was raised.Lookfile"c:\program Files\semens\wincc \Diagnose\PDLRTSEH.LOG"for details. 出现这种情况前只是删除了该画面的一个矩形图。 --------------------------------------------------------------简单的矩形图删除不会有这个问题的,打开记事本看看进一步的错误信息,有什么错误代码.才能进一步找到错误原因. 2、在停电之后5611网卡通讯不上,硬件图标上有黄色的叹号,点测试显示“错误0x0382:未找到内部驱动程序信息 (L2)”--------------------------------------------------------黄色的叹号或者感叹号说明没有给CP5611驱动,请手动查阅目录C:\WINDOWS\INF或者C:\WINNT\INF,驱动的信息(OEM**.INF)会在这些目录中,卸载CP5611重新安装即可. CP5611完全卸载方法步骤:1.设备管理器卸载. 2.打开注册表WINDOWS START MENU->RUN->"REGEDIT",删除下面路径中的所有的条 目:HKEY_LOCAL_MACHINE\SOFTWARE\SIEMENS\SINEC\LOGDEVIES. 3.重新启动计算机,再次安装5611驱动. WINCC组态服务器不可用,是否打开项目,将本地计算机作为服务器 2011-11-21 15:07:56| 分类:iphone | 标签:|字号大中小订阅 https://www.360docs.net/doc/262244312.html,/leishuang2005/blog/item/e6ce8c47654a2a046b63e50e.html 我从别人那考了一个WINCC例子看可是为什么一打开就是显示“组态服务器不可用,是否打开项目,将本地计算机作为服务器”我点了启动本地服务器为什么总是错误,望高人指点 问题在于你直接拷贝人家已经在使用的项目文件夹,哪个文件夹是共享的,特别是人家正在运行的项目,这样的项目文件直接复制过来是不能用的,会缺少文件. 正确的复制方法: 1)关闭正在运行的WINCC项目,可以在WINCC浏览器里关闭,也可以在开始彩单->运行->输 入CMD ->在里面窗体输入命令RESET WINCC来强制关闭WINCC及相关文件. 2)取消项目文件夹的共享标记.然后复制项目文件夹(当然项目中也可能调用其它可执行文件, 这些你需要向设计方了解),也可以是WINCC安装路径里面的项目复制器复制项目到指定计算机. 只有用这样的方法复制的项目文件才能保证WINCC功能部分软件是完整可用的(WINCC内部直接调用可执行文件的执行的功能除外). 你如果是拷贝的整个项目的话,你需要启动本地服务器,然后更改项目里面的计算机名字为你的本机名字,然后关闭wincc再重新打开wincc。就好了。

WINCC的安装注意问题

关于一些已知的安装问题的解决方法 当内部错误286的信息弹出时的做法 当你在runtime卸载将要完成(即文件已删除)时出现‘内部错误286’信息时,此时在windows注册项中仍显示为已安装以致SP1的安装会被取消。这意味着SP1的工程部分不能在系统中安装。 解决方法: 只需在windows注册项中的注册码删除: HKEY_LOCAL_MACHINE\Software\Siemens\AUTSW\HmiRtm 我们建议同时删除运行时间系统中所有的安装文件(如果仍存在)。请检查原始安装文件夹中的无属性的文件。 如果你需要重新安装已安装过的WinCC flexible Runtime. 请查看‘怎样安装WinCC flexible Runtime’一章。 之后你需要重新安装服务包(请查看‘怎样重新安装服务包’一章)。 安装软件时HmiEs.exe 冲突 安装WinCC flexible 2004 incl. SP1时,我们过早建立一些高速缓冲存储器.这有时会引致一个叫HmiEs.exe的冲突过程. 解决方法: 忽略这个冲突,继续安装。 没有任何副作用!当你第一次申请,创建一个新项目时,会完成高速缓冲存储器的建立。 安装无法完成(重建高速缓冲存储器时出现锁机) 这种安装无法完成(Windows任务管理器显示CPU有段时间不运转)的现象有时会出现。安装WinCC flexible 2004时,已知一些不能创建一些高速缓冲存储器的状况。 解决方法: 你只需在Windows任务管理器中结束叫HmiEs.exe的程序。 没有副作用!当你第一次运行WinCC flexible 2004 ,创建新项目时,高速缓冲存储器会建立。 申请时HmiEs.exe冲突 可能WinCC Flexible 2004 的SP1未正确安装。 解决方法: 执行在“怎样重新安装服务包”一章中描述的步骤。 不能创建新项目 成功安装完WinCC flexible 2004之后,可能会出现不能创建新项目的状态(会出现一个消息告诉你原因)。 不能安装SP1 在一些情况下有必要重新安装SP1,尤其在修改安装时。执行“怎样重新安装服务包”一章中的步骤。一般来说,点击开始→SIMANTIC→信息→已安装软件,其中会告知WinCC flexible 2004的版本为V1.0。 安装硬件支持包(HSP) 目前没有不能安装HSP的案例。 唯一可以检查的是你已经安装了WinCC flexible 2004 包括 SP1。 对解决以上问题有用的安装步骤

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的n个经典问题解答

wincc的n个经典问题解答 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"); V oid 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对话框实现。具体如下: #include"apdefap.h" void onClick(char*lpszPictureName,char*lpszObjectName,

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

相关文档
最新文档