📄 alarmview.cpp
字号:
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 + -