⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 powerdc.cpp

📁 MDF监控源码2
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// PowerDC.cpp : 实现文件
//

#include "stdafx.h"
#include "SerialTest.h"
#include "PowerDC.h"
#include ".\powerdc.h"
#include "..\..\global\tcpbase.h"
#include "protocol.h"
#include <math.h>
// CPowerDC 对话框

IMPLEMENT_DYNAMIC(CPowerDC, CDialog)
CPowerDC::CPowerDC(CWnd* pParent /*=NULL*/)
	: CDialog(CPowerDC::IDD, pParent)
	, m_DeviceCode(0)
{
	blOpen = false;
	blMonitor = false;
	m_DeviceCode = 0x25;
	iPt = 0;
	//电压参数
	m_Power1.SetMinValue(46);
	m_Power1.SetMaxValue(57);
	m_Power2.SetMinValue(46);
	m_Power2.SetMaxValue(57);

	//电流参数
	m_Power3.SetMinValue(0);
	m_Power3.SetMaxValue(500);
	m_Power4.SetMinValue(0);
	m_Power4.SetMaxValue(500);

}

CPowerDC::~CPowerDC()
{
}

void CPowerDC::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_STAPOWER1, m_Power1);
	DDX_Control(pDX, IDC_CMBCOM, m_listCom);
	DDX_Text(pDX, IDC_EDTRATE, m_rate);
	DDX_Control(pDX, IDC_CHKAUTO, m_chkAutoSend);
	DDX_Control(pDX, IDC_LSTINFO, m_listInfo);
	DDX_Control(pDX, IDC_STAPOWER2, m_Power2);
	DDX_Control(pDX, IDC_STAPOWER3, m_Power3);
	DDX_Control(pDX, IDC_STAPOWER4, m_Power4);
	DDX_Control(pDX, IDC_LISTDEVICE, m_lstAddress);
	DDX_Control(pDX, IDC_LISTALARM, m_lstInfo);
}


BEGIN_MESSAGE_MAP(CPowerDC, CDialog)
	ON_BN_CLICKED(IDC_BTNOPEN, OnBnClickedBtnopen)
	ON_BN_CLICKED(IDC_BTNCLOSE, OnBnClickedBtnclose)
	ON_BN_CLICKED(IDC_CHKAUTO, OnBnClickedChkauto)
	ON_MESSAGE(WM_COMM_RXCHAR,onCOMM_RXCHAR)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_BTNADD, OnBnClickedBtnadd)
	ON_BN_CLICKED(IDC_BTNDELETE, OnBnClickedBtndelete)
	ON_BN_CLICKED(IDC_BTNSEND, OnBnClickedBtnsend)
	ON_WM_CLOSE()
	ON_NOTIFY(NM_DBLCLK, IDC_LISTALARM, OnNMDblclkListalarm)
	ON_NOTIFY(HDN_ITEMCLICK, 0, OnHdnItemclickListalarm)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LISTALARM, OnLvnItemchangedListalarm)
END_MESSAGE_MAP()


// CPowerDC 消息处理程序

void CPowerDC::OnBnClickedBtnopen()
{
	// TODO: 在此添加控件通知处理程序代码
	DWORD dwCommEvents =0;
	dwCommEvents  |= EV_BREAK;
	dwCommEvents  |= EV_CTS;
	dwCommEvents  |= EV_DSR;
	dwCommEvents  |= EV_ERR;
	dwCommEvents  |= EV_RING;
	dwCommEvents  |= EV_RLSD;
	dwCommEvents  |= EV_RXCHAR;
	dwCommEvents  |= EV_RXFLAG;
	dwCommEvents  |= EV_TXEMPTY;
	
	BOOL bResult = FALSE;
	CString strCom;
	int iPort ;
	
	if (blOpen)
	{	
		m_Port.ClosePort();
		((CWnd *)GetDlgItem(IDC_BTNOPEN))->SetWindowText("Open");
		blOpen = FALSE;
	}
	else
	{

		m_listCom.GetWindowText(strCom);
		if (strCom.GetLength() >0 )
		{
			strCom.Replace("COM","");
			iPort = atoi(strCom.GetBuffer());
		}
		if (iPort < 0 ||  iPort> 12)
			iPort = 1;

		//assert(iPort>0 && iPort<= 12);
		
		bResult = m_Port.InitPort(this,iPort,4800,'N',8,1,dwCommEvents,1024);
		if (!bResult)
		{
			((CWnd *)GetDlgItem(IDC_BTNOPEN))->SetWindowText("Open");
			blOpen = FALSE;
			
			AfxMessageBox("串口被占用或不存在...");
			return ;
		}else
		{
			blOpen = TRUE;
			((CWnd *)GetDlgItem(IDC_BTNOPEN))->SetWindowText("Close");
		}
		
	}
}

void CPowerDC::IniControl(void)
{

	/*
	CFont ft;
	LOGFONT lgFont;
	ft.GetLogFont(&lgFont); 
	lgFont.lfHeight =12;
	ft.CreateFontIndirect(&lgFont);
	((CWnd *)GetDlgItem(IDC_STATIC1))->SetFont(&ft);
	((CWnd *)GetDlgItem(IDC_STATIC2))->SetFont(&ft);
	((CWnd *)GetDlgItem(IDC_STATIC3))->SetFont(&ft);
	((CWnd *)GetDlgItem(IDC_STATIC4))->SetFont(&ft);
	*/

	m_arrayDevice.RemoveAll();
	memset(&m_subStatus,0,sizeof(m_subStatus));
	
	m_listCom.AddString(_T("COM1"));
	m_listCom.AddString(_T("COM2"));
	m_listCom.AddString(_T("COM3"));
	m_listCom.AddString(_T("COM4"));
	m_listCom.AddString(_T("COM5"));
	m_listCom.AddString(_T("COM6"));
	m_listCom.AddString(_T("COM7"));
	m_listCom.AddString(_T("COM8"));
	m_listCom.SetCurSel(0);

	CBitmap *bmIcon16 = new CBitmap();
	bmIcon16->LoadBitmap(IDB_BMPALARM16);
	m_imgList.Create(16,16,ILC_COLOR24,5,1);
	m_imgList.SetBkColor(RGB(255,255,255));
	m_imgList.Add(bmIcon16,RGB(0,0,0));
	CBitmap *bmIcon32 = new CBitmap();
	bmIcon32->LoadBitmap(IDB_BMPALARM32);
	
	m_imgList32.Create(32,32,ILC_COLOR24,5,1);
	m_imgList32.SetBkColor(RGB(255,255,255));
	m_imgList32.Add(bmIcon32,RGB(0,0,0));
	
	delete bmIcon16;
	delete bmIcon32;

	m_lstInfo.SetImageList(&m_imgList,LVSIL_SMALL);
	m_lstInfo.SetImageList(&m_imgList32,LVSIL_NORMAL);
	m_lstInfo.SetImageList(&m_imgList,LVSIL_STATE);

	m_lstInfo.DeleteAllItems();
	m_lstInfo.ModifyStyle(NULL,LVS_REPORT | WS_VSCROLL | WS_VSCROLL );
	m_lstInfo.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_ONECLICKACTIVATE);
	int i = 0;
	m_lstInfo.InsertColumn(i++,"序号",LVCFMT_CENTER,70,0);
	m_lstInfo.InsertColumn(i++,"地址",LVCFMT_CENTER,70,0);
	m_lstInfo.InsertColumn(++i,"主电压",LVCFMT_CENTER,60,0);
	m_lstInfo.InsertColumn(++i,"备电压",LVCFMT_CENTER,60,0);
	m_lstInfo.InsertColumn(++i,"主电流",LVCFMT_CENTER,60,0);
	m_lstInfo.InsertColumn(++i,"备电流",LVCFMT_CENTER,60,0);
	m_lstInfo.InsertColumn(++i,"电压告警",LVCFMT_CENTER,60,0);
	m_lstInfo.InsertColumn(++i,"电流告警",LVCFMT_CENTER,60,0);
	m_lstInfo.InsertColumn(++i,"支路告警",LVCFMT_CENTER,160,0);
	m_lstInfo.InsertColumn(++i,"时间",LVCFMT_CENTER,80,0);
	


}

BOOL CPowerDC::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	SetDlgItemText( IDC_EDTRATE,_T("1000"));
	IniControl();
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void CPowerDC::OnBnClickedBtnclose()
{

	BOOL bResult; 
	if (blMonitor)
	{
		bResult = m_Port.CloseMonitoring();
		if (bResult)
		{
			((CWnd *)GetDlgItem(IDC_BTNCLOSE))->SetWindowText("Start");
			blMonitor = FALSE;
		}else
		{
			((CWnd *)GetDlgItem(IDC_BTNCLOSE))->SetWindowText("Stop");
			blMonitor = TRUE;
		}

	}else
	{
		bResult = m_Port.StartMonitoring();
		if (bResult)
		{
			((CWnd *)GetDlgItem(IDC_BTNCLOSE))->SetWindowText("Stop");
			blMonitor = TRUE;
		}else
		{
			((CWnd *)GetDlgItem(IDC_BTNCLOSE))->SetWindowText("Open");
			blMonitor = FALSE;
		}
		
	}


}

void CPowerDC::OnBnClickedChkauto()
{
	BOOL bResult =  FALSE;
	DWORD dCode;
	UpdateData();
	if (m_rate.GetLength() == 0)
		return ;
	iInterval = atoi(m_rate.GetBuffer());
	
	if (m_chkAutoSend.GetCheck() == BST_CHECKED)
	{
		bAsking	 = TRUE;
		m_pThread = AfxBeginThread(Asking,(LPVOID)this);
		//SetTimer(1,iRate,NULL);
	}
	else if (m_chkAutoSend.GetCheck() == BST_UNCHECKED)
	{
		bAsking	 = FALSE;
		
		if ( ::GetExitCodeThread(m_pThread->m_hThread,&dCode))
		{
			::TerminateThread(m_pThread->m_hThread,dCode);
			m_pThread = NULL;
		}
		
		//KillTimer(1);
	}
}

UINT CPowerDC::Asking(LPVOID lpWnd)
{
	CPowerDC *dlg = (CPowerDC *)lpWnd;

	int iRate = dlg->iInterval;
	for(;;)
	{
		if (!dlg->bAsking)
			return 0;
		else
		{
			dlg->AskData(); 
			Sleep(iRate);
		}
	}

}

int CPowerDC::AskData()
{
	char btBuf[] = "F\0";
	UCHAR ucBuf;
	CString sBuf,strType,strSend;
	int iAddress = 0 ;
	//btBuf = new char[]{"F\0"};
	//btBuf[0] = 'F';
	//btBuf[1] = '\0';
	m_inCount++;
	m_outCount++;
	strType = char(0x25);
	strType = m_fun.ToHexString(strType.GetBuffer(),1);

	//strType = char(0x25);

	//m_Port.AskCom(btBuf,1);
	for (int i=0;i<m_lstAddress.GetCount();i++)	
	{
		m_lstAddress.GetText(i,sBuf );
		iAddress = atoi(sBuf.GetBuffer());
		sBuf.Format("%0.2X",iAddress);
		//sBuf = m_fun.ToHexString(sBuf.GetBuffer(),sBuf.GetLength());
		strSend = m_fun.Build(sBuf,strType,UCHAR(0x44));
		m_Port.AskCom(strSend.GetBuffer(),strSend.GetLength());
	}

	return 0;
}
LRESULT CPowerDC::onCOMM_RXCHAR(WPARAM wParam, LPARAM lParam)
{
	CString sBuf,sTemp;
	int iLen;
	char  *pt;
	char cbuf[MAX_SIZE];
	sMsgBody *msgBody;
	
	//CProtocolfun pfun;
	msgBody = (sMsgBody *)wParam;

	iLen = msgBody->iLen;
	pt = new char[msgBody->iLen + 1];
	memcpy(pt,msgBody->lpBuf ,msgBody->iLen);
	pt[msgBody->iLen] = '\0';
	CProtocol fun;
	//sBuf = fun.ToHexString(pt,iLen);
	sBuf = pt;
	m_listInfo.AddString(sBuf);

	/*	
	CListBox *m_ListBox = (CListBox *)GetDlgItem(IDC_LSTINFO);

	if (m_source.GetCheck() == BST_CHECKED)
	{
		if (m_hex.GetCheck()== BST_CHECKED)
			sBuf = ToHexString(pt,iLen);
		else
		{
			memcpy(cbuf,pt,iLen);
			cbuf[iLen] = '\0';
			sBuf = cbuf;
		}
		m_listInfo.AddString(sBuf);
	}
	
	m_inCount++ ;

	CString strTip;
	strTip.Format("发送:%d    接收:%d",m_outCount,m_inCount);
	((CWnd *)GetDlgItem(IDC_STASEND))->SetWindowText(strTip);
	*/
	
	DataAnalyse(pt,iLen);

	return 0;
}

// 分析计算级别及时间
int CPowerDC::Analyse(LPVOID *rscStatus)
{
	
	double dValue = 0;
	BOOL bStatus = FALSE;
	int iOld = 0;
	int iCur = 0;



	return 0;
}

int CPowerDC::DataAnalyse(char *lpBuf, int iLen)
{
	char cBuf[4096];
	int iSub = 0;
	int iSample = 0;
	int iVoltage = 0;
	int iRet = 0;
	BYTE cData[5];
	CString strBuf;
	BYTE bt ;
	memcpy(cBuf,lpBuf,iLen);
	

	//校验数据的合法性
	//if (!((BYTE)cBuf[0] == 0x7e && (BYTE)cBuf[iLen] == 0x0D))
		//return -1;

	
	tyPowerDC m_curData;
	//取得地址码
	strBuf = cBuf[3];
	strBuf += cBuf[4];
	sscanf(strBuf.GetBuffer(),"%X",&(m_curData.m_Addr));

	strBuf = cBuf[7];
	strBuf += cBuf[8];
	sscanf(strBuf.GetBuffer(),"%X",&iRet);
	if (iRet == 2)
		return(-1);

	//取得支路空开告警信息
	strBuf = cBuf[13];
	strBuf += cBuf[14];
	sscanf(strBuf.GetBuffer(),"%X",&(m_curData.m_subAlarm));
	


	//取得电压电流告警信息
	strBuf = cBuf[15];
	strBuf += cBuf[16];
	sscanf(strBuf.GetBuffer(),"%X",&(m_curData.m_Alarm));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -