📄 unit1.cpp
字号:
strT= AnsiString(TempData[i][3])+" "+ strTime;
Series1->AddXY(p,ByteToFloat(TempData[i][j]),strT,clRed);
Series2->AddXY(p,objSysInfo.StanTemp,strT,clYellow);
Series3->AddXY(p,0,"",clWhite);
InvalData [i][j]=true;
p++;
}
else
InvalData [i][j]=false;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::RefreshScreen()
{//刷新屏幕
AnsiString strTime,strDate;
bool b[2]={false,false};
GetTimeArea();
//曲线
for(int j=0;j<2;j++)//时间上下限
{
for(int i=0;i<DayNum;i++)//天数
{ strTime= AnsiString(TempData[i][1])+"-" + AnsiString(TempData[i][2])+ "-" +
AnsiString(TempData[i][3]);
if(InStr(strTimeUpDown[j],strTime) && StrLen(strTimeUpDown[j].c_str())==StrLen(strTime.c_str()))
b[j]=true;
if(b[j]) break;
}
}
if(b[0] && b[1]){ShowMsg("时间正常");RefreshGraph();}
else ShowMsg("时间超出范围");
//详细数据
cmbDate->ItemIndex=0;
RefreshList(0);
eTemp->Text=IntToStr(objSysInfo.StanTemp);
//曲线标题
Chart1->Title->Text->Clear();
Chart1->Title->Text->Add(eUserName->Text + "温度曲线" + "(" +
strTimeUpDown[0] + "至" + strTimeUpDown[1]+")");
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmdRefreshClick(TObject *Sender)
{//曲线刷新
RefreshScreen();
}
//---------------------------------------------------------------------------
bool __fastcall TfrmMain::InStr(AnsiString str1,AnsiString str2)
{//判断是否包含指定字符串
char *ptr;
ptr=strstr(str1.c_str(),str2.c_str());
if(ptr!=NULL)
return true;
else
return false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::GetTimeArea()
{//获得显示时间区间
strTimeUpDown[0]=tFromYear->Text + "-" + tFromMonth->Text + "-" + tFromDay->Text;
strTimeUpDown[1]=tToYear->Text + "-" + tToMonth->Text + "-" + tToDay->Text;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmbDateClick(TObject *Sender)
{//观察一天的数据
RefreshList(cmbDate->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::RefreshList(int i)
{//刷新详细数据
int p;
AnsiString strDate;
p=0;
strDate=AnsiString(TempData[i][1])+"-" + AnsiString(TempData[i][2])+ "-" +
AnsiString(TempData[i][3]);
for(int j=4;j<100;j++)
{ grdData->Cells[0][j-3]="";
grdData->Cells[1][j-3]="";
if(InvalData [i][j])
{ grdData->Cells[0][p+1]= strDate+ " " +AnsiString(j/4-1)+":"+ AnsiString((j%4)*15);
grdData->Cells[1][p+1]=FloatToStr((ByteToFloat(TempData[i][j])));
p++;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuSaveDataClick(TObject *Sender)
{//保存历史数据
int resul;
AnsiString strFile,strMsg;
if(SaveFile->Execute())
{ strFile=SaveFile->FileName;
if(!InStr(strFile,".tev"))strFile=strFile+".tev";//单击选中与输入有区别
if(!FileExists(strFile))SaveData(strFile);
else
{ strMsg="是否覆盖"+strFile+"文件";
resul=Application->MessageBox(strMsg.c_str(),"警告",MB_YESNO);
switch(resul)
{ case IDYES:
SaveData(strFile);
break;
case IDNO:
break;
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuOpenDataClick(TObject *Sender)
{//调入历史数据
AnsiString strFile;
if(OpenFile->Execute())
{ strFile=OpenFile->FileName;
if(!InStr(strFile,".tev"))strFile=strFile+".tev";
if(FileExists(strFile))OpenData(strFile);
}
RefreshScreen();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::SaveData(AnsiString strFile)
{//保存数据
FILE *fp;
int handle;
if(!FileExists(strFile.c_str())){fp=fopen(strFile.c_str(),"wb"); fclose(fp);}
if((handle=sopen(strFile.c_str(),O_BINARY | O_WRONLY | O_APPEND,SH_DENYNO))!=-1)
{
write(handle,&ReceiveData[3],sizeof(ReceiveData[3]));
for(int i=0;i<ReceiveData[3]*100;i++)//写数据
write(handle,&ReceiveData[i+4],sizeof(ReceiveData[i+4]));
}
close(handle);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::IniOldData()
{ int t;
//起始时间
tFromYear->Text=ReceiveData[5];
tFromMonth->Text=ReceiveData[6];
tFromDay->Text=ReceiveData[7];
tFromHour->Text="0";
//结束时间
t=ReceiveData[3]-1 ;
tToYear->Text=ReceiveData[t*100+5];
tToMonth->Text=ReceiveData[t*100+6];
tToDay->Text=ReceiveData[t*100+7];
tToHour->Text="0";
for(int i=0;i<ReceiveData[3];i++)
{
for(int j=0;j<100;j++)
TempData[i][j]= ReceiveData[i*100+j+4];
}
DayNum= ReceiveData[3];
RefreshScreen();
UDDay->Position=DayNum;
ShowMsg("已读入历史数据报文");
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::OpenData(AnsiString strFile)
{//打开数据
int handle;
try
{
if((handle=sopen(strFile.c_str(),O_BINARY | O_RDONLY ,SH_DENYNO))!=-1)
{ read(handle,&ReceiveData[3],sizeof(ReceiveData[3]));
for(int j=0;j<ReceiveData[3]*100;j++)
{
if(eof(handle)==1)break;
read(handle,&ReceiveData[j+4],sizeof(ReceiveData[j+4]));
}
}
IniOldData();
close(handle);
}
catch(...)
{
Application->MessageBox("读文件错误","错误",MB_OK);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::ClearAll()
{//清空
Series1->Clear();
Series2->Clear();
cmbDate->Items->Clear();
cmbDate->Text="";
for(int j=4;j<100;j++)
{ grdData->Cells[0][j-3]="";
grdData->Cells[1][j-3]="";
}
tFromYear->Text="";
tFromMonth->Text="";
tFromDay->Text="";
tFromHour->Text="";
tToYear->Text="";
tToMonth->Text="";
tToDay->Text="";
tToHour->Text="";
for(int i=0;i<14;i++)
for(int j=0;j<100;j++)
TempData[i][j]=0;
}
//---------------------------------------------------------------------------
float __fastcall TfrmMain::ByteToFloat(Byte InVal)
{
float x=0x00;
AnsiString strT;
for(int i=0;i<8;i++)
{ if((InVal & Byte(pow(2,i)))>0)
x+= pow(2,i-3);
}
strT=FloatToStr(x);
return StrToFloat(strT);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuClearSaveDataClick(TObject *Sender)
{//清空
ShowMsg("主机清空记录仪中历史数据");
SendReport(2);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuClearScrClick(TObject *Sender)
{//清屏
ClearAll();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuDownLoadClick(TObject *Sender)
{//传数
ShowMsg("主机召唤记录仪中历史数据");
SendReport(1);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuTimeClick(TObject *Sender)
{//校时
ShowMsg("主机对记录仪进行校时");
SendReport(3);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuChartZoomOutClick(TObject *Sender)
{//扩大
Chart1->ZoomPercent(120);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuChartZoomInClick(TObject *Sender)
{//缩小
Chart1->ZoomPercent(80);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuChartZoomResetClick(TObject *Sender)
{//恢复
Chart1->UndoZoom();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::mnuPrintClick(TObject *Sender)
{//曲线打印
try
{
Chart1->Print();
}
catch(...)
{
Application->MessageBox("打印出错,请检查是否安装打印机","端口错误,重新设置端口",MB_OK);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::UDTempClick(TObject *Sender,
TUDBtnType Button)
{//改变室温
objSysInfo.StanTemp=StrToInt(eTemp->Text);
TIniFile *FileIni = new TIniFile (IniFilePath);
FileIni->WriteInteger("系统信息", "标准室温",objSysInfo.StanTemp);
delete FileIni;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::UDDayClick(TObject *Sender, TUDBtnType Button)
{//改变天数
objSysInfo.DayNum=StrToInt(eDay->Text);
TIniFile *FileIni = new TIniFile (IniFilePath);
FileIni->WriteInteger("系统信息", "天数",objSysInfo.DayNum);
delete FileIni;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -