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

📄 alarmview.cpp

📁 一款基于串口的自动报警系统的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		bs1="select cjname from  bftocj where bfname = '" +bfname +"'";
		r1->Open(bs1,(IDispatch*)pApp->m_dConnTd,adOpenStatic,adLockOptimistic,adCmdText);

		cjname=_bstr_t(r1->GetCollect("cjname"));
		CString temp=LPTSTR(cjname);
		count=analystRs(temp);

		//记入日志
		r2.CreateInstance(_uuidof(Recordset));
		s2="select cjname from log";
		bs2=s2.AllocSysString();
		r2->Open(bs2,(IDispatch*)pApp->m_dConnTd,adOpenDynamic,adLockOptimistic,adCmdText);

		r2->AddNew();
		r2->PutCollect("bfname",bfname);
		r2->PutCollect("cjname",cjname);
		COleDateTime t=COleDateTime::GetCurrentTime();
		t.Format("%Y-%m-%d");
		r2->PutCollect("date",COleVariant(t));
		t.Format("%H:%M:%S");
		r2->PutCollect("time",COleVariant(t));
		r2->Update();

		r2->Close();
		r1->Close();
		r2=r1=NULL;

		//予以处警响应
		for(int i=0;i<count;i++)
		{
			r1.CreateInstance(_uuidof(Recordset));
			bs1="select * from  chujingset where cjname = '" +strcj[i] +"'";
			r1->Open(bs1,(IDispatch*)pApp->m_dConnTd,adOpenStatic,adLockOptimistic,adCmdText);
			while(!r1->adoEOF)
			{
				_bstr_t property=_bstr_t(r1->GetCollect("property"));

				if(property==_bstr_t("串口"))
				{
					if(m_Comm1.GetPortOpen())
					{
						char telnum[20];
						itoa(long(r1->GetCollect("telnumber")),telnum,10);
						char out[100];
						strcpy(out,"ATDT");
						strcat(out,telnum);
						int len=strlen(out);
						out[len]=0x0d;
						out[len+1]=0x0a;
						out[len+2]=0;
						m_Comm1.SetOutput(_variant_t(out));
					}
				}
				if(property==_bstr_t("并口"))
				{
					BOOL res;
					_bstr_t typeact=_bstr_t(r1->GetCollect("typeact"));
					if(typeact==_bstr_t("拨号"))
						res=SetPortVal(long(r1->GetCollect("number")),long(r1->GetCollect("telnumber")),1);	//只写一字节?
					else			//发码
						res=SetPortVal(long(r1->GetCollect("number")),long(r1->GetCollect("infocode")),1);
					if(res==FALSE)
						::AfxMessageBox("WinIO 库未成功安装");
				}
				r1->MoveNext();
			}
			r1->Close();
			r1=NULL;
		}
		r->MoveNext();
	}

finish:
	r->Close();
	r=NULL;
}

//触发器源+事件+处警动作
//日志更新
void CalarmView::updateLog()
{
	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); 
	if(m_dlgcn!=m_dlgRs->RecordCount)
	{
		m_dlgcn=m_dlgRs->RecordCount;				//显示日志表中今日的记录
		ShowLog();
	}
    m_dlgRs->Close();
	m_dlgRs=NULL;
}


int CalarmView::analystRs(CString cjname)
{
	int count=0;	//count:纪录获取的字符串个数
	strcj.RemoveAll();
	strcj.Add("");
	for(int i=0;i<cjname.GetLength();i++)
	{
		if(cjname[i]!='@')
			strcj[count]+=cjname[i];
		else
		{
			count+=1;
			strcj.Add("");
		}
	}
	if(strcj[count]=="")
	{
		strcj.RemoveAt(count);
		count--;
	}
	return count+1;
}

//初始化COM口
void CalarmView::initcom()
{
	//初始化处警拨号使用的com口(控件:mscomm1)
	_RecordsetPtr r;
	r.CreateInstance(_uuidof(Recordset));
	CString s= "select distinct number from chujingset where property='串口'";
	_bstr_t bs=s.AllocSysString();
	CalarmApp* pApp=(CalarmApp*)::AfxGetApp();
	//adOpenStatic:静态 adLockOptimistic乐观封锁法 adCmdText:文本查询语句
	r->Open(bs,(IDispatch*)pApp->m_dConnTd,adOpenStatic,adLockOptimistic,adCmdText); 
	CString strcom,commSetting,commHandShaking;
	int commport = (BYTE)r->GetCollect("number");		//处警表里面使用的com口端口号
	itoa(commport,strcom.GetBuffer(10),10);
	strcom.ReleaseBuffer();
	r->Close();
	r=NULL;
	
	commSetting = GetSetting(CString("PortSetting\\Com")+strcom+"\\", "commSetting");
	commHandShaking = GetSetting(CString("PortSetting\\Com")+strcom+"\\", "commHandshaking");
	while((commSetting=="")||(commHandShaking==""))
	{
		CSetCommDlg dlg;
		dlg.m_strChoose=CString("串口")+strcom;
		dlg.DoModal();
		commSetting = GetSetting(CString("PortSetting\\Com")+strcom+"\\", "commSetting");
		commHandShaking = GetSetting(CString("PortSetting\\Com")+strcom+"\\", "commHandshaking");
	}
	m_Comm1.SetCommPort(commport);
	long shakehand=atol(commHandShaking.GetBuffer(50));
	commHandShaking.ReleaseBuffer();
	m_Comm1.SetSettings(commSetting);
	m_Comm1.SetHandshaking(shakehand);
	TRY
	{
		m_Comm1.SetPortOpen(TRUE);
	}
	CATCH(CException,e)
	{
		e->ReportError();
	}
	END_CATCH
	//如果布防设置中使用到com口的话,则初始化该com口
	//控件:mscomm2
	r.CreateInstance(_uuidof(Recordset));
	s="select distinct number from bufangset where property='串口'";
	bs=s.AllocSysString();
	r->Open(bs,(IDispatch*)pApp->m_dConnTd,adOpenStatic,adLockOptimistic,adCmdText);
	commport = (BYTE)r->GetCollect("number");		//布防表里使用的com口端口号
	itoa(commport,strcom.GetBuffer(10),10);
	strcom.ReleaseBuffer();
	if(r->RecordCount==1)
	{
		m_acomf=TRUE;
		
		commSetting = GetSetting(CString("PortSetting\\Com")+strcom+"\\", "commSetting");
		commHandShaking = GetSetting(CString("PortSetting\\Com")+strcom+"\\", "commHandshaking");
		while((commSetting=="")||(commHandShaking==""))
		{
			CSetCommDlg dlg;
			dlg.m_strChoose=CString("串口")+strcom;
			dlg.DoModal();
			commSetting = GetSetting(CString("PortSetting\\Com")+strcom+"\\", "commSetting");
			commHandShaking = GetSetting(CString("PortSetting\\Com")+strcom+"\\", "commHandshaking");
		}
		m_Comm2.SetCommPort(commport);
		shakehand=atol(commHandShaking.GetBuffer(50));
		commHandShaking.ReleaseBuffer();
		m_Comm2.SetSettings(commSetting);
		m_Comm2.SetHandshaking(shakehand);
		m_Comm2.SetInputMode(1);
		m_Comm2.SetPortOpen(TRUE);
	}
	else
		m_acomf=FALSE;	
	r->Close();
	r=NULL;
}

void CalarmView::getLpt()
{
	_RecordsetPtr r;
	r.CreateInstance(_uuidof(Recordset));
	CString s="select distinct number from bufangset where property='并口' and promote=true";
	_bstr_t bs=s.AllocSysString();
	CalarmApp* pApp=(CalarmApp*)::AfxGetApp();
	r->Open(bs,(IDispatch*)pApp->m_dConnTd,adOpenStatic, adLockOptimistic, adCmdText);
	//若在布防设置表中select出的并口项数量为零则判断系统不使用并口,反之使用
	BFPortNum.RemoveAll();
	if(r->RecordCount==0)
		m_dBuffIn=FALSE;
	else
	{
		//若有并口则开一个并口端口数组,并给数组赋值
		m_dBuffIn=TRUE;
		TRY
		{
			r->MoveFirst();
			for(int i=0; i<r->RecordCount; i++)
			{
				BFPortNum.Add((long)r->GetCollect("Number"));
				r->MoveNext();
			}
		}
		CATCH(CException,e)
		{
			e->ReportError();
		}
		END_CATCH
	}
	r->Close();
	r=NULL;
}

BEGIN_EVENTSINK_MAP(CalarmView, CFormView)
    //{{AFX_EVENTSINK_MAP(CalarmView)
	ON_EVENT(CalarmView, IDC_MSCOMM2, 1 /* OnComm */, OnOnCommMscomm2, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CalarmView::OnOnCommMscomm2() 
{
	// TODO: Add your control notification handler code here
	if(m_Comm2.GetCommEvent()==2)     //事件值为2表示接收缓冲区内有字符
	{
		CString str=VARIANT2str(m_Comm2.GetInput());
		for(int i=0; i<str.GetLength();i++)
			processLook(str[i],TRUE);
	}
}

void CalarmView::OnSettings() 
{
	// TODO: Add your command handler code here
	m_Dong=FALSE;
	CASPDlg dlg;
	dlg.DoModal();
//	m_Dong=TRUE;
}

void CalarmView::OnLogManage() 
{
	// TODO: Add your command handler code here
	CGogDlg dlg(this);
	dlg.DoModal();
}





void CalarmView::Onbufang() 
{
	// TODO: Add your control notification handler code here
		CASPDlg dlg(this);
	dlg.DoModal();
	
}

void CalarmView::Onchujing() 
{
	// TODO: Add your control notification handler code here
		CBSPDlg dlg(this);
	dlg.DoModal();
	
}

void CalarmView::Ondngzuo() 
{
	// TODO: Add your control notification handler code here
		CCSPDlg dlg(this);
	dlg.DoModal();
	
}

void CalarmView::Onlog() 
{
	// TODO: Add your control notification handler code here
		CGogDlg dlg(this);
	dlg.DoModal();
	
	
}

⌨️ 快捷键说明

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