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

📄 function.cpp

📁 用C++控制喷泉程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			 (*OffPointHead)->prev=NULL;
		 }
		 else
		 {
			 free((*OffPointHead));
			 (*OffPointHead)=(*OffPointEnd)=NULL;
		 }
	 }
 }
}
void FreeQueueMem(QUEUE *p)//释放
{
	QUEUE *temp;
	for(;p!=NULL;)
	{
		temp=p;
		p=p->next;
		free(temp);
	}
}
void FreeFileFormatDataMem(FILEFORMAT *p)//释放文件格式数据内存
{
 if(p->Record!=NULL)
 {
	for(int i=0;i<p->FileRecordNum;i++)
	{
	 if(((p->Record)[i].PortData)!=NULL)
	 {
		free(((p->Record)[i]).PortData);
	 }
	}
	free(p->Record);
	p->Record=NULL;
 };
}
int ReadFile(const char *FileName,FILEFORMAT *p)//读文件
{
 FILE 	*fp;
 int i=-1,j,k;
 FreeFileFormatDataMem(p);
 if((fp=fopen(FileName,"r"))==NULL)
	{
	 return -1;
	};
 fscanf(fp,"%d %d %d",&(p->FileRecordNum),&(p->FilePortNum),&p->TimeUnit);
 p->Record=(RECORD *)malloc(p->FileRecordNum*sizeof(RECORD));
 if(p->Record==NULL)
 {
	return -1;
 }
 for(i=0;i<p->FileRecordNum&&!feof(fp);i++)
	{
	 fscanf(fp,"%d %d %d %d",&(p->Record[i].TotalTime),&(p->Record[i].PulseTime),&(p->Record[i].NoNum),&(p->Record[i].LineNum));
	 ((p->Record)[i]).PortData=(unsigned char*)malloc(p->FilePortNum*sizeof(char));
	 if((p->Record)[i].PortData==NULL)
	 {
		return -1;
	 }
	 for(j=0;j<p->FilePortNum;j++)
		{
		 fscanf(fp," %d ",&k);
		 ((p->Record)[i]).PortData[j]=(unsigned char)k;
		}
	}
 p->FileRecordNum=i;
 fclose(fp);
 return 0;
}
int ReadStrFile(const char *FileName,int &strnum,char **&p)//读串文件
{
 FILE 	*fp;
 int readstrnum;
 char tem_s[50];
 int c1=0,c2=0;
 if((fp=fopen(FileName,"r"))==NULL)
 {
	return -1;
 };
 fscanf(fp,"%d",&readstrnum);
 p=(char **)malloc(readstrnum*sizeof(char *));
 if(p==NULL)
 {
	return -1;
 }
 int s_begin=0;
 int i=0;
 for(strnum=0;strnum<readstrnum&&!feof(fp);)
 {
	c2=c1;
	c1=fgetc(fp);
	if(s_begin==1)
	{
	 if(i<50)
	 {
		if(c1=='\\')
		{
		 c2=c1;
		 c1=fgetc(fp);
		}
		tem_s[i]=c1;
		i++;
	 }
	}
	if(c1=='\"'&&c2!='\\')
	{
	 if(s_begin==0)
	 {
		i=0;
		s_begin=1;
	 }
	 else
	 {
		p[strnum]=(char*)malloc(i*sizeof(char));
		if(p[strnum]==NULL)
		{
		 return -1;
		}
		for(int j=0;j<i;j++)
		{
		 p[strnum][j]=tem_s[j];
		}
		p[strnum][i-1]=NULL;
		strnum++;
		s_begin=0;
	 }
	}
 }
 fclose(fp);
 return 0;
}
char PortIn(void)//入口
{
 static char temp[10]={0,0,0,0,0,0,0,0,0,0};
 static char i=0;
 static char oldk=0x00;
 char k=0xff;
 char m,n;
 temp[i]=inportb(InPortAdd2);
 i++;
 i%=10;
 for(int j=0;j<10;j++)
 {
	k&=temp[j];
 }
 m=oldk^k;
 n=k&~oldk;
 oldk=k;
 k=m&n;
 return k;
}
#ifdef DANFOSS
void ComOut(void)
{
 static unsigned char temp[COMBUFMAXRECORDBYTE];
 static int ReadBuffFlag=1;
 static int WriteFlag=0;
 static int ReadFlag=0;
// static int Adress=0;
 static unsigned long oldtime;
 static unsigned long oldbuffdelaytime;
 unsigned long time=GetTime();
 int temphead;
 if(time-oldbuffdelaytime>FreqOutDelayBuffDelayTime)
 {
	oldbuffdelaytime=time;
	temphead=(FreqOutDelayBuffHead+1)%FreqOutDelayBuffNum;
	if(temphead!=FreqOutDelayBuffEnd)
	{
	 if(((FreqOutNomalBuffEnd+1)%FreqOutNomalBuffNum)!=FreqOutNomalBuffHead)
	 {
		for(int i=0;i<COMBUFMAXRECORDBYTE;i++)
		{
		 FreqOutNomalBuff[FreqOutNomalBuffEnd][i]=FreqOutDelayBuff[temphead][i];
		}
		FreqOutDelayBuffHead=temphead;
		FreqOutNomalBuffEnd++;
		FreqOutNomalBuffEnd=FreqOutNomalBuffEnd%FreqOutNomalBuffNum;
	 }
	}
 }
 if(ReadBuffFlag==1)
 {
	temphead=(FreqOutHighBuffHead+1)%FreqOutHighBuffNum;
	if(temphead!=FreqOutHighBuffEnd)
	{
	 for(int i=0;i<COMBUFMAXRECORDBYTE;i++)
	 {
		temp[i]=FreqOutHighBuff[temphead][i];
	 }
	 FreqOutHighBuffHead=temphead;
	 WriteFlag=1;
	 ReadBuffFlag=0;
	}
	else
	{
	 temphead=(FreqOutNomalBuffHead+1)%FreqOutNomalBuffNum;
	 if(temphead!=FreqOutNomalBuffEnd)
	 {
		for(int i=0;i<COMBUFMAXRECORDBYTE;i++)
		{
		 temp[i]=FreqOutNomalBuff[temphead][i];
		}
		FreqOutNomalBuffHead=temphead;
		WriteFlag=1;
		ReadBuffFlag=0;
	 }
	}
	oldtime=time;
 }
 if(WriteFlag==1)
 {
	if(time-oldtime>3)
	{
	 if((ComOutBuffRecordEnd+1)%COMBUFMAXRECORD!=ComOutBuffRecordHead)
	 {
		for(int i=0;i<COMBUFMAXRECORDBYTE;i++)
		{
		 ComOutBuff[ComOutBuffRecordEnd][i]=temp[i];
		}
		if(temp[2]&0x20)
		{
		 ReadBuffFlag=1;
		}
		else
		{
		 ComInBuffRecordHead=COMBUFMAXRECORD-1;
		 ComInBuffRecordEnd=0;
		 ComInBuff[ComInBuffRecordEnd][0]=0;
		 ReadFlag=1;
		 oldtime=time;
//		 Adress=temp[2];
		}
		ComOutBuffRecordEnd++;
		ComOutBuffRecordEnd=ComOutBuffRecordEnd%COMBUFMAXRECORD;
		WriteFlag=0;
	 }
	}
 }
 if(ReadFlag==1)
 {
	temphead=(ComInBuffRecordHead+1)%COMBUFMAXRECORD;
	if(temphead!=ComInBuffRecordEnd)
	{
	 if(ComInBuff[temphead][TELEGRAM_ZSWL]&0X08)
	 {
//		if((temp[TELEGRAM_STWL]&0X08)||(ComInBuff[temphead][TELEGRAM_ZSWL]&0X80))
		{
		 if(FreqError[temp[TELEGRAM_ADD]-1]!=0xff)
		 {
			FreqError[temp[TELEGRAM_ADD]-1]++;
			if(FreqError[temp[TELEGRAM_ADD]-1]>3)
			{
			 FreqError[temp[TELEGRAM_ADD]-1]=0xff;
			}
			if(((FreqOutNomalBuffEnd+1)%FreqOutNomalBuffNum)!=FreqOutNomalBuffHead)
			{
			 for(int i=0;i<COMBUFMAXRECORDBYTE;i++)
			 {
				FreqOutNomalBuff[FreqOutNomalBuffEnd][i]=FreqRestart[i];
			 }
			 FreqOutNomalBuff[FreqOutNomalBuffEnd][TELEGRAM_ADD]=temp[TELEGRAM_ADD]-1;
			 FreqOutNomalBuffEnd++;
			 FreqOutNomalBuffEnd=FreqOutNomalBuffEnd%FreqOutNomalBuffNum;
			}
			if(((FreqOutDelayBuffEnd+1)%FreqOutDelayBuffNum)!=FreqOutDelayBuffHead)
			{
			 for(int i=0;i<COMBUFMAXRECORDBYTE;i++)
			 {
				FreqOutDelayBuff[FreqOutDelayBuffEnd][i]=temp[i];
			 }
			 FreqOutDelayBuffEnd++;
			 FreqOutDelayBuffEnd=FreqOutDelayBuffEnd%FreqOutDelayBuffNum;
			}
		 }
		}
	 }
	 else
	 {
		FreqError[temp[TELEGRAM_ADD]-1]=0;//FreqError[Adress]=0;
	 }
	 oldtime=time;
	 ReadBuffFlag=1;
	 ReadFlag=0;
	}
	else
	{
	 if((time-oldtime>OVERTIME1)&&(ComInBuff[temphead][0]!=0x02)||(time-oldtime)>OVERTIME2)
	 {
		if(FreqError[temp[TELEGRAM_ADD]-1]!=0xff)//FreqError[Adress]!=0xff)
		{
		 WriteFlag=1;
		 FreqError[temp[TELEGRAM_ADD]-1]++;//FreqError[Adress]++;
		 if(FreqError[temp[TELEGRAM_ADD]-1]>3)//FreqError[Adress]>3)
		 {
			FreqError[temp[TELEGRAM_ADD]-1]=0xff;//FreqError[Adress]=0xff;
		 }
//		 oldtime=time;
		 ReadFlag=0;
		}
		else
		{
		 ReadBuffFlag=1;
		 ReadFlag=0;
		}
	 }
	}
 }
 ComWrite();
}
void FreqFoun(void)
{
 static int NoNum=0;
 if(oldFreqOutVal[NoNum]!=FreqOutVal[NoNum])
 {
	if(((FreqOutNomalBuffEnd+1)%FreqOutNomalBuffNum)!=FreqOutNomalBuffHead)
	{
	 if(FreqOutVal[NoNum]==0)
	 {
		for(int i=0;i<COMBUFMAXRECORDBYTE;i++)
		{
		 FreqOutNomalBuff[FreqOutNomalBuffEnd][i]=FreqOFF1[i];
		}
	 }
	 else
	 {
		for(int i=0;i<COMBUFMAXRECORDBYTE;i++)
		{
		 FreqOutNomalBuff[FreqOutNomalBuffEnd][i]=FreqRun[i];
		}
	 }
	 FreqOutNomalBuff[FreqOutNomalBuffEnd][TELEGRAM_ADD]=NoNum+1;
	 FreqOutNomalBuff[FreqOutNomalBuffEnd][TELEGRAM_HSWH]=FreqOutVal[NoNum]/255;
	 FreqOutNomalBuff[FreqOutNomalBuffEnd][TELEGRAM_HSWL]=FreqOutVal[NoNum]&0x00ff;
	 FreqOutNomalBuffEnd++;
	 FreqOutNomalBuffEnd=FreqOutNomalBuffEnd%FreqOutNomalBuffNum;
	 oldFreqOutVal[NoNum]=FreqOutVal[NoNum];
	 NoNum++;
	 NoNum=NoNum%FREQNUM;
	}
 }
 else
 {
	NoNum++;
	NoNum=NoNum%FREQNUM;
 }
}
void FreqClear(void)
{
 int i;
// delay(100);
 for(i=0;i<FREQNUM;i++)
 {
	FreqOutVal[i]=0;
	oldFreqOutVal[i]=0;
 }
 FreqOutNomalBuffHead=FreqOutNomalBuffNum-1;
 FreqOutNomalBuffEnd=0;//FreqOutNomalBuffNum-1;
 FreqOutHighBuffHead=FreqOutHighBuffNum-1;
 FreqOutHighBuffEnd=0;
 for(i=0;i<COMBUFMAXRECORDBYTE;i++)
 {
	FreqOutHighBuff[FreqOutHighBuffEnd][i]=FreqClean[i];
 }
 FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_ADD]=0x20;
 FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_HSWH]=0;
 FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_HSWL]=0;
 FreqOutHighBuffEnd++;
 FreqOutHighBuffEnd=FreqOutHighBuffEnd%FreqOutHighBuffNum;
 ComOut();
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -