基于MMS的智能变电站源码(转)
转自:http://blog.sina.com.cn/s/blog_70c2b75601014ztp.html
附录C 服务器源程序
// TCP服务器程序Dlg.cpp : implementation file
#include "stdafx.h"
#include "TCP服务器程序.h"
#include "TCP服务器程序Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString str13;
CString track_str;
CString rec_id; //用来提示接收到的数据
CString send_str; //向Client发送是数据载体
CString text[12]; //用来存储12节点的参数
CString ch_para;
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CTCPDlg dialog
CTCPDlg::CTCPDlg(CWnd* pParent )
: CDialog(CTCPDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
n=0;
}
void CTCPDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CTCPDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_SOCKET,OnSocket)
ON_BN_CLICKED(IDC_SEND, OnSend)
ON_WM_TIMER()
END_MESSAGE_MAP()
//设备参数模拟
void Simulate()
{
int temp,i;
//断路器参数
int temperature[3],states[3];
for (i=0; i<3; i++)
{
temp = rand();
temperature[i] = 50 + temp;
states[i] = rand()%2;
text[i].Format("Temperature:%d℃ States:%d",temperature[i],states[i]);
}
//电流互感器参数
float current[4];
float temp_c;
int protect_c[4];
for (i=0; i<4; i++)
{
temp_c = (float)(70 + rand())/10;
current[i] = temp_c;
protect_c[i] = rand()%2;
text[i+3].Format("Current: %.1f A Protect_or_Not: %d",current[i],protect_c[i]);
}
//电压互感器参数
int voltage[4];
int temp_v;
int protect_v[4];
for (i=0; i<5; i++)
{
temp_v = 220 + (rand());
voltage[i] = temp_v;
protect_v[i] = rand()%2;
text[i+3+4].Format("Voltage: %d V Protect_or_Not: %d",voltage[i],protect_v[i]);
}
}
BOOL CTCPDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
SetTimer(1, 10000, 0);
//struct sockaddr addr; 端口和IP处理
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.S_un.S_addr=INADDR_ANY;
//启动CSocket
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2 );
WSAStartup(wVersionRequested, &wsaData);
s=::socket(AF_INET,SOCK_STREAM,0);
::bind(s,(sockaddr*)&addr,sizeof(addr));
::listen(s,5);
::WSAAsyncSelect(s,this->m_hWnd,WM_SOCKET,FD_ACCEPT|FD_READ);
GetDlgItem(IDC_TEXT)->EnableWindow(false);
GetDlgItem(IDC_SENDTEXT)->EnableWindow(false);
GetDlgItem(IDC_ADDR)->SetWindowText("服务器监听已经启动!");
GetDlgItem(IDC_TEXT)->SetWindowText("*******服务器连接*******\r\n");
GetDlgItem(IDC_TEXT)->GetWindowText(str);
str+="\r\n";
GetDlgItem(IDC_SENDTEXT)->GetWindowText(str1);
str+=str1;
GetDlgItem(IDC_TEXT)->SetWindowText(str);
return TRUE; // return TRUE unless you set the focus to a control
}
void CTCPDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CTCPDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CTCPDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
//socket动作处理函数
void CTCPDlg::OnSocket(WPARAM wParam,LPARAM lParam)
{
char cs[100]={0};
switch (lParam)
{
case FD_ACCEPT:
{
GetDlgItem(IDC_ADDR)->SetWindowText("服务器监听已经启动!!!!!");
str13.Format("\r\n建立连接……\r\n");
GetDlgItem(IDC_TEXT)->SetWindowText(str13);
int lenth=sizeof(add1);
s1 = ::accept(s,(sockaddr*)&add1,&lenth);
str13.Format("\r\n建立连接……\r\n连接成功\r\n");
GetDlgItem(IDC_ADDR)->SetWindowText(str13);
n = n+1;
str13.Format("\r\n有%d客户已经连接上了\r\n",n);
GetDlgItem(IDC_TEXT)->SetWindowText(str13);
str13 += ::inet_ntoa(add1.sin_addr);
str13 += "\r\n登陆\r\n";
GetDlgItem(IDC_TEXT)->SetWindowText(str13);
GetDlgItem(IDC_TEXT)->SetWindowText("\r\n连接成功\r\n客户端说:你好!");
}
break;
case FD_READ:
{
GetDlgItem(IDC_TEXT)->SetWindowText("接收数据……\r\n");
GetDlgItem(IDC_TEXT)->SetWindowText(str13);
CString num = "";
::recv(s1,cs,100,0);
GetDlgItem(IDC_TEXT)->GetWindowText(num);
num += "\r\n客户机";
num += (LPTSTR)::inet_ntoa(add1.sin_addr);
num += "对您说:";
num += (LPTSTR)cs;
//指令处理
if ( strncmp(cs, "0CHANGED", 8) == 0)
{
text[0] = (LPTSTR)cs;
text[0].Delete(0,8);
}
if (strncmp(cs, "1CHANGED",8) ==0)
{
text[1] = (LPTSTR)cs;
text[1].Delete(0,8);
}
if (strncmp(cs, "2CHANGED",8) ==0)
{
text[2] = (LPTSTR)cs;
text[2].Delete(0,8);
}
else
{
SetTimer(1,10000,0);
//对接收到的数据处理
if (!strcmp(cs, "0"))
{
rec_id.Format("\r\n0号断路器数据请求\r\n");
send_str = text[0];
}
if (!strcmp(cs, "1"))
{
rec_id.Format("\r\n1号断路器数据请求\r\n");
send_str = text[1];
}
if (!strcmp(cs, "2"))
{
rec_id.Format("\r\n2号断路器数据请求\r\n");
send_str = text[2];
}
if (!strcmp(cs, "3"))
{
rec_id.Format("\r\n0号电流耦合器数据请求\r\n");
send_str = text[3];
}
if (!strcmp(cs, "4"))
{
rec_id.Format("\r\n1号电流耦合器数据请求\r\n");
send_str = text[4];
}
if (!strcmp(cs, "5"))
{
rec_id.Format("\r\n2号电流耦合器数据请求\r\n");
send_str = text[5];
}
if (!strcmp(cs, "6"))
{
rec_id.Format("\r\n3号电流耦合器数据请求\r\n");
send_str = text[6];
}
if (!strcmp(cs, "7"))
{
rec_id.Format("\r\n0号电压耦合器数据请求\r\n");
send_str = text[7];
}
if (!strcmp(cs, "8"))
{
rec_id.Format("\r\n1号电压耦合器数据请求\r\n");
send_str = text[8];
}
if (!strcmp(cs, "9"))
{
rec_id.Format("\r\n2号电压耦合器数据请求\r\n");
send_str = text[9];
}
if (!strcmp(cs, "10"))
{
rec_id.Format("\r\n3号电压耦合器数据请求\r\n");
send_str = text[10];
}
if (!strcmp(cs, "11"))
{
rec_id.Format("\r\n4号电压耦合器数据请求\r\n");
send_str = text[11];
}
}
//跟踪信息的处理
track_str = send_str;
num = num + rec_id;
GetDlgItem(IDC_TEXT)->SetWindowText(num);
//自动调用发送数据函数向客户端发送数据
OnSend();
}
break;
}
}
//给客户机发送数据
void CTCPDlg::OnSend()
{
// TODO: Add your control notification handler code here
CString str = "*******";
if(str == " ")
{
MessageBox("消息不能为空!");
}
else
{
if(::send(s1,send_str.GetBuffer(1),strlen(send_str),0)!=SOCKET_ERROR)
{
str.Format("\r\n消息已经发送到客户端!\r\n");
str += "\r\n";
str += track_str;
}
else
{
str.Format("\r\n消息发送失败!\r\n");
str += track_str;
str += "\r\n";
}
GetDlgItem(IDC_TRACKEDIT)->SetWindowText(str);
}
}
void CTCPDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnTimer(nIDEvent);
//每秒钟数据刷新一下
Simulate();
//动态显示时、分、秒
COleDateTime time = COleDateTime::GetCurrentTime() ;
CString str ;
str.Format("%.2d:%.2d:%.2d" ,time.GetHour(), time.GetMinute(), time.GetSecond()) ;
//送到文本框中显示
GetDlgItem(IDC_SENDTEXT)->SetWindowText(str) ;
//动态显示年、月、日
COleDateTime data = COleDateTime::GetCurrentTime ();
CString s;
s.Format ("%.4d/%.2d/%.2d", data.GetYear (), data.GetMonth (), data.GetDay ());
//送到文本框中显示
GetDlgItem(IDC_SENDTEXT2)->SetWindowText(s);
}
附录D 客户端源程序
#include "stdafx.h"
#include "TCP客户端程序.h"
#include "TCP客户端程序Dlg.h"
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int i; //循环变量
int id = -1; //节点ID
int find_flag = 0; //允许查找设备标志
CString display; //显示传输过来的数据
CString changed_parameter; //改变的参数
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CTCPDlg dialog
CTCPDlg::CTCPDlg(CWnd* pParent )
: CDialog(CTCPDlg::IDD, pParent)
{
m_init = _T("");
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTCPDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE, m_tree);
DDX_Control(pDX, IDC_TIME, m_time);
DDX_Control(pDX, IDC_DATE, m_date);
DDX_Text(pDX, IDC_PS, m_init);
}
BEGIN_MESSAGE_MAP(CTCPDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_SEND, OnSend)
ON_MESSAGE(WM_SOCKET,OnSocket)
ON_BN_CLICKED(IDC_CONNECT, OnConnect)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
ON_WM_TIMER()
ON_EN_CHANGE(IDC_PS, OnChangePs)
ON_BN_CLICKED(IDC_INITIALIZE, OnInitialize)
ON_BN_CLICKED(IDC_FIND, OnFind)
ON_BN_CLICKED(IDC_CHANGE, OnChangeParameter)
END_MESSAGE_MAP()
BOOL CTCPDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
GetDlgItem(IDC_SENDTEXT)->EnableWindow(false);
GetDlgItem(IDC_INITIALIZE)->EnableWindow(false);
GetDlgItem(IDC_SEND)->EnableWindow(false);
s=::socket(AF_INET,SOCK_STREAM,0);
:: WSAAsyncSelect(s,this->m_hWnd,WM_SOCKET, FD_READ);
return TRUE; // return TRUE unless you set the focus to a control
}
void CTCPDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CTCPDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CTCPDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CTCPDlg::OnConnect()
{
CString str,str1;
int port;
GetDlgItem(IDC_ADDR)->GetWindowText(str);
GetDlgItem(IDC_PORT)->GetWindowText(str1);
if(str == ""||str1 =="")
{
MessageBox("IP地址或端口号不能为空");
}
else
{
//启动CSocket
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD( 2, 2);
WSAStartup(wVersionRequested, &wsaData);
//端口和IP的处理
port=atoi(str1.GetBuffer(1));
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=inet_addr(str.GetBuffer(1));
addr.sin_port=ntohs(port);
GetDlgItem(IDC_TEXT)->SetWindowText("正在连接服务器......\r\n");
if(::connect(s,(sockaddr*)&addr,sizeof(addr)))
{
GetDlgItem(IDC_TEXT)->GetWindowText(str);
str+="连接服务器成功!\r\n";
GetDlgItem(IDC_TEXT)->SetWindowText(str);
GetDlgItem(IDC_SENDTEXT)->EnableWindow(true);
GetDlgItem(IDC_ADDR)->EnableWindow(false);
GetDlgItem(IDC_PORT)->EnableWindow(false);
}
else
{
GetDlgItem(IDC_TEXT)->GetWindowText(str);
str+="连接服务器失败!\r\n";
GetDlgItem(IDC_TEXT)->SetWindowText(str);
}
//初始化
OnInitialize();
}
}
//发送数据请求
void CTCPDlg::OnSend()
{
// TODO: Add your control notification handler code here
CString str,str1,send_str;
switch ( id )
{
case 0:str.Format(“请求0号断路器节点数据");
GetDlgItem(IDC_ChangePS)->SetWindowText("States");break;
case 1:str.Format("请求1号号断路器节点数据");
GetDlgItem(IDC_ChangePS)->SetWindowText("States");break;
case 2:str.Format("请求2号号断路器节点数据");
GetDlgItem(IDC_ChangePS)->SetWindowText("States");break;
case 3:str.Format("请求0号电流耦合器节点数据");break;
case 4:str.Format("请求1号电流耦合器节点数据");break;
case 5:str.Format("请求2号电流耦合器节点数据");break;
case 6:str.Format("请求3号电流耦合器节点数据");break;
case 7:str.Format("请求0号电压耦合器节点数据");break;
case 8:str.Format("请求1号电压耦合器节点数据");break;
case 9:str.Format("请求2号电压耦合器节点数据");break;
case 10:str.Format("请求3号电压耦合器节点数据");break;
case 11:str.Format("请求4号电压耦合器节点数据");break;
default:str.Format("未发送任何节点数据请求");break;
}
//处理发送的数据格式
send_str.Format("%d",id);
//发送send_str.GetBuffer(1) 即id
::send(s,send_str.GetBuffer(1),sizeof(send_str),0);
GetDlgItem(IDC_TEXT)->GetWindowText(str1);
str1 += "\r\nClient:";
//str1太长的时候清空
if (strlen(str1)>=250)
{
str1 = "正在连接服务器......\r\n连接服务器成功!\r\nClient:";
}
str1 += str;
GetDlgItem(IDC_TEXT)->SetWindowText(str1);
}
//socket事件
void CTCPDlg::OnSocket(WPARAM wParam,LPARAM lParam)
{
char cs[100]={0};
if(lParam == FD_READ)
{
CString num = "";
recv(s,cs,100,0);
GetDlgItem(IDC_TEXT)->GetWindowText(num);
num+="\r\nServer:";
num+=(LPTSTR)cs;
//要显示的设备参数为接收到的数据
display = (LPTSTR)cs;
//添加的代码 以便判断客户机收到的数据
GetDlgItem(IDC_TEXT)->SetWindowText(num);
//接收到服务器发送过来的数据 处理后 显示节点数据
GetDlgItem(IDC_SENDTEXT)->SetWindowText(display);
//声音提示已经得到服务器数据
PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC);
}
}
//算出节点ID,以便客户机向服务器发送节点数据请求
void FigureOut_ID(CString s)
{
if (!strcmp(s,"0号断路器"))
{
id = 0;
}
if (!strcmp(s,"1号断路器"))
{
id = 1;
}
if (!strcmp(s,"2号断路器"))
{
id = 2;
}
if (!strcmp(s,"0号电流耦合器"))
{
id = 3;
}
if (!strcmp(s,"1号电流耦合器"))
{
id = 4;
}
if (!strcmp(s,"2号电流耦合器"))
{
id = 5;
}
if (!strcmp(s,"3号电流耦合器"))
{
id = 6;
}
if (!strcmp(s,"0号电压耦合器"))
{
id = 7;
}
if (!strcmp(s,"1号电压耦合器"))
{
id = 8;
}
if (!strcmp(s,"2号电压耦合器"))
{
id = 9;
}
if (!strcmp(s,"3号电压耦合器"))
{
id = 10;
}
if (!strcmp(s,"4号电压耦合器"))
{
id = 11;
}
}
//追踪函数处理
CString track()
{
CString m_init;
switch ( id )
{
case 0: m_init = "0号断路器节点数据请求"; break;
case 1: m_init = "1号断路器节点数据请求"; break;
case 2: m_init = "2号断路器节点数据请求"; break;
case 3: m_init = "0号电流耦合器节点数据请求"; break;
case 4: m_init = "1号电流耦合器节点数据请求"; break;
case 5: m_init = "2号电流耦合器节点数据请求"; break;
case 6: m_init = "3号电流耦合器节点数据请求"; break;
case 7: m_init = "0号电压耦合器节点数据请求"; break;
case 8: m_init = "1号电压耦合器节点数据请求"; break;
case 9: m_init = "2号电压耦合器节点数据请求"; break;
case 10: m_init = "3号电压耦合器节点数据请求"; break;
case 11: m_init = "4号电压耦合器节点数据请求"; break;
default:;break;
}
return m_init ;
}
//树形控件处理函数
void CTCPDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
HTREEITEM hitem;
CTreeCtrl * tree = new CTreeCtrl;
tree = (CTreeCtrl *)GetDlgItem( pNMHDR->idFrom );
//选中子节点
hitem = tree->GetSelectedItem() ;
if( !tree->ItemHasChildren(hitem) ) //是否还有子节点 没有子节点跳出对话框
{
CString s = tree->GetItemText( hitem );
//追踪信息显示
UpdateData();
m_init = "One Node Selected";
UpdateData(FALSE);
//计算节点号
FigureOut_ID(s);
//追踪信息处理
UpdateData();
m_init = track();
UpdateData(false);
//向客户机发送节点数据请求
OnSend();
}
*pResult = 0;
}
//时间函数
void CTCPDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnTimer(nIDEvent);
//动态显示时、分、秒
COleDateTime time = COleDateTime::GetCurrentTime() ;
CString str ;
str.Format("%.2d:%.2d:%.2d" ,time.GetHour(), time.GetMinute(), time.GetSecond()) ;
//送到文本框中显示
GetDlgItem(IDC_TIME)->SetWindowText(str) ;
//动态显示年、月、日
COleDateTime data = COleDateTime::GetCurrentTime ();
CString s;
s.Format ("%.4d/%.2d/%.2d", data.GetYear (), data.GetMonth (), data.GetDay ());
//送到文本框中显示
GetDlgItem(IDC_DATE)->SetWindowText(s);
}
void CTCPDlg::OnChangePs()
{
m_init = "Please initialize";
UpdateData();
}
//初始化
void CTCPDlg::OnInitialize()
{
SetTimer(1,1000,0);
m_init = "System Initialized";
UpdateData(FALSE);
i = 0; //初始化循环变量
id = -1; //初始化后未选择任何节点
}
//查找设备
void CTCPDlg::OnFind()
{
// TODO: Add your control notification handler code here
if ( find_flag ==0)
{
find_flag = 1;
CString text;
HTREEITEM cbr;
cbr = m_tree.InsertItem ("断路器",0,1);
HTREEITEM cbr_sub[3];
for (i=0; i<3; i++)
{
text.Format("%d号断路器",i);
cbr_sub[i] = m_tree.InsertItem (text,0,1,cbr);
}
HTREEITEM cct;
cct = m_tree.InsertItem ("电流耦合器",0,1);
HTREEITEM cct_sub[4];
for (i=0; i<4; i++)
{
text.Format("%d号电流耦合器",i);
cct_sub[i] = m_tree.InsertItem (text,0,1,cct);
}
HTREEITEM cvt;
cvt = m_tree.InsertItem ("电压耦合器",0,1);
HTREEITEM cvt_sub[5];
for (i=0; i<5; i++)
{
text.Format("%d号电压耦合器",i);
cvt_sub[i] = m_tree.InsertItem (text,0,1,cvt);
}
}
}
//修改参数
void CTCPDlg::OnChangeParameter()
{
// TODO: Add your control notification handler code here
CString change = "CHANGED";
CString ch_p1 ;
switch ( id )
{
case 0:
case 1:
case 2:
{
change.Format("�HANGED",id);
GetDlgItem(IDC_CHANGEEDIT)->GetWindowText(ch_p1);
change += display;
change.Delete(32,1);
change += ch_p1;
};
break;
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
{
NULL;
};
break;
default:
{
MessageBox("未选择断路器");
};
break;
}
::send(s, change.GetBuffer(1), strlen(change), 0);
}

浙公网安备 33010602011771号