⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 实现RS232数据采集处理,设置RS23传输参数,显示控制终端的数据.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//---------------------------------------------------------------------------

#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 + -