-
测控网络课程设计
一、实践要求
本次实践以开发
DCS
测控系统为最终目的,要求掌握
DCS
测控系统的工作原理,学
习组态王工控组态软件的使用方法,<
/p>
根据要求完成工程组态;
掌握
MODBU
S
通信协议的原
理,开发具有
MODB
US
通讯功能的智能仪表,最终完成和组态工程之间的通讯。
二、实践内容
分为两大部分:
1
、组态王基本操作
2
、
MODBUS
通讯
具体内容:
(
1
)
p>
熟悉组态王软件安装,
基本开发环境,
采用
构建简单的工程
(采用仿真数据和设备,
工程应包含
PID
功能),计划时间
1
天;
(
2
)
p>
根据罐区工艺的要求,完成相应的组态工程,实现对原油储罐的监控,计划时间
2
天;
(
3
)
p>
掌握
MODBUS
通讯协议的工作原理,在
MSP430F5438
单片机上编程实现
MODBUS
客户
端服务程序,
要
求通过串行口将现场的温度、
泵状态、
流量等参数上传到上位机
上,
计划时间
3
天。
< br>
(
4
)
p>
在单片机上编程实现流量、温度上下限及仪表地址和波特率等参数设置功能,同时
能从上位机对仪表参数进行设置,计划时间
2
天。
(
5
)
p>
优化设计,要求当出现通讯错误时在上位机和单片机上都要做出相应的反应,计划
时间
0.5
天。
(
6
)
①
上位机采用高级语言编程,实现对现场智能仪表的控制。
②
熟悉现场总线测控网络系统,
p>
搭建
PROFIBUS
网络,
实现对
ET200S
和
S7
-200
的控制。
组态王部分
一、设计要求
根据罐区工艺的要求,
完成相应的组态工程,实现对原油储罐的监控。
1
、罐区工艺流程图
1
2-
储油罐进口电动阀;
3-
储油罐排污电动阀;
4-
储油罐出口电动阀;
5-
泵
图
1
p>
:罐区工艺流程图
2
、具体要求
(
1
)监测各罐的液位(
0-20m
)
/ (0-1m)/
温度
(0-100
度
)
(现场
仪表
4-20mA
输出)
。
(
2
)根据各罐液位控
制各罐出口电动阀(
H>16m,
关进口阀,选择最低液位的
罐进油;
H<2m,
关出口阀
,
选择最高液位的罐出油)
,手动遥控排污阀。
液位
H>15.5m
高报警
, H>17m
高高报警;
< br>液位
H<2m
低报警
,
H<1.5m
低低报警。
界位
p>
>1m
高报警
,
界位
>1.5m
高高报警
;
界位
<0.5m
低报警
, H<0.2m
低低报警
;
(<
/p>
3
)启动泵组设置出入口流量(
100M
/h,200M
/h,250M
/h<
/p>
)
3
3
3
二、设计内容
(一)组态数据库:
数据库
-----
数据词典
2
(二)组态画面
画面
1
:工艺流程总画面
对画面的基本说明:
3
主要功能
:对油罐液位的监测。
p>
泵总开关
控制进口的
3
个泵的总开和总关;
泵总关闭
控
制出口的
3
个泵的总关和总开;
p>
当同时按下
泵提示
和某一个泵的按钮,显示
该泵的详细信息;
液位报警和界位
报警
时记录相应的报警事件;
液位实
时和历史曲线
记录油罐液位的变化情况。
画面
2
:各泵弹出式放大画面(包括参状态
/
型号等)
,点击总画面上的泵弹出此画面
1
、编写事件命令语言:当同时按下泵提示和某
一个泵的按钮,显示该泵的参数信息。
2
、弹出画面
画面
3
:液
位
/
界位报警画面
报警设置:
4
低低、低、高、高高报警值设置:
液位报警画面:
< br>画面
4
:液位
/
温度
/
界位各一个实时趋势图和历史趋势图
实时趋势图:
选择工具箱中的
工具,在画面上绘制
一实时趋势曲线窗口。在曲线定
义选项卡中选择要实时反映的变量。
历史趋势图:
对于要以历史趋
势曲线形式显示的变量,必须设置变量的记录属性。在“定
义变量”
对话框中单击
“记录和安全区”
属性页,
< br>将不记录改为数据变化记录,
变化灵敏为:
0
。在工程浏览器窗口左侧的“工程目录显示区”中双击“系统配置”中的“历史数据记录”
5
选项,弹出“历史记录配置”对话框。
实时和历史趋势图:
画面
4<
/p>
:报表画面
(
液位
,
温度
,
界位
)
报表分为实时数据报表和历史数据报表。
6
(<
/p>
3
)优化设置
1
、组态操作权限
优先级分
1~999
级,
1
级最低
999
级最高。每个操作者的
优先级别只有一个。系统安全区
共有
64
个,用户在进行配置时。每个用户可选择除“无”以外的多个安全区,即一个用户
可
有多个安全区权限。
设置油罐用户组,将管理员、操作员看成
用户,并设置管理员优先级最高,
并设置相应的密
码。
配置
运行现象
登陆界面
2
、通过链接切换画面
增加报警画面、趋势图、报表画面,通过右侧链接
7
(
4<
/p>
)画面命令语言
变量说明:
g1
、
g2
、
g3
、
g4
代表每个油罐
的液位,
in
代表泵总开,
out
p>
代表泵总关,
in1
、
in2
、
in3
、
in4
代表每个油罐的入口阀门,
out1
、
out2
、
out3<
/p>
、
out4
代表每个油罐的出口阀门,<
/p>
clear1
、
clear2
、
clear3
、
cle
ar4
代表手动排污阀。
bengin1,2,3
和
bengout1,2,3
代表进口泵和出口泵。
num
代表泵输入总流量的比
num=bengin1*1 + bengin2*2 +
bengin3*2.5;
num1
代表泵输出总流量的比
num1=bengout1*1
+
bengout2*2
+
bengout3*2.5;
设置每个油罐跟液位相关的系数值
xishu1=0.25;
xishu2=0.2;
xishu3=0.15;
xishu4=0.3;
if(in==1 && num>0)
{
如果油罐
1
液位最低,增加油罐
1
的液位
if(g1<=g2
&&
g1<=g3
&&
g1<=g4
&&
g1<16)
{
in1=1;
in2=0;
in3=0;
in4=0;
g1=g1+num*xishu1;
}
else
{
如果油罐
2
液位最低,增加油罐
2
的液位
<
br>如果油罐 <
br>如果油罐 <
br>如果油罐 <
br>如果油罐
<
br>PLC
if(g2
&&
g2<=g3
&&
g2<=g4
&&
g2<16)
{
in1=0;
in2=1;
in3=0;
in4=0;
g2=g2+xishu2*num;
}
else
{
3
液位最低,增加油罐
3
的液位
if(g3
{
in1=0;
in2=0;
in3=1;
in4=0;
g3=g3+xishu3*num;
}
else
{
4
液位最低,增加油罐
4
的液位
if(g4
{
in1=0;
in2=0;
in3=0;
in4=1;
g4=g4+xishu4*num;
}
}
}
}
}
if(out==1 &&
num1>0)
{
如果油罐
1
p>
液位最高,降低油罐
1
的液位
if(g1>=g2
&&
g1>=g3
&&
g1>=g4
&&
g1>2)
{
out1=1;
out2=0;
out3=0;
out4=0;
g1=g1-xishu1*num1;
}
else
{
8
如果油罐
2
液位最高,降低油罐
2
的液位
if(g2>=g1
&&
g2>=g3
&&
g2>=g4
&&
g2>2)
{
out1=0;
out2=1;
out3=0;
out4=0;
g2=g2-xishu2*num1;
}
else
{
3
液位最高,降低油罐
3
的液位
if(g3>=g1
&&
g3>=g2
&&
g3>=g4
&&
g3>2)
{
out1=0;
out2=0;
out3=1;
out4=0;
g3=g3-xishu3*num1;
}
else
{
4
液位最高,降低油罐
4
的液位
if(g4>=g1
&&
g4>=g2
&&
g4>=g3
&&
g4>2)
{
out1=0;
out2=0;
out3=0;
out4=1;
g4=g4-xishu4*num1;
}
}
}}}
if(clear1==1
||
clear2==1
||
clear3==1
||
clear4==1)
手动排污
{
g1=g1-clear1*0.1;
g2=g2-clear2*0.1;
g3=g3-clear3*0.1;
g4=g4-clear4*0.1;
//jiewei1=jiewei1-0.1*clear1;
//jiewei2=jiewei2-0.1*clear2;
//jiewei3=jiewei3-0.1*clear3;
//jiewei4=jiewei4-0.1*clear4;
}
如果液位大于
16
,关闭相应的进口阀
if(g1>=16)
{in1=0;}
if(g2>=16)
{in2=0;}
if(g3>=16)
{in3=0;}
if(g4>=16)
{in4=0;}
如果液位小于
2<
/p>
,关闭相应出口阀
if(g1<=2)
{out1=0;}
if(g2<=2)
{out2=0;}
if(g3<=2)
{out3=0;}
if(g4<=2)
{out4=0;}
if(num==0)
{
in1=0;
in2=0;
in3=0;
in4=0;
}
if(num1==0)
{
out1=0;
out2=0;
out3=0;
out4=0;
}
9
(5)
运行总画面
(
6
p>
)与
PLC
通信设置
在工程浏览器中选择设备
—
com
1
—
新建,如下图,配置
com
口跟
PLC
连接。
设置
bengin1,2,3
和
bengout1,2,3
分别与
Q0.0
等相联系,
可观察到
输出指示灯会随着这
10
些变量的改变和改变。
三、组态王部分总结
组态王是组态王
软件是一种通用的工业监控软件,
它融过程控制设计、
现场操作
以及工
厂资源管理于一体,
将一个企业内部的各种生产系统和应
用以及信息交流汇集在一起,
实现
最优化管理,操作方便,
p>
界面美观。
组态王软件结构由工程管理器、工程浏览器及运行系统<
/p>
三部分构成。通过这次课程设计,我们学会了如何建立一个组态王工程,如何设计界面,编
写命令语言、以及报警事件、趋势曲线和报表的相关制作,权限的设置,以及与实际设备
的
简单通信,
通过本次实习,
我想在以
后工作中,
我们会更好的应用此例软件,
完成工业监控。
智能仪表部分
一、
MODBUS
ASCII
和
MODBUS
RTU
通讯协议简介
Modbus
协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、
控制器经由网络
(例如以太网)
和其它设备之间可
以通信。
此协议定义了一个控制器能认识
使用的消息结构
,
而不管它们是经过何种网络进行通信的。它描述了控制器请求访问其
它设
备的过程,
如果回应来自其它设备的请求,
以及怎样侦测错误并记录。
它制定了消息域格局
和内容
的公共格式。
两种串行传输模式:
RTU
模式和
ASCII
模式。
RTU
传输模式:
当设备使用
RTU
(Remote
Terminal
Unit)
模式在
Modbus
串行链路通信,
报文中每个
8
位字
节含有两个
4
位十六进制字符。
这种模式的主要优点是较高的数据密度,
p>
在相同的波特率下
比
ASCII
模式有更高的吞吐率。每个报文必须以连续的字符流传送。
RTU
模式每个字节
( 11
位
)
的格式为
:
编码系统
:
8
位二进制,报文中每个
8
位字节含有两个
4
位十六进制字符<
/p>
(0
–
9
,
p>
A
–
F
。
)
Bits
per
Byte:
1
起始位,
8
数据位,首先发送最低有效位,
1
位
作为奇偶校验,
1
停止位。
ASCII
传输模式
当
Modbus
串行链路的设备被配置为使用
ASCII (American
Standard Code for
Information
Interchange)
模式通信时,
报文中的每个
8
位子节以两个
ASCII
字符发送。
ASCII
模式每个字节
( 10
位
)
的格式为
:
编码系统
:
十六进制,
ASCII
字符
0-9
,
A-F
。
报文中每个
ASCII
字符含有
1
十六进制字符。
Bits per
Byte: 1
起始位,
7
数据位,首先发送最低有效位,
1
位奇偶校验,
1
停止位。
11
03
读保持寄存器
上位机发送数据格式:
“
:
”
ADDRESS 03 ADDRH ADDRL NUMH NUML LRC 0X0D 0X0A
正确时变频器返回数据格式:
“
:
“
ADDRESS 03 BYTECOUNT DATA1 DATA2 DATA3 DATAN LRC
0D 0A
06
写单个保持寄存器值
上位机发送数据格式:
“
:
“
ADDRESS 06 ADDRH ADDRL DATAH DATAL LRC 0X0D 0X0A
正确时变频器返回数据格式:
“
:
“
ADDRESS 06 ADDRH ADDRL DATAH DATAL LRC 0X0D 0X0A
二、
MODBUS
ASCII
编程以及与组态王通信
1
、变量定义
unsigned char ERR[21]=
//
出错时显示字符
unsigned char RX[32];
//
单片机接受数据数组
unsigned char TX[32];
//03
功能时单片机发送数据数组
unsigned char TX6[32];
//06
功能时单片机发送数据数组
unsigned char Buf[10];
//
存储数据的数组
unsigned int flag;
//
上位机发送数据标志位
unsigned int flag1;
//
单片机应答数据标志位
unsigned int flow;
//
流量值
unsigned int
temperature;
//
温度值
unsigned char LRC;
//
上位机发送数据校验码
unsigned char LRCt;
//
单片机应答数据校验码
2
、通过
UART
中断
完成上位机给单片机发送
编程思路:
通过<
/p>
UART
中断,实现上位机给单片机发送数据,当单片机接受到:
,表示上位机要向单
片机发送指令,相应标志位置
1
,当再次发生中断时,就开始接受数据,同时存入
RX[32]
的
数组里,直到接收到回车换行符,则发送命令结
束。此时发送标志位置
1
,进入应答程序。
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
while (!(UCA1IFG &
UCTXIFG)); //
判断是否发送完毕
if(UCA1RXBUF == ':') //
:为起始标志,如果开始,标志位
flag
置位
{
flag = 1;
}
if(flag==1)
//
当标志位
flag
置位说明发送命
令开始,开始接受命令数据
{
12
-
-
-
-
-
-
-
-
-
上一篇:ISO3166标准国际代码
下一篇:直流无刷电机软件设计开发文档