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

📄 run.cpp

📁 用C++控制喷泉程序
💻 CPP
字号:
#include "stdio.h"
#include "dos.h"
#include "string.h"
#include "macro.h"
#include "struct.h"
#include "vardec.h"
#include "constdec.h"
#include "function.h"
#include "interrup.h"
int Run(int message,int kindandnonum)
{
 #define NOSTATE       -1
 static FILEFORMAT filedata;

 static QUEUE *Loop2OnHead;//长池存放泵
 static QUEUE *Loop2OnEnd;
 static QUEUE *Loop2OffHead;
 static QUEUE *Loop2OffEnd;

 static QUEUE *Loop3OnHead;//圆池存放泵
 static QUEUE *Loop3OnEnd;
 static QUEUE *Loop3OffHead;
 static QUEUE *Loop3OffEnd;

 static unsigned long Loop2Time;
 static unsigned long Loop3Time;

 static int oldkindandnonum=-1;
 static int state=STOP;
 static int oldrecord;
 static int record;
 static int errorflag;
 static unsigned long recordtime;
 static unsigned long recordpulsetime;
 static int staticreturnval;
 static int musicdelay;
 static int baserecord;
 static unsigned long oldSTOPtime;
 static int STOPkeepflag;
 static unsigned int freqenable_1;//变频器状态
 static unsigned int oldfreqenable_1;

 static int LoopFoun2StartFlag[LoopFoun2Num];
 static int LoopFoun3StartFlag[LoopFoun3Num];

 static unsigned long oldSTARTdelaytime;
 static int STARTdelayfounflag;
 int LoopFoun3EnableBitFlag_i;
 unsigned long time=GetTime();
 int portoutflag=0;
 int returnval=0;
 int realmode=0;

 switch(message)//置标志
 {
	case START:
			 STOPkeepflag=0;
			 state=START;
			 baserecord=0;
			 record=0;

			 if((kindandnonum&0xff00)==0x0100)
			 {
				oldrecord=record;
				musicdelay=1;
			 }
			 else
			 {
				oldrecord=-1;
				musicdelay=0;
			 }
			 break;
	case STOP:
			 state=STOP;
			break;
	case RETURN:
			 STOPkeepflag=0;
			 state=RETURN;
			 break;
 }
 switch(state)
	 {
		case START:
			 if(errorflag!=1)
			 {
				returnval=record;

				if(oldkindandnonum!=kindandnonum)
				{
				 char str1[10];
				 char *str2;
				 char str3[10];
				 switch (kindandnonum&0xff00)//置打开文件名
				 {
					case 0x0100:
					{
					 str2="mmf";
					 musicdelay=1;
					}
					break;
					case 0x0200:
					{
					 str2="mf";
					}
					break;
					case 0x0300:
					{
					 str2="rf";
					}
					break;
				 }
				 sprintf(str1,"%d",kindandnonum&0x00ff);//放条目
				 strcpy(str3,str2);//workkind文件十进制
				 strcat(str3,str1);//高字节放将打开文件名,底字节放条目
				 if(ReadFile(str3,&filedata)==-1)//报错
				 {
					musicdelay=0;
					errorflag=1;
					staticreturnval=-1;
					return -1;
				 }
				 record=0;
				 baserecord=0;
				 if(musicdelay==1)
				 {
					oldrecord=record;
				 }
				 else
				 {
					oldrecord=-1;
				 }
				 recordtime=time;
				 recordpulsetime=time;
				 oldkindandnonum=kindandnonum;
				}
				if(musicdelay==1)
				{
				 if(inportb(InPortAdd1)&StartBit)//检查左右声道是否有声音信号输入
				 {
					record=0;//730:#define InportAdd1 0x300
					baserecord=0;              //     #define InportAdd2 0x301
					oldrecord=-1;
					recordtime=time;
					recordpulsetime=time;
					musicdelay=0;
				 }
				}
				if(record!=oldrecord)
				 {
				   char x;
				   int i;
				   unsigned int temp;

				    OutPortMem[0].data=filedata.Record[record].PortData[0];//阀
				    OutPortMem[1].data=filedata.Record[record].PortData[5];//灯

					freqenable_1=filedata.Record[record].PortData[2]&0x03;

					FreqOutVal[0]=filedata.Record[record].PortData[3]*327;//孔、白
					FreqOutVal[1]=filedata.Record[record].PortData[4]*327;//四、扇

					temp=freqenable_1^oldfreqenable_1;//送停车
					for(i=0;i<SWITCHFREQNUM;i++)
					{
					 if(temp&0x01)
					 {
						if((FreqOutHighBuffEnd+1)%FreqOutHighBuffNum!=FreqOutHighBuffHead)
						{
						 for(int m=0;m<COMBUFMAXRECORDBYTE;m++)
						 {
							FreqOutHighBuff[FreqOutHighBuffEnd][m]=FreqOFF3[m];
						 }
						 FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_ADD]=i;
						 FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_HSWH]=0;
						 FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_HSWL]=0;
						 FreqOutHighBuffEnd++;
						 FreqOutHighBuffEnd=FreqOutHighBuffEnd%FreqOutHighBuffNum;
						 oldFreqOutVal[i]=FreqOutVal[i];
						}
						STARTdelayfounflag=2;
					 }
					 temp=temp>>1;
					}
					if(STARTdelayfounflag==2)
					{
					 oldSTARTdelaytime=time;
					}

				 temp=filedata.Record[record].PortData[1];//直切泵
				 for(i=0;i<3;i++)//直给泵开关
				 {
					if((temp&0x01)==1&&LoopFoun2StartFlag[i]==0)
					{
					 QueuePush(&Loop2OnHead,&Loop2OnEnd,LoopFoun2[i].p,LoopFoun2[i].num);
					 LoopFoun2StartFlag[i]=1;
					}
					if((temp&0x01)==0&&LoopFoun2StartFlag[i]==1)
					{
					 QueuePush(&Loop2OffHead,&Loop2OffEnd,LoopFoun2[i].p,LoopFoun2[i].num);
					 LoopFoun2StartFlag[i]=0;
					}
					temp=temp>>1;
				 }

					if(LoopFoun2StartFlag[2]==1)//动力机
					{
					 OutPortMem[3].data|=0x04;
					}
					else
					{
					 OutPortMem[3].data&=0xfb;
					}

			unsigned int k=0x0001;

			for(i=0;i<FREQNUM;i++)//开变频的水形
			{
				if((freqenable_1&k)==k)
				{
				 if(LoopFoun3StartFlag[i]==0)//开只用变频器的泵
				 {
					QueuePush(&Loop3OnHead,&Loop3OnEnd,LoopFoun3[i].p,LoopFoun3[i].num);
					LoopFoun3StartFlag[i]=1;
				 }
				}
				else
				{
				 if(LoopFoun3StartFlag[i]==1)
				 {
					QueuePush(&Loop3OffHead,&Loop3OffEnd,LoopFoun3[i].p,LoopFoun3[i].num);
					LoopFoun3StartFlag[i]=0;
				 }
				}
					k=k<<1;
			}
				 oldrecord=record;
				 portoutflag=1;
				 realmode=1;
				 returnval=record;
				 staticreturnval=returnval;
				}
				 if((kindandnonum&0xff00)==0x0300)          /////////     2
				 {
					RealTimeFoun(realmode);
				 }
				 if(musicdelay==0)
				{
				 if(time-recordtime>(filedata.Record[baserecord].TotalTime*55ul))
				 {
					recordtime=time;
					recordpulsetime=time;
					record=baserecord+filedata.Record[baserecord].LineNum;
					baserecord=record;
					if(record>=filedata.FileRecordNum)
					{
					 record=0;
					 baserecord=record;
					 if((kindandnonum&0xff00)==0x0100)
					 {
						oldrecord=record;
						musicdelay=1;
					 }
					 else
					 {
						oldrecord=-1;
					 }
					 returnval=0x7fff;
					}
				 }
				 if(time-recordpulsetime>(filedata.Record[record].PulseTime*55ul))
				 {
					recordpulsetime=time;
					record=baserecord+((record-baserecord)+1)%filedata.Record[baserecord].LineNum;
					if(record>=filedata.FileRecordNum)
					{
					 record=baserecord;
					}
				 }
				}

				if(STARTdelayfounflag&0x03)//     变频器接触器状态
				{
				 if(STARTdelayfounflag==2)
				 {
					if((time-oldSTARTdelaytime)>OFF_ONDELAYTIEM)
					{
					 int i;
					 int temp,x;

					 temp=freqenable_1^oldfreqenable_1;
					 for(i=0;i<SWITCHFREQNUM;i++)
					 {
						if(temp&0x01)
						{
						 if((FreqOutHighBuffEnd+1)%FreqOutHighBuffNum!=FreqOutHighBuffHead)
						 {
							for(int m=0;m<COMBUFMAXRECORDBYTE;m++)
							{
							 FreqOutHighBuff[FreqOutHighBuffEnd][m]=FreqOFF1[m];
							}
							FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_ADD]=i;
							FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_HSWH]=0;
							FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_HSWL]=0;
							FreqOutHighBuffEnd++;
							FreqOutHighBuffEnd=FreqOutHighBuffEnd%FreqOutHighBuffNum;
						 }
						}
						temp=temp>>0x01;
					 }

					 temp=0x03;
					 for(i=0;i<SWITCHFREQNUM;i++)
					 {
						if(temp&0x01)
						{
						 if(FreqOutVal[i]!=0)
						 {
							if((FreqOutHighBuffEnd+1)%FreqOutHighBuffNum!=FreqOutHighBuffHead)
							{
							 for(int m=0;m<COMBUFMAXRECORDBYTE;m++)
							 {
								FreqOutHighBuff[FreqOutHighBuffEnd][m]=FreqRun[m];
							 }
							 FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_ADD]=i+1;
							 FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_HSWH]=FreqOutVal[i]/255;
							 FreqOutHighBuff[FreqOutHighBuffEnd][TELEGRAM_HSWL]=FreqOutVal[i]&0x00ff;
							 FreqOutHighBuffEnd++;
							 FreqOutHighBuffEnd=FreqOutHighBuffEnd%FreqOutHighBuffNum;
							}
						 }
						}
						temp=temp>>1;
					 }
					 oldfreqenable_1=freqenable_1;
					 STARTdelayfounflag=0;
					}
				 }
				}
			 }
			 else
			 {
				return  staticreturnval;
			 }
			 break;
	case STOP:
			 {
				if(STOPkeepflag==0)
				{
				 FreqClear();
				 oldSTOPtime=time;
				 STOPkeepflag=1;
				}
				if(STOPkeepflag==1)
				{
				 if(time-oldSTOPtime>FREQSTOPTIME)
				 {
					ClearPort(1);
					for(int a=0;a<LoopFoun2Num;a++)
					{
					 LoopFoun2StartFlag[a]=0;
					}
					for(int b=0;b<LoopFoun3Num;b++)
					{
					 LoopFoun3StartFlag[b]=0;
					}

					freqenable_1=oldfreqenable_1=0;

					FreeQueueMem(Loop2OnHead);//关泵
					Loop2OnHead=Loop2OnEnd=NULL;
					FreeQueueMem(Loop2OffHead);
					Loop2OffHead=Loop2OffEnd=NULL;

					FreeQueueMem(Loop3OnHead);
					Loop3OnHead=Loop3OnEnd=NULL;
					FreeQueueMem(Loop3OffHead);
					Loop3OffHead=Loop3OffEnd=NULL;

					errorflag=0;
					record=0;
					oldrecord=-1;
					state=-1;
					STOPkeepflag=0xff;
					STARTdelayfounflag=0;
				   }
				 }
			 }
			 break;
	case RETURN:
			 {
				ClearPort(1);
				errorflag=0;
				oldkindandnonum=-1;
				FreeFileFormatDataMem(&filedata);
				state=-1;
			 }
			 break;
	 }
 QueueFoun(&Loop2OnHead,&Loop2OnEnd,&Loop2OffHead,&Loop2OffEnd,Loop2Time,LOOPDELAYTIME2);
 QueueFoun(&Loop3OnHead,&Loop3OnEnd,&Loop3OffHead,&Loop3OffEnd,Loop3Time,LOOPDELAYTIME3);
 if(portoutflag==1)
 {
	PortDataOut();
	portoutflag=0;
 }
 return returnval;
}

⌨️ 快捷键说明

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