为了方便地在运行系统中执行和测试VB脚本,WinCC提供了一系列工具:
1)GSC运行系统。
2)GSC诊断应用窗口。
3)调试器。
4)ApDiag诊断工具。
使用这些工具可以分析动作在运行系统中的行为。
1.GSC运行系统和GSC诊断
通过将GSC运行系统和GSC诊断应用程序窗口插入到过程画面中可对其加以使用。此过程画面可以是为诊断之用而开发的,可在运行系统中对其进行调用。
这些应用程序窗口用于以下各种不同的场合:
1)运行系统处于活动状态时,GSC运行系统提供关于所有(全局脚本)动作的动态行为的信息、启用各个启动以及各动作的登录和注销,并提供对全局脚本编辑器的访问点。
2)对于C脚本而言,GSC诊断按调用的顺序输出printf指令(包含在动作中),这也适用于动作中调用的函数中的printf指令。利用printf指令可以输出变量的数值,也可以跟踪动作流和调用的函数。甚至导致调用OnErrorExecute函数的错误条件,也可以利用printf指令显示在GSC诊断窗口中。
对于VBS而言,GSC诊断按调用的先后顺序执行包含在动作中的Trace指令。这也适用于在动作中调用的过程中的Trace指令。Trace指令的执行(例如针对变量值的输出)可实现对动作进度以及在动作中调用的过程的跟踪。Trace指令以“HMIRuntime.Trace(<Ausgabe>)”形式输入。
(1)GSC诊断
1)在过程画面中使用“Smart Objects”选项板,将“Application Window”插入到画面中,如图13-6所示。
2)从“Window Contents”对话框中选择“Global Script”选项,并单击“OK”按钮确认选择,如图13-7所示。
3)选择“Template”对话框中的“GSC Diagnostics”选项,如图13-8所示。
4)单击“OK”按钮确认选择以插入诊断窗口,如图13-9所示。
5)改变GSC诊断控件的静态属性。在图形编辑其中,选择“GSC Diagnostics”,单击鼠标右键,从弹出菜单中选择“Properties”选项,弹出“Object Properties”对话框,将“Properties”选项卡中“Miscellaneous”的所有静态属性由“NO”改成“Yes”,如图13-10所示。
6)激活WinCC项目,弹出GSC诊断窗口如图13-11所示,其中将显示全局脚本中Trace指令所指向的文本的输出结果。
图13-6 Objects选项板
图13-7 “Window Contents”对话框
图13-8 “Template”对话框
图13-9 “GSC Diagnostics”窗口
图13-10 Object Properties
图13-11 GSC诊断窗口
GSC诊断工具栏可使诊断窗口中的输出受控,用户还可以根据需求保存、打印和打开窗口内容。
1)删除诊断窗口内容。
2)停止正在更新的窗口。
3)激活正在更新的窗口。
4)在窗口中打开一个文本文件(停止状态下)。
5)将窗口内容保存在文本文件中(停止状态下)。
6)打印窗口内容(停止状态下)。
(2)GSC运行系统
GSC运行系统是在运行系统中显示所有全局脚本动作的动态行为的窗口。此外,还可以在运行期间,使用GSC运行系统影响每个单独动作的执行,并提供对全局脚本编辑器的访问。
如图13-12所示,系统将输出以下信息:
图13-12 GSC运行系统
1)动作名称:动作的名称。
2)ID:动作ID。它们由系统在内部使用,GSC运行系统将相应的动作名称连同动作ID一起提供。动作ID和动作名称之间链接的有效性仅持续到运行系统停止,或在运行期间动作被保存为止。
3)状态:提供有关动作当前状态的信息。
4)激活时间间隔:两次调用动作之间的时间间隔,表现形式为小时、分和秒。
5)返回值:动作的返回值。
6)开始:当前动作启动的日期和时间。
7)下一次开始:动作再次启动的日期和时间。
8)错误消息:发生错误时包含错误文本。
GSC运行系统的组态过程与GSC诊断类似,这里不再赘述。
2.调试程序
调试程序仅可用于在运行系统中测试VBS,共有三种:
1)Microsoft脚本调试器(仅适用于VBS调试)。
2)调试程序“InterDev”(包含在随Developer Studio所提供的安装材料范围内)。
3)Microsoft脚本编辑器(MSE)调试程序(包含在随Microsoft Office所提供的材料中)。
其中,Microsoft脚本调试器可从Microsoft下载中心获取,URL如下:
http://www.microsoft.com/downloads/Search.aspx?displaylang=en833a6a92-961e-4ce1-9069-528d22605127
在搜索框中输入相应测试程序名称即可。下面对Microsoft脚本调试器进行简要的说明。
(1)调试原理
Microsoft脚本调试器为VBS的调试提供了以下功能:
1)查看要调试的脚本源代码。
2)处理要检查的脚本。
3)修改变量和属性值。
4)监视脚本进程。
当错误已经出现且调试程序打开时,脚本会显示在窗口中(写保护)。可以浏览整个脚本文档、设置断点、在运行系统中再次执行脚本以及逐步处理脚本。
(2)激活脚本调试器
激活调试程序有多种方法:
1)运行系统中出现错误时自动激活调试程序。
2)通过在运行系统中打开错误框而激活调试程序。
3)从“开始(Start)”菜单中启动调试程序,然后打开正在运行的运行系统脚本。
以下是主要的两种在WinCC中激活调试程序方法的组态步骤:
1)右键单击WinCC项目管理器中的“Computer”在弹出菜单中选择“Properties”命令,将出现“Computer Properties”对话框。
2)选择“Runtime”选项卡控件,如图13-13所示。
图13-13 “Runtime”选项卡
3)激活所需的调试选项。在全局脚本和图形编辑器中的动作的调试行为可以相互独立地进行设置。
4)如果运行系统中出现错误,应直接启动调试程序,则选择“Start debugger”。
5)如果不想直接启动调试程序但希望显示具有相关错误信息的错误对话框,则选择“Display error dialog”可通过一个按钮在错误框中启动调试程序。
6)使用“OK”按钮,确认输入。
(3)脚本调试器
如图13-14所示,Microsoft脚本调试器提供了多种帮助调试VBS的组件。
图13-14 脚本调试器
1)命令窗口。可使用“View”→“Command Window”菜单命令来调用“Command Window”。
脚本在运行系统中运行时,调试程序的“Command Window”可用于编译和修改当前正在运行的脚本中的变量和属性值之类的操作。在“Command Window”中所做的更改会直接作用在运行脚本中,这样可立即对所规划的更改进行测试。
可以在“Command Window”中执行以下动作:
①输入命令:可以直接在VBS中输入和执行命令。
②更改变量值:可以直接在“Command Window”中编译和修改变量值。这涉及当前脚本中的变量以及全局变量。
③修改属性:可以读取和写入当前脚本上下文中所有对象的属性。
如果脚本已经到达断点或者从断点跳到了其他命令,则可以始终使用“Command Window”。
注意:在“Command Window”中所执行的更改对脚本的源代码没有任何影响,只是为了在调试程序中做测试之用。
2)运行文档窗口。可通过“View”→“Running Documents”菜单命令来调用“Running Documents”窗口。
此窗口显示当前运行在WinCC运行系统中的所有脚本,根据是来自全局脚本(“GlobalScript Runtime”)还是来自图形运行系统(“PDLRT”)的脚本进行分隔,将显示所有正在运行的全局脚本运行系统动作和模块。在图形运行系统中,根据触发器控制的动作(picturename_trigger)和事件控制的动作(picturename_events)来分隔脚本。
3)调用堆栈窗口。可通过“View”→“Call Stack”菜单命令来调用“Call Stack”窗口。
此窗口显示所有正在运行的动作和所调用过程的列表。例如,调用某过程时,会将其名称添加到“Call Stack”列表中,过程结束后,该名称会从列表中删除。可以从该列表中选择一个过程,以跳到脚本文档中调用该过程的相应位置。
4)脚本调试。为了找出系统上的逻辑之类的错误,可以使用Microsoft脚本调试器逐步处理脚本,在运行系统中测试每段单独脚本行的作用。
①激活要在运行系统中进行调试的文档。
②从“开始(Start)”菜单中手动启动调试程序,然后打开所需的脚本文件,或在WinCC中激活调试程序。如果在WinCC中激活,则尝试执行错误脚本时调试程序会自动打开。
③在脚本文件中设置断点。正常情况下,断点设置在有可能出现错误的那些代码行之前。
④切换到WinCC运行系统,并触发会引发脚本运行的动作。
调试程序将在第一个断点处停止并对当前行作标记。(www.xing528.com)
5)为逐步浏览脚本文档,请选择以下菜单命令之一:
“调试(Debug)”→“跳入(StepInto)”:跳到下一代码行。如果脚本在此行中调用过程,则将使用“跳入(StepInto)”命令跳到该过程。然后可以逐步处理所调用的过程。
“调试(Debug)”→“跳过(StepOver)”:跳过所调用的过程。调用了过程,但调试程序并不在该过程的各单独行处停止,而是过程执行完毕之后调试程序移动到当前脚本的下一行。
6)中断过程的逐步处理,选择“调试(Debug)”→“跳出(StepOut)”菜单命令,调试程序随即跳到下一动作。
7)逐步处理到文档末尾或选择“调试(Debug)”→“运行(Run)”菜单项再次在运行系统中启动该脚本。
3.ApDiag
WinCC脚本处理是一个真正的开放式系统,其基础编程语言C功能非常强大,可提供很高的自由度,并允许调用WindowsAPI和专用的DLL函数。但是,不正确地使用这些功能也可能导致系统崩溃,不恰当地组态也会显著降低系统性能。为了解决这些问题,可以借助ApDiag.exe诊断工具对运行系统的动作进行监视,对错误和性能问题进行分析。
注意:诊断应用程序本身也会影响计算机的性能,因为采集附加值要花费时间。为了降低计算机性能的耗损,可单独激活和禁用各个诊断功能,以免在运行期间降低运行系统的性能。因此,在最终调试阶段应确保诊断功能已禁用。
ApDiag.exe位于安装目录的“...\Siemens\WinCC\Utools”文件夹中。打开WinCC后,即可照例双击启动该应用程序,如图13-15所示。它与运行系统是否激活无关。如果没有打开任何项目,则可创建与动作控制器的链接。
当更改项目或关闭WinCC时,ApDiag将结束。
ApDiag为前端显示,以便能够不断地显示诊断信息,而与系统内的操作和浏览无关。设置窗口位置和大小,使ApDiag的干扰尽量小。保存这些设置,并在下次启动时重新建立。
下面对ApDiag菜单命令进行简单说明。
(1)诊断(Diagnostics)
菜单“诊断(Diagnostics)”提供了多种类型的诊断信息。
①使用“启动(Start)”、“更改(Change)”和“停止(Stop)”可控制诊断信息(跟踪)的记录。
②菜单命令“存档(OnFile)”可用于定义各类型诊断信息的输出源。
③使用命令“概要文件(Profile)”可测量动作的运行时间并可监视队列的增长。
④使用命令“填充变量(FillTags)”可激活或禁用将重要诊断信息保存在内部变量中的功能。
下面具体讲解各类诊断信息:
①启动、更改和停止。使用菜单命令“启动(Start)”可打开如图13-16所示对话框,可在其中选择诊断等级,单击“确定(OK)”按钮,可在指定等级上启动诊断并写入跟踪点。
图13-15 ApDiag诊断工具
图13-16 “等级(Level)”对话框
等级越高,跟踪点出现得就越频繁,重要性就越低。在等级1中,将只输出故障;而从等级3开始,也将采用printf(OnErrorExecute)输出信息;等级9和等级10主要用于测试script.exe应用程序是否有响应。
当前的诊断等级将被选中。选择另一等级并单击“确定(OK)”可更改等级,并退出对话框,“启动(Start)”操作将被禁用。此时单击菜单命令“更改(Change)”,可识别跟踪是否已启动,并在必要时更改当前的诊断等级。
使用菜单命令“停止(Stop)”结束跟踪点的写入。由于写入跟踪点会影响性能,所以正常运行期间应关闭跟踪。
勾选“在WinCC启动时自动启动(begin Start von WinCC automatisch starten)”复选框,可使每次打开项目时,以指定的等级自动启动诊断。
②存档。如图13-17所示,对话框“存档(OnFile)”可用于将诊断信息(如OnErrorExecute、printf)转换到文本文件中。所有设置均存储在注册表中,从而可在重新启动后仍然保留。
a)Nothing In File(文件中无内容)。由于转换诊断消息会影响系统性能,且“OnFile”对话框中的设置在重新启动WinCC或计算机后仍将保留,因此可使用选项“文件中无内容(Nothing In File)”禁止将诊断消息写入文件中。
图13-17 “存档(OnFile)”对话框
b)Anything In File(文件中包含内容)。使用该选项可激活诊断信息的发送过程。实际涉及的信息取决于“存档(On File)”下的设置。
●OnErrorExecute此参数可用于定义是否将OnErrorExecute(这是WinCC标准函数,在出现错误时由系统调用)输出到文件或输出窗口中。如果未显示诊断窗口,则OnErrorExecute丢失,这时将启用另一个错误分析并将结果输出到文件。
●OnPrintf此参数可用于设置由printf()产生的输出是输出到文件还是输出窗口中。
●OnDiagnose诊断启动后,相应等级的所有跟踪信息均可发送至文件。
●OnProfile此参数用于定义由OnProfile所提供的诊断信息是输出到文件还是应用程序窗口中。
●Info该参数定义通过“信息(Info)”菜单输出的信息是否应输出到文件。
③概要文件。默认情况下,存在10000个以上的排队操作时,系统会输出以下消息:“Action Overflow:morethan 10000 Actions to work”至诊断文件WinCC_Sys_01.log,但通过此条目很难确定队列增长或溢出的原因。使用菜单命令“概要文件(Profile)”所提供的诊断信息可在早期检测到队列的增长或溢出,激活对动作的时间测量,并检查队列(动作队列)的增长。
注意:如果在过短的周期内正在运行的动作过多(要处理的动作将逐渐增加)或动作被挂起(如休眠、循环、输出对话框以及等待另一个应用程序的响应),则队列会溢出。这时,所有其他动作均会被阻塞在队列中,并无法得到处理。
在某种程度上,可再次对这些队列进行处理,但如果队列中多达10000个条目,这将不再有可能。
a)Profileoff(概要文件关闭)。由于性能测量本身会带来额外的负载,而且重新启动WinCC或计算机后在本环境中进行的所有设置均将保留,因此集成了一个上级开关,可使用其进行快速浏览,以防止任何诊断测量保持开启状态。此选项为上级选项,可用于关闭测量。
b)Profileon(概要文件打开)。此选项为上级选项,可用于打开测量。为了激活测量,必须打开此开关,并显示所期望的信息。
c)General(常规)。如果激活了“调用各个动作的时间(Call on time for each action)”选项,则将对所执行的每个动作进行时间测量,并通过标准函数“On Time”输出结果。
d)Check(检查)。如果激活了“检查运行需要超过xx毫秒的动作(Check ich Action Need More Than xx msec)”复选框,则将输出运行时间大于规定时间的所有动作的运行时间。这将能够限制输出的数目,并减少测量本身产生的负载(函数On Time将不再继续循环)。
e)Check the Request/Action Queues(检查请求/动作队列)。使用此参数可识别队列中的缓慢增长,这种增长最终(在几小时或几天后)将导致出现错误消息“超过10000个动作待处理(More Than 10000 Actions to Work)”。这些参数还可以检查各个画面,以便正确进行动作编程。“扫描速率(ScanRate)”值可用于定义应在增加了多少个新作业后检查队列的长度。如果队列的增长超出在“梯度(Gradient)”中所定义的值,则将以printf的形式输出警告。例如,如果输入“扫描速率(ScanRate)”为“100”且“梯度(Gradient)”为“30”,则每放置100个新条目(动作)到队列中,即会检查队列的增长是否超过30个条目(100个新作业中得到处理的少于70个)。如果是,则诊断信息将以printf()的形式输出。
④填充变量(Fill Tags)。使用菜单命令“填充变量(Fill Tags)”可启动将重要诊断值保存在变量中的功能,“填充变量”对话框如图13-18所示。
诊断变量在WinCC项目的创建期间生成,并可按通常的方式使用,也可使用内部函数FillDiagnoseInTags()启动和关闭该功能。该函数的描述请参见WinCC帮助。
注意:写入诊断值会产生额外的基本负载。由于诊断值也必须写入变量中,因此各个启动动作的运行时间将延长。因此,该功能只应短时启动。
WinCC诊断变量:
@SCRIPT_COUNT_TAGS,此变量包含当前通过脚本请求的变量数。
@SCRIPT_COUNT_REQUEST_IN_QUEUES,此变量包含当前的作业数。
@SCRIPT_COUNT_ACTIONS_IN_QUEUES,此变量包含当前待处理的动作数。
(2)输出(Output)
1)输出到画面(Output On Screen)。使用菜单命令“输出到画面(Output On Screen)”将打开一个诊断窗口,如图13-19所示。
图13-18 “填充变量”对话框
图13-19 “输出到画面”对话框
迄今所收集的跟踪条目将输出到该窗口中。与“输出窗口(Output Window)”不同,诊断窗口只有在已打开并使用“刷新(Refresh)”按钮时才更新,仅当执行“复位”或诊断缓冲区已写满时,才删除这些内容。
2)输出到文件(Output To File)。菜单命令“输出到文件(Output To File)”可用于将迄今所收集的跟踪条目一次性存储到文本文件中,如图13-20所示。
图13-20 “输出到文件”对话框
3)复位缓冲区(Reset Buffer)。使用菜单命令“复位缓冲区(Reset Buffer)”将删除迄今所收集的跟踪条目。
该功能与诊断窗口中的“复位(Reset)”按钮相对应。
(3)信息(Info)
1)第一个动作(First Action)。菜单命令“第一个动作(First Action)”将提供正在运行的动作的相关信息,进而可用于识别队列中处于首位的动作,例如,由于循环而阻塞了其他动作处理的动作。
与OnErrorExecute类似,当前正在处理的动作将被输出到文本文件中。此外,还将输出这些动作的堆栈,以便能够识别动作是否在DLL调用中被挂起等问题。
与当前处理的动作相关的信息,将再次作为OnErrorExecute输出。
2)连接计数(Count of Connections)。菜单命令“连接计数(Count of Connections)”将列出已经与动作控制建立了连接的所有应用程序。
3)请求队列中的动作计数(Count of Actions in RequestQueue)。菜单命令“请求队列中的动作计数(Count of Actions in RequestQueue)”将输出当前队列中待处理的动作数。
其中包括来自全局脚本的作业、来自画面的周期性作业以及来自画面的事件控制性作业。
4)事务计数(Count of TransAction)。菜单命令“事务计数(Count of TransAction)”将列出每个已登录应用程序中的当前事务数。
例如,针对每个事件控制性动作、每个至少包含一个周期性动作的画面窗口以及各全局脚本均会建立一个事务。
5)各个事务的动作计数(Count of Actions of Each Transaction)。菜单命令“各个事务的动作计数(Count of Actions of Each Transaction)”将列出各事务中包含的动作数。
输出采用以下形式:
①应用程序的名称。
②事务的编号。
③动作数。
在列表的结尾将输出动作的总数。
6)各个事务中的变量计数(Count of Tags in Each Transaction)。菜单命令“各个事务中变量的计数(Count of Tags in Each Transaction)”将列出各事务中所请求的变量数。
输出采用以下形式:
①应用程序的名称。
②事务的编号。
③变量进入系统的周期时间。
④变量数。
在列表的结尾将输出事务中请求的变量总数。
7)周期中的动作计数(Count of Actions in Cycle)。菜单命令“周期中的动作计数(Count of Actions in Cycle)”将按触发器分类列出周期性动作数。
8)函数计数(Count of Fuctions)。菜单命令“函数计数(Count of Functions)”提供标准函数和项目函数的数目,并按名称列出这些函数。
(4)跟踪点(Trace Point)
使用菜单命令“改变等级(Change Level)”可以更改某些跟踪点的级别。
例如,如果仅需要某一个跟踪点,则可以将相应级别设置得较高,不再受其他跟踪点干扰。
要更改级别,可以双击所需跟踪点的“Actual Level”,在对话框中设置所需级别,单击“确定”按钮离开对话框,通过复位再次设置原始级别。
(5)输出窗口(Output Window)
用于打开或关闭输出窗口,如图13-21所示。
输出窗口对应应用程序窗口GSC诊断,具有下列优点:
1)它独立于组态,不必访问组态,特别是第三方项目。
2)画面变化后,它仍可见。
图13-21 输出窗口
3)甚至可以在激活运行系统之前打开它,因此可以在加电期间显示错误消息,而应用程序窗口GSC诊断在此期间仍隐藏错误消息。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。