wincc的c语言基础.docx

上传人:b****5 文档编号:29046209 上传时间:2023-07-20 格式:DOCX 页数:93 大小:45.56KB
下载 相关 举报
wincc的c语言基础.docx_第1页
第1页 / 共93页
wincc的c语言基础.docx_第2页
第2页 / 共93页
wincc的c语言基础.docx_第3页
第3页 / 共93页
wincc的c语言基础.docx_第4页
第4页 / 共93页
wincc的c语言基础.docx_第5页
第5页 / 共93页
点击查看更多>>
下载资源
资源描述

wincc的c语言基础.docx

《wincc的c语言基础.docx》由会员分享,可在线阅读,更多相关《wincc的c语言基础.docx(93页珍藏版)》请在冰豆网上搜索。

wincc的c语言基础.docx

wincc的c语言基础

第二章            WinCCC语言基础

 

要使对象动态化,在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  apdefaph

long-main(char*  lpszPictureName.char*lpszObjectName.char*lpszPropertyName)

{

/*1*/long1ReturnValue;

/*2*/1ReturnValue*GetTagSDword(*S32icourse-test-1*);

/*3*/return1ReturnValue;

}

上述实例代码代表一个典型的属性的C动作。

各部分的含义描述如下:

标题(灰色):

灰色阴影显示的前三行构成C的动作标题。

该标题自动生成并且不能更改。

除返回类型(在实例代码中为long)之外,所有的函数标题完全相同。

将三个参数传送给C动作。

它们是画面名称(LpszPictureName),对象名(lpszObjectName)和属性名(lpszPropertyName).

变量声明

(1):

在可以编辑的第一段代码中声明使用的变量。

在本实例代码中,指的是一个long型的变量。

数值计算

(2):

在本段中,执行属性值的计算。

在实例代码中,只读入一个WinCC变量的数值。

数值返回(3):

将计算得出的属性值赋给属性。

这通过return命令来完成

4.事件的C动作

#includeapdefap.h*

voidOnClicik(char*lpszPictureName.char*lpszObjectName.char*lpszPropertyName)

{

/*1*/  long1Value;

/*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动作时出现除0Ereor(S),0Warning(s)的输出结果之外的情况。

如果在编译过程中出现错误,则它们将在输出窗口中显示。

通过鼠标D输出窗口中的错误消息,可以直接跳转到相应的代码行。

(8)对于已经为对象属性创建的C动作,必须定义触发器。

对于事件本身就是触发器所以不用在定义。

触发器的定义通过如下所示的按钮来执行。

可以选择使用时间变量触发器。

(9)通过单击动作编辑器的确定按钮,可将已编写的C动作放置在期望的属性或事件处。

通过C动作动态化的属性或事件将用绿箭头标记。

WinCC标签定义和画面定义

#include“apdefap.h”

long-main(char*lpszPictureName.char*lpszObjectName.Char*lpszPropertyName)

{

/WINCC.TAGNAME-SECTTON-START

//syntax.#defineTagNameInAction“DMTagName”

#defineS32I-COURSE-0TEST-1“S32i-course-test-1”

//nextTagID:

1

//WINCCTAGNAME-SECTION-END

//WINCC:

PICNAME-SECCTON-START

//syntax:

#definePicNameInAction“PictureName”

#defineCC-0-STARTPICTURE-00“cc-0-startpicture-00.Pd1”

//nextPicID:

1

//WINCC:

PICNAME-SECTTON-END

SetTagSDWord(S32I-COURSE-TEST-1,100);

OpenPicture(CC-0-STARTPICTURE-00);

Return0;

}

如果创建新的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动作之前,预处理程序将用实际名称替换所有定义的名称

2.1.2全局脚本编辑器

 

全局脚本编辑器用于创建项目函数、标准函数和动作。

 

1.项目函数

 

如果在C动作中经常需要相同的功能,则该功能可以在项目函数中公式化。

在WinCC项目的所有C动作都可以按照调用所有其他函数一样的方式来调用项目函数。

下面列出了使用项目函数对于在C动作中创建完整的程序代码的优点:

 

编辑器的中心位置:

项目函数的改变会影响所有正在使用该函数的C动作。

如果没有使用项目函数,则必须手动修改所有相关的C动作。

这不但可以简化组态,而且可以简化维护和故障检测工作。

 

可重用性:

一旦一个项目函数编写完并进行了广泛的测试,则它随时都可以再次使用,无须附加的组态或新的测试。

 

画面容量减少:

如果并不是在对象的C动作中直接放置完整的程序代码,则画面的容量将减少。

这可以使画面打开的速度更快并且在运行系统中的效果更佳。

 

口令保护:

项目函数可以通过指定口令进行保护,以防更改。

这样可以保护组态数据以及用户的技术窍门。

项目函数只能在项目内使用。

它们存储在WinCCProjectFolder\LIBRARY文件夹内并在相同的文件夹中的ap-pbib.h文件内定义。

许多函数只能在项目内使用。

与项目函数相反,标准函数可以用于所有的WinCC项目。

可以更改现有的标准函数。

也可以创建新的标准函数。

 

标准函数与项目函数的区别仅在于它们的可用性:

标准函数可以跨项目使用,然而项目函数只能在项目内使用。

标准函数存储在WinCCInstallationFolder\LIBRARY文件夹内,并在同一文件夹中的ap-glob.h文件内定义。

 

2.内部函数

 

除项目函数和标准函数之外,还有内部函数。

其中,它们是标准的C函数。

用户不能对其进行更改,也不能创建新的内部函数。

 

动作:

动作(与先前描述的函数相反)不能由C动作或其他函数调用。

必须为动作指定触发器来控制其执行。

它在运行系统中执行时与当前所选择的画面无关。

可以组态全局动作,既跨项目动作。

在这种情况下它们存储字WinCCProjectFolder\PAS文件夹中。

也可以组态全局动作(指定计算机的动作),它们将存储在WinCCProjiectFolder\ComputerName\PAS文件夹中。

如果在计算机的启动列表中选中了全局脚本运行系统,则一旦项目启动,属于该计算机的所有全局动作和所有局部动作将被激活。

 

3.建立项目函数

 

创建项目函数所须的步骤与创建标准函数的步骤完全相同,因此下面的说明也适用于标准函数的创建

 

建立项目函数步骤:

 

(1)打开全局脚本编辑器。

 

(2)通过鼠标的右键项目函数条目,然后从弹出式菜单中选择新建→函数,将创建新项目函数的基本框架。

 

(3)项目函数可以完全由用户进行配置,没有不能编译的代码段。

编写函数标题,函数必须有一个名称,以便C动作或其他函数调用时所有。

此外,必须指定返回值和函数所须的传递参数。

 

如果当前的函数中要使用其他项目函数或标准函数,则必须结合apdefap.h文件,这通过预处理程序命令#include“apdefap.h”来完成,该命令必须插在函数标题之前。

 

#include  “apdefap.h”

 

intMy-Project-Function(int  iFirstParam,BOOL  bSecondParem)

 

{

 

return0;

 

}

 

(4)编写函数主题。

可以使用与编写C动作相同的辅助工具,特别是变量选择和函数选择。

 

(5)已完成的函数现在必须进行编译。

这通过如下所示的工具栏按钮来完成。

 

编译过程的结果显示在输出窗口中,将列出产生的错误和警告,并且显示其数量。

通过鼠标D输出窗口中的错误消息,可以直接跳转到相应的代码行。

 

Compiling    

 

Line3:

error  (0086):

function‘My-Project-Function’doesnotreturnavalError(s),o  Warning(s)

 

(6)通过如下所示的工具栏按钮,可以将描述添加大批项目函数中。

可以与描述一起定义一个口令,以保护项目函数免遭未**人员访问。

 

(7)完成的项目函数必须用合适的名称进行保存。

 

4.建立全局动作

 

创建全局动作所须的步骤与创建局部动作所须的步骤完全相同。

因此,下面的步骤也适用于创建局部动作。

 

建立全局动作步骤:

 

(1)打开全局脚本编辑器

 

(2)通过鼠标的右键项目函数条目,然后从弹出式菜单中选择新建动作,将创建动作的基本框架。

 

(3)动作的标题将会自动生成并且不能更该。

此外,插入用于定义WinCC变量和WinCC画面的两个注释块。

这两个注释块的含义已经在先前的C动作一节中进行说明。

 

#include“apdefap.h”

 

intgscAction(void)

 

{

 

//WINCC:

TAGNAME-SETION-START

 

//syntax.#defineTagNameInAction“DMTagName”

 

//nextTagID:

1

 

//WINCC:

TAGNAME-SECTION-END

 

//WINCC:

PICNAME-SECTION-START

 

//oyntax:

#definePicNameInAction”PictureName”

 

//nextPicID:

1

 

//WINCC:

PICNAME-SECTION-END

 

returno;

 

}

 

(4)编写动作主体。

可以使用与编写C动作相同的辅助工具。

特别是变量选择和函数选择。

动作具有int类型的返回值。

缺省的情况下,返回值为0。

 

(5)通过如下所示的工具按钮,可以如同函数描述一样将描述添加到动作中。

也可以定义口令来保护项目函数免遭未**人员的访问。

与函数相比,它还需要设置一个触发器来控制动作的执行。

对于动作触发器的选择,用户所具有的选择的范围要比对象的C动作触发器的选择范围大。

其中,可以编写一次执行过程

 

(6)完成的动作必须进行保存。

 

5.测试输出

 

执行程序来测试输出。

这样便于在开发期间进行故障检测和错误诊断。

测试输出可以通过printf()函数来启动。

通过该函数,不但可输出简单文本。

而且可输出当前变量值。

为了使输出文本可见,必须组态全局脚本诊断窗口。

 

Printf()函数:

Printf()函数允许执行测试输出功能。

该函数的实例应用如下所示:

 

Printf(“Iam%dyearsold\r\n,iAge);

 

Printf()函数至少一个参数。

该参数是一个字符串。

要传递的附加类型和数量取决于该字符串。

字符%由prinft()函数用作在该位置插入变量值的标识符。

跟在字符%之后的字符确定给变量的数据类型。

上表中所使用的字符组合%d表明输出为十进制数,其他可能的组合及其描述如下:

 

%d  输出十进制数(int或char),%ld  长整型变量作为十进制输出,%c  输出字符(char),%x  以16进制格式输出数值。

(用小写字母a,b,c  f),%X以16进制格式输出数值。

(用大写字母A  F),%o  以八进制格式输出数值,  %u  输出十进制数(专用于unsigned类型),%f  以浮点数计数制输出浮点型数值例如3.43234,  %e  以指数计数制输出浮点型数值,例如23e+432,

 

%E  同%e但使用大写E,例如23E+432,  %s  输出字符串(char*),%le  输出双精度型数值,  %%  输出%字符,  |n  换行输出(回车),、r进一行输出,  、t  制表位输出,  、、输出、字符

6.全局脚本诊断窗口

 

由printf()函数指定的文本输出显示在全局脚本诊断窗口中。

组态这种诊断窗口的步骤如下:

 

(1).打开图形编辑器

 

    打开期望的WinCC画面。

 

(2)组态智能对象    应用窗口。

 

将应用窗口置于画面内之后,将打开窗口对话框。

从列表中选择全局脚本条目。

通过单击确定退出对话框。

打开模板对话框,从列表中选择GSC诊断条目。

同样通过单击确定退出对话框。

 

(3)为了便于利用全局脚本诊断窗口,建议将对象属性对话框其他条目下的所有属性设置为是。

 

(4)如果项目在运行,则由printf()函数指定的文本输出将显示在诊断窗口中。

如果用工具栏上相应的按钮中止更新,则可以保存或打印输出窗口内容。

 

2.2变量

 

在WinCC项目Project-C-Course中,有关变量的主题实例可以通过单击如下所示的浏览栏来访问。

实例在kzz-00.PDL画面中组态。

 

变量:

变量是由程序处理的数据对象。

变量只有在定义以后才能使用。

在第一条指令可以执行前,必须先定义程序中的所有变量。

 

变量可以比做一个容器。

通过变量名,我们给容器一个唯一的名称。

容器中内容的类型通过其数据类型来指定,容器的初始内容通过初始值来指定。

在大多数情况下,该内容将在程序执行过程中进行处理。

此处所描述的变量不应误认为是WinCC变量。

它们只能在程序代码中使用。

以下程序代码说明了定义变量的一个实例。

 

Int  itag;

 

.在该实例中,用名字Itag来定义一个int数据类型的变量。

代码行以分号结束。

变量名的前面是描述数据类型的前缀。

这并非必须遵循,但它却使得在程序创建期间能够立即识别变量的数据类型。

在定义变量时,也可以将其初始化。

 

Intitag=0;

 

常量:

除变量之外,程序中也使用常量。

它只是数值的直接使用。

为了说明这种数值的含义,可以使用#define命令为它定义符号常量。

 

以下程序代码说明了定义符号常量的一个实例。

 

#defineMAX-VALUE7483647

 

在给实例中,用数值7483647来定义符号常量MAX-VALUE。

注意代码行不得用分号结束。

用大写字母表示符号常量是一般的编程规律,以便易于与变量区分。

 

数据类型:

C所识别的基本数据类型如下:

 

Char一个字节,可以接受一个字符,Int整型数值,Float单精度型浮点数,Double双精度型浮点数,Char数据类型的变量需要一个字节的存储空间。

其内容可以解释为一个字符或一个数字。

 

Int数据类型之前可以加关键字signed或unsigned。

关键字signed代表有符号数,关键字unsigned代表无符号数。

Int数据类型之前也可以加关键字long或short.这些关键字也可以不带int而单独使用,其含义仍然相同。

Short(或shortint)数据类型的变量需要2个字节的存储空间,long(或longint)数据类型的变量与int数据的变量一样需要4个字节的存储空间,然而double数据类型的变量需要8个字节的存储空间。

 

各数据类型的数值范围:

每种数据类型都可以显示某一数值范围的数值。

区别在于不同的数据类型所须的存储空间不同,以及是有符号还是无符号数据类型。

 

Int  –2147483648至2147483647

 

Unsignedint  0至429967295

 

Short  -32768至32767

 

Unsigtnedshort  0-65535

 

Long  –2147483648至2147483647

 

Unsignedlong  0至4294967295

 

Char  –128至127(所有的ASC||字符)

 

Unsignedchar  0至225(所有的ASC||字符)

 

float  –10^38z至0^38

 

double  –10^308至0^308

 

2.2.1整数数据类型

 

用C的缺省数据类型来显示整数。

在事件→鼠标→鼠标动作的对象按钮1组态了本实例。

 

1.按钮1的C动作

 

#include“apdefap.h”

 

voidOnClick(char#lpszPictureNamechar3lpszObjectName,char#lpszProper”

 

{

 

charcNumber;        //signad0bitvalue

 

long1Nameber;      //signad32bitvalue

 

shortsNamber;      //signad16bitvalue

 

intiNumber;        //signad32bitvalue

 

unsignedcharucNumber;//unsigned8bitvalue

 

unsignedlongulNumber;//unsigned32bitvalue

 

unsignedshortusNamber:

//unsigned16bitvalue

 

unsignedintuiNumber;  //unsigne

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1