wincc学习技巧2 - 图文
更新时间:2023-11-25 20:29:01 阅读量: 教育文库 文档下载
- wincc画图技巧推荐度:
- 相关推荐
一、组态软件 二、C语言基础
1.WINCC中的语言
Wincc语言由C脚本(C-script)和B脚本(VB-script)组成。 WINCC中C脚本:(1)C动作(在画布中编辑的程序代码)。
(2)全局脚本编辑器:项目函数、标准函数和内部函数。 项目函数:自定义本项目(保护性) 标准函数:编辑好供C动作调用 内部函数:(微软)自定义编辑函数在项目函数中 例如:#pragma()
int NEW_Add (int a; in b) {
int c; c=a+b; return c;
}
2.WINCC中的(Tag)变量------程序使用的变量(书上P31--35)变量:C变量、WINCC变量
C变量:int(数值型)、char(字符型)、BOOL(布尔型)---也就是二进制(为常用) WINCC变量:word(数值型) 、char(字符型) 、Bit(布尔型) (为常用) 常用变量如下:
布尔型:SetTagBit(参数1,参数2)、GetTagBit(参数) 数值型:SetTagWord(参数1,参数2)、GetTagWord(参数) 字符型:SetTagChar(参数1,参数2)、GetTagChar(参数)
参数1:变量名。参数2:具体要求。例如参数1为液位,参数2为a 举例1二进制变量“启动”控制电机启停 BOOL a;
a= GetTagBit(“启动”); if(a==0)
SetTagBit(“启动”,1);
举例2二进制变量“启动”控制电机启停 BOOL a;
static int i=0;(类似int i; i=0;) a= GetTagBit(“启动”); if(a==0) i++;
两者区别:
不加static 加static
启动一次i=1 启动一次i=1 启动二次i=1 启动二次i=2
1
启动三次i=1 启动三次i=3 启动四次i=1 启动四次i=4
3.WINCC中的运算符
3.WINCC中的常用语句
2
3
三、变量组态
WINCC中的变量分为:内部变量、外部变量和C动作(函数中的变量)
1. 利用变量进行增减计数
步骤1:进行画面构建,需要两个按钮和一个输入输出域(属性调整-)(变量、有变化时、输出)。新建内部变量,命名为“计数”,属性为无符16位。如下图所示;
步骤2:在名字为“启动增加”的按钮中-----属性----事件---鼠标左键C动作:
unsigned short a; a=GetTagWord(\计数\a++;
SetTagWord(\计数\
步骤3:在名字为“启动减少”的按钮中-----属性----事件---鼠标左键C动作:
unsigned short a; a=GetTagWord(\计数\a--;
SetTagWord(\计数\
2. 利用变量进行增减计数(带有步长控制),可定义步长
步骤1:进行画面构建,需要两个按钮和两个输入输出域(属性调整-)(变量为计数、有变
化时、输出)步长对应的输入输出域(属性调整-)(变量为步长、有变化时、输入)。新建2个内部变量,命名为“计数”和“步长”,属性为无符16位。如下图所示;
4
步骤2:在名字为“启动增加”的按钮中-----属性----事件---鼠标左键C动作: unsigned short a;
unsigned short b;
a=GetTagWord(\计数1\b=GetTagWord(\步长\a=a+b;
SetTagWord(\计数1\
步骤3:在名字为“启动减少”的按钮中-----属性----事件---鼠标左键C动作:
unsigned short a; unsigned short b;
a=GetTagWord(\计数1\b=GetTagWord(\步长\a=a-b;
SetTagWord(\计数1\
步骤4:如果调整步长,可直接输入
3. 利用变量进行电机启动
新建内部变量,命名为“起停”,属性为无符16位。
在名字为“启停”的按钮中-----属性----事件---鼠标左键C动作:
BOOL a;
a=GetTagWord(\起停\if(a==0)
SetTagWord(\起停\if(a==1)
SetTagWord(\起停\
4. 利用变量进行windows窗口对象的修改
5
四、画面组态
5. 画面的切换
方法1:利用直接连接切换单个画面,即为在下图中“单击鼠标改变画面”的部分点击链接到所要去的画面。组态完毕后,点击按钮即可达到。
6
方法2:通过对象名称和画面名称的变量连接打开画面。在书上P101 方法3:通过内部函数打开画面。
在按钮属性中事件中鼠标左键中C动作利用软件内部函数输入程序如下:
OpenPrevPicture (\画面名称\
6. 利用画面窗口显示画面
方法:SetVisible(\画面名称\对象名称\或0);
SetVisible表示可见度;画面名称表示画面的名字,例如1.pdl等;对象名称表示“画面窗口n”, “画面窗口n”在智能对象中; 1或0表示可见或不可见。
步骤:第一步:新建三个画面,1.pdl、2.pdl、3.pdl。目的将2.pdl、3.pdl在1.pdl中通过按钮的控制显示出来;
第二步:分别在2.pdl、3.pdl中组态一个目标物;
第三步:在1.pdl中组态两个按钮和两个画面窗口控件(名称为画面窗口1、画面窗口2),在智能对象中找到“画面窗口”,更改画面窗口属性(属性----几何----宽度为246,高度为129;属性---其它---边框改为是,显示改为否,画面名称添加2.pdl或3.pdl);
7
第四步:将2.pdl、3.pdl画面的大小调整为和两个画面窗口一样大;
第五步:进行按钮组态,在按钮属性中事件中鼠标左键中C动作中编写程序如下:
按钮1:SetVisible(\画面窗口1\
SetVisible(\画面窗口2\
按钮2:SetVisible(\画面窗口1\
SetVisible(\画面窗口2\
7. 画面窗口属性-----时控显示
这个技巧功能是对上一个的继承,最终结果就是将三个画面循环显示。
步骤:第一步:新建四个画面,1.pdl、2.pdl、3.pdl、4.pdl。目的将2.pdl、3.pdl、4.pdl在1.pdl中通过按钮的时间控制显示出来;(这里并非按钮按下显示,系统运行自动显示) 第二步:分别在2.pdl、3.pdl、4.pdl中组态一个目标物;
第三步:在1.pdl中组态一个按钮和三个画面窗口控件(名称为画面窗口1、画面窗口2、画面窗口3),在智能对象中找到“画面窗口”,更改画面窗口属性(属性----几何----宽度为246,高度为129;属性----其它----边框改为是,显示改为否,画面名称添加2.pdl或3.pdl或4.pdl); 第四步:将2.pdl、3.pdl、4.pdl画面的大小调整为和三个画面窗口一样大;
第五步:进行按钮组态,在按钮属性中几何中宽度中(假如宽度为70)C动作中编写程序如下:
static int a=0; a++; if(a==1) {
SetVisible(\画面窗口3\SetVisible(\画面窗口4\SetVisible(\画面窗口5\} if(a==2) {
SetVisible(\画面窗口3\SetVisible(\画面窗口4\
8
SetVisible(\画面窗口5\} if(a==3) {
SetVisible(\画面窗口3\SetVisible(\画面窗口4\SetVisible(\画面窗口5\a=0; }
return 70;
触发器调整为1S中,即为间隔1S闪烁显示。
8. 动画旋转组态(例如风扇转动)
这个技巧是为了组态一个旋转的动画,例如工业上的搅拌机等。举例如下:
步骤1:组态基本画面,可以在显示库中寻找,也可以自己绘制。
显示库:从显示库中调用,若使用,首先将元件导出(注意保存),然后将元件删掉,然后再导入(插入)这个元件,便可以进行调整(折开、组装、编组)注意,编组时必须至少两个一组。
自己绘制:例如矩形、圆等(注意属性的调整)全选编组。 例如编为4个组:组1、组2、组3、组4
步骤2:程序的编写-------在画布属性---几何---宽度(如果此时宽度为800)---C动作:
static int a=0; a++; if(a==1) {
SetVisible(\组1\SetVisible(\组2\SetVisible(\组3\SetVisible(\组4\}
9
if(a==2) {
SetVisible(\组1\SetVisible(\组2\SetVisible(\组3\SetVisible(\组4\a=0; }
return 800;
步骤3:触发器的调整,标准周期,250MS 9. 动态化------------颜色改变
颜色改变是最基本的动态化的技巧,就是动态对话框的基本功能,利用颜色的变化来完成一个部件的动作或结束。例如,画布属性---颜色-----动态对话框(事件名称也就是触发器的调整、表达式的填充或者变量、选择表达式结果的展现形式(布尔型或者其它调整颜色))。
10. 动态化------------闪烁组态(元件闪烁)
此技巧主要是针对于元件库中的元件来讲。例如,随便调出一个元件(属性----控件属性-----闪烁样式(4种选择,包括不闪烁-0、不可见-1、阴影-2、实心-3))。点击后面的灯泡标志,选择动态对话框-----闪烁颜色------布尔型等。
此技巧元件可单独作用,亦可由按钮控制。
11. 动态化------------动态填充组态
动态填充组态就是控制元件的动态填充。例如,新建一个内部变量(命名为level、无符号16位、上限100、下限0、起始值0)、调出一个元件或绘制一个矩形(属性----动态填充改为“是”、填充量改为“0”、 点击填充量后面的灯泡标志,直接连接变量level)。在矩形---几何---宽度(假设宽度为100)----C动作:(注意触发器调整250毫秒)
(1)填充增加 static int a=0; if(a>=100) a=0;
10
SetTagWord(\a++; return 100; (2)填充减少 static int a=100; if(a==100) a=100;
SetTagWord(\a——; return 100;
(3)填充增减结合(先增加、再减少)static int a=0;
static int b=0;(方向控制) if(b==0) {
if(a>=100) { b=1; } a++; } if(b==1) { if(a<=0) { b=0; } a——; }
SetTagWord(\
11
return 100;
12. 动态化------------对象的移动
对象的移动就是控制元件在画布上水平左右或者垂直上下的移动,亦或沿对角线移动,也可以综合性的各方向的移动。以小车移动为例进行步骤分析如下:
步骤一:选中元件----属性----几何(选择位置X、位置Y)----灯泡标志(C动作): 特别注意:计算移动的距离范围,选出一个起点和一个终点(如果双向起点和终点
和互换的)。计算两点之间的距离。如果水平移动,计算X之间的距离;如果垂直移动,计算Y之间的距离。例如,起点X的坐标为500,终点X的坐标为20,那么距离为480。(水平移动就是不断增加或者不断减少x)
步骤二:下面以水平移动为例,进行C动作分析: (1)水平左移(不断减少x)
static int a=500; if(a<=0) a=480; else
a=a-4;(每次移动的距离,可以自动调整) return 20+a;
(2)水平右移(不断增加x) static int a=0; if(a>=500) a=0; else
a=a+4; (每次移动的距离,可以自动调整) return 20+a;
(3)水平左右移动(双向移动) static int a=500; static int b=0; (方向控制) if(b==0) {
12
if(a<=0) {
b=1;(调整方向) }
a=a-4; (每次移动的距离,可以自动调整) } if(b==1) { if(a>=500) {
b=0; (调整方向) }
a=a+4; (每次移动的距离,可以自动调整) }
SetTagWord(\return 20+a;
步骤三:触发器调整250毫秒 注意:位置X------水平(左右)移动
位置Y------垂直(上下)移动 高度---------放大或者缩小(上下) 宽度--------拉伸或缩短(左右)
13. 动态化------------复杂动画设计
复杂动画设计是动态化画面的主要特色,也是工业画面组态主要部分。本技巧的展现以混合液的控制系统为例进行论述。 (1) 管道中液体流动
步骤一:在元件库中调用管道。管道在plantElemer-----pipes-----2270(弯管道)、2206(横放管道)、2180(纵放管道)中寻找。画出液体流动的三种状态,第一种状态为原始状态,就是没有任何液体流动;第二种和第三中为液体流动的两种不同状态。三种状态画好并导出到桌面,画好一个就导出一个。分别命名(0、1、2)(3次)
13
步骤二:新建一个变量,命名为“进水”,为无符号16位。
步骤三:在智能对象中-----状态显示------组态对话框(变量为“进水”、有变化时、增加三页(0、1、2)将三个画面状态拖入0、1、2下面,相对应)。
步骤四:在状态显示控件-----几何-----宽度(假设宽度为100)---C动作:
static int a=0;//////或者static unsigned short a=0; //三种画面的第0张画面 if(a>2) 当循环超过第二张画面,强制回到第一张画面。 a=1; 三种画面的第1张画面
SetTagWord(\进水\变量状态转移,将a变化给“进水”C变量转WINCC变量 a++; return 100;
步骤五:触发器为标准周期,250或500MS,保存---运行 (2) 进水阀控制的管道中液体流动
此技巧和(1)的区别主要是增加阀门的控制。即由阀门控制水流的通和断。 对于进水阀门:
步骤一:在元件库中---- plantElemer----valves(阀门)。(注意导入和导出) 步骤二:新建一个变量,命名为“进水阀”,为二进制变量。 新建一个变量,命名为“进水”,为无符号16位。
步骤三:阀门------属性-----背景颜色-----动态对话框(事件名称为变量和触发器的调整为有变化时、表达式为“进水阀”、选择布尔型变量(真----1-----绿、假-----0-----红))。 步骤四:阀门-----属性-----事件中-----鼠标左键-----C动作: BOOL a;
a=GetTagBit(“进水阀”); if(a==1)
SetTagBit(“进水阀”,0); else
SetTagBit(“进水阀”,1); 对于进水状态显示控件:
在状态显示控件-----几何-----宽度(假设宽度为100)---C动作:
static int a=0;//////或者static unsigned short a=0;/////////a表示水量
BOOL b;
14
b=GetTagBit(“进水阀”);
if(b==0)//////////////////如果没有按键按下,无液体流动。 {
SetTagWord(\进水\return 100; }
if(a>2)//////////////////////// 如果有按键按下,有液体流动。 a=1;
SetTagWord(\进水\ a++; return 100;
触发器为标准周期,250或500MS,保存---运行
(3) 进水阀和出水阀共同控制的管道中液体流动以及液位的状态显示 进水阀控制如上(2) 对于出水阀门:
步骤一:在元件库中---- plantElemer----valves(阀门)。(注意导入和导出) 步骤二:新建一个变量,命名为“出水阀”,为二进制变量。 新建一个变量,命名为“出水”,为无符号16位。
步骤三:阀门------属性-----背景颜色-----动态对话框(事件名称为变量和触发器的调整为有变化时、表达式为“出水阀”、选择布尔型变量(真----1-----绿、假-----0-----红))。 步骤四:阀门-----属性-----事件中-----鼠标左键-----C动作: BOOL a;
a=GetTagBit(“出水阀”); if(a==1)
SetTagBit(“出水阀”,0); else
SetTagBit(“出水阀”,1); 对于出水状态显示控件:
在状态显示控件-----几何-----宽度(假设宽度为100)---C动作:
static int a=0;//////或者static unsigned short a=0;
15
BOOL b;
b=GetTagBit(“出水阀”); if(b==0) {
SetTagWord(\出水\return 100; }
if(a>2) a=1;
SetTagWord(\出水\ a++; return 100;
触发器为标准周期,250或500MS,保存---运行
对于液位的设定:
步骤一:在标准对象中-----矩形(或者其它)进行属性调整(大小、颜色和管道液体同色)。 步骤二:新建一个变量,命名为“液位”,为无符号16位。上限100,下限0,起始值0。 步骤三:矩形------属性------填充(动态填充改为“是”、填充量改为0其后面的灯泡标志-----直接连接变量“液位”(有变化时))。
步骤四:矩形----属性-----几何-----宽度(假设为100)-----C动作如下: static int a=0;//////或者static unsigned short a=0;
BOOL b; BOOL c;
a= GetTagWord(“液位”); b=GetTagBit(“进水阀”); c=GetTagBit(“出水阀”); if(b==1) a++; if(c==1) a--;
SetTagWord(\液位\
16
return 100;
步骤五:触发器为250MS。(标准周期) (4) 增加设定值的控制
本技巧是对(3)中液位部分的调整。增加设定值。使水位恒定在设定值所定在的位置。 对于液位的调整:
步骤一:新建变量,命名“设定值”,无符号16位。连接输入输出域输入设定值(变量为设定值、类型为输入、有变化时)。
步骤二:程序修改------矩形----属性-----几何-----宽度(假设为100)-----C动作如下: static unsigned short a;
static unsigned short d; BOOL b; BOOL c;
a= GetTagWord(“液位”); d= GetTagWord(“设定值”); b=GetTagBit(“进水阀”); c=GetTagBit(“出水阀”); if(a>d) {
SetTagBit(\出水阀\a--; } if(a SetTagBit(\进水阀\a++; } if(a==d) { SetTagBit(\进水阀\SetTagBit(\出水阀\ 17 } SetTagWord(\液位\return 100; 步骤三:触发器为250MS。(标准周期) (5) 增加急停方式的控制(了解) 步骤一:新建变量“急停”,二进制变量。 按钮------事件-------鼠标-------C动作(按下,两个地方同时停下) 14. 操作控制权限(保护权限) 15. 字符串的应用 18 16. 日期与时间的设置--------正确的提取日期和时间 方法1:利用控件显示(直接显示) ,如图所示; 方法2:利用程序显示 步骤一:提取系统日期和时间; 变量管理-----添加新的驱动连接,如下图所示; 19 建立日期和时间变量,命名“date 和time”,date(在“选择”中格式为日期、 8位字符集、MM-DD-YYYY), time(在“选择”中格式为时间、8位字符集、HH-MM-SS),如下图所示: 分别建立对应的输入/输出域(在“组态对话框”中:对应变量、有变化时, 输出)如下图所示。注意:输入/输出域属性调整(输出格式:字符串) 步骤二:建立内部变量,命名“shijian”,建立相应的输入/输出域(在“组态对话框”中: 对应变量(shijian)、有变化时,输出)如下图所示。注意:输入/输出域属性调整(输出格式:字符串) 步骤三:将日期和时间相连; 20 步骤:全局脚本-----C-Editor----项目函数------新建-----在特定的形式中输入要编的程序,如下所示: #pragma option(mbcs) void New_Function()\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\此为函数名字(可以自己起名) { 输入要编写的程序 } 最后的程序如下: #pragma option(mbcs) void New_Function() { char a[20],b[20]; char*p; char aa[10],bb[10],cc[10]; int i; int val1,val2,val3; int val4,val5,val6; int val7,val8,val9; long sum1,sum2,temp; p=GetTagChar(\strcpy(a,p); for(i=0;i<2;i++) { aa[i]= a[i]; bb[i]= a[i+3]; cc [i]= a[i+6]; } aa[2]='\\0'; 26 bb[2]='\\0'; cc [2]='\\0'; val1=atoi(aa); val2=atoi(bb); val3=atoi(cc); p=GetTagChar(\strcpy(a,p); for(i=0;i<2;i++) { aa[i]= a[i]; bb[i]= a[i+3]; cc [i]= a[i+6]; } aa[2]='\\0'; bb[2]='\\0'; cc [2]='\\0'; val4=atoi(aa); val5=atoi(bb); val6=atoi(cc); sum1=val1*3600+val2*60+val3; sum2=val4*3600+val5*60+val6; temp=sum2-sum1; temp=abs(temp); val7=temp/3600; val8=(temp600)/60; val9=temp`; 27 b[0]=val7/10+48; b[1]=val7+48; b[2]=':'; b[3]=val8/10+48; b[4]=val8+48; b[5]=':'; b[6]=val9/10+48; b[7]=val9+48; b[8]='\\0'; SetTagChar(\} 加密:菜单栏中----编辑----信息----(创建者:冯晨曦;口令:123456),以后每次输入都得登录正确的口令才可以登录; 加密后,在C动作中只显示函数名,不显示函数内容; 15.关于文件的操作(对WINCC的扩展) (1)文件指针格式 *txt *dat(打不开,存放登录过的密码) (2)文件操作 ①打开文件 ②操作文件(复杂) ③关闭文件 (3)打开文件(首先定义文件指针) FILE*fp; fp=fopen(“C:\\\\Test.txt”, “r”); 28 打开文件方式:r-----表示只读:如文件不存在或者路径错误,返回NULL(空指针) w----表示写入:如文件不存在或者路径错误,则新建用于清空某个文 件。 a------表示写:为追加,写时不会删除原有文件。以r 、a使用最多 。 (4)关闭文件 Fclose(fp);\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\f表示file ,中文为“文件”; (5)操作文件 ①写数据fputs(字符,文件指针);字符为常量或者数组 举例:fputs(china,fp); char a[20]; strcpy(a[20], fp); ②读数据fgets(,数组名,n,文件指针); 作用是从文件中读取n-1个字符放入数组中; 16.项目-----班级数据录入 借助本项目巩固文件操作技巧,本项目就是对一个班级信息的记录(姓名、班级、学号)。 步骤一:新建三个内部变量:分别命名为“name”、“class”、“number”,并建立相应的输入输出域,注意:输入/输出域属性调整(输出格式:字符串),如下图所示: 步骤二:新建两个按钮,分别命名为“写入一次信息”、“写入信息”。 任务一:在按钮“写入一次信息”中---属性----事件----鼠标左键----C动作: FILE*fp; fp=fopen(\ 29 fputs(\冯晨曦\ fputs(\自动化\fputs(\fputs(\fclose(fp); 任务二:在按钮“写入信息”中---属性----事件----鼠标左键----C动作: FILE*fp;、、、、、、、、、、、、、、、、、、、、、、、、、文件指针 char a[20]; char b[20]; char c[20]; char*p;、、、、、、、、、、、、、、、、、、、、、、、、、、字符指针 //int i; p=GetTagChar(\strcpy(a,p); p=GetTagChar(\strcpy(b,p); p=GetTagChar(\strcpy(c,p); 目的:将三个变量一一对应,使各列对齐; 对齐方法1: if(strlen(a)==4)、、、、、、、、、、、等于4,说明有4个字符,即两个字(两个字的姓名) strcat(a,\ \if(strlen(a)==6) 、、、、、、、、、、、等于6,说明有6个字符,即三个字(三个字的姓名) strcat(a,\ \对齐方法2: //for(i=strlen(a);i<8;i++) //strcat(a,\目的:输出数据 fp=fopen(\、、、、、、、、、、、、、、打开文件 fputs(a,fp);、、、、、、、、、、、、、、、、、、、、、、、、、、、写入数据a fputs(b,fp); 、、、、、、、、、、、、、、、、、、、、、、、、、、、写入数据a fputs(c,fp); 、、、、、、、、、、、、、、、、、、、、、、、、、、、写入数据a fputs(\、、、、、、、、、、、、、、、、、、、、、、、、回车换行 fclose(fp);、、、、、、、、、、、、、、、、、、、、、、、、、、、、关闭文件 特别注意:为了免除干扰,防止重复输入相同数据-------方法:加入延时函数 步骤: #pragma option(mbcs) void delay(WORD a) { #pragma code(\ 30 VOID WINAPI Sleep(WORD dwMilliSeconds); #pragma code() Sleep(a); } 任务二:在按钮“写入信息”中---属性----事件----鼠标左键----C动作: FILE*fp;、、、、、、、、、、、、、、、、、、、、、、、、、文件指针 char a[20]; char b[20]; char c[20]; char*p;、、、、、、、、、、、、、、、、、、、、、、、、、、字符指针 //int i; p=GetTagChar(\strcpy(a,p); p=GetTagChar(\strcpy(b,p); p=GetTagChar(\strcpy(c,p); 目的:将三个变量一一对应,使各列对齐; 对齐方法1: if(strlen(a)==4)、、、、、、、、、、、等于4,说明有4个字符,即两个字(两个字的姓名) strcat(a,\ \if(strlen(a)==6) 、、、、、、、、、、、等于6,说明有6个字符,即三个字(三个字的姓名) strcat(a,\ \对齐方法2: //for(i=strlen(a);i<8;i++) //strcat(a,\ 目的:输出数据 fp=fopen(\、、、、、、、、、、、、、、打开文件 delay(2000);、、、、、、、、、、、、、、、、、、、、、、、、、、延时2秒 fputs(a,fp);、、、、、、、、、、、、、、、、、、、、、、、、、、、写入数据a fputs(b,fp); 、、、、、、、、、、、、、、、、、、、、、、、、、、、写入数据a fputs(c,fp); 、、、、、、、、、、、、、、、、、、、、、、、、、、、写入数据a fputs(\、、、、、、、、、、、、、、、、、、、、、、、、回车换行 fclose(fp);、、、、、、、、、、、、、、、、、、、、、、、、、、、、关闭文件 31 17.项目----------------对文件的综合处理(未完) 本项目是对文件处理的综合运用,是对组态系统人员登录的统计和记录。总体布局如下图所示; 项目步骤如下: 步骤一:完成下图图形的构建和脚本程序的编写,方法如上; 32 (1) 新建三个内部变量,分别命名“name”“class”“number”,分 别连接相应的输入输出域(组态对话框:该变量、有变化时、类型为I/O域)。注意:输入/输出域属性调整(输出格式:字符串)。 (2) 在名字为“写入文件”的按钮中---属性---事件----C动作: FILE*fp; char a[20]; char b[20]; char c[20]; char*p; int i; p=GetTagChar(\strcpy(a,p); p=GetTagChar(\strcpy(b,p); p=GetTagChar(\strcpy(c,p); //if(strlen(a)==4)、、、、、、、、、、、、、、、、、、、、、蓝色和红色部分功能一致,选用一个即可 //strcat(a,\ \//if(strlen(a)==6) //strcat(a,\ \//if(strlen(a)==8) //strcpy(a); for(i=strlen(a);i<8;i++);、、、、、、、、、、、、、、、蓝色和红色部分功能一致,选用一个即可 strcat(a,\ fp=fopen(\fputs(a,fp); fputs(b,fp); 33 fputs(c,fp); fputs(\fclose(fp); 步骤二:完成下图图形的构建和属性的调整; (1) 智能对象-----控件(选择ListView control 6.0 sp6)----拉 大控件----双击(显示属性)-----在General(常规)中修改View(选择3-lvwreport)(报表输出);------在Colum Header(列标题)---- (点击insert Colum(增加一列)index为列号(text: 姓名;Width(列宽):80;)-----二次点击insert Colum(增加一列)index为列号(text:班级;Width(列宽):80;)----三次点击insert Colum(增加一列)index为列号(text:学号;Width(列宽):80;); )------点击应用-----点击确定。 (2) 选中属性---控制属性----GridLines----改“是”为“否”。 步骤三:完成下图图形的构建和脚本程序的编写; 34 (1) 新建4个按钮和1个输入输出域,注意:输入/输出域属性调 整(输出格式:字符串)。如上图所示; 新建内部变量:命名“search”,文本8位字符集; (2) 在按钮名为“显示数据”中----属性----事件----鼠标左键----C 动作: #define GetObject GetObject __object*pdl=NULL;、、、、、、、、、、、、、指向当前运行系统(NULL为空值、初始化) __object*pic=NULL;、、、、、、、、、、、、、指向当前系统激活画面 __object*obj=NULL;、、、、、、、、、、、、、指向画面中的某个对象 __object*item=NULL;、、、、、、、、、、、、对象中对行的操作 int i; char aa[10]; char a[20],b[20],c[20]; FILE*fp; fp=fopen(\ if(fp==NULL)、、、、、、、、如果打不开,指向下面判断路径是否正确 { HWND hwnd=NULL ;、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、指针 hwnd=FindWindow(NULL,\运行系统 - \、、、、、、、、指针 MessageBox(hwnd,\文件打开出错\警告\、、、系统函数 35 弹出对话框(可能是XP系统中的。WIN7不弹出) return ;、、、、、、、、、、、、、、、、、、、、、返回空指针 } 打开文件: pdl=__object_create(\、、、、、指向当前运行系统中的激活画面 pic=pdl->GetPicture(\obj=pic->GetObject(\控件1\ //d=GetTagChar(\ ////////// //strcpy(dd,d); /////////// obj->ListItems->Clear();、、、、、调用函数为对象清零 obj->view=3;、、、、、、、、、、、、、、对控件1操作所有的行 rewind(fp);、、、、、、、、、、、、、、、、对文件操作,光标定位函数 for(i=1; feof(fp)==0;)、、、、、蓝色部分为文件尾判断函数(0:光标不到尾;1光标到尾) 、、、、、、、、、、、、、、、、、、、、、、只要光标不到尾,此段程序始终循环 { fgets(a,9,fp);、、、、、、、、读取8个字符放入a中 a[9]='\\0';、、、、、、、、、、、结束符 if(feof(fp)!=0)、、、、、、、如果不等于0,说明光标到尾,执行跳出 break; fgets(b,11,fp);、、、、、、、读取10个字符放入b中 fgets(c,11,fp); 、、、、、、、读取10个字符放入c中 b[11]='\\0';、、、、、、、、、、、结束符 c[11]='\\0';、、、、、、、、、、、结束符 fgets(aa,3,fp);、、、、、、、、读取3个字符放入aa中,\\r\\n回车换行是两个字符;目 的是跳过第一行,去读第二行 item=obj->ListItems->Add();、、、、、、、、、、、、、、、、、 obj->ListItems->Item(i)->Text=a;、、、、、、、、、、、、、将a写入控件第一行第一列 obj->ListItems->Item(i)->ListSubItems->Add(1,\、、、、增加一列写b 36 obj->ListItems->Item(i)->ListSubItems->Add(2,\、、、、增加一列写c i++;、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、进入下一行,光标定位到第二行 } fclose(fp);、、、、、、、、、、、、、、、、、、、、关闭文件 __object_delete(item);、、、最后四行为销毁指针,否则占用内存,从里往外销毁; __object_delete(obj); __object_delete(pic); __object_delete(pdl); (3) 在按钮名为“搜索”中----属性----事件----鼠标左键----C 动作: #define GetObject GetObject __object *pdl=NULL; __object *pic=NULL; __object *obj=NULL; __object *item=NULL; int i; char *d; char aa[10]; char a[20],b[20],c[20],dd[20],ee[20]; FILE *fp; fp=fopen(\if(fp==NULL) { HWND hwnd=NULL; hwnd=FindWindow(NULL,\运行系统 - \ MessageBox(hwnd,\文件打开出错\警告\ return; 37 } pdl=__object_create(\pic=pdl->GetPicture(\obj=pic->GetObject(\控件1\搜索功能 //////////////////////////////////////////////////////// d=GetTagChar(\、、、、、、、、、、、、读取 strcpy(dd,d); ////////////////////////////////////////////////////////// 同上,选其1 //d=GetTagChar(\//strcpy(dd,d); ////////////////////////////////////////////////////////// obj->ListItems->Clear(); obj->view=3; rewind(fp); for(i=1; feof(fp)==0;) { fgets(a,9,fp); a[9]='\\0'; if(feof(fp)!=0) break; 搜索功能 ////////////////////////////////////////////////////// strcpy(ee,a); ee[strlen(dd)]='\\0'; 、、、、、、、、、、、、、把数组ee字符的内容限制限制与输入内容一样 if( strcmp(ee,dd)!=0)、、、、长度相同,信息不同,长度相同才能比较大小(冯与冯晨曦) { fseek(fp,23L,1);、、、、、、、、、、、、、、、当光标定位到下一行 continue;、、、、、、、、、、、、、、、、、、、、、、跳出当前循环进入下一次 38 ////////////////////////////////////////////////////////////// } fgets(b,11,fp); fgets(c,11,fp); b[11]='\\0'; c[11]='\\0'; fgets(aa,3,fp); item=obj->ListItems->Add(); obj->ListItems->Item(i)->Text=a; obj->ListItems->Item(i)->listSubItems->Add(1,\obj->ListItems->Item(i)->listSubItems->Add(2,\i++; } fclose(fp); __object_delete(item); __object_delete(obj); __object_delete(pic); __object_delete(pdl); 步骤四:完成下图图形的构建和脚本程序的编写; (1) 新建三个内部变量:分别命名“姓名”“班级”“学号”;分别 39 连接相应的输入输出域; (2) 在控件属性----事件----对象事件----Dblclick----C动作:(就是双 击控件中的信息内容,所点击的内容就会出现在相应的输入输出域中)。 #define GetObject GetObject __object *pdl=NULL; __object *pic=NULL; __object *obj=NULL; int i; char a[20],b[20],c[20]; pdl=__object_create(\pic=pdl->GetPicture(\obj=pic->GetObject(\控件1\i=obj->SelectedItem->Index; strcpy(a,obj->ListItems->Item(i)->Text); strcpy(b,obj->ListItems->Item(i)->ListSubItems(1)); strcpy(c,obj->ListItems->Item(i)->ListSubItems(2)); SetTagChar(\姓名\SetTagChar(\班级\SetTagChar(\学号\ __object_delete(obj); __object_delete(pic); __object_delete(pdl); 40 17. 项目----------------完成用户登录信息记录(练习) 18. 41
正在阅读:
wincc学习技巧2 - 图文11-25
《预备党员转正式党员考察表》相关填写范文04-22
甘肃电大作业-----读国学经典心得体会06-15
自主择业军人减免税流程06-17
2022年高三语文第一轮复习技巧03-30
09级网页制作期末作业评分标准06-04
端午节活动方案精选10篇03-25
招商引资软环境建设的问题01-05
南京市普通中小学办学条件标准(修订版)(宁政发〔2005〕141号)09-10
注塑模01-25
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 图文
- 技巧
- 学习
- wincc
- PLC系统在水处理方面的应用论文
- 2019届高考化学一轮复习 第4讲 物质的量在化学实验中的应用课时集训
- SAP替代料测试
- 糖尿病足的病因病机探讨-魏艿
- 《公共政策学》模拟试题集
- 公共危机管理参考文献
- 14三年级作文综合训练(五) - 写一种小动物
- 答复意见书、报结材料、受理告知书格式
- 出租客运企业安全检查表
- 县人民政府办公室工作规则
- 学前儿童科学教育教育试题及答案
- 设备专业设计任务书(甲方填写)
- 青年民兵之家管理制度
- 2019年七年级第一次家长会班主任发言稿(详细版)精品教育 doc
- 简议李清照前后期词风转变及其原因(改)
- 建筑工程可靠性鉴定题库
- 信号与系统习题库
- 幼儿园大班数学《数字宝宝的相邻数》说课稿
- 小学二年级数学混合运算测试题
- TCID50的测定方法 -