?? run.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;
}
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 + -