📄 glovar.cpp
字号:
#include "stdafx.h"
#include "glovar.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
CString SYS_PATH;
BOOL SYS_DEBUG=TRUE;
int GlastLine=0;
void dmpCOMerr( _com_error &e, int line, char *file, bool traceOnly ){
char pline[99];
sprintf(pline,"\r\n Line: %d File %s", line, file);
if(GlastLine)sprintf(pline,"\r\n Line: %d ; Last Line = %d File %s", line,GlastLine, file);
_bstr_t bstrSource(e.Source());
_bstr_t bs = _bstr_t(" Error: ") + _bstr_t(e.Error()) + _bstr_t("\r\n Msg: ")
+ _bstr_t(e.ErrorMessage()) + _bstr_t("\r\n Description: ")
+ _bstr_t(e.Description()) + _bstr_t(pline) ;
// CString str;
// str=(char *)bs;
// ::SendMessage(::AfxGetApp()->m_pMainWnd->m_hWnd,WM_TIPMESSAGE,(WPARAM)&str,0);
if(SYS_DEBUG)
MessageBox(0,bs,bstrSource, MB_OK);
::MessageBeep(0xFFFFFFFF);
// char xx[200];
// sprintf(xx,"dmpCOMerr\n %s %s \n",(char *) bs, (char *) bstrSource);
// TRACE(xx);
}
//
// Window name 窗口标题名和类名, 也用来实现应用实列唯一化
//
const TCHAR gcszWindowName[] = _T("DataSvrEx");
const TCHAR gcszWindowClass[] = _T("BaoSight_DataSvrEx");;
BOOL m_bShutDown; // 本次退出是否因为系统 ShutDown
COLORREF grgbArray[16] = {
RGB( 0, 0, 0 ), // Black 黑色
RGB( 128, 0, 0 ), // Dark Red 褐红色
RGB( 0, 128, 0 ), // Dark Green 绿色
RGB( 0, 0, 128 ), // Dark Blue 深蓝色
RGB( 128, 128, 0 ), // Dark Yellow 黄褐色
RGB( 128, 0, 128 ), // Dark Magenta 紫色
RGB( 0, 128, 128 ), // Dark Cyan 深青色
RGB( 128, 128, 128 ), // Medium Grey 灰色
RGB( 192, 192, 192 ), // Light Grey 银色
RGB( 255, 0, 0 ), // Red 红色
RGB( 0, 255, 0 ), // Green 浅绿色
RGB( 255, 255, 0 ), // Yellow 黄色
RGB( 0, 0, 255 ), // Blue 蓝色
RGB( 255, 0, 255 ), // Magenta 紫红色
RGB( 0, 255, 255 ), // Cyan 蓝绿色
RGB( 255, 255, 255 ), // White 白色
};
LPTSTR grgbtextArray[16] = {
"黑色 ", "褐红色", "绿色 ", "深蓝色", "黄褐色", "紫色 ", "深青色", "灰色 ",
"银色 ", "红色 ", "浅绿色", "黄色 ", "蓝色 ", "紫红色", "蓝绿色", "白色 ",
};
CStringArray * split(CString str,CString delimiter)
{
CStringArray * ret = new CStringArray();
ret->RemoveAll();
CString str1=str;
while(str1.GetLength()>0)
{
str1.TrimRight();
str1.TrimLeft();
int find=str1.Find(delimiter,0);
if(find>=0){
ret->Add(str1.Left(find));
str1=str1.Mid(find+delimiter.GetLength())+' ';
}
else
{
ret->Add(str1);
str1="";
}
}
return ret;
}
CStringArray * GetLineFromFile(CString filename)
{
CStringArray * ret=NULL;
ret=new CStringArray();
CFileStatus status;
if(!CFile::GetStatus(filename,status))return ret;
long len=0;
char * p = NULL ;
try{
::CFile file;
file.Open(filename,CFile::modeRead|CFile::shareDenyWrite);
len=file.GetLength();
p =new char[len+1];
p[len]=0;
len=file.Read(p,len);
file.Close();
}
catch(CFileException *e)
{
char des[200];
e->GetErrorMessage(des,1000);
::AfxMessageBox(des,MB_OK);
if(p)delete p;
if(ret)delete ret;
return NULL;
}
ret->RemoveAll();
long start=0;
for(long j=0;j<len;j++)
{
if(p[j]==0xd)
{
p[j]=0;
p[j+1]=0;
j++;
CString str;
str="";
str+=(char *)(p+start);
ret->Add(str);
start=j+1;
}
}
if(p)delete p;
return ret;
}
CTypedPtrArray < CPtrArray, NPYB > arrYB; //仪表
CTypedPtrArray < CPtrArray, NPCD > arrCD; //测点
CTypedPtrArray < CPtrArray, NPCS > arrCS; //参数
CTypedPtrArray < CPtrArray, NPRT > arrRT; //实时数据
//清理YB内存
void deleteyb()
{
for(int i=0;i<arrYB.GetSize();i++)
{
NPYB npyb=arrYB.GetAt(i);
if (npyb!=NULL)delete npyb;
}
arrYB.RemoveAll();
}
//清理CD内存
void deletecd()
{
for(int i=0;i<arrCD.GetSize();i++)
{
NPCD npcd=arrCD.GetAt(i);
if (npcd!=NULL)delete npcd;
}
arrCD.RemoveAll();
}
//清理CS内存
void deletecs()
{
for(int i=0;i<arrCS.GetSize();i++)
{
NPCS npcs=arrCS.GetAt(i);
if (npcs!=NULL)delete npcs;
}
arrCS.RemoveAll();
}
//清理RT内存
void deletert()
{
for(int i=0;i<arrRT.GetSize();i++)
{
NPRT nprt=arrRT.GetAt(i);
if (nprt!=NULL)delete nprt;
}
arrRT.RemoveAll();
}
//读取YB文件
void readyb()
{
CStringArray *arr;
arr=::GetLineFromFile(SYS_PATH+"misc\\yb.par");
//清除原有的数据
deleteyb();
//设置新数据
// arrYB.SetSize(arr->GetSize());
for(int i=0;i<arr->GetSize();i++)
{
CString str,temp;
CStringArray *a;
str=arr->GetAt(i);
a=split(str,",");
if(a->GetSize()==7)
{
NPYB npyb=new YB();
npyb->ybid=atoi(a->GetAt(0));
npyb->ybname=a->GetAt(1);
npyb->ybtype=a->GetAt(2);
npyb->comport=a->GetAt(3);
npyb->ybaddr=a->GetAt(4);
npyb->AnZDD=a->GetAt(5);
npyb->ybbaud=atoi(a->GetAt(6));
// arrYB.SetAt(i,npyb);
arrYB.Add(npyb);
}
delete a;
}
delete arr;
}
void writeyb()
{
CString filename;
filename=SYS_PATH+"misc\\yb.par";
CFile file;
file.Open(filename,CFile::modeWrite);
file.SetLength(0);
for(int i=0;i<arrYB.GetSize();i++)
{
CString str="";
NPYB npyb;
npyb=arrYB.GetAt(i);
str.Format("%d,%s,%s,%s,%s,%s,%d",npyb->ybid,npyb->ybname,npyb->ybtype,npyb->comport,npyb->ybaddr,npyb->AnZDD,npyb->ybbaud);
str+="\r\n";
file.Write(str,str.GetLength());
}
file.Close();
}
void readcd()
{
CStringArray *arr;
arr=::GetLineFromFile(SYS_PATH+"misc\\cd.par");
//清除原有的数据
deletecd();
//设置新数据
// arrCD.SetSize(arr->GetSize());
for(int i=0;i<arr->GetSize();i++)
{
CString str,temp;
CStringArray *a;
str=arr->GetAt(i);
a=split(str,",");
if(a->GetSize()==4)
{
NPCD npcd=new CD();
npcd->cdid=atoi(a->GetAt(0));
npcd->cdname=a->GetAt(1);
npcd->ybid=atoi(a->GetAt(2));
npcd->chanal=atoi(a->GetAt(3));
// arrCD.SetAt(i,npcd);
arrCD.Add(npcd);
}
delete a;
}
delete arr;
}
void writecd()
{
CString filename;
filename=SYS_PATH+"misc\\cd.par";
CFile file;
file.Open(filename,CFile::modeWrite);
file.SetLength(0);
for(int i=0;i<arrCD.GetSize();i++)
{
CString str="";
NPCD npcd;
npcd=arrCD.GetAt(i);
str.Format("%d,%s,%d,%d",npcd->cdid,npcd->cdname,npcd->ybid,npcd->chanal);
str+="\r\n";
file.Write(str,str.GetLength());
}
file.Close();
}
void readcs()
{
CStringArray *arr;
arr=::GetLineFromFile(SYS_PATH+"misc\\cs.par");
//清除原有的数据
deletecs();
//设置新数据
// arrCS.SetSize(arr->GetSize());
for(int i=0;i<arr->GetSize();i++)
{
CString str,temp;
CStringArray *a;
str=arr->GetAt(i);
a=split(str,",");
if(a->GetSize()==5)
{
NPCS npcs=new CS();
npcs->csid=atoi(a->GetAt(0));
npcs->ybtype=a->GetAt(1);
npcs->csname=a->GetAt(2);
npcs->csdz=a->GetAt(3);
npcs->cstype=a->GetAt(4);
// arrCS.SetAt(i,npcs);
arrCS.Add(npcs);
}
delete a;
}
delete arr;
}
void writecs()
{
CString filename;
filename=SYS_PATH+"misc\\cs.par";
CFile file;
file.Open(filename,CFile::modeWrite);
file.SetLength(0);
for(int i=0;i<arrCS.GetSize();i++)
{
CString str="";
NPCS npcs;
npcs=arrCS.GetAt(i);
str.Format("%d,%s,%s,%s,%s",npcs->csid,npcs->ybtype,npcs->csname,npcs->csdz,npcs->cstype);
str+="\r\n";
file.Write(str,str.GetLength());
}
file.Close();
}
void readrt()
{
CStringArray *arr;
arr=::GetLineFromFile(SYS_PATH+"misc\\rt.par");
//清除原有的数据
deletert();
//设置新数据
// arrRT.SetSize(arr->GetSize());
for(int i=0;i<arr->GetSize();i++)
{
CString str,temp;
CStringArray *a;
str=arr->GetAt(i);
a=split(str,",");
if(a->GetSize()==11)
{
NPRT nprt=new RT();
nprt->rtid=atoi(a->GetAt(0));
nprt->cdid=atoi(a->GetAt(1));
nprt->csid=atoi(a->GetAt(2));
nprt->dw=a->GetAt(3);
nprt->eanble=(a->GetAt(4)=="启用")?true:false;
nprt->warn_enble=(a->GetAt(5)=="启用")?true:false;
nprt->warn_low=atof(a->GetAt(6));
nprt->warn_hi=atof(a->GetAt(7));
nprt->range_low=atof(a->GetAt(8));
nprt->range_hi=atof(a->GetAt(9));
nprt->warn=false;
nprt->saving_cycle=atoi(a->GetAt(10));
for(int xx=0;xx<200;xx++)nprt->hisory[xx]=0;
nprt->hendp=0;
nprt->view=false;
// arrRT.SetAt(i,nprt);
arrRT.Add(nprt);
}
delete a;
}
delete arr;
}
void writert()
{
CString filename;
filename=SYS_PATH+"misc\\rt.par";
CFile file;
file.Open(filename,CFile::modeWrite);
file.SetLength(0);
for(int i=0;i<arrRT.GetSize();i++)
{
CString str="";
NPRT nprt;
nprt=arrRT.GetAt(i);
str.Format("%d,%d,%d,%s,%s,%s,%f,%f,%f,%f,%d",nprt->rtid,nprt->cdid,nprt->csid,nprt->dw,(nprt->eanble?"启用":""),(nprt->warn_enble?"启用":""),nprt->warn_low,nprt->warn_hi,nprt->range_low , nprt->range_hi ,nprt->saving_cycle);
str+="\r\n";
file.Write(str,str.GetLength());
}
file.Close();
}
XLFDATA xlfdata[100];
long InitXlfData()
{
memset(xlfdata,0,sizeof(xlfdata));
long count=0;
for(int i=0;i<arrRT.GetSize();i++)
{
NPRT nprt=arrRT.GetAt(i);
NPYB npyb;
NPCD npcd;
NPCS npcs;
for(int j=0;j<arrCD.GetSize();j++)
{
npcd=arrCD.GetAt(j);
if(npcd->cdid==nprt->cdid)break;
}
for(j=0;j<arrCS.GetSize();j++)
{
npcs=arrCS.GetAt(j);
if(npcs->csid==nprt->csid)break;
}
for(j=0;j<arrYB.GetSize();j++)
{
npyb=arrYB.GetAt(j);
if(npyb->ybid==npcd->ybid)break;
}
if(nprt->eanble)
{
xlfdata[count].rtid=nprt->rtid;
xlfdata[count].comport=atoi(npyb->comport.Mid(3));
strcpy(xlfdata[count].cdmc,npcd->cdname);
int csdz;
sscanf(npcs->csdz,"%X",&csdz);
xlfdata[count].csaddr=(npcd->chanal-1)*0x2f+csdz;
int cslx;
if(npcs->cstype=="长整")cslx=0;
else if(npcs->cstype=="短整")cslx=1;
else if(npcs->cstype=="浮点")cslx=2;
else cslx=3;
xlfdata[count].cstype=cslx;
int ybdz;
sscanf(npyb->ybaddr,"%X",&ybdz);
xlfdata[count].ybaddr=ybdz;
xlfdata[count].baud=npyb->ybbaud;
count++;
}
}
return count;
}
long RTCount=0;
bool canread=false;
bool BeginRT()
{
// ::AfxMessageBox("BeginRTIn");
long num=InitXlfData();
L_InitPara(2);
HRESULT result=Init_Active(xlfdata,num);
RTCount=num;
bool ret=false;
if(result==0)ret = true;
// ::AfxMessageBox("BeginRTOut");
canread=true;
return ret;
}
bool EndRT()
{
// ::AfxMessageBox("EndRTIn");
canread=false;
HRESULT result=Close_Active(1);
bool ret=false;
if(result==0)ret = true;
// ::AfxMessageBox("EndRTOut");
return ret;
}
int m_autoRun;
void WriteDataToFile(int rtid,double value,int state)
{
try
{
CString filename;
filename.Format("%shistory\\%d.dat",SYS_PATH,rtid);
HISTORY_FILEHEAD filehead;
filehead.begindate=COleDateTime::GetCurrentTime();
filehead.enddate=COleDateTime::GetCurrentTime();
filehead.flag[0]='Z';
filehead.flag[1]='D';
filehead.tail=0;
filehead.head=0;
CFile file;
if(!file.Open(filename,CFile::modeReadWrite|CFile::shareExclusive ))
{
file.Open(filename,CFile::modeCreate|CFile::modeWrite);
file.Write(&filehead,sizeof(HISTORY_FILEHEAD));
file.Close();
file.Open(filename,CFile::modeReadWrite|CFile::shareExclusive );
}
file.Seek(0,CFile::begin);
file.Read(&filehead,sizeof(HISTORY_FILEHEAD));
// COleDateTime dt;
filehead.enddate=COleDateTime::GetCurrentTime();
COleDateTimeSpan dtspan;
dtspan=filehead.enddate-filehead.begindate;
long totalmin=(long)dtspan.GetTotalMinutes();
filehead.head=totalmin;
file.Seek(0,CFile::begin);
file.Write(&filehead,sizeof(HISTORY_FILEHEAD));
file.Seek(sizeof(HISTORY_FILEHEAD)+totalmin*sizeof(HISTORY_DATA),CFile::begin);
HISTORY_DATA filedata;
filedata.state=state;
filedata.value=(float)value;
file.Write(&filedata,sizeof(HISTORY_DATA));
file.Close();
}
catch(...)
{
}
}
HISTORY_DATA * ReadDataFromFile(int rtid,COleDateTime &dt1,COleDateTime &dt2,int &count)
{
count=0;
HISTORY_DATA * ret=NULL;
CString filename;
filename.Format("%shistory\\%d.dat",SYS_PATH,rtid);
HISTORY_FILEHEAD filehead;
CFile file;
if(!file.Open(filename,CFile::modeRead|CFile::shareExclusive ))
{
return ret;
}
file.Seek(0,CFile::begin);
file.Read(&filehead,sizeof(HISTORY_FILEHEAD));
COleDateTime dtfrom,dtto;
dtfrom=dt1;
dtto=dt2;
if(dtfrom<filehead.begindate)dtfrom=filehead.begindate;
if(dtto>filehead.enddate)dtto=filehead.enddate;
COleDateTimeSpan dtspan;
dtspan=dtfrom-filehead.begindate;
long frommin=(long)dtspan.GetTotalMinutes();
dtspan=dtto-filehead.begindate;
long tomin=(long)dtspan.GetTotalMinutes();
if(tomin>frommin)
{
count=tomin-frommin+1;
ret=new HISTORY_DATA[tomin-frommin+1];
file.Seek(sizeof(HISTORY_FILEHEAD)+frommin*sizeof(HISTORY_DATA),CFile::begin);
file.Read(ret,(tomin-frommin+1)*sizeof(HISTORY_DATA));
}
file.Close();
dt1=dtfrom;dt2=dtto;
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -