📄 jhhbdoc.cpp
字号:
ASSERT(pCurCtrlInfo->m_status == CCtrlInfoObject::COMM_STATUS_IDLE);
timeSpan = timeCurrent - pCurCtrlInfo->m_lastTime;
if ((pCurCtrlInfo->m_bCommSuccess==FALSE)||(timeSpan.GetTotalSeconds()/60 > pJHHBDoc->m_nRefreshTimeout))//2001年6月1日改,原无(pCurCtrlInfo->m_bCommSuccess==FALSE)
{ //GetTotalSeconds()/60处为GetTotalSeconds()
pJHHBDoc->SendRequestString(n+1, timeCurrent);
break;
}
}
if (n == pJHHBDoc->m_ctrlInfoArray.GetSize())
{
for (n = 0; n < pJHHBDoc->m_ctrlInfoArray.GetSize(); ++ n)
{
CCtrlInfoObject* pCurCtrlInfo = pJHHBDoc->m_ctrlInfoArray[n];
if (pCurCtrlInfo->m_bActive == FALSE)
continue;
ASSERT(pCurCtrlInfo->m_status == CCtrlInfoObject::COMM_STATUS_IDLE);
timeSpan = timeCurrent - pCurCtrlInfo->m_lastTime;
if ((pCurCtrlInfo->m_bCommSuccess==FALSE)||(timeSpan.GetTotalSeconds()>600))//2001年6月1日改,原||处为&&,FALSE处为TRUE
{
pJHHBDoc->SendRequestString(n + 1, timeCurrent);
break;
}
}
}// Try Communicate with unsuccessfully at last
} // 10 seconds interval elapses
}
else
{ //定点转播
if (pJHHBDoc->m_pdlgReal!=NULL)
pJHHBDoc->m_pdlgReal->UpdateWaitProgressCtrl();
}
}
}
BOOL CJHHBDoc::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
if (nCode==-1)
return CDocument::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
CJHHBDoc* pJHHBDoc = this;//(CJHHBDoc*)GetActiveDocument();
ASSERT(pJHHBDoc->IsKindOf(RUNTIME_CLASS(CJHHBDoc)));
switch (nID)
{
// data from Comm Port
case CJHHBDoc::CM_COMM + CCommInfo::ID_COMM_READ:
{
if (pJHHBDoc->m_bAutoActivated == TRUE && pJHHBDoc->m_bRelayActivated == TRUE )
{
::SetEvent(m_pComm->m_hPostEvent);
ASSERT(FALSE);
return TRUE; // Eixst some error debug it !
}
// because maybe some noise, so no ASSERT at here
if (pJHHBDoc->m_bAutoActivated == FALSE && pJHHBDoc->m_bRelayActivated == FALSE )
{
*((WORD*)pJHHBDoc->m_pReadCommBuf) = 0;
::SetEvent(m_pComm->m_hPostEvent);
return TRUE; // 忽略干扰信号引起的通讯
}
if (pJHHBDoc->m_bAutoActivated == FALSE && pJHHBDoc->m_bRelayActivated == TRUE )
{ // 接收实况转播
int nReceive = *(WORD*)pJHHBDoc->m_pReadCommBuf; // receive byte number
if (nReceive==0)
{
*((WORD*)pJHHBDoc->m_pReadCommBuf) = 0;
::SetEvent(m_pComm->m_hPostEvent);
return TRUE;
}
for (int i=0; i<nReceive;i++)
TRACE3("This time receive %2d # is %d : %x\n",i+1,*(BYTE*)(m_pReadCommBuf+(i+2)*sizeof(BYTE)),*(BYTE*)(m_pReadCommBuf+(i+2)*sizeof(BYTE)) );
::memcpy(m_pGetDataBuf + m_nReceiveCount, m_pReadCommBuf + sizeof(WORD), nReceive );
pJHHBDoc->m_nReceiveCount += nReceive;
TRACE1(" +/+ CURRENT RECEIVE %d \n",pJHHBDoc->m_nReceiveCount);
if (pJHHBDoc->m_pstrHead==NULL)
{
pJHHBDoc->m_pstrHead=strstr((char *)pJHHBDoc->m_pGetDataBuf,"HEAD");
if (pJHHBDoc->m_pstrHead!=NULL)
{ //确认起始串"HEAD"
int nGap=pJHHBDoc->m_pstrHead - (char *)pJHHBDoc->m_pGetDataBuf;
ASSERT(nGap>=0);
pJHHBDoc->m_nReceiveCount-=nGap ;
::memcpy(pJHHBDoc->m_pGetDataBuf , pJHHBDoc->m_pstrHead, pJHHBDoc->m_nReceiveCount );
} //在有干扰时修正起始位置
}
if (pJHHBDoc->m_nReceiveCount >=18 && pJHHBDoc->m_pstrHead!=NULL)
{
for (int j=0; j<pJHHBDoc->m_nReceiveCount;j++)
TRACE3("GetBuff array %2d # is %d : %c\n",j+1,pJHHBDoc->m_pGetDataBuf[j],pJHHBDoc->m_pGetDataBuf[j] );
TRACE0("VVV Hi Hi Hi ... OVER !\n");
pJHHBDoc->m_nReceiveCount=0;
*((WORD*)pJHHBDoc->m_pReadCommBuf) = 0;
::SetEvent(m_pComm->m_hPostEvent);
//ASSERT(pJHHBDoc->m_pdlgReal!=NULL);
if (pJHHBDoc->m_pdlgReal!=NULL)
pJHHBDoc->m_pdlgReal->RefreshRelay((BYTE *)pJHHBDoc->m_pGetDataBuf);
pJHHBDoc->m_pstrHead=NULL;
return TRUE;
}
if (pJHHBDoc->m_nReceiveCount >=18 && pJHHBDoc->m_pstrHead==NULL)
{
TRACE0("XXX OVER & ERROR !\n");
pJHHBDoc->m_nReceiveCount=0;
*((WORD*)pJHHBDoc->m_pReadCommBuf) = 0;
::SetEvent(m_pComm->m_hPostEvent);
pJHHBDoc->m_pstrHead=NULL;
return TRUE;
}
}
if (pJHHBDoc->m_bAutoActivated == TRUE && pJHHBDoc->m_bRelayActivated == FALSE )
{ // 接收自动转播
pJHHBDoc->m_ctrlInfoArray[CCtrlInfoObject::m_nCurWorkStation - 1]->m_lastTime = CTime::GetCurrentTime();
pJHHBDoc->m_ctrlInfoArray[CCtrlInfoObject::m_nCurWorkStation - 1]->m_status = CCtrlInfoObject::COMM_STATUS_TRANSDATA;
int nReceive = *(WORD*)pJHHBDoc->m_pReadCommBuf; // receive byte number
if (nReceive<=0)
{
*((WORD*)pJHHBDoc->m_pReadCommBuf) = 0;
::SetEvent(m_pComm->m_hPostEvent);
return TRUE;
}
for (int i=0; i<nReceive;i++)
TRACE3("This time receive %2d # is %d : %c\n",i+1,*(BYTE*)(m_pReadCommBuf+(i+2)*sizeof(BYTE)),*(BYTE*)(m_pReadCommBuf+(i+2)*sizeof(BYTE)) );
::memcpy(m_pGetDataBuf + m_nReceiveCount, m_pReadCommBuf + sizeof(WORD), nReceive );
pJHHBDoc->m_nReceiveCount += nReceive;
TRACE1(" +/+ CURRENT RECEIVE %d \n",pJHHBDoc->m_nReceiveCount);
if (pJHHBDoc->m_pstrHead==NULL)
{
pJHHBDoc->m_pstrHead=strstr((char *)pJHHBDoc->m_pGetDataBuf,_T("BEGIN"));
if (pJHHBDoc->m_pstrHead!=NULL)
{ //确认起始串"BEGIN"
int nGap=pJHHBDoc->m_pstrHead - (char *)pJHHBDoc->m_pGetDataBuf;
ASSERT(nGap>=0);
pJHHBDoc->m_nReceiveCount-=nGap ;
if (pJHHBDoc->m_nReceiveCount>=0)
{
::memcpy(pJHHBDoc->m_pGetDataBuf , pJHHBDoc->m_pstrHead, pJHHBDoc->m_nReceiveCount );
//在有干扰时修正起始位置,并得到确认
}
else
{
//起始位置不对或上次数据存留在缓存,恢复原值
pJHHBDoc->m_nReceiveCount+=nGap;
pJHHBDoc->m_pstrHead=NULL;
}
}
}
if (pJHHBDoc->m_nTotalReceive==0 && pJHHBDoc->m_pstrHead!=NULL
&& pJHHBDoc->m_nReceiveCount >=7) // count number is received !
{
pJHHBDoc->m_nTotalReceive = *(WORD*)(pJHHBDoc->m_pGetDataBuf + 5);
}
if (pJHHBDoc->m_nReceiveCount >= pJHHBDoc->m_nTotalReceive
&& pJHHBDoc->m_pstrHead!=NULL)
{
pJHHBDoc->m_bAutoActivated = FALSE;
TRACE1("m_nReceiveCount is -- %d -- ! \n", pJHHBDoc->m_nReceiveCount);
TRACE1("m_nTotalReceive is -- %d -- ! \n", pJHHBDoc->m_nTotalReceive);
for (int j=0; j<pJHHBDoc->m_nReceiveCount;j++)
TRACE3("GetBuff array %2d # is %d : %c\n",j+1,pJHHBDoc->m_pGetDataBuf[j],pJHHBDoc->m_pGetDataBuf[j] );
if (memcmp(pJHHBDoc->m_pGetDataBuf + pJHHBDoc->m_nTotalReceive - 3,"END",3) == 0)
{ //确认结尾串"END"
TRACE0("OK !\n");
pJHHBDoc->ParseData();
}
else
{
TRACE0("FAIL !\n");
}
pJHHBDoc->m_pstrHead=NULL;
pJHHBDoc->m_nReceiveCount = 0;
pJHHBDoc->m_nTotalReceive = 0;
}
}
*((WORD*)pJHHBDoc->m_pReadCommBuf) = 0;
::SetEvent(m_pComm->m_hPostEvent);
return TRUE;
}
case CJHHBDoc::CM_COMM + CCommInfo::ID_COMM_ERROR:
TRACE0("Comm Error !\n");
return TRUE;
default:
return CDocument::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
}
# include "fstream.h"
void CJHHBDoc::OnDataPrintD()
{
CDaoHBRecSet* m_pDaoHBPrintSet = m_pDaoHBRecSet;
long m_nPrintRecCount=m_pDaoHBPrintSet->GetRecordCount( );
if ( m_nPrintRecCount==0L)
return;
CPrintRecUnit m_aPrintRec[144];
m_pDaoHBPrintSet->MoveFirst( );
int i;
for ( i=0;i<144;i++)
{
m_aPrintRec[i].str_NO.Format(_T("%4d"),i+1);
m_aPrintRec[i].str_Time.Format(IDS_SAVETIMEFMT, i / 6,( i % 6 )* 10);
m_aPrintRec[i].str_PH=_T(" ");
//COD
//FLOW
//NH4N
}
m_pDaoHBPrintSet->MoveFirst( );
for ( i=0;i<m_nPrintRecCount;i++)
{
m_aPrintRec[int( m_pDaoHBPrintSet->m_NO -1 )].str_PH.Format(
_T(" %5.2f"),
m_pDaoHBPrintSet->m_PH);
m_pDaoHBPrintSet->MoveNext( );
}
TRACE0("┏━━━┯━━━┳━━━┯━━━┳━━━┯━━━┳━━━┯━━━┳━━━┯━━━┳━━━┯━━━┓\n");
TRACE0("┃时 间│ PH ┃时 间│ PH ┃时 间│ PH ┃时 间│ PH ┃时 间│ PH ┃时 间│ PH ┃\n");
TRACE0("┣━━━┿━━━╋━━━┿━━━╋━━━┿━━━╋━━━┿━━━┿━━━╋━━━┿━━━┿━━━┫\n");
for ( i=0;i<24;i++)
{
TRACE2("┃ %s│%s",
m_aPrintRec[i].str_Time,
m_aPrintRec[i].str_PH);
TRACE2("┃ %s│%s",
m_aPrintRec[i+24*1].str_Time,
m_aPrintRec[i+24*1].str_PH);
TRACE2("┃ %s│%s",
m_aPrintRec[i+24*2].str_Time,
m_aPrintRec[i+24*2].str_PH);
TRACE2("┃ %s│%s",
m_aPrintRec[i+24*3].str_Time,
m_aPrintRec[i+24*3].str_PH);
TRACE2("┃ %s│%s",
m_aPrintRec[i+24*4].str_Time,
m_aPrintRec[i+24*4].str_PH);
TRACE2("┃ %s│%s",
m_aPrintRec[i+24*5].str_Time,
m_aPrintRec[i+24*5].str_PH);
TRACE0("┃\n");
if (i!= 23)
TRACE0("┠───┼───╂───┼───╂───┼───╂───┼───╂───┼───╂───┼───┨\n");
}
TRACE0("┗━━━┷━━━┻━━━┷━━━┻━━━┷━━━┻━━━┷━━━┻━━━┷━━━┻━━━┷━━━┛\n");
CString strOutPrn;
char * OutString;
ofstream OutToPrint("prntest.txt", ios::out | ios::binary);
strOutPrn.LoadString(IDS_REPTITLE);
OutString=(char *)(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
int nCurSel = m_ctrlInfoArray[m_nCurStation]->GetAbsCurSel(m_ctrlInfoArray);
strOutPrn.Format(IDS_REPEXPLAIN,
m_ctrlInfoArray[nCurSel]->GetFullName(),
m_curSpyTime.Format(_T("%Y年%m月%d日")));
OutToPrint.write("\034v\001",3);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPHEAD01);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPHEAD02);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPHEAD03);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
for ( i=0;i<24;i++)
{
strOutPrn.Format(IDS_REPFORMAT,
m_aPrintRec[ i].str_Time,
m_aPrintRec[ i].str_PH,
m_aPrintRec[i+24*1].str_Time,
m_aPrintRec[i+24*1].str_PH,
m_aPrintRec[i+24*2].str_Time,
m_aPrintRec[i+24*2].str_PH,
m_aPrintRec[i+24*3].str_Time,
m_aPrintRec[i+24*3].str_PH,
m_aPrintRec[i+24*4].str_Time,
m_aPrintRec[i+24*4].str_PH,
m_aPrintRec[i+24*5].str_Time,
m_aPrintRec[i+24*5].str_PH);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
if (i!= 23)
{
strOutPrn.LoadString(IDS_REPLINE);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
}
}
strOutPrn.LoadString(IDS_REPTAIL);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPFOOTER);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
OutToPrint.write("\014",1);
OutToPrint.close();
system("COPY PRNTEST.TXT PRN /B > NUL");
}
void CJHHBDoc::OnDataPrintM()
{
CString strOutPrn;
char * OutString;
ofstream OutToPrint("mprntest.txt", ios::out | ios::binary);
CDaoHBRecSet * pDaoHBPrintSet;
pDaoHBPrintSet = new CDaoHBRecSet(m_pDB);
try
{
pDaoHBPrintSet->Open(dbOpenDynaset, _T("Select * From [hbdata]"));
}
catch (CDaoException* e)
{
DisplayDaoException(e);
e->Delete();
return ;
}
int m_Year =m_curSpyTime.GetYear();
int m_Month=m_curSpyTime.GetMonth();
int m_nReportCount=0;
for (int nCurSel =0;nCurSel<m_ctrlInfoArray.GetSize();nCurSel++)
{
pDaoHBPrintSet->m_strFilter.Format(
_T("([PHDATE]>=#%2.2d/01/%4.4d# AND [PHDATE]< #%2.2d/01/%4.4d# AND [STATION] = %f) Order by [NO] ASC")
,m_Month,m_Year,m_Month+1,m_Year,
(double)m_ctrlInfoArray[nCurSel]->m_NO);
pDaoHBPrintSet->Requery();
MonthStatistic_Array[nCurSel].m_nRecCount=
pDaoHBPrintSet->GetRecordCount();
if (MonthStatistic_Array[nCurSel].m_nRecCount>0)
{
// This Station data is not empty
// now we beging make the report
m_nReportCount++;
MonthStatistic_Array[nCurSel].m_StationName=
m_ctrlInfoArray[nCurSel]->m_strStationName+
_T(" (")+
m_ctrlInfoArray[nCurSel]->GetFullName()+
_T(" )");
OutToPrint.write("\034v\001\033IB\r\n",8);
strOutPrn.LoadString(IDS_REPTITLE_M);
OutString=(char *)(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.Format(IDS_REPEXPLAIN_M,m_Year,m_Month);
strOutPrn=_T(" \033IA ")+MonthStatistic_Array[nCurSel].m_StationName+strOutPrn;
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPHEAD01_M);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPHEAD02_M);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPHEAD03_M);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPHEAD04_M);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPHEAD05_M);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
MonthStatistic_Array[nCurSel].m_nMAXPH=0.0;
MonthStatistic_Array[nCurSel].m_nMINPH=14.0;
MonthStatistic_Array[nCurSel].m_nOverTopCount=0;
MonthStatistic_Array[nCurSel].m_nOverBottomCount=0;
MonthStatistic_Array[nCurSel].m_nSuitTargeCount=0;
pDaoHBPrintSet->MoveFirst();
for (UINT i=0;i<MonthStatistic_Array[nCurSel].m_nRecCount;i++)
{
if (pDaoHBPrintSet->m_PH<MonthStatistic_Array[nCurSel].m_nMINPH)
MonthStatistic_Array[nCurSel].m_nMINPH=
pDaoHBPrintSet->m_PH;
if (pDaoHBPrintSet->m_PH>MonthStatistic_Array[nCurSel].m_nMAXPH)
MonthStatistic_Array[nCurSel].m_nMAXPH=
pDaoHBPrintSet->m_PH;
if (pDaoHBPrintSet->m_PH>9.00)
MonthStatistic_Array[nCurSel].m_nOverTopCount++;
if (pDaoHBPrintSet->m_PH<6.00)
MonthStatistic_Array[nCurSel].m_nOverBottomCount++;
if (pDaoHBPrintSet->m_PH>=6.00 && pDaoHBPrintSet->m_PH<=9.00)
MonthStatistic_Array[nCurSel].m_nSuitTargeCount++;
// Skip next recode
pDaoHBPrintSet->MoveNext();
}
ASSERT(MonthStatistic_Array[nCurSel].m_nRecCount==
MonthStatistic_Array[nCurSel].m_nSuitTargeCount+
MonthStatistic_Array[nCurSel].m_nOverBottomCount+
MonthStatistic_Array[nCurSel].m_nOverTopCount);
MonthStatistic_Array[nCurSel].m_nOverTopRate=(double)
MonthStatistic_Array[nCurSel].m_nOverTopCount/
MonthStatistic_Array[nCurSel].m_nRecCount;
MonthStatistic_Array[nCurSel].m_nOverBottomRate=(double)
MonthStatistic_Array[nCurSel].m_nOverBottomCount/
MonthStatistic_Array[nCurSel].m_nRecCount;
MonthStatistic_Array[nCurSel].m_nSuitTargeRate=(double)
MonthStatistic_Array[nCurSel].m_nSuitTargeCount/
MonthStatistic_Array[nCurSel].m_nRecCount;
strOutPrn.Format(IDS_REPFORMAT_M,
MonthStatistic_Array[nCurSel].m_nRecCount,
MonthStatistic_Array[nCurSel].m_nMAXPH,
MonthStatistic_Array[nCurSel].m_nMINPH,
MonthStatistic_Array[nCurSel].m_nSuitTargeRate*100,
MonthStatistic_Array[nCurSel].m_nOverBottomRate*100,
MonthStatistic_Array[nCurSel].m_nOverTopRate*100);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_REPTAIL_M);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
OutToPrint.write("\034v\000\033IA\r\n",8);
strOutPrn.LoadString(IDS_REPFOOTER_M);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
strOutPrn.LoadString(IDS_SEPARATOR);
OutString=(char * )(LPCTSTR)strOutPrn;
OutToPrint.write(OutString ,strOutPrn.GetLength());
}
if (m_nReportCount==5)
{
m_nReportCount=0;
OutToPrint.write("\014",1); // Eject print after 5th report
}
}
OutToPrint.write("\014",1); // Eject print at all over
OutToPrint.close();
if (pDaoHBPrintSet->IsOpen())
pDaoHBPrintSet->Close();
delete pDaoHBPrintSet;
system("COPY MPRNTEST.TXT PRN /B > NUL");
}
////////////////////////////////////////////////
/////// ljh start
void CJHHBDoc::OnDataPrintYear()
{
// TODO: Add your command handler code here
}
////////////////////////////////////////////////
////// ljh end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -