WINCC c语言基础Word文档格式.docx
《WINCC c语言基础Word文档格式.docx》由会员分享,可在线阅读,更多相关《WINCC c语言基础Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
![WINCC c语言基础Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/27/13b55f87-5a95-49d2-a16b-b424323fbd4f/13b55f87-5a95-49d2-a16b-b424323fbd4f1.gif)
longmain(char*
lpszPictureName.char*lpszObjectName.char*lpszPropertyName)
{
/*1*/long1ReturnValue;
/*2*/1ReturnValue*GetTagSDword(*S32icoursetest1*);
/*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(*s32icoursetset1”);
SetIeft(lpszPictureName,lpszobjectName,1value);
上述实例代码代表一个典型的事件的C动作。
各部分含义描述如下:
灰色阴影显示的前三行构成C动作的题目。
对于分歧类型的事件,其参数题目也分歧。
将参数lpszPictureName(画面名称).lpszObjectName(对象名)和lpszPropertyName(属性名)传递给C动作。
参数lpszPropertyName只包含与响应属性变更的事件相关的信息。
可以传递附加的事件指定的参数。
在可以编辑的第一代码段中声明使用的变量。
事件处理
(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”
longmain(char*lpszPictureName.char*lpszObjectName.Char*lpszPropertyName)
/WINCC.TAGNAMESECTTONSTART
//syntax.#defineTagNameInAction“DMTagName”
#defineS32ICOURSE0TEST1“S32icoursetest1”
//nextTagID:
1
//WINCCTAGNAMESECTIONEND
//WINCC:
PICNAMESECCTONSTART
//syntax:
#definePicNameInAction“PictureName”
#defineCC0STARTPICTURE00“cc0startpicture00.Pd1”
//nextPicID:
PICNAMESECTTONEND
SetTagSDWord(S32ICOURSETEST1,100);
OpenPicture(CC0STARTPICTURE00);
Return0;
如果创建新的C的动作,则自动生成的代码将包含两个注释块。
若要使用交叉索引编辑器可以仿问C动作的内部信息,则需要这些注释块。
要允许C动作中语句重新排列也需要这两个块。
变量定义:
第一个注释块用于定义C动作中使用的WinCC变量。
该注释块以/MINCC:
TAGAMESECTIONSTART作为开始,以/MINCC:
TAGNAMESECTIONEND作为结束。
在两行命令之间,定义C动作中的所有WinCC的变量名称。
通过预处理程序命令#define后跟定义的名称(在本实例代码中为S32ICOURSETEST1),其后在接WinCC变量的名称(在本实例中为(S32icoursetsse1)来定义。
画面定义:
第二个注释块用来定义C动作中所使用的WinCC画面。
该注释块以行/MINCC:
PICNAMESECTIONSTART作为开始,以行/MINCC:
PICNAMESECTIONEND作为结束。
在两行之间,定义C动作中使用的所有WinCC画面名称。
它遵循的规律与上面所描述的定义变量名称时所遵循的规则相同。
应用:
在实际程序代码中,必须使用定义的值,而不是实际的变量和画面名称。
在编译C动作之前,预处理程序将用实际名称替换所有定义的名称
.1.2全局脚本编辑器
全局脚本编辑器用于创建项目函数、尺度函数和动作。
1.项目函数
如果在C动作中经常需要相同的功能,则该功能可以在项目函数中公式化。
在WinCC项目的所有C动作都可以依照调用所有其他函数一样的方式来调用项目函数。
下面列出了使用项目函数对于在C动作中创建完整的程序代码的优点:
编辑器的中心位置:
项目函数的改变会影响所有正在使用该函数的C动作。
如果没有使用项目函数,则必须手动修改所有相关的C动作。
这不单可以简化组态,而且可以简化维护和故障检测工作。
可重用性:
一旦一个项目函数编写完并进行了广泛的测试,则它随时都可以再次使用,无须附加的组态或新的测试。
画面容量减少:
如果其实不是在对象的C动作中直接放置完整的程序代码,则画面的容量将减少。
这可以使画面打开的速度更快而且在运行系统中的效果更佳。
口令呵护:
项目函数可以通过指定口令进行呵护,以防更改。
这样可以呵护组态数据以及用户的技术窍门。
项目函数只能在项目内使用。
它们存储在WinCCProjectFolder\LIBRARY文件夹内并在相同的文件夹中的appbib.h文件内定义。
许多函数只能在项目内使用。
与项目函数相反,尺度函数可以用于所有的WinCC项目。
可以更改现有的尺度函数。
也可以创建新的尺度函数。
尺度函数与项目函数的区别仅在于它们的可用性:
尺度函数可以跨项目使用,然而项目函数只能在项目内使用。
尺度函数存储在WinCCInstallationFolder\LIBRARY文件夹内,并在同一文件夹中的apglob.h文件内定义。
2.内部函数
除项目函数和尺度函数之外,还有内部函数。
其中,它们是尺度的C函数。
用户不克不及对其进行更改,也不克不及创建新的内部函数。
动作:
动作(与先前描述的函数相反)不克不及由C动作或其他函数调用。
必须为动作指定触发器来控制其执行。
它在运行系统中执行时与当前所选择的画面无关。
可以组态全局动作,既跨项目动作。
在这种情况下它们存储字WinCCProjectFolder\PAS文件夹中。
也可以组态全局动作(指定计算机的动作),它们将存储在WinCCProjiectFolder\ComputerName\PAS文件夹中。
如果在计算机的启动列表中选中了全局脚本运行系统,则一旦项目启动,属于该计算机的所有全局动作和所有局部动作将被激活。
3.建立项目函数
创建项目函数所须的步调与创建尺度函数的步调完全相同,因此下面的说明也适用于尺度函数的创建
建立项目函数步调:
(1)打开全局脚本编辑器。
(2)通过鼠标的右键项目函数条目,然后从弹出式菜单中选择新建→函数,将创建新项目函数的基本框架。
(3)项目函数可以完全由用户进行配置,没有不克不及编译的代码段。
编写函数题目,函数必须有一个名称,以便C动作或其他函数调用时所有。
此外,必须指定返回值和函数所须的传递参数。
如果当前的函数中要使用其他项目函数或尺度函数,则必须结合apdefap.h文件,这通过预处理程序命令#include“apdefap.h”来完成,该命令必须插在函数题目之前。
“apdefap.h”
intMyProjectFunction(int
iFirstParam,BOOL
bSecondParem)
{
return0;
}
(4)编写函数主题。
可以使用与编写C动作相同的辅助工具,特别是变量选择和函数选择。
(5)已完成的函数现在必须进行编译。
这通过如下所示的工具栏按钮来完成。
编译过程的结果显示在输出窗口中,将列出发生的错误和警告,而且显示其数量。
Compiling
Line3:
error
(0086):
function‘MyProjectFunction’doesnotreturnavalError(s),o
Warning(s)
(6)通过如下所示的工具栏按钮,可以将描述添加大批项目函数中。
可以与描述一起定义一个口令,以呵护项目函数免遭未**人员访问。
(7)完成的项目函数必须用合适的名称进行保管。
4.建立全局动作
创建全局动作所须的步调与创建局部动作所须的步调完全相同。
因此,下面的步调也适用于创建局部动作。
建立全局动作步调:
(1)打开全局脚本编辑器
(2)通过鼠标的右键项目函数条目,然后从弹出式菜单中选择新建动作,将创建动作的基本框架。
(3)动作的题目将会自动生成而且不克不及更该。
此外,拔出用于定义WinCC变量和WinCC画面的两个注释块。
这两个注释块的含义已经在先前的C动作一节中进行说明。
#include“apdefap.h”
intgscAction(void)
TAGNAMESETIONSTART
//syntax.#defineTagNameInAction“DMTagName”
1
TAGNAMESECTIONEND
PICNAMESECTIONSTART
//oyntax:
#definePicNameInAction”PictureName”
PICNAMESECTIONEND
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项目ProjectCCourse中,有关变量的主题实例可以通过单击如下所示的浏览栏来访问。
实例在kzz00.PDL画面中组态。
变量:
变量是由程序处理的数据对象。
变量只有在定义以后才干使用。
在第一条指令可以执行前,必须先定义程序中的所有变量。
变量可以比做一个容器。
通过变量名,我们给容器一个唯一的名称。
容器中内容的类型通过其数据类型来指定,容器的初始内容通过初始值来指定。
在大多数情况下,该内容将在程序执行过程中进行处理。
此处所描述的变量不该误认为是WinCC变量。
它们只能在程序代码中使用。
以下程序代码说明了定义变量的一个实例。
Int
itag;
.在该实例中,用名字Itag来定义一个int数据类型的变量。
代码行以分号结束。
变量名的前面是描述数据类型的前缀。
这并不是必须遵循,但它却使得在程序创建期间能够立即识别变量的数据类型。
在定义变量时,也可以将其初始化。
Intitag=0;
常量:
除变量之外,程序中也使用常量。
它只是数值的直接使用。
为了说明这种数值的含义,可以使用#define命令为它定义符号常量。
以下程序代码说明了定义符号常量的一个实例。
#defineMAXVALUE7483647
在给实例中,用数值7483647来定义符号常量MAXVALUE。
注意代码行不得用分号结束。
用大写字母暗示符号常量是一般的编程规律,以便易于与变量区分。
数据类型:
C所识此外基本数据类型如下:
Char一个字节,可以接受一个字符,Int整型数值,Float单精度型浮点数,Double双精度型浮点数,Char数据类型的变量需要一个字节的存储空间。
其内容可以解释为一个字符或一个数字。
Int数据类型之前可以加关键字signed或unsigned。
关键字signed代表有符号数,关键字unsigned代表无符号数。
Int数据类型之前也可以加关键字long或short.这些关键字也可以不带int而单独使用,其含义仍然相同。
Short(或shortint)数据类型的变量需要2个字节的存储空间,long(或longint)数据类型的变量与int数据的变量一样需要4个字节的存储空间,然而double数据类型的变量需要8个字节的存储空间。
各数据类型的数值范围:
每种数据类型都可以显示某一数值范围的数值。
区别在于分歧的数据类型所须的存储空间分歧,以及是有符号还是无符号数据类型。
–2147483648至2147483647
Unsignedint
0至429967295
Short
32768至32767
Unsigtnedshort
065535
Long
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动作
voidOnClick(char#lpszPictureNamechar3lpszObjectName,char#lpszProper”
charcNumber;
//signad0bitvalue
long1Nameber;
//signad32bitvalue
shortsNamber;
//signad16bitvalue
intiNumber;
unsignedcharucNumber;
//unsigned8bitvalue
unsignedlongulNumber;
//unsigned32bitvalue
unsignedshortusNamber:
//unsigned16bitvalue
unsignedintuiNumber;
cNumber=128;
sNumder=32768;
lNumber=2147483648;
iNumber=2147483467;
//outputindignsticssindow
prinft(“\r\nExaple1:
\r\n”);
printf(“char:
\t\t%d\r\nshort:
\t\t%d\r\n”
“long:
\t\t%d\r\ninth:
\t\t%d\r\n”,
cNumber,sNumber,1Number,iNumber);
ucNumber=255;
usNumder=65535;
u1Nuber=4294967295;
uiNuber=