📄 alarmview.cpp
字号:
// alarmView.cpp : implementation of the CalarmView class
//
#include "stdafx.h"
#include "alarm.h"
#include "alarmDoc.h"
#include "alarmView.h"
#include "WinIO.h"
#include "SetCommDlg.h"
#include "ASPDlg.h"
#include "BSPDlg.h"
#include "CSPDlg.h"
#include "GogDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CalarmView
IMPLEMENT_DYNCREATE(CalarmView, CFormView)
BEGIN_MESSAGE_MAP(CalarmView, CFormView)
//{{AFX_MSG_MAP(CalarmView)
ON_WM_TIMER()
ON_UPDATE_COMMAND_UI(ID_alarm_START, OnUpdatealarmStart)
ON_COMMAND(ID_alarm_START, OnalarmStart)
ON_COMMAND(ID_SETTINGS, OnSettings)
ON_COMMAND(ID_LOG_MANAGE, OnLogManage)
ON_BN_CLICKED(IDC_BUTTON1, Onbufang)
ON_BN_CLICKED(IDC_BUTTON2, Onchujing)
ON_BN_CLICKED(IDC_BUTTON3, Ondngzuo)
ON_BN_CLICKED(IDC_BUTTON4, Onlog)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CalarmView construction/destruction
CalarmView::CalarmView()
: CFormView(CalarmView::IDD)
{
//{{AFX_DATA_INIT(CalarmView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CalarmView::~CalarmView()
{
}
void CalarmView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CalarmView)
DDX_Control(pDX, IDC_LIST_TODAY, m_logList);
DDX_Control(pDX, IDC_MSCOMM1, m_Comm1);
DDX_Control(pDX, IDC_MSCOMM2, m_Comm2);
//}}AFX_DATA_MAP
}
BOOL CalarmView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CalarmView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_logList.InsertColumn(0,"布控名称");
m_logList.InsertColumn(1,"时间");
m_logList.InsertColumn(2,"动作");
CRect rect;
m_logList.GetClientRect(&rect);
m_logList.SetColumnWidth(0,rect.Width()/5);
m_logList.SetColumnWidth(1,rect.Width()*2/5);
m_logList.SetColumnWidth(2,rect.Width()*2/5);
CTime date=CTime::GetCurrentTime();
CString strDate=date.Format("%Y-%m-%d");
CString strSql="select * from log where date >= #"+strDate+"#";
m_DString = strSql.AllocSysString();
m_dlgRs.CreateInstance(_uuidof(Recordset)); //初始化Recordset指针
CalarmApp* pApp=(CalarmApp*)::AfxGetApp();
//adOpenStatic:静态 adLockOptimistic乐观封锁法 adCmdText:文本查询语句
m_dlgRs->Open(m_DString,(IDispatch*)pApp->m_dConnTd,adOpenStatic,adLockOptimistic,adCmdText);
m_dlgcn = m_dlgRs->RecordCount;
ShowLog(); //显示日志表中今日的记录
m_dlgRs->Close();
m_dlgRs=NULL;
initcpara(); //初始化端口
//启动检测系统
m_Dong=FALSE;
m_dDate = SetTimer(1, 5000, 0);
}
/////////////////////////////////////////////////////////////////////////////
// CalarmView printing
BOOL CalarmView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CalarmView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CalarmView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CalarmView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
// TODO: add customized printing code here
}
/////////////////////////////////////////////////////////////////////////////
// CalarmView diagnostics
#ifdef _DEBUG
void CalarmView::AssertValid() const
{
CFormView::AssertValid();
}
void CalarmView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CalarmDoc* CalarmView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CalarmDoc)));
return (CalarmDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CalarmView message handlers
void CalarmView::ShowLog()
{
if(m_dlgRs==NULL)
return;
int i=0;
CString strText;
_variant_t bfname,date,time,cjname; //VARIANT数据类型
m_logList.DeleteAllItems();
if(!m_dlgRs->RecordCount)
return;
m_dlgRs->MoveFirst();
while(!m_dlgRs->adoEOF)//遍历所有记录
{
// strText.Format(TEXT("item %d"), i);
int nItem;
bfname = m_dlgRs->GetCollect("bfname");//得到字段"bfname"的值
if(bfname.vt!=VT_NULL)
nItem=m_logList.InsertItem(0,_bstr_t(bfname));
date = m_dlgRs->GetCollect("date"); //得到字段"date"的值
time = m_dlgRs->GetCollect("time"); //得到字段"time"的值
if(date.vt!=VT_NULL && time.vt!=VT_NULL)
m_logList.SetItemText(nItem,1,_bstr_t(date)+_bstr_t(" ")+_bstr_t(time));
cjname = m_dlgRs->GetCollect("cjname");//得到字段"cjname"的值
if(cjname.vt!=VT_NULL)
m_logList.SetItemText(nItem,2,_bstr_t(cjname));
m_dlgRs->MoveNext();//转到下一条纪录
i++;
}
}
void CalarmView::initcpara()
{
TRY
{
initcom(); //初始化串口
}
CATCH(CException,e)
{
e->ReportError();
}
END_CATCH
BOOL bResult = InitializeWinIo(); //初始化WinIO库
if (!bResult)
{
::AfxMessageBox("WINIO库初始化失败");
}
getLpt(); //从数据库中得到可以使用的并口编号,并赋予数组lptPort
}
void CalarmView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent==1)
{
if(m_Dong==TRUE)
{
SpyOn(); //对布防设置进行监控
updateLog(); //更新日志
}
}
CFormView::OnTimer(nIDEvent);
}
void CalarmView::OnUpdatealarmStart(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Dong);
}
void CalarmView::OnalarmStart()
{
// TODO: Add your command handler code here
m_Dong=!m_Dong;
//工具栏图标问题未处理
}
//监控子程序:从各监控端口取数据判断触发事件是否发生,并给以处警
void CalarmView::SpyOn()
{
if(m_dBuffIn)
{
for(int i=0;i<BFPortNum.GetSize();i++)
{
DWORD portVal;
GetPortVal(BFPortNum[i], &portVal, 1);
processLook((BYTE)portVal, FALSE);
}
}
}
//提取端口内容,判断触发事件的发生,找出对应设置响应,并记录入日志
void CalarmView::processLook(BYTE br, BOOL c)
{
CString s;
if(c)
s = "select * from bufangset where property='串口'";
else
s = "select * from bufangset where property='并口'";
_RecordsetPtr r;
r.CreateInstance(_uuidof(Recordset));
CalarmApp* pApp=(CalarmApp*)::AfxGetApp();
//adOpenStatic:静态 adLockOptimistic乐观封锁法 adCmdText:文本查询语句
_bstr_t bs=s.AllocSysString();
r->Open(bs,(IDispatch*)pApp->m_dConnTd,adOpenStatic,adLockOptimistic,adCmdText);
if(r->RecordCount==0)
goto finish;
r->MoveFirst();
while(!r->adoEOF)
{
//若有事件发生,则响应该触发事件
CString s1,s2;
_bstr_t bs1,bs2;
_bstr_t bfname,cjname;
_RecordsetPtr r1,r2;
int count;
BYTE bfcode= BYTE(r->GetCollect("bfcode"));
bfname= _bstr_t(r->GetCollect("bfname"));
if(!br || bfcode!= br)
continue;
//找出对应处警设置
r1.CreateInstance(_uuidof(Recordset));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -