中国石油大学华东测控专业课程设计实习报告Word格式.docx
《中国石油大学华东测控专业课程设计实习报告Word格式.docx》由会员分享,可在线阅读,更多相关《中国石油大学华东测控专业课程设计实习报告Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
二监控要求
(1)监测各罐的液位(0-20m)/(0-1m)/温度(0-100度)(现场仪表4-20mA输出)。
(2)根据各罐液位控制各罐出口电动阀(H>
16m,关进口阀,选择最低液位的罐进油;
H<
2m,关出口阀,选择最高液位的罐出油),手动遥控排污阀。
液位H>
15.5m高报警,H>
17m高高报警;
液位H<
2m低报警,H<
1.5m低低报警。
界位>
1m高报警,界位>
1.5m高高报警;
界位<
0.5m低报警,H<
0.2m低低报警;
(3)启动泵组设置出入口流量(100M3/h,200M3/h,250M3/h)
三硬件配置
泵
现场变送器
四组态要求
(一)组态逻辑设备。
(先用仿真设备,调试完后改用实际设备)
(二)组态数据库
(三)组态画面
画面1:
工艺流程总画面
画面2:
各泵弹出式放大画面(包括参状态/型号等),点击总画面上的泵弹出此画面;
画面3:
液位/温度/界位各一个实时趋势图和历史趋势图;
画面4:
报表画面(液位,温度,界位),定时打印(早上8:
00);
(四)组态操作权限
测控网络课程设计
组员:
×
专业班级:
测控技术与仪器专业
一、实践要求
本次实践以开发DCS测控系统为最终目的,要求掌握DCS测控系统的工作原理,学习组态王工控组态软件的使用方法,根据要求完成工程组态;
二、实践内容
组态王部分
一、设计要求
根据罐区工艺的要求,完成相应的组态工程,实现对原油储罐的监控。
1、罐区工艺流程图
2、具体要求
二、设计内容
(一)组态画面的建立
(总画面)
(历史曲线及实时曲线)
(数据报表)
(报警画面)
(泵参数的弹出画面)
本次实验是我们第一次要求用组态王软件来进行组态画面的组态,之前用的组态软件是MCGS,虽然大同小异,但是细微的差别,画面操作的差别还是存在的。
我们开始从最基本的步骤学起。
最后做到了熟练的操作组态王软件并且进行画面演示及编程。
这是我们收获最大的地方。
(二)组态画面中变量的定义及逻辑关系的连接
1、变量定义
在画面绘制的过程中,随着问题的深入,我们需要增加变量来完成某些内容(如泵信息的显示需定义泵信息),其他变量中编号1—4代表油罐1—4的所有内容(包括液位、界位、阀门等),泵1—3代表入口泵,泵4—6代表出口泵。
这样的分类比较方便变量与画面中油罐的对应。
在实现液位历史曲线及实时曲线的时候需定义卷动和跨度。
2、逻辑连接
油罐液位连接
数据标签的液位显示
泵连接
泵提示及画面弹出
各泵弹出式放大画面(包括参状态/型号等),点击总画面上的泵弹出此画面
此部分需要编写事件命令语言:
当同时按下泵提示和某一个泵的按钮,显示该泵的参数信息。
对画面的基本说明:
主要功能:
对油罐液位的监测。
泵总开关控制进口的3个泵的总开和总关;
泵总关闭控制出口的3个泵的总关和总开;
当同时按下泵提示和某一个泵的按钮,显示该泵的详细信息;
液位报警和界位报警时记录相应的报警事件;
液位实时和历史曲线记录油罐液位的变化情况。
液位/界位报警画面
报警设置:
低低、低、高、高高报警值设置:
液位报警画面:
2、通过链接切换画面
增加报警画面、趋势图、报表画面,通过右侧链接
(4)画面命令语言
泵输入总流量=泵1*1+泵2*2+泵3*2.5;
泵输出总流量=泵4*1+泵5*2+泵6*2.5;
//设置每个油罐跟液位相关的系数值
系数1=0.25;
系数2=0.2;
系数3=0.15;
系数4=0.3;
if(泵总开==1&
&
泵输入总流量>
0)
{
//如果油罐1液位最低,增加油罐1的液位
if(液位1<
=液位2&
液位1<
=液位3&
=液位4&
16)
进口阀1=1;
进口阀2=0;
进口阀3=0;
进口阀4=0;
液位1=液位1+泵输入总流量*系数1;
}
else
//如果油罐2液位最低,增加油罐2的液位
if(液位2<
液位1&
液位2<
进口阀1=0;
进口阀2=1;
液位2=液位2+系数2*泵输入总流量;
else
//如果油罐3液位最低,增加油罐3的液位
if(液位3<
液位3<
液位2&
进口阀3=1;
液位3=液位3+系数3*泵输入总流量;
//如果油罐4液位最低,增加油罐4的液位
if(液位4<
液位4<
液位3&
进口阀4=1;
液位4=液位4+系数4*泵输入总流量;
if(泵总关==1&
泵输出总流量>
//如果油罐1液位最高,降低油罐1的液位
if(液位1>
液位1>
2)
出口阀1=1;
出口阀2=0;
出口阀3=0;
出口阀4=0;
液位1=液位1-系数1*泵输出总流量;
//如果油罐2液位最高,降低油罐2的液位
if(液位2>
=液位1&
液位2>
出口阀1=0;
出口阀2=1;
液位2=液位2-系数2*泵输出总流量;
//如果油罐3液位最高,降低油罐3的液位
if(液位3>
液位3>
出口阀3=1;
液位3=液位3-系数3*泵输出总流量;
//如果油罐4液位最高,降低油罐4的液位
if(液位4>
液位4>
出口阀4=1;
液位4=液位4-系数4*泵输出总流量;
}}}
if(排污阀1==1||排污阀2==1||排污阀3==1||排污阀4==1)
//手动排污
液位1=液位1-排污阀1*0.1;
液位2=液位2-排污阀2*0.1;
液位3=液位3-排污阀3*0.1;
液位4=液位4-排污阀4*0.1;
//界位1=界位1-0.1*排污阀1;
//界位2=界位2-0.1*排污阀2;
//界位3=界位3-0.1*排污阀3;
//界位4=界位4-0.1*排污阀4;
//如果液位大于16,关闭相应的进口阀
=16)
{进口阀1=0;
{进口阀2=0;
{进口阀3=0;
{进口阀4=0;
//如果液位小于2,关闭相应出口阀
=2)
{出口阀1=0;
{出口阀2=0;
{出口阀3=0;
{出口阀4=0;
if(泵输入总流量==0)
if(泵输出总流量==0)
(5)运行总画面
三、组态王部分总结
组态王是组态王软件是一种通用的工业监控软件,了解并掌握这个软件对我们以后工作会有很大的帮助。
在实习过程中,我能体会到与其他组态软件相比,组态王的优势是集过程控制设计、现场操作以及工厂资源管理于一体,将一个企业内部的各种生产系统和应用以及信息交流汇集在一起,实现最优化管理,操作方便,界面美观。
通过本次课程设计,我们学会了如何建立一个组态王工程,如何设计界面,如何编写命令语言、以及报警事件、趋势曲线和报表的相关制作,以及与实际设备的简单通信。
虽然我知道我所学到的只是冰山一角,但是这给我了一个学习奋斗的方向,使我更加知道前方的路还很漫长。
需要学习的东西还有很多。
智能仪表部分
对于此部分,我们仅做了一些了解,并没能最终实现实验要求,这是我们最遗憾的事情,不过我们对modbus协议又有了一个更加直观本质的认识。
相信对我们日后的学习生活很有很大的帮助。
一、MODBUSASCII和MODBUSRTU通讯协议简介
Modbus协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
两种串行传输模式:
RTU模式和ASCII模式。
二、MODBUSASCII编程以及与组态王通信
unsignedcharERR[21]="
InputLRCERROR!
"
;
//出错时显示字符
unsignedcharRX[32];
//单片机接受数据数组
unsignedcharTX[32];
//03功能时单片机发送数据数组
unsignedcharTX6[32];
//06功能时单片机发送数据数组
unsignedcharBuf[10];
//存储数据的数组
unsignedintflag;
//上位机发送数据标志位
unsignedintflag1;
//单片机应答数据标志位
unsignedintflow;
//流量值
unsignedinttemperature;
//温度值
unsignedcharLRC;
//上位机发送数据校验码
unsignedcharLRCt;
//单片机应答数据校验码
2、通过UART中断完成上位机给单片机发送
编程思路:
通过UART中断,实现上位机给单片机发送数据,当单片机接受到:
,表示上位机要向单片机发送指令,相应标志位置1,当再次发生中断时,就开始接受数据,同时存入RX[32]的数组里,直到接收到回车换行符,则发送命令结束。
此时发送标志位置1,进入应答程序。
#pragmavector=USCI_A1_VECTOR
__interruptvoidUSCI_A1_ISR(void)
while(!
(UCA1IFG&
UCTXIFG));
//判断是否发送完毕
if(UCA1RXBUF=='
:
'
)//:
为起始标志,如果开始,标志位flag置位
{
flag=1;
}
if(flag==1)//当标志位flag置位说明发送命令开始,开始接受命令数据
RX[0]='
if(UCA1RXBUF!
=0x0D&
UCA1RXBUF!
=0x0A)//只要不是回车换行符,就依次将数据存入接受数组RX中,同时计数变量tempnumb加1
tempnumb++;
RX[tempnumb]=UCA1RXBUF;
if(UCA1RXBUF==0x0D)//若是回车
RX[tempnumb]='
D'
;
if(UCA1RXBUF==0x0A)//若是换行
A'
flag=0;
//接受标志位清零
flag1=1;
//发送标志位置1
TTXX();
//调用发送数据函数
3、单片机通过UART中断向上位机发送应答指令
先计算上位机发送数据的校验码,如果和发送的校验码相同,单片机再应答。
设置寄存器地址0001,存储流量数据;
设置寄存器0002,存储温度数据。
然后判断是03号功能还是06号功能,若是03号功能,按照相应的格式发送数据,若是06号功能,按照命令更改数据,并返回应答命令。
voidTTXX()
inti;
intj;
unsignedintb;
unsignedintc;
unsignedintd;
In_LRC();
//计数上位机发送命令校验码
if(RX[8]=='
1'
)//如果地址为寄存器0001,发送流量数据
shitohex(flow);
2'
)//如果地址位寄存器0002,发送温度数据
shitohex(temperature);
if(RX[3]=='
0'
&
RX[4]=='
3'
)//如果是03号功能
if((LRCHi==RX[tempnumb-3])&
(LRCLo==RX[tempnumb-2]))//如果上位机发送校验码正确
for(b=0;
b<
=4;
b++)
{
TX[b]=RX[b];
temp=asciitohex(RX[tempnumb-4]);
//计算单片机要发送数据的字节数
TX[5]=hextoascii(((temp*2)>
>
4)&
0x0F);
TX[6]=hextoascii((temp*2)&
for(i=0;
i<
temp*4;
i+=2)
TX[7+i]=hextoascii(Buf[i]);
//要发送的数据
TX[8+i]=hextoascii(Buf[i+1]);
tempnumt=7+i;
//统计数据长度,用于计算校验码
Out_LRC();
//计算单片机发送数据校验码
TX[7+i]=LRCtHi;
TX[8+i]=LRCtLo;
TX[9+i]=0x0D;
TX[10+i]=0x0A;
for(j=0;
j<
=(10+i);
j++)//单片机发送数据
//判断是否发送完毕
UCA1TXBUF=TX[j];
else//如果校验码不正确,返回错误代码InputLRCERROR!
只能通过串口调试看到
ERR[19]='
8'
ERR[20]=TX[4];
for(d=0;
d<
=20;
d++)
//判断是否发送完毕
UCA1TXBUF=ERR[d];
elseif(RX[3]=='
6'
)//如果是06号功能
for(c=0;
c<
=tempnumb;
c++)
TX6[c]=RX[c];
UCA1TXBUF=TX6[c];
selflow(TX6[10]);
//设置流量值
seltemp(TX6[11]);
//设置温度值
flag1=0;
//单片机发送标志位清零
tempnumb=0;
//上位机发送数据计算值清零
上述程序非原创,我们在查看相关资料后初步的了解了要实现实验要求的基本思路。
实习心得总结:
通过本次的课程设计,我觉得这是一个将理论与实践联合的过程,通过我们学习的知识,加上具体的软硬件,实现要求的功能。
这也是我们在以后的工作中经常遇到的问题。
这给了我们一个学习锻炼的机会。
也更加深入的了解了我们专业的发展趋势及需要我们解决发现的问题。
我们主要的成果仅在组态王部分,对于组态部分,我们充分的掌握并且能够独立应用完成任务,这就是我们最大的收获。
对于MSP430单片机的MODBUS通讯协议,我们通过老师的讲解和网上的一些资料,进一步的有一些了解,总之,通过本次课程设计,我们锻炼了自学能力,发现问题和解决问题的能力,收获了知识,收获了我们大学时光中美好的回忆!