wincc论文Word文档格式.docx
《wincc论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《wincc论文Word文档格式.docx(41页珍藏版)》请在冰点文库上搜索。
节点118
3.连杆ﻩ21
4。
节点226
5、横梁(左)28
6.横梁(右)29
7.驴头31
8。
抽油杆32
9。
活塞ﻩ33
10.油桶34
基于WinCC抽油机仿真与报警设计
摘要
在石油开采中抽油机就是抽油机-深井泵抽油系统中得主要地面设备。
游梁式抽油机由其简单易操作、耐久度好而作为石油主要开采设备,其工作量繁琐而漫长,因此实现抽油机得实时监控与报警也十分重要。
本文就此问题结合WinCC组态软件实现了抽油机动态仿真与监控报警功能。
作为工业应用软件得一个组成部分,WinCC具有丰富得设置项目,使用方式灵活,功能强大。
文中主要以WinCC中各元素搭建抽油机动力设备、减速箱、曲柄摇杆设备、辅助设备(控制台)等几个主要部分;
运用了软件中界面切换功能、变量连接功能、c动作及其她功能来实现首界面、主界面、辅界面切换以及曲柄摇杆机构与抽油杆得运动仿真、油桶盛油状态仿真及满油报警等功能;
同时也对各变量数值以及系统运动状态进行了实时记录与监控。
ﻫ 最后给出了课程学习方法得总结与感想。
关键词:
抽油机;
WinCC组态;
c动作 仿真;
监控报警;
一、设计方案
1系统基本结构
系统主要由首界面、辅助界面、主界面组成。
其中首界面包含设计者信息及连接其余界面按钮;
辅助界面包含抽油机原理图及返回按钮;
主界面包含抽油机动力设备、减速器、曲柄摇杆机构、抽油杆机构、地下石油、油桶、总控制台、变量记录与报警记录信息表及其她连接按钮。
1.2系统主要功能
系统主要各元素搭建抽油机动力设备、减速箱、曲柄摇杆设备、辅助设备(控制台)等几个主要部分;
运用了软件中界面切换功能、变量连接功能、c动作及其她功能来实现首界面、主界面、辅界面切换以及曲柄摇杆机构与抽油杆得运动仿真、油桶盛油状态仿真及满油报警等功能;
1、3系统运行流程
Ø
Step1:
运行start、pdl文件进入首界面。
Step2:
点击按钮“结构示意图”进入辅界面,学习了解抽油机结构与原理。
Step3:
点击“返回首页”按钮进入首界面,可进行两界面互换、
Step4:
点击“进入系统”按钮进入主界面,准备系统得动态仿真。
Step5:
鼠标左键单击控制台“启动“按钮实现抽油机各构件得运动可视化。
运行指示灯呈现绿色,各输入输出域可显示电机转速,曲柄转速、油桶油量变化状况、
Step6:
鼠标左键单击控制台“关闭"
按钮实现系统骤停;
“更换油桶”按钮来实时更新油桶;
“变量记录"
与“报警记录"
按钮实现变量变化与报警文本提示得可视化,鼠标右键单击可关闭。
Step6:
点击“返回首页”按钮返回首界面,可进行两界面互换。
二、画面组成与实现
2、1首界面
1、1界面元素与运行效果
图1.首界面运行效果图
其中包含设计对象、设计者信息、界面交换按钮(“结构示意图”与“进入系统”)
2界面功能与实现过程
1)界面功能
点击按钮“结构示意图"
进入辅界面,学习了解抽油机结构与原理。
点击“进入系统”按钮进入主界面,准备系统得动态仿真。
2)实现过程
文字部分:
添加“静态文本”→填写内容→调整适当大小颜色位置→属性效果全局颜色方案静态为“否"
、
按钮部分:
添加矩形按钮→调整文字大小及按钮位置→属性→事件→鼠标→单击鼠标→单击“”→直接连接→当前画面→需要连接得画面。
具体如图2所示。
图2、画面切换按钮实现过程图
2。
2辅界面
2、1界面元素与运行效果
图3、辅界面运行效果图
画面包括抽油机整体结构实体图;
主要由游梁—连杆—曲柄机构、减速箱、动力设备、辅助设备等四大部份组成。
及“返回首页"
按钮;
2.2。
1)界面功能
辅助界面主要让用户更清晰了解抽油机得组成及工作原理。
即游梁式抽油机主要由游梁-连杆-曲柄机构、减速箱、动力设备、辅助设备等四大部份组成。
工作时,动力机将高速旋转动动通过皮带与减速箱传给曲柄轴,带动曲柄轴做低速旋转运动,曲柄通过连杆经横梁带动游梁作上下往摆动,挂在驴头上得悬绳器便带动抽油杆作上下往复动动、
抽油机结构图保存至桌面 → 标准元素中添加“图形对象” →选择桌面图片→添加并放大到适当大小及适当位置→添加“返回首页按钮”(与首界面相同)
3主界面
3、1界面元素与运行效果
4、a 4.b
4.c 4、d
图4、主界面运行效果图
其中包含电动机、带传动、减速器;
曲柄、连杆、横梁、驴头、抽油杆、油桶及各节点;
控制台(指示灯、显示屏、各功能按钮)
2、3。
2、1曲柄运动设计
以较粗得圆头直线代替各杆件,并调整属性颜色;
实现曲柄绕定点均匀地运动,采用c动作编程并利用内部时钟模块,将一圈分为12份,使曲柄旋转角步进30°
/250ms,并调用GetTagSWord函数控制整个过程得启动与停止,调用SetTagFloat函数设定曲柄位置便于变量记录,设计如图5、6所示:
图5.曲柄运动设计图
图6、曲柄运动C语言动作图
2.3.2.2连杆运动设计
由于连杆运动过程较为复杂,无规律可言,因此采用位置扫描动态仿真实现,预先将连杆按顺序将其位置坐标列出,包括:
位置X、位置Y、宽度、高度,来表示连杆瞬时位置。
并与系统时间同步;
同时与曲柄相同,由控制变量控制器启动与停止;
具体如图所示:
图7.曲柄运动设计图
2、3、2、3横梁运动设计
横梁就是用两部分拼接而成,并分别实行C语言动作编程,实现其跟随连杆在旋转中心处-30°
~30°
往复运动,同样采用旋转角瞬时扫描仿真,实现曲柄摇杆运动过程。
具体代码见附件。
2、3.2、4驴头运动设计
驴头得运动跟随仿真设计,主要运用属性中起始角度与结束角度对应变化来实现,如下图所示。
实现过程与横梁相同,要保证起止角度增减互异,保证驴头弧度不变。
同时也受总控制变量控制其启动停止。
具体代码见附件、
图8.驴头运动设计图
2.3、2、5抽油杆运动设计
抽油杆及活塞均采用对位置Y进行c动作编程实现其跟随驴头上下往复运动,达到抽油目得,设计如下图,具体代码见附件、
图9。
抽油杆运动设计图
2.3、2、6油桶仿真设计
油桶以圆角矩形代替,设置黄色动态填充来实现油桶装油得效果,并实现实时控制。
当抽油杆上行程时油桶装油,对应变量随瞬时动作加上一定值,此处设为2;
当下行程时油桶油量不变,并且随时反馈油桶信息,设置变量Tag4来指示油量,并连接I/O域来显示;
当油桶装满时,系统停止运行,闪亮报警指示灯,并提示“油桶已满请更换”,点击更换油桶后,油桶才清空,点击启动按钮后系统才重新正常运行。
主要过程如下图,具体代码见附件、
图10、油桶仿真设计过程图
2、7控制台构建及实现过程
如下图11所示,控制台包含2个指示灯、3个I/O域来显示端口、启动关闭等按钮。
实现启动关闭控制并指示(绿灯)、报警指示(红灯)、更换油桶控制、变量记录与报警记录显示控制。
其中启动关闭按钮与运行指示灯与“tag1”变量链接,启动时置1,指示灯闪亮绿色;
报警指示灯与“tag2”变量链接,油桶装满时闪亮红色;
“更换油桶"
按钮与“tag3”链接,按下置1,并更换油桶;
变量记录与报警记录按钮控制两记录列表得显现,左键单击显现,右键单击隐藏。
图11。
控制台效果图
3、变量设置与作用
变量名称
变量属性
作用
Tag1
二进制变量
控制整个系统得启动与停止
Tag2
报警指示变量
Tag3
油桶更换置1
Tag4
无符号8位值
油量指示变量
VC
控制变量记录显示
AC
控制报警记录显示
qubing
32位浮点数
曲柄所转位值显示变量
四、变量记录
4、1变量记录得实现
Step1:
在WinCC初界面,进入变量记录对话框,并在过程值归档中建立process档,如下图12所示:
图12、变量记录设置过程图1
Step2:
点开process,并建立需要记录得各变量。
图13、变量记录设置过程图2
Step3:
在主界面编辑添加控件,及WinCConline TableControl(classic)
图14。
变量记录设置过程图3
Step4:
点开属性对话框,如图添加需要记录得各变量,并选择对应变量。
图15。
变量记录设置过程图4
2变量记录得内容及展示
本变量记录记录了油量及曲柄位置得实时变化,效果如图16所示。
图16.变量记录内容显示
五、报警记录
5.1报警记录得实现
Step1:
在WinCC初界面,进入报警记录对话框,建立tag1、tag2、tag3变量得报警链接,并设置报警信息文本分别为:
“系统已停止运行!
!
”、“油桶已满请更换!
!
"
、“油桶已更换”如下图12所示:
图17、报警记录设置过程图1
图18。
报警记录设置过程图2
Step2:
界面添加“WinCC AlarmControl”,并移动到适当位置。
双击打开属性对话框在消息列表添加消息文本,如图19所示。
图19、报警记录设置过程图3
5、2报警记录得内容及展示
图20。
报警记录内容显示
6、课程感想
通过本次课程设计,本小组对WinCC组态软件有了更深刻得了解与更熟练得应用,组态就就是用应用软件中提供得工具、方法来完成工程中某一具体任务得过程,目前组态软件被广泛应用于工业控制领域。
组态软件依据自身得过程数据库下连各种硬件设备,并通过动态人机界面将采集处理得数据展现给用户或者传递给其它应用程序。
组态软件得出现由于其预先提供了各种常用组件与相关设备驱动,一方面将监控系统设计得难度大为降低,开发相关系统得时间大为缩短,另一方面,由于可以自由连接多种设备用户可以依据需要设计出成本最优得工程。
ﻫ组态软件在工业自动化领域应用十分广泛,随着工业、信息化、智能化得高速发展,wincc组态软件在今后得应用中将会更加广泛。
因此我们学好此课程,熟练掌握组态软件得使用方法就是至关重要得。
通过本次课程设计让我对这学期组态软件得学习进行了更全面总结,将学习到得理论知识应用到实践中去,使我对WinCC组态软件得了解更加深刻使用更加熟练。
ﻫ在本次课程设计中,也遇到了很多问题,例如软件安装后不能使用,为了更好得完成本次课程设计,我重装了系统。
组态各种控制画面得过程中也遇到种种问题,趋势画面不能正常显示等等。
不过在我得不懈努力下以及老师同学得帮助下,再加上自己在网上图书馆查阅了大量资料,最终克服了重重困难完成了本次课程设计。
ﻫ 通过本次课程设计使我领悟到:
要想学好一样东西,自己就必须付出百分之百得努力,在老师给出学习方向以及方法得前提下,还需要我们自己进行探索,只有学到手得知识才真正属于自己!
参考文献
[1]刘华波、组态软甲WinCC及其应用、北京:
机械工业出版社,2009、7
[2]朱玉。
机械综合课程设计、北京:
机械工业出版社,2012,3
附录
各构件c动作代码
曲柄
#include”apdefap、h"
long_main(char*lpszPictureName,char* lpszObjectName,char*lpszPropertyName)
{
staticint a,b;
staticinti,k;
k=GetTagSWord("tag1"
);
if(k==1)
{
if (i>
0)
i=—1;
if(i==—1)
a=a;
if(i==—2)
a=a+30;
i=-2;
b=a/360;
SetTagFloat("qubing"
a*3、14/180-b*6。
28);
returna;
}
else
{
b=a/360;
SetTagFloat("
qubing”,a*3。
14/180—b*6、28);
returna;
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
节点1
1X:
#include ”apdefap、h"
long_main(char* lpszPictureName,char*lpszObjectName,char*lpszPropertyName)
static int a;
staticint i;
static intk;
k=GetTagSWord("
tag1”);
if(k==1)
if (i<
=13)
i++;
if(i==1)
a=380;
if(i==2)
a=360;
if(i==3)
a=330;
if(i==4)
a=300;
if(i==5)
a=280;
if(i==6)
a=270;
if(i==7)
a=280;
if(i==8)
a=300;
if(i==9)
if(i==10)
if(i==11)
a=380;
if(i==12)
a=390;
if(i==13)
a=380;
if(i>
12)
i=1;
returna;
else
if(i==0)
a=380;
returna;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2、2 Y:
#include”apdefap。
h"
long_main(char*lpszPictureName, char*lpszObjectName, char* lpszPropertyName)
staticinta;
static inti;
staticintk;
k=GetTagSWord(”tag1”);
if(k==1)
if(i<=13)
i++;
if(i==1)
a=460;
if(i==2)
a=480;
if(i==3)
a=490;
if(i==4)
a=480;
if(i==5)
a=460;
if(i==6)
a=430;
if(i==7)
a=400;
if(i==8)
a=380;
if(i==9)
a=370;
if(i==10)
a=380;
if(i==11)
a=400;
if(i==12)
a=430;
if(i==13)
a=460;
if (i>12)
returna;
else
if (i==0)
a=460;
returna;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3。
连杆
3.1X:
#include "apdefap、h"
long_main(char*lpszPictureName, char*lpszObjectName,char*lpszPropertyName)
staticinta;
staticinti;
static intk;
k=GetTagSWord(”tag1");
if(k==1)
if(i<
=13)
if(i==1||i==11||i==13)
a=390;
if(i==6)
a=280;
if(i==12)
a=400;
if(i==2||i==10)
a=370;
if(i==3||i==9)
a=340;
if(i==4||i==8)
a=310;
if(i==5||i==7)
a=290;
if(i>
i=1;
returna;
else
if(i==0)
a=390;
returna;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2Y:
#include”apdefap.h"
long_main(char*lpszPictureName,char*lpszObjectName, char*lpszPropertyName)
static int a;
staticinti;
staticintk;
k=GetTagSWord(”tag1"
if(k==1)
if(i<=13)
if(i==1||i==7||i==13)
a=250;
if(i==4)
a=340;
if(i==10)
a=160;
if(i==2||i==6)
a=280;
if(i==3||i==5)
a=310;
if(i==12||i==8)
a=220;
if(i==9||i==11)
a=190;
if(i〉12)
return a;
{if(i==0)
a=250;
returna;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3.3宽度:
#include"apdefap。
long_main(char*lpszPictureName,char*lpszObjectName, char*lpszPropertyName)
static int a;
staticinti;
staticint k;
k=GetTagSWord(”tag1"
if (k==1)
if (i<=13)
i++;
if(i==1||i==13)
a=130;
if(i==2)
a=150;
if(i==8)
a=210;
if(i==10)
a=170;
if(i==11)
a=140;
if(i==12)
a=120;
if(i==3||i==9)
a=190;
if(i==4||i==7)
a=230;
if(i==5||i==6)
a=240;
12)
i=1;
return a;
else
{if(i==0)
a=130;
return a;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4高度:
#include "apdefap。
h"
long_main(char*lpszPictureName, char*lpszObjectName,char*lpszPropertyName)
static inta;
staticinti;
staticint k;
k=GetTagSWord(”tag1”);
if(k==1)
if(i〈=13)
if(i==1||i==13||i==11||i==12)
a=220;
if(i==2)
if(i==4)
a=150;
if(i==8)
a=170;
if(i==10)
a=230;
if(i==3||i==9)
a=190;
if(i==5||i==6||i==7)
a=160;
if(i>
i=1;
returna;
if(i==0)
a=220;
returna;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4、节点2
位置x:
#include"apdefap、h”
long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName)
static inta;
static inti;
staticintk;
k=GetTagSWord(”tag1");
if(k==1)
if (i〈=13)
i++;
if(i==1||i==2||i==6||i==7||i==8||i==12||i==13)
a=510;
if(i==3||i==5||i==9||i==11)
a=520;
if(i==4||i==10)
a=530;
else
if(i==0)
a=510;
returna;
位置Y:
#include ”apdefap、h"
long_main(char*lpszPictureName,char*lpszObjectName,char* lpszPropertyName)
staticinta;
static inti;
static int k;
k=GetTagSWord("
tag1”);
if(k==1)
if (i〈=13)
if(i==1||i==7||i==13)
a=240;
if(i==3||i==5)
a=300;
if(i==2||i==6)
a=270;
if(i==4)
a=330;
if(i==8||i==12)
if(i==9||i==11)
a=180;
a=150;
if(i〉12)