西门子TIA Portal中WinCC 脚本使用技巧汇总

专享技术资料直通车,零基础轻松学PLC(1)为什么一个由内部变量的 “数值改变” 事件触发的脚本不被执行?如果使用一个内部变量调用另外一个内部变量,以此,例如被调用的变量又去执行一个脚本(比如,根据变量变化),此时一个安全机制会阻止这个功能被执行。此安全功能是为了阻止连续的执行。例如在内部变量 “HMI_Tag_01” 属性下,“更改数值”事件去置位内部变量 “HMI_Tag_02” 中的某一位。同时内部变量 “HMI_Tag_02” 的“更改数值”事件下又调用一个脚本。结果:这个脚本不会被执行。解决办法使用和控制器通讯的外部变量。请注意,通过使用外部变量可以规避上述安全机制。在项目运行时可能会产生问题。(2)如何在一个脚本中访问数组中的元素?对数组元素的访问是通过数组的名称和数组中由括号分隔的数组索引来实现的:“SmartTags('Array Name')(array index) ”例如    访问数组 'DB10_HMI_Data' 的第二个元素 :Dim Tag_01    'Internal script tagTag_01 = SmartTags('DB10_HMI_Data')(2)注意使用下面语法访问字符串类型数组中的元素:Dim Tag_01   'Internal script tagTag_01 = SmartTags('DB10_HMI_Data[2]')例如   通过一个循环描述数组 'DM10_HMI_Data' 的第一个元素至第十一个元素Dim Tag_01For Tag_01=0 to 10SmartTags('DB10_HMI_Data')(Tag_01) = 5Next局部脚本的数组(该数组仅在此脚本中可用)可以使用同样的方式查询,对于多维数组,各个维度通过一个逗号分隔开。例如   访问二维数组变量 'HMI_Data'  没有连接控制器。Dim HMI_Data(10,10)Dim Tag_01Tag_01 = HMI_Data(0, 5)注意当使用控制器连接的数组元素时,推荐在脚本开始前将他们赋值给脚本内部变量,然后再使用内部变量进行其他工作。结束脚本前,将内部变量赋值给数组元素。(3)如何在控制器和脚本之间有效的赋值过程变量数组?从控制器到一个脚本赋值,过程变量数组需要在一个循环中将数组元素一个一个赋值,参考示例。然而,也可以通过一个简单的指令把局部脚本的数组的值赋给过程变量数组。例如   把控制器的数组 'CPU_Array' 的值赋给内部数组 'local_array' 和 把内部数组 'local_array' 的值赋给控制器的数组 'CPU_Array'Dim local_array(10)Dim i...' Copy from the CPU to the script:For i = 0 To 9local_array(i) = SmartTags('CPU_Array')(i)Next...' Copy back to the CPU:SmartTags('CPU_Array') = local_array注意使用数组可能导致较高的通信负载和数据不一致。(4)如何访问动态库 ( '动态链接库 ',DLLs)?WinCC Comfort 和 Advanced  不能访问  DLLs。WinCC Professional在用户定义的C函数里可以调用DLL函数 (DLL = Dynamic Link Library) 。DLL 位于“..\Common Files\Siemens\bin”文件夹中,或位于 PATH 系统变量所定义的文件夹中。此变量由操作系统的系统属性指定。步骤按如下步骤执行,以通过 DLL 调用函数:(1)打开要调用 DLL 函数的用户自定义 C 函数。(2)在用户自定义 C 函数的开始位置添加以下代码:#pragma code('.dll')//声明在 DLL 中存储的函数:(...);(...);...(...);#pragma code结果<名称.dll> 中的函数 <函数名称 1=''> ... <函数名称 n=''> 被声明。可在用户自定义 C 函数中调用这些函数。示例:以下示例显示如何集成“kernel32.dll”文件和调用“GetLocalTime”函数:#pragma code('kernel32.dll')VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);#pragma code()SYSTEMTIME st;GetLocalTime(&st);(5)如何用VBS脚本确定鼠标当前的位置?为了读取当前鼠标的位置,需要访问操作系统的 API  (Application Programming Interface) 。VBS 不支持通过 DLLs 访问操作系统的 API 。(6)为什么不能在脚本里使用 “ MsgBox ” 命令?“MsgBox” 命令不能用于 WinCC Comfort 和 WinCC Advanced 版本是由于安全的原因。 “MsgBox”的弹出显示可能会覆盖掉元素操作,比如:阻止设备的快速操作。此外,消息框可能会阻止脚本的进一步执行。解决办法可以使用系统函数 ShowSystemAlarm。如何在一个脚本中使用十六进制符号给变量赋值?在脚本编辑器中把字符组合 '&h' 作为个十六进制常数的标识。例如Dim Tag_01Tag_01 = &h45E     ' Corresponds to the decimal value '1118'(7)如何在脚本里显示或隐藏各个层级?使用层是 WinCC (TIA Portal)  开发系统的一个功能。层只能在这里组态及显示隐藏。这个功能在操作面板或 PC 的运行系统中不可用。所以不能用脚本显示或隐藏“层”。解决办法在 “ 属性>动画>可见性 ” 组态变量,根据变量值控制相关对象的显示或隐藏。(8)如何在脚本中合并字符串?可以使用 “ & ” 来合并字符串:例如  将  'Tag_Text_01', 'Tag_Text_02' 和 'Tag_Text_03' 合并成新字符串 'Tag_01'Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03Tag_01 = Tag_Text_01 & Tag_Text_02 & Tag_Text_03注意VB函数 CStr (Expression) 将相应的表达式转换为“字符串”类型。 这样在连接字符串转换之前可以避免运行时出现错误。(9)在脚本中如何在单独的字符串之间插入一个通配符(空格)?为了在两个文本之间插入任意数量的空格,可以使用两个引号 ' '。“空格”的数量取决于两个引号间的距离'   '。连接下一个字符需要再次使用连接操作 '&'。例如  将字符串 'Tag_Text_01', 'Tag_Text_02' 和 'Tag_Text_03' 还有空格组合成一个新的字符串 'Tag_01'Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03Tag_01 = Tag_Text_01 & ' ' & Tag_Text_02 & ' ' & Tag_Text_03(10)如何组态带返回值和参数的脚本?脚本类型必须是 “ Function ” 才可以有返回值。所以,请在TIA Portal 中添加新 VB 函数的  'Properties > General > Settings'  类型的下拉列表框中选择  “Function”  。在 “ Parameter ” 表格中您以创建脚本变量用来将内部变量或控制器变量传入在脚本需要的时候。组态函数返回值,在脚本中为脚本的名称分配表达式。例如组态函数类型,。按下面所示,在TIA Portal  组态名称为 “ VBFunction_1 ” 脚本函数的参数和返回值:

图. 01例如,脚本在按钮的 “ Click ” 的事件中被使用。

图. 02在脚本中使用 'HMI_Tag_1' 的值赋给'Parameter_1' ,'HMI_Tag_2' 的值赋给'Parameter_2' ,必须有一行脚本定义了返回值。下面的例子的返回值是两个传入参数的乘积:VB_Function_1= Parameter_1 * Parameter_2'VB_Function_1' 是这个函数的名字,在执行这个脚本后,'HMI_Tag_3'  获得这个函数的返回值是 'HMI_Tag_1' * 'HMI_Tag_2' 。注意定义一个 'by reference' 的参数 ,这意味着作为 'By_Ref ' 参数,仅对脚本中定义的和引用的变量产生影响,对 HMI 内部变量或者控制器变量不起作用。(11)如何在运行时改变对象的属性(颜色,长度等)?以下手册中提供了对象的属性和使用的信息:SIMATIC WinCC WinCC Engineering V15 - 编程参考下 'VB脚本编写 > VBS 对象模型 > 属性'。(没有该手册的可以联系主编)(12)什么能导致“最大嵌套深度到达”消息被触发?如果太多的脚本在结束前调用自己或者调用其他脚本,会引起到达最大嵌套深度消息。解决方法检查脚本过程的处理,如有必要,减少脚本的嵌套。(13)如何确定当前画面的编号和画面名称?通过预定义 VB 函数 “HmiRuntime.BaseScreenName ” 的返回值提供了当前画面的名字。注意不能使用脚本通过相关画面的“属性”直接读取画面名称/编号。也可以使用“画面编号”区域指针。(14)如何在脚本中使用多路复用变量?多路复用变量不能用在脚本中。(15)如何在脚本里使用 HMI UDT 变量?可以使用“SmartTags” 访问数据类型是HMI UDT的变量元素(用户定义的数据类型)。例如  访问 UDT 变量 ' Recipe ' 的元素 'x'SmartTags('Recipe.x')注意这适用于在项目中已创建库类型 HMI UDT的实例。不能直接访问库类型。(16)如何在脚本中保存变量值当他们在两个脚本之间调用?在两个脚本间相互传递数据需要使用全局变量。全局变量可以是 HMI 或者 PLC 变量。脚本中定义的变量总是在脚本结束时删除。(17)如何通过脚本修改文本域的内容?文本域的文本在运行时可以通过修改相应的对象属性而改变。例如  在画面 'MachineData' 中,将文本  'NewText'  分配给 文本域 'Text_Field_01'  :Dim objSet obj = HmiRuntime.Screens('MachineData').ScreenItems('Text_Field_01')obj.Text = 'NewText'注意文本的变化只是“暂时”的。当屏幕更改后这个被修改后的文本将被组态的文本覆盖。(18)如何在脚本中从密码列表或用户视图中读取用户密码?由于安全原因这个功能在 WinCC (TIA Portal) 中不能实现。(19)如何通过脚本关闭 WinCC 运行系统和关闭PC和面板?通过系统函数 “StopRuntime” 可以关闭 WinCC 运行系统和操作系统 。可以通过修改 'StopRuntime' 函数的参数方式选择仅关闭运行系统或者将运行系统和操作系统都关闭。ParameterMeaning0 = hmiStopRuntimeEnds on the Runtime1 = hmiStopRuntimeAndOperationSystemEnds both the Runtime and the OS例如StopRuntime hmiStopRuntimeStopRuntime 1注意 Windows-based 面板的操作系统不能通过这种方式关闭。(20)如何在脚本中访问一个画面或者模板的对象?组态 “Runtime” 对象的属性 “ ActiveScreen ”,可以找到画面上组态对象的名字和修改相关的属性。例如   把激活屏幕中的对象  'Circle_01' 设置为不显示HmiRuntime.ActiveScreen.ScreenItems('Circle_01').Visible=False注意在画面中被组态对象必须有唯一的名字。对象的属性修改仅是暂时的,当屏幕更改后视图使用组态时的配置。如何在运行时选择一个画面对象(例如输入输出域)?获得一个对象的焦点通过 'Activate' 功能,文本输入会直接自动指向那个对象。例如   获得屏幕 'Screen_1' 的 输入/输出域 'IOField_1'  的焦点HMIRuntime.Screens('Screen_1').ScreenItems('IOField_1').ActivateEnd

(0)

相关推荐

  • 自动语音播报WinCC报警消息

    作者:胡世川 - 西门子数字化工业集团自动化部客户经常问到:出现严重故障时,能不能自动语音播报消息文本?因为做不到时时刻刻盯着监控画面.So easy!有视频有真相 实验环境:WinCC 7.5 SP ...

  • (2条消息) mcgs通过串口与单片机通信

    应用背景 自动化工程师在设备开发中,可能会碰到一些行业专用仪器仪表,并不支持常用规范接口,没有现成的通讯驱动,这时就需要使用PLC或者其他网关的自由口通讯功能,今天也给大家介绍下McgsPro软件下, ...

  • 西门子博途WINCC如何做面板

    启程自动化成立于2012年,培训项目主打西门子PLC编程系统集成.工业机器人编程.EPLAN电气设计.视觉等培训与技术服务的机构.官网:www.qichengplc.com 领取8套PLC视频教程点击 ...

  • 西门子TIA Portal V17.0 安装教程

    操作系统 从V16开始,TIA Portal便不再支持Windows7系统,所以建议使用Windows 10 LTSC系统来安装TIA Portal V17. 准备工作 TIA Portal V17需 ...

  • 不懂西门子TIA Portal Openness——看这篇就够了

    "智能制造之家" 写在面前 一直看小编公众号文章的朋友一定会发现,小编总是在有意无意的提醒大家注意基础,注意补充网络知识,学好一门高级语言,今天要讲的TIA Portal Open ...

  • SCL||在STEP 7 (TIA Portal)中, 如何在LAD/FBD/STL 和SCL语言中...

    在调试过程中,经常需要对指令或完整的程序段进行改为注释使指令失效的做法,以便测试程序或定位程序错误. 在 LAD 和 FBD 语言中,为了使一个指令或者一整段程序失效,你需要设置一个位并联到指令或串联 ...

  • 超炫酷的西门子TIA Portal的大神级操作~

    文章来源:综合网络,侵权联删.

  • 西门子TIA博途PLC技巧:如何在HMI上显示PLC代码流程

    关于启程 启程自动化培训成立于2012年,培训项目主打西门子PLC编程系统集成.工业机器人编程.EPLAN电气设计.视觉等培训与技术服务的机构.推荐高薪就业,越努力越幸运 无论是做PLC项目开发,还是 ...

  • 职场中的说话情商技巧你掌握了吗?

    现在我们大家都说一个人的情商比智商要重要很多,有情商的人才能顺利地在这个社会行走.小编其实是赞同这句话的,情商真的很重要,特别是说话的情商在职场上尤为重要.所以今天小编今天就给大家分享一些在职场中提高 ...

  • 书法中加个“小技巧”,就会与众不同!

    当代书法与古人的有所不同,古人写字更多地是为了实用,要不古人也不会说书法是"余事". 而当代书法已经远远失去了写字的实用功能,大都被电脑所代替.当代人把用毛笔写的字再进行一些&qu ...

  • 分时图中的高抛点技巧 简单实效

    市场上有老股民都会经常的讲到高抛低吸,在眼下股市震荡比较大,做高抛低吸,可以降低成本,增加利润,是比较好的办法.但是到底是要怎样高抛低 吸呢?你知道哪里是高吗?你知道哪里是低吗? 这个问题现在还没人给 ...

  • 天干地支在八字中的实际运用技巧

    天干地支在八字中的实际运用技巧