1、1 本本 章章 主主 要要 内内 容容 2.1 C2.1 C脚本的开发环境脚本的开发环境 2.2 2.2 变量变量 2.3 2.3 运算符和数学函数运算符和数学函数 2.4 2.4 指针指针 2.5 2.5 循环和条件语句循环和条件语句 2.6 2.6 函数函数 2.7 2.7 结构结构 2.8 WinCC API 2.8 WinCC API 2.9 2.9 项目环境项目环境 2.10 Windows API2.10 Windows API 2.11 2.11 标准对话框标准对话框 2.12 2.12 文件文件 22.1 C2.1 C脚本的开发环境脚本的开发环境图形编辑器的动作编辑器 用于在对
2、象处创建C动作。创建C动作的步骤如下:1)打开图形编辑器。2)选择期望的属性或事件。3)编写执行期望计算的函数主题、动作。4)翻译已完成的函数。5)对于为对象属性创建的C动作,必须定义触发器。对于为对象事件创建的C动作,由于事件本身就是触发器,所以不用再定义触发器6)通过单击动作编辑器的确定按钮,可将已编写的C动作放置在期望的属性或事件处。通过C动作动态化的属性或事件将用绿色箭头标记。3全局脚本编辑器 全局脚本编辑器用于创建项目函数、标准函数和动作。建立项目函数的步骤如下:1)打开全局脚本编辑器。2)选择项目函数条目,单击鼠标右键,从弹出式菜单中选择新建函数创建新项目函数的基本框架。3)项目函
3、数可以完全由用户进行配置,没有不能编译的代码段。编写函数标题,且函数必须有一个名称,以便C动作或其他函数调用。此外,必须指定返回值和函数所需的传递参数。44)编写函数主题。5)编译已完成的函数。6)与描述一起定义一个口令,以保护项目函数免遭未授权人员访问。7)完成的项目函数用合适的名称进行保存。建立全局动作的步骤如下:1)打开全局脚本编辑器。2)创建动作的基本框架。3)编写动作主体。4)定义口令来保护项目函数免遭未授权人员的访问。与函数相比,它还需要设置一个触发器来控制动作的执行。5)保存完成的动作。5测试输出 通过执行程序来测试输出,这样便于在开发期间进行故障检测和错误诊断。测试输出可以通过
4、printf()函数来启动,通过该函数,不但可输出简单文本,而且可输出当前变量值。Printf()函数至少一个参数,该参数是一个字符串,要传递的附加类型和数量取决于该字符串。在prinft()函数中字符“%”用于在该位置插入变量值的标识符,跟在字符“%”之后的字符确定变量的数据类型。62.2 2.2 变量变量变量 变量是由程序处理的数据对象。变量只有在定义以后才能使用。在第一条指令可以执行前,必须先定义程序中的所有变量。常量 除变量之外,程序中也使用常量。它只是数值的直接使用。数据类型 Char为一个字节,可以接受一个字符;Int为整型数值;Float为单精度型浮点数;Double 双精度型浮
5、点数。Int数据类型之前可以加关键字signed或7unsigned。关键字signed代表有符号数,关键字unsigned代表无符号数。Int数据类型之前也可以加关键字long或short.这些关键字也可以不带int而单独使用,其含义仍然相同。Short(或short int)数据类型的变量需要2个字节的存储空间,long(或longint)数据类型的变量与int数据的变量一样需要4个字节的存储空间,然而double数据类型的变量需要8个字节的存储空间。每种数据类型都可以显示某一数值范围的数值,其区别在于不同的数据类型所需的存储空间不同,以及是有符号还是无符号数据类型。8各数据类型的数值范围
6、如下:Int 21474836482147483647Unsigned int 0429967295Short 3276832767Unsigtned short 065535Long 21474836482147483647Unsigned long 04294967295Char 128127(所有的ASCII字符)Unsigned char 0225(所有的ASCII字符)float 1038z038double 1030803089WinCC变量及C的数据类型10静态变量和外部变量 1静态变量 C变量在定义后才能在函数中生效。在函数终止后,它又变成无效。如果再次调用该函数,则将会再生成
7、C变量。然而,如果在变量前加关键字static,则在两次函数调用之间保留该变量,因此,它将保留其值。然而对于C动作,只有选择了WinCC画面,静态变量才会有效。如果撤消选定画面,则静态变量变成无效。再次打开画面后,在C动作期间将会再次生成静态变量。112外部变量 C变量只能在定义它的函数内访问。然而,如果在任何函数以外定义变量,则该变量将成为全局(外部)变量。于是,在任何函数中都可以利用关键字extern来申明变量并且可以访问它。函数CreateExternalTags()只用于定义和初始化一个int类型的外部变量。122.3 C2.3 C中的运算符和数学函数中的运算符和数学函数 运算符 1)
8、数学运算符。2)按位运算符。这些运算符使得可以对变量中的各个位进行设置、查询或重新设定。3)逻辑运算符。所有的逻辑运算符都遵循相同的原则:0表示假,所有其他数都表示真。这些运算符不是生成0(假)就是生成1(真)。数学函数 在”内部函数”“c”-”bib”“math”中可选择数学函数。132.4 2.4 指针指针 指针是C语言的重要组件。指针是包含地址的变量,通常该地址是另一个变量的地址。定义指针就像定义普通变量一样,但是指针指向的数据类型名称要添加单目字符*,不得将此字符误认为是用与乘法运算的双目运算符*。在以下程序代码中,定义了int数据类型的指针变量。Int*piValue=NULL;要使
9、指针指向int数据类型的变量,必须将变量的地址分配给它。这通过单目运算符来完成。单目运算符又称为地址运算符。此运算符返回变量地址,而不是变量值。14 在以下程序代码中,将数据类型为int的变量的地址分配给指针。PiValue=&iValue;可以通过单目运算符*(也称为内容运算符)来实现对指针所指向的变量值的访问。在以下程序代码中,将指针指向的变量值分配给一个数据类型为int的变量。IValue=*piValue;152.5 2.5 循环和条件语句循环和条件语句 1循环语句(1)while 只要条件满足,就重复执行循环。Int i=0;while(i5)/do something +i;16(
10、2)do-while 该循环至少执行一次,然后只要条件满足就重复执行。int i=0;do /do something +I;while(i5);17(3)for 只要条件满足,就重复执行循环。循环计数器的初始化以及循环计数器的运算过程可以在循环内用公式表示。int i=0 for(i=0,i5,i+)/do something 182条件语句 (1)If-else 如果条件为真就处理if分支中的语句。如果条件不合适,就执行else分支中的语句。如果没有另一个要执行的语句,也可以省略else分支。If(i5)/do something else /do something else 19(2)
11、switch-case 在这种情况下,检查变量是否匹配。switch指定要检查的变量。程序检查哪一个case分支与变量的值一致,然后执行该case分支。可以定义任意case分支。每个case分支必须以break结束。可以选择插入default分支。如果要检查的变量的值与任何case分支都不一致,则执行此分支。20 switch(i)case 0:/do something break;case 1:/do something break;default;/do something default break;212.6 2.6 函数函数 对于经常重复的语句,不必一次又一次地进行编写,它们可以移
12、入一个函数。在WinCC中,函数可以创建为项目函数或标准函数。可以向函数传送数值,函数根据这些数值将执行相应的语句。常数、变量可以传送,只是将变量的数值传递给函数。函数不可以访问变量本身。指针可以传送,这使得函数可以访问指针的变量。向量和结构只能通过指针分配给函数。22 函数可以只执行语句而不返回数值。如果是这样,则返回值的数据类型为void。但如果是执行计算,则确定的数值可以通过返回值返回给函数的调用者。如果是这样,则可以返回数值或其他地址。把数值返回给调用者的另一个选择是将其写入传递的地址区域。向量或结构只能用这种方式来返回。数值参数的传递 下例中参数以数值的形式传递给函数,结果也以数值的
13、形式返回。23 项目函数MeanValue()double MeanValue(double dValue1,double dValue2,double dValue3)double dMeanValue;dMeanValue=(dValue1+dValue2+dValue3)/3;return dMeanValue;24在函数标题内,将函数的名称指定为MeanValue(),将三个double数据类型的变量传送给函数。返回的也将是一个double数据类型的变量。接下来,将定义一个double数据类型的变量,将返回的值存储在该变量中。对所传送的三个值进行累加,然后将结果除以3得该返回值。通过r
14、eturn语句,将结果返回给函数的调用者。252.7 2.7 结构结构 结构类型的定义 除默认数据类型以外,自定义的类型也可借助于结构来进行定义。在定义新的结构类型之后,即可定义struct ExampleStruct数据类型的变量。如果可利用的不是结构变量而是一个指向结构变量的指针,则结构的单个元素是可以访问的,但必须确保指针指向一个有效的结构变量或至少为其保留存储空间。262.8 WinCC API2.8 WinCC API WinCC提供了一种广义的API(应用程序编程接口)。这是一种供应用程序访问,WinCC项目本身中也可使用WinCC API的函数。WinCC的每个应用程序都提供了其
15、自己的API,并位于一个或多个DLL中。DLL(动态装载库)是一个动态装载的函数库。在关联的头文件中,将提供DLL所包含的函数声明。27 在下面的程序代码中,将显示如何将DLL集成到C动作或其他函数中。#Pragma code(PDLCSAPI.Dll)#includepdlcsapi.h#pragma code()每个应用程序的API函数可粗略地分为两种不同的函数类型。这就是所谓的CS函数(组态系统)和RT函数运行系统)。282.9 2.9 项目环境项目环境 在很多情况下,编制C动作或其他函数均需要对文件路径、本地计算机名称等进行详细说明。然后,根据当前环境,将这些值指定为绝对值。如果将项目
16、传送给另一台计算机,则可能会出现问题。这里所遭遇的环境完全不同于创建系统中的环境。因此,建议不要使用绝对路径进行说明,在创建一个项目时,尤其如此。子运行系统中应用确定这类信息。本节所包含的例子说明了如何访问与本地计算机的环境相关的信息。292.10 Windows API2.10 Windows APIWindows APIWindows API:Windows应用程序接口。除WinCC API以外,在WinCC项目中也可以使用所有的Windows API。302.11 2.11 标准对话框标准对话框 在WinCC中创建对话框的一般过程包括创建一个WinCC画面以及用画面窗口显示该画面。也可以用C动作或其他函数来创建标准对话框。在这种情况下,WinCC标准对话框以及Windows对话框均可使用。312.12 2.12 文件文件打开文件:用fopen()函数来打开文件。关闭文件:用fclose()函数来关闭文件。写文件:可使用与printf()函数相类似的函数,它就是fprintf()函数。fprintf()函数的应用与printf()函数的应用遵循同一原理。但是,它输出到该文件,而不是输出到全局脚本诊断窗口。读文件:可使用fscanf()函数。fscanf()函数在结构上与fprintf()函数完全相同。