微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 抽水系统的计算机监控设计

抽水系统的计算机监控设计

时间:12-19 来源:互联网 点击:
随着建筑设计中楼宇智能化技术的发展,大型建筑群的供水系统也实现计算机的远程集中监控,以下介绍一个计算机监控的抽水系统,它采用VC++6.0可视化编程,通过计算机与PLC的串行通信,由PLC不断采集被控对象的状况参数,返回计算机,计算机按照控制程序方式,监控被控制对象的运行。

1.抽水系统的组成与功能
1.1.抽水系统的组成

(1)抽水系统可视化界面结构如图1;
(2)相应的数据库结构如图2;
(3)系统共设计有八个人机对话窗体,具体功能如下表1:


序号

窗体名称

窗 体 功 能

1

登陆

为进入系统的登陆窗体,实现对操作员工号与密码的安全检查

2

抽水监控界面

为系统运行主窗体,实现对抽水的监控功能,分别设置有抽水方式选种栏、状态显示栏、系统示意图等

3

抽水记录查询

为抽水记录查询窗体,记录开机操作员、关机操作员、抽水方式、启动时间、停止时间、抽水时间数据

4

故障记录查询

为故障记录查询窗体,记录故障发生时的故障电流值、故障类型、故障时间

5

操作人员管理

为操作人员管理窗体,对操作人员的工号和密码管理。

6

保护整定

为保护整定窗体,可整定速断电流值,过流电流值和时限

7

故障报警

为故障提示窗体

8

打印

打印窗体

(4)硬件配置
系统的硬件配置如图3所示,PLC用于开关量的输入与输出、电流数据输入,由PLC的Y0输出的开关量控制接触器KM的状态,从而实现对抽水泵工作电源控制;而Y0的状态由PLC的R0继电器控制,通过计算机远程置位和复位R0继电器,实现远程控制;在现场按钮SB1和SB2也可以对R0继电器置位和复位,实现就地合闸和分闸;K1和K2红外线接近开关分别作为满水和缺水的信号输入;抽水泵的工作电流由电流互感器变换为0-5A,再经电流变送器进一步变换为合适A/D输入的电流。 A/D转换后的数字量存放在专用的WX9中,供远程监控计算机的数据采集。

1.2.抽水监控系统的软件设计与功能

(1)抽水监控系统的软件程序流程图如图4所示。
(2)具有的电流速断和定时限过流保护功能,当计算机检测得到的电流数据大于速断电流整定值,则计算机瞬时发出分闸命令;如果大于过电流整定值,延时发出预告信号,报警后,在设定时间内不能恢复正常,计算机发出分闸命令。
(3)建立数据库,记录抽水系统开机、关机操作员的编号、分合闸的时间、抽水方式;故障时,记录保护动作时间、动作电流值和故障类型。
(4)抽水监控系统有具有手动,自动,定时三种抽水控制方式。选择手动时,计算机在系统启动时,直接发送合闸或分闸指令;选择自动方式时,系统启动后,计算机采集缺水信号,若接到缺水信号将发送合闸指令,开始抽水后,等待满水信号,若满水,则发送分闸指令;当选择定时方式时,系统等待设置的启动时间到,自动向抽水泵发送合闸指令;同样系统也可以等待设置的停止时间到,自动向抽水泵发送分闸指令。
(5)操作员进入系统和退出系统需要进行登陆检查,采用安全措施进入和退出系统。登陆系统后,操作员可以修改自己的密码,只有管理员有权注册新的操作员。
(6)系统运行的仿真示意图,实时显示抽水系统的工作状态,在计算机监控窗体增加了灯光和流程动画,直观地显示系统的运行状态,更好展现可视化的效果。

2.抽水监控系统设计的技术关键
2.1抽水监控系统的核心程序

抽水监控系统的核心程序为系列函数:发出通信指令函数,如其中读x2状态的函数Read_x2();字符串转换并发送函数SendString(CString m_strSend);接收信息并转换字符串函数ReadString ()等。
计算机发出查询x2状态通信帧时,调用SendString(CString m_strSend)函数,将通信帧转换数据类型,再用SetOutput函数发送出去;PLC接收到信息后,自动返回x2的状态,计算机监测到输入缓冲区字符数到指定个数,调用ReadString()函数,接收并转换为Cstring格式的字符串。
void CCSXTAView::Read_x2()
{ m_com1.SetOutBufferCount(0);
m_com1.SetInBufferCount(0);
SendString("%01#RCSR0000**");
Sleep(100);
m_in=m_com1.GetInBufferCount();
ReadString();
x2=m_strRead;
x2=x2.Mid(6,1);
}
void CCSXTAView::SendString(CString m_strSend)
{ char TxData[100];
CString m_strSend;
m_strSend=“%01#WCSR00021**”;
int Count = m_strSend.GetLength();
for(int i = 0; i < Count; i++)
TxData[i] = m_strSend.GetAt(i);
CByteArray array;
array.RemoveAll();
array.SetSize(Count);
for(i = 0; i < Count; i++)
array.SetAt(i, TxData[i]);
m_MSComm1.SetOutput(COleVariant(array));//发送
}
void CCSXTAView::ReadString ()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An
//8-bit integerthat is not signed.
CString strtemp, str;
str.Empty();
strtemp.Empty();
variant_inp = m_MSComm1.GetInput();
//读缓冲区
safearray_inp = variant_inp;
//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();
//得到有效数据长度
for(k=0;ksafearray_inp.GetElement(&k,rxdata+k);
//转换为BYTE型数组
for(k=0;k//将数组转换为Cstring型变量
{ BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
//将字符送入临时变量strtemp存放
str = str + strtemp;
//转换完成后赋值给字符串str
}
}
2.2计算机与PLC的通信帧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top