要使对象动态化,在WinCC中有多种不同的选项可用。其中包括变量连接.动态对话框和直接连接。通过它们可以实现复杂的动态。然而,随着要求的增加它们会有限制。对于用户来说,组态C动作、项目函数或动作可以有更广的范围。它们在WinCC 脚本语言C中创建。对于许多应用来说,不必具备非常全面的C语言知识。它足以为现有函数提供参数。然而,为了使用WinCC脚本语言C的全部功能,需要具备有关这种编辑语言的基本知识。本课程可以为用户提供这些知识。
本课程用来为不熟悉C语言的人员提供有关编辑语言C的常规应用的基本知识。具备C语言编辑经验的编程员可以学习C语言应用于WinCC时的特性。
2.1 C脚本的开发环境
对于C脚本的创建,WinCC提供两个不同的编辑器。一个是图形编辑器中的动作编辑器,用于在对象处创建C动作;另一个是全局脚本编辑器,用于创建项目函数和全局动作。脚本语言的语法与采用ANSI的标准C语言相一致。
在WinCC中编辑语言C的另一个应用领域是关于动态向导的创建。为此,可以使用一个单独的编辑器。
2.1.1 图形编辑器的动作编辑器
在图形编辑器中,可以通过C动作使对象属性动作化。同样,也可以使用C动作来响应对象事件。
1.动作编辑器
对于C动作的组态,可以使用动作编辑器。此编辑器可以在对象属性对话框中通过以下方法打开,即点击鼠标右键期望的属性或事件,然后从显示的弹出式菜单中选择C动作。已经存在的C动作在属性或事件处用绿色箭头标记。
在动作编辑器中,可以编写C动作。对于属性的C动作,必须定义触发器。对于事件的C动作,由于事件本身就是触发器所以不必再定义。完成的C动作必须进行编译,如果编译程序没有检测到错误,则可以通过单击确定退出动作编辑器
2.C动作的结构
通常,一个C动作相当与C中的一个函数。C动作由两种不同类型:为属性创建动作和为事件创建的动作。通常,属性的C动作用于根据不同的环境条件控制此属性的值(例如变量的值)。对于这种类型的C动作,必须定义触发器来控制其执行。事件的C动作来响应此事件。
3.属性的C动作
#include apdefap h
long-main(char* lpszPictureName.char* lpszObjectName.char*lpszPropertyName)
{
/*1*/ long 1ReturnValue;
/*2*/ 1ReturnValue * GetTagSDword(*S32icourse-test-1*);
/*3*/ return 1ReturnValue;
}
上述实例代码代表一个典型的属性的C动作。各部分的含义描述如下:
标题(灰色):灰色阴影显示的前三行构成C的动作标题。该标题自动生成并且不能更改。除返回类型(在实例代码中为long)之外,所有的函数标题完全相同。将三个参数传送给C动作。它们是画面名称(Lpsz PictureName),对象名(lpszObjectName)和属性名(lpszPropertyName).
变量声明(1):在可以编辑的第一段代码中声明使用的变量。在本实例代码中,指的是一个long型的变量。
数值计算(2):在本段中,执行属性值的计算。在实例代码中,只读入一个WinCC 变量的数值。
数值返回(3):将计算得出的属性值赋给属性。这通过return命令来完成
4.事件的C动作
#include apdefap.h*
void OnClicik(char* lpszPictureName.char* lpszObjectName.char* lpszPropertyName)
{
/*1*/ long 1Value;
/*2*/ 1Value * GetTagSDWord(*s32i-course-tset-1”);
SetIeft (lpszPictureName,lpszobjectName,1value);
}
上述实例代码代表一个典型的事件的C动作。各部分含义描述如下:
标题(灰色):灰色阴影显示的前三行构成C动作的标题。该标题自动生成并且不能更改。对于不同类型的事件,其参数标题也不同。将参数lpszPictureName(画面名称).lpszObjectName(对象名)和lpszPropertyName(属性名)传递给C动作。参数lpszPropertyName只包含与响应属性变化的事件相关的信息。可以传递附加的事件指定的参数。
变量声明(1):在可以编辑的第一代码段中声明使用的变量。在本实例代码中,指的是一个long型的变量。
事件处理(2):在本段中,执行响应事件的动作。在本实例代码中,读入一个WinCC变量的数值。该数值作为位置X分配给自己的对象。事件的C动作的返回值为void类型,也就是说不需要返回值
5.C动作的创建
创建C动作的步骤如下:
(1).打开图形编辑器,打开期望的WinCC画面,打开所期望对象的对象属性对话框
(2)通过鼠标R期望的属性或事件,然后从弹出式菜单中选择C动作来打开动作编辑器
(3)将显示动作编辑器,其中将显示函数的基本框架。此外,C动作的标题已经自动生成,该标题不能更改。
在C动作的标题的第一行内,包括文件apdefap.h.。通过该文件,向C动作预告所有项目的函数.标准函数以及内部函数。C动作标题的第二部分为函数标题。该函数标题提供有关C动作的返回值和可以在C动作中使用的传送参数的信息。C动作标题的第三部分开始是花括弧。此花括弧不能删除。在该开始大括弧和结束大括弧之间,编写C动作的实际代码。
(4)其他自动生成的代码部分包括两个注释块,若要使交叉索引编辑器可以访问C动作的内部信息,则需要这些块,要允许C动作中语句重新排列也需要这两个块。如果这些选项都不用。则可以删除这些注解。
第一个块用于定义C动作中使用的WinCC变量。在程序代码中必须使用定义变量名称而不是实际的变量名称
第二个注释块用于定义C中所使用的WinCC画面。在程序代码中也必须使用定义的画面名称而不是实际画面名称。
(5)编写执行期望计算的函数主题、动作等。有多种编辑辅助工具可供使用,其中一种辅助工具是变量选择对话框,此对话框如下所示的按钮可以打开。在显示的选择变量对话框中,选择WinCC变量然后单击确定来确认。于是在C动作中在当前光标位置处插入所选WinCC的变量名称。
(6)另一种辅助工具是动作编辑器左窗口中的函数选择。利用函数选择,可以在C动作中的当前光标位置处自动插入所有可用的项目函数、标准函数和内部函数。为此,通过鼠标D来选择其数据类型的列表。该函数可以在数值列中进行参数化。除简单的文本输入以外,选择变量.图形对象和画面选项都可以用。
为了在C动作中的当前光标位置插入函数,可通过单击确认来确定对话框。
(7)现在必须翻译已完成的函数。在通过如下所示的工具按钮来完成。翻译过程的结果显示在动作编辑器的左下角。它包括找到错误的个数和警告的个数。错误总会使C动作无法进行。而警告是一种提示,指出在执行C动作期间可能出现的错误。良好的编辑风格可防止在创建C动作时出现除0 Ereor(S),0 Warning(s)的输出结果之外的情况。
如果在编译过程中出现错误,则它们将在输出窗口中显示。通过鼠标D输出窗口中的错误消息,可以直接跳转到相应的代码行。
(8)对于已经为对象属性创建的C动作,必须定义触发器。对于事件本身就是触发器所以不用在定义。触发器的定义通过如下所示的按钮来执行。可以选择使用时间变量触发器。
(9)通过单击动作编辑器的确定按钮,可将已编写的C动作放置在期望的属性或事件处。通过C动作动态化的属性或事件将用绿箭头标记。
WinCC标签定义和画面定义
#include“apdefap.h”
long-main(char*lpszPictureName.char* lpsz ObjectName. Char* lpszPropertyName)
{
/WINCC.TAGNAME-SECTTON-START
//syntax.#define TagNameInAction “DMTagName”
#define S32I-COURSE-0TEST-1 “S32i-course-test-1”
//next TagID :1
//WINCC TAGNAME-SECTION-END
//WINCC:PICNAME-SECCTON-START
//syntax: #define PicNameInAction “PictureName”
#define CC-0-STARTPICTURE-00 “cc-0-startpicture-00.Pd1”
//next PicID:1
//WINCC:PICNAME-SECTTON-END
SetTagSDWord(S32I-COURSE-TEST-1,100);
OpenPicture(CC-0-STARTPICTURE-00);
Return 0;
}
如果创建新的C的动作,则自动生成的代码将包括两个注释块。若要使用交叉索引编辑器可以仿问C动作的内部信息,则需要这些注释块。要允许C动作中语句重新排列也需要这两个块。
变量定义:第一个注释块用于定义C动作中使用的WinCC变量。该注释块以/MINCC:TAGAME-SECTION-START作为开始,以/MINCC:TAGNAME-SECTION-END作为结束。在两行命令之间,定义C动作中的所有WinCC的变量名称。通过预处理程序命令#define后跟定义的名称(在本实例代码中为S32I-COURSE-TEST-1), 其后在接WinCC变量的名称(在本实例中为(S32i-course-tsse-1)来定义。
画面定义:第二个注释块用来定义C动作中所使用的WinCC画面。该注释块以行/MINCC:PICNAME-SECTION-START作为开始,以行/MINCC:PICNAME-SECTION-END作为结束。在两行之间,定义C动作中使用的所有WinCC画面名称。它遵循的规律与上面所描述的定义变量名称时所遵循的规则相同。
应用:在实际程序代码中,必须使用定义的值,而不是实际的变量和画面名称。在编译C动作之前,预处理程序将用实际名称替换所有定义的名称 |