隨著建筑設計中樓宇智能化技術的發展,大型建筑群的供水系統也實現計算機的遠程集中監控,以下介紹一個計算機監控的抽水系統,它采用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**\r\n");
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**\r\n”;
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;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
//轉換為BYTE型數組
for(k=0;k<len;k++)
//將數組轉換為Cstring型變量
{ BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
//將字符送入臨時變量strtemp存放
str = str + strtemp;
//轉換完成后賦值給字符串str
}
}
2.2計算機與PLC的通信幀
抽水監控系統的設計關鍵之一是計算機與PLC的通信幀,PLC的通信系統的基本協議規定通信幀有嚴格的格式,本系統采用松下的PLC。上述Read_x2()指令函數中的"%01#RCSR0000**\r\n"為計算機發出讀PLC的x2狀態的通信幀,功能說明如下表2:
通信幀 |
% |
01# |
RCS |
R0000 |
** |
\r\n |
說明 |
通信標志 |
地址 |
命令碼,讀接點 |
接點編號 |
效驗碼,不效驗時用“*”代替 |
結束碼 |
2.3計算機與PLC的串行口連接
計算機與PLC的RS-232串行口有9和25個腳兩種,而每個腳位的功能各有不同,正確連線才能使通信成功。計算機和PLC的串行口一般為9腳,其定義和功能如下表3:
腳位 |
PC機RS-232,其9支腳位的定義 |
PLC上的RS-232,其9支腳位的定義 |
簡寫 |
意 義 |
簡寫 |
意 義 |
1 |
CD |
載波偵測 |
FG |
保護接地 |
2 |
RXD |
接收字符 |
SD |
傳送字符 |
3 |
TXD |
傳送字符 |
RD |
接收字符 |
4 |
DTR |
數據端備妥 |
RS |
要求傳送 |
5 |
CND |
地線 |
CS |
清除以傳送 |
6 |
DSR |
數據備妥 |
未用 |
|
7 |
RTS |
要求傳送 |
SG |
地線 |
8 |
CTS |
清除以傳送 |
CD |
載波偵測 |
9 |
RI |
響鈴偵測 |
|
|
計算機與PLC串行口連接通常有兩種,基于連接和基于不連接的信號接線方式如圖5所示:
2.4運用VC++6.0語言編程實現對計算機的串行口的讀寫
VC++6.0語言對計算機硬件有較好的控制能力,運用MSComm控件對計算機的串行口的讀寫控制。首先要對MSComm控件(假設名稱為MSComm1,其對應的控制變量為m_MSComm1)的幾個屬性進行設置。
m_MSComm1.SetCommPort(1);//設置通信端口
m_MSComm1.SetSettings("9600,n,8,1");
//設置通信的波特率、效驗方式、數據位、停止位
m_MSComm1.SetSthreshold(1);//設置要接受的字符數,當輸入緩沖區字符書達到設置值,觸發OnComm事件
m_MSComm1.SetPortOpen(TRUE);//打開通信端口
設置各項屬性后,運用MSComm控件對串行口進行讀寫,將讀到的內容寫入輸出緩沖區,再將輸入緩沖區的信息讀到程序去,計算機依據程序自動完成工作。
應用m_MSComm1.GetInput()和m_MSComm1. SetOutput()屬性就可以將計算機輸入緩沖區的信息讀到程序中和把程序中的信息輸出到計算機的輸出緩沖區。
VC++6.0語言的m_MSComm1.GetInput()和m_MSComm1. SetOutput()屬性發出和接收的是ColeSafeArray型數據,發送前要用SendString(CString m_strSend)實現轉換,接收后要用ReadString ()實現轉換為Cstring字符串。
PLC發出命令幀后,讀取PLC的返回幀需一定的時間,否則返回幀的信息還未到達輸入緩沖區,程序執行不正確的信息,所以在讀返回幀的程序前,設置等待時間,使用Sleep()讓程序處于休眠狀態等待完整的回幀的信息。
2.4.PLC程序的配置
1)在PLC程序要設置波特率、奇偶效驗方式、數據位、停止位為“ 9600,n,8,1”,與計算機程序一致。
2)在PLC程序要設置為允許計算機連接。
3)將程序下載到PLC后,還要將PLC斷電再接通電,通信設置才生效。
3.結束語:
運用計算機的高級語言與計算機硬件控制、計算機與PLC通信等技術,實現計算機遠程監控系統的設計,本文介紹的控制系統可作為一個控制模塊嵌入到大型的樓宇監控系統中;也可以根據企業生產過程的控制對象,修改相關的一些參數,作為工廠的在線監控系統。