《wincc上可以很方便的编写vb脚本和c脚本.doc》由会员分享,可在线阅读,更多相关《wincc上可以很方便的编写vb脚本和c脚本.doc(8页珍藏版)》请在金锄头文库上搜索。
1、WinCC上可以很方便的编写VB脚本和C脚本,但是调试起来还是比较费劲的。下面介绍一下个人的应用体会。1,VB,最好安装VB6,先在VB6里面编写程序,然后再放到WinCC的脚本中,事半功倍,毕竟VB的调试非常方便。a,插入引用注意选择OLE Automation 和WinCC *;b,可以直接在VB里面调用WinCC的全部变量,内部,外部全可以:如下:c,在VB里面监视WinCC的变量:d,调试完毕,程序拷贝到WinCC 的脚本中。2,C语言系统提供了一个应用程序窗口,如下,只要把他拖到画面窗口即可:2,使用Printf函数,把需要调试的内容打印出来;3,效果如下:希望对大家有点用处。下面内
2、容来自网络,感谢原文作者。http:/ 操作wincc画面脚本总结一: 不使用变量单纯的操作界面1.操作某个画面中控件的属性 如 Home1.Pdl(总窗体) 下的 画面窗口2(画面窗口)Sub OnClick(ByVal Item)Dim objCircleDim screennameDim pwnameSet objCircle= ScreenItems(圆1 )objCircle.Radius = 60Set screenname=HMIRuntime.Screens(Home1) /获取要操作的窗体Set pwname=screenname.ScreenItems(画面窗口2) /获取
3、要操作的控件,这里填入你要操作的控件名MsgBox(objCircle.Radius) /输出圆的半径MsgBox (pwname.Picturename) /输出当前画面窗口2的名字End Sub注意 当调用某窗体下的某控件的某个属性时,需要声明两个对象,一个接纳这个控件,一个接纳值 例如Dim objectDim valueSet object =HMIRuntime.Screens(Home1).ScreenItems(画面窗口2)Set value=object.picturename2.更改画面窗口的对象Sub OnClick(Byval Item)Dim opObjectSet o
4、pObject=HMIRuntime.Screens (Home1).ScreenItems(画面窗口2)opObject.PictureName=Page1.PdlEnd Sub3.设置文本Set titleTxt=HMIRuntime.Screens (Home1).ScreenItems(静态文本2)titleTxt.Text =titleTxt.Text+EF /获取文本的值并追加字符4.vb 字符串函数 VB的字符串截取函数有Left(字符串,n),返回字符串前N个字符;Mid(字符串,p,n),从第p个字符开始,向后截取N个字符;right(字符串,n),返回字符串的最后n个字符。
5、http:/ VB6.0中的步骤:1、新建一个“标准 EXE”工程2、设置窗体Form1的LinkMode属性为1 - Source, 一定要设定为13、在Form1上添加一个文本框控件Text1,将其Text属性设为text14、保存工程:工程名为VBDDE.vbp5、生成VBDDE.exeWinCC的步骤:1、新建一单用户项目2、在变量管理器中添加Windows DDE驱动3、在DDE下新建连接NewConnection,在其属性对话框中:Computer Name:不设置Application:VBDDETopic:Form1(VB中窗体名)其它不作改动4、在此连接下新建一有符号16位整
6、型变量Tag1,在其地址选择框中:条目名称:Text1 窗体控件名称数据类型(Data Type):SWORD(要与变量类型一致)5、新建一个画面:DDE_Test.Pdl6、在画面中添加一个IO域:与Tag1动态连接,更新周期为:根据变化,输出格式为s99997、保存画面联机调试:1、先运行VBDDE.EXE(或者在VB设计器中运行工程)2、后激活WinCC项目3、此时IO域值与Text1值总是保持一致(无论你在哪一方改动)用WinCC读取VB的数据的方法二 (OLE)VB文本框的代码:private sub text1_change() Dim wincc As Object 定义winc
7、c为对象 Dim Var As Integer 定义wincc变量 Set wincc = CreateObject(WinCC-Runtime-Project) 创建wincc运行对象 Call wincc.SetValue(Var, text1.text) 将VB变量值写入WINCC变量 ,变量名称要与WINCC变量名称完全一致,要区分大小写end sub在WINCC中建立内部变量var,类型要与VB一致,在画面中加入IO显示即可。http:/ WinCC 基本组态无法实现的功能。从版本V6起,WinCC同时提供了C 和VB 两套脚本系统,使脚本功能更加丰富、易用。首先C脚本功能实在是太强
8、大了,除了系统提供的标准函数和系统函数外,还可以直接调用API函数,再加上可以直接使用ODK函数,就连VBS中的Method调用也可以通过特别的办法实现,可谓是无所不能。当然缺点也是有的,不支持自动列出函数或者方法,编写程序多有不便。自版本V6起又增加了VB脚本,它使用起来较为简单,而且入门很快。VBS自身的功能并不强,除了一些基本的函数和WinCC自身的对象(比如HMIRuntime.Tags),剩下的功能全部都得通过COM组件进行扩展,比如我们很熟悉的Excel、fso、ws cript.shell等等,通过这些组件使得WinCC访问Windows的接口得以增加,但是访问WinCC底层东西
9、却没有(比如用户登陆、报表打印等) ,这是VBS美中不足的地方,希望下一版本能够改进,_。VBS的另外一个弱点就是无法直接调用API函数,只能通过其他的方法解决。网上常见的方法应该是通过dynwrap.dll先注册再调用,比如:Dim UserWrapSet UserWrap = CreateObject(DynamicWrapper) Call MessageBoxA(), first register the API functionUserWrap.Register USER32.DLL, MessageBoxA, I=HsSu, _f=s, R=l now call the funct
10、ionUserWrap.MessageBoxA Null, MessageBox (ANSI), _From DynaWrap Object, 3dynwrap的下载地址我已经找不到了,大家可以上网搜索。另外安装DriveMonitor后就会有这个文件,详细用法在DriveMonitor帮助信息中也可以找到。另外我试过利用Excel代为声明,VBS调用Excel的宏来实现,这是一篇我写的关于VBS结合EXCEL调用API函数的心得总结,内容太长我就不贴了,直接见附件,附件DOC附有本文档用到的Excel文件、VBS文件以及C函数。全局脚本里面对的值进行读取和更新,有对数据库的操作,但有的时候发
11、现设备不动作,点击按钮进入状态界面(用于显示PLC的状态),观察PLC的值。此时设备就会继续动作,按钮中未写任何脚本,只是用直接连接来给一个内部变量赋值以用于切换画面?怀疑是全局脚本中对数据库的操作阻塞了脚本的运行,不知道是不是原因啊?为什么点击按钮后又能解除呢?恳请高人帮忙啊?/quote不知道您使用的是全局脚本项目函数,还是全局动作呢?如果在画面中调用的是全局项目函数,应该属于画面的脚本线程,切换画面的时候,重新启动新的画面周期,执行该画面中的脚本,前一画面中未执行的脚本队列被释放。如果您怀疑是数据库的操作阻塞了进程,您可以在脚本中屏蔽掉操作数据库的代码,观察是否还出现阻塞的现象;也可以在
12、您的全局脚本中加入printf函数,输出到GSC诊断窗口中,判断是否发生阻塞。一般来说,如果您在一个项目中组态的动作(包括全局动作或画面中周期调用的动作)不能被正确或及时地处理,例如,动作的触发周期为2秒钟,但是执行该脚本所需要的时间为5秒钟,这样大量动作累积起来,不能处理的动作被输入队列。如果在脚本队列中的任务数目达到了5000,那么路径“:SiemensWinCCDiagnose”下的WinCC“ WinCC_Sys_xx.log”的诊断文件可能会显示错误消息“s cript: More than 5000 actions in work”。详细信息请参见如下链接:http:/ printf 指令,可以将变量的数值和错误信息等输出到诊断窗口。3.ApDiag工具:WinCC 自带的诊断工具 “ApDiag.exe” 对故障和性能问题进行了详细的分析,关于如何使用诊断工具“APDiag”来调试C脚本,请参见如下链接:http:/