📄 main.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "CommSet.h"
#include "ChangeName.h"
#include "Unit5.h"
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Comm"
#pragma resource "*.dfm"
#define myadr 255;
String VersionInfo="Version 1.0";
TFormMain *FormMain;
TTreeNode *rootnode,*rootnode2,*sub1node,*sub2node,*sub3node,*sub4node,*sub5node;
String rootname="rootname.txt";
//******************Temporary variable area about TreeView create************
String sub1nodeText,sub2nodeText;
int locnum;
int locnumArr[256],locnumArr2[256];
String locname;
int CountOfAlm=0;
HANDLE Thefile;
String filename;
DWORD BytesWritten;
//***************************************************************************
int SOIT=0x7e,ADR=0,MYADR=0,CMD_TYPE=0,CMD_ID=0,INFO0=0,INFO1=0,INFO2=0,INFO3=0,CHKSUM=0;
int SOIR=0x8a,GETADR;
int timeout=1;//Timeout flag
int RTN=0;
int INFOR0,INFOR1,INFOR2,INFOR3,INFOR4,INFOR5,INFOR6,INFOR7;
unsigned char txdata[10];
unsigned char rxdata[20];
//unsigned char rxdata2[20];
String INFOSTR;//display received INFO data
String disp;
int autoread=0,read=0;
int stopedread;
int dgtalg=0; int dgt[8],alg[8]; //Digital or analog state,one express digital and two express analog
unsigned int degree=0,rundegree=0; //Autorun degree
unsigned int runtime=0;
unsigned int timerstoptime=0;
int getadr=0; //flag
int readalg=0; //flag
int tableturn=0; //no use
int ReadOut=0;
int GetAdd=0,GetAlg=0,GetDgt=0;//the flag when get address or analog data or digital data
int GetAlg2=0;
int failure=0; //flag of bad link
int Checktimeout=0;
int RTNError=0;
int CHKSUMError=0;
int ChangeAdrTest=1;
String root; //TreeView root name
//---------------------------------------------------------------------------
void Delay(DWORD DT)
{ //Delay function
long tt;
tt=GetTickCount();
while (GetTickCount()-tt<DT)
{
Application->ProcessMessages();
if ((GetTickCount()-tt)<=0)
tt=GetTickCount();
}
}
//---------------------------------------------------------------------------
String ByteToChar(byte TheByte)
{
switch(TheByte)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: return IntToStr(TheByte); //break;
case 10: return('A');// break;
case 11: return('B'); //break;
case 12: return('C');// break;
case 13: return('D');// break;
case 14: return('E');// break;
case 15: return('F');// break;
default: return('X');}
}
//---------------------------------------------------------------------------
String ByteToHexStr(byte TheByte)
{
int tmpByte1;
int tmpByte2;
String tmpStr;
tmpByte1=TheByte/16;
tmpByte2=TheByte%16;
tmpStr=ByteToChar(tmpByte1);
tmpStr=tmpStr+ByteToChar(tmpByte2);
return tmpStr;
}
//---------------------------------------------------------------------------
void Runadr()
{ //Autorun function
FormMain->TableP->First();
a:;
if(FormMain->TableP->FieldByName("Addr")->AsString!="")
{
FormMain->Edit2->Text=FormMain->TableP->FieldByName("Addr")->AsString;
FormMain->Edit27->Text=FormMain->TableP->FieldByName("LocNum")->AsString;
FormMain->Edit28->Text=FormMain->TableP->FieldByName("LocName")->AsString;
}
else return;
FormMain->BitBtn16->Click();
if(FormMain->TableP->Eof) { goto b;}
Delay(1500);
if(stopedread==1) goto b;
FormMain->TableP->Next();
if (FormMain->TableP->Eof) { goto b;}
goto a;
b:;
if(stopedread==0)
{
FormMain->TimerRun->Interval=(FormMain->Edit6->Text.ToInt())*1000;
FormMain->TimerRun->Enabled=true;
}
else {stopedread=0;FormMain->TimerRun->Enabled=false;}
}
//---------------------------------------------------------------------------
int aa=0;
int failureflag;
void RecordData()
{
ReadOut=0;
d:;
if (!FormMain->CheckBox1->Checked) return;
if (!FormMain->TableD->Eof) FormMain->TableD->Last();
if (FormMain->TableD->RecordCount!=0) aa=FormMain->TableD->FieldByName("Num")->AsString.ToInt();
else aa=0;
aa++;
FormMain->TableD->Next();
FormMain->TableD->Append();
FormMain->TableD->FieldByName("Num")->AsString=aa;
FormMain->TableD->FieldByName("Date")->AsString=Now().DateString();
FormMain->TableD->FieldByName("Time")->AsString=Now().TimeString();
FormMain->TableD->FieldByName("Addr")->AsString=FormMain->Edit2->Text;
FormMain->DBMemoD->Text="设备地址:"+FormMain->Edit2->Text;
//if (autoread==1)
FormMain->DBMemoD->Text=FormMain->DBMemoD->Text+" 设备名称:"+FormMain->TableP->FieldByName("Name")->AsString;
// else
// FormMain->DBMemoD->Text=FormMain->DBMemoD->Text+" 手动监控";
//DBMemo1->Text=DBMemo1->Text+Edit1->Text;
// if(ReadOut==1) {ReadOut=0; Delay(200); FormMain->DBMemoD->Lines->Add("空调工作状态:关机");goto end;}
if(failure==1) {failure=0; FormMain->DBMemoD->Lines->Add("通信故障");
// FormMain->TableD->FieldByName("IsAlm")->AsBoolean=true;
// CountOfAlm++;
{
if(timeout==1) FormMain->DBMemoD->Lines->Add("连接超时或对方机无反应");
FormMain->DBMemoD->Lines->Add(FormMain->StatusBar1->Panels->Items[2]->Text);//根据告警类型添加文字
}
goto end;}
//Next step is to record data according to received INFO
FormMain->DBMemoD->Lines->Add("●单元/组号:"+FormMain->Edit27->Text+"●单元/组名称:"+FormMain->Edit28->Text);
FormMain->DBMemoD->Lines->Add("●状态:"+FormMain->Edit15->Text
+" ●模式:"+FormMain->Edit19->Text
+" ●风门叶片:"+FormMain->Edit18->Text
+" ●风速:"+FormMain->Edit20->Text
+" ●设定温度:"+FormMain->Edit9->Text
+" ●风门叶片:"+FormMain->Edit18->Text
/* FormMain->DBMemoD->Lines->Add(*/+" ●室温:"+FormMain->Edit7->Text
+" ●室内E1:"+FormMain->Edit8->Text
+" ●室内E2:"+FormMain->Edit14->Text
+" ●排气:"+FormMain->Edit13->Text
+" ●室外C1:"+FormMain->Edit12->Text
+" ●室外C2:"+FormMain->Edit11->Text
+" ●电磁阀:"+FormMain->Edit10->Text
+" ●告警码:"+FormMain->Edit17->Text
);
/*
FormMain->DBMemoD->Lines->Add("风门叶片:"+FormMain->Edit18->Text);
FormMain->DBMemoD->Lines->Add("模式:"+FormMain->Edit19->Text);
FormMain->DBMemoD->Lines->Add("风速:"+FormMain->Edit20->Text);
FormMain->DBMemoD->Lines->Add("室温:"+FormMain->Edit7->Text);
FormMain->DBMemoD->Lines->Add("E1:"+FormMain->Edit8->Text);
FormMain->DBMemoD->Lines->Add("E2:"+FormMain->Edit14->Text);
FormMain->DBMemoD->Lines->Add("排气:"+FormMain->Edit13->Text);
FormMain->DBMemoD->Lines->Add("C1:"+FormMain->Edit12->Text);
FormMain->DBMemoD->Lines->Add("C2:"+FormMain->Edit11->Text);
FormMain->DBMemoD->Lines->Add("电磁阀:"+FormMain->Edit10->Text);
FormMain->DBMemoD->Lines->Add("设定温度:"+FormMain->Edit9->Text);
FormMain->DBMemoD->Lines->Add("告警码:"+FormMain->Edit17->Text);
*/
if(FormMain->Edit17->Text!="00")
{
FormMain->TableD->FieldByName("IsAlm")->AsBoolean=true;
CountOfAlm++;
}
//FormMain->DBMemoD->Lines->Add("协议版本:"+FormMain->Edit16->Text);
// if(ll1==1) DBMemo1->Lines->Add("The state of Aircondition");
// if(ll2==1) DBMemo1->Lines->Add("The state of Aircondition");
//......
end:;
FormMain->TableD->FieldByName("Memo")->AsString=FormMain->DBMemoD->Text;
FormMain->TableD->Post();
}
//---------------------------------------------------------------------------
void Senddata()
{
if(!FormMain->Comm1->PortOpen) {ShowMessage("串口未打开!!"); return;}
RTN=0; //the control board reply state
rxdata[18]=0; //the received data chksum
CHKSUM=0; //the sended data chksum
FormMain->StatusBar1->Panels->Items[1]->Text="正在通信...";
String sumStr2;
DynamicArray<unsigned char> sendb;
int CurrentLineNum;
String tmpStr;
sendb.Length=10;
txdata[0]=SOIT; txdata[1]=ADR; txdata[2]=MYADR; txdata[3]=CMD_TYPE;txdata[4]=CMD_ID;
txdata[5]=INFO0;txdata[6]=INFO1;txdata[7]=INFO2;txdata[8]=INFO3;
for(int i=0;i<9;i++) CHKSUM=CHKSUM^txdata[i];
txdata[9]=CHKSUM;
for(int i=0;i<10;i++)
{
sendb[i]=txdata[i];
}
FormMain->Comm1->OutputByte(sendb);
String sendStr;
for(int i=0;i<10;i++)
{
sendStr=ByteToHexStr(char(txdata[i]));
sumStr2=sumStr2+sendStr+' ';
}
FormMain->Memo1->Lines->Add(sumStr2);
FormMain->Edit4->Text=ByteToHexStr(INFO0)+' '+ByteToHexStr(INFO1)+' '+ByteToHexStr(INFO2)+
' '+ByteToHexStr(INFO3);
FormMain->Timer1->Enabled=true;
timeout=1; //Timeout set
//dgtalg=0; //Clear correlative flag
getadr=0;
}
//---------------------------------------------------------------------------
String getlocname(int ln) //according to LocNum return LocName function
{int lnm;
String lna;
//lnm=ln;
FormMain->TableP->First();
for(int i=0;i<FormMain->TableP->RecordCount;i++){
if(FormMain->TableP->FieldByName("LocNum")->AsString.ToInt()==ln)
{lna=FormMain->TableP->FieldByName("LocName")->AsString;break;}
else FormMain->TableP->Next(); }
return lna;
}
//---------------------------------------------------------------------------
int getlocnum(String lna)
{int locn;
String Str1;
FormMain->TableP->First();
for(int i=0;i<FormMain->TableP->RecordCount;i++) //for start
{Str1=FormMain->TableP->FieldByName("LocName")->AsString;
if(Str1==lna) //if start
{locn=FormMain->TableP->FieldByName("LocNum")->AsString.ToInt();
return locn;
} //if end
FormMain->TableP->Next();
}//for end
return 0;
}
//---------------------------------------------------------------------------
int locationnum;
void createsubnode()
{
locationnum=getlocnum(sub1node->Text);
FormMain->TableP->First();
for(int i=0;i<FormMain->TableP->RecordCount;i++)
{
if(FormMain->TableP->FieldByName("LocNum")->AsString.ToInt()==locationnum)
sub5node=FormMain->TreeView1->Items->AddChild(sub1node,FormMain->TableP->FieldByName("Name")->AsString);
sub1node->SelectedIndex=4;
sub5node->SelectedIndex=4;
FormMain->TableP->Next();
}
}
//---------------------------------------------------------------------------
void createTree() //function start
{
FormMain->TreeView1->Items->Clear();
for(int i=0;i<256;i++) {locnumArr[i]=0;locnumArr2[i]=0;}
FormMain->Memo3->Lines->LoadFromFile(rootname);
root=FormMain->Memo3->Text;
rootnode=FormMain->TreeView1->Items->AddChild(NULL,root);
rootnode->ImageIndex=2;
rootnode->SelectedIndex=2;
rootnode->StateIndex=2;
if(FormMain->TableP->RecordCount!=0)
{
FormMain->TableP->First();
locnum=FormMain->TableP->FieldByName("LocNum")->AsString.ToInt();
int ArrNum=FormMain->TableP->RecordCount;
for(int i=0;i<FormMain->TableP->RecordCount;i++)//for start
{
locnumArr[i]=FormMain->TableP->FieldByName("LocNum")->AsString.ToInt();
FormMain->TableP->Next();
if(FormMain->TableP->Eof) break;
} //for end
int numoflocnum=0,num=0;
for(int i=0;i<ArrNum;i++) //for i start
{
if(locnumArr[i]==0) continue;
for(int j=i+1;j<ArrNum;j++) //for j start
{
if(locnumArr[i]==locnumArr[j])
{
locnumArr[j]=0;numoflocnum++;
}
} //for j end
}//for i end
for(int j=0;j<ArrNum;j++) //for i end
{
if(locnumArr[j]==0) continue;
locnumArr2[num]=locnumArr[j]; //locnumArr2 express LocNum no repeat
num++;
}
int numofnoz=0;
while(locnumArr2[numofnoz]!=0)
{
numofnoz++;
}
for(int i=0;i<numofnoz;i++)
FormMain->TreeView1->Items->AddChild(rootnode,getlocname(locnumArr2[i]));
rootnode2=FormMain->TreeView1->Items->GetFirstNode();
sub1node=rootnode2->getFirstChild();
sub1node->SelectedIndex=4;
for(int k=0;k<numofnoz;k++)
{
createsubnode();
sub1node=sub1node->getNextSibling();
}
FormMain->TreeView1->FullExpand(); //create subnode end
}
}//function end
//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
int shape1=0;
void __fastcall TFormMain::TimerComStateTimer(TObject *Sender)
{ //Serial Port State Monitor
if(Comm1->PortOpen) {ShapeComState->Brush->Color=clLime;
Label1->Caption="开";}
else {ShapeComState->Brush->Color=clGray;
Label1->Caption="关";}
switch(Comm1->CommPort){
case 0: StaticText30->Caption="串口1";break;
case 1: StaticText30->Caption="串口2";break;
case 2: StaticText30->Caption="串口3";break;
case 3: StaticText30->Caption="串口4";break;
case 4: StaticText30->Caption="串口5";break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -