📄 server3.cpp
字号:
// Server3.cpp : Implementation of CComServerApp and DLL registration.
#include "stdafx.h"
#include "ComServer.h"
#include "Server3.h"
#include "Server1.h"
#include "Server2.h"
#include "Eval.h"
extern HANDLE termhd;
static WCHAR gwszTemp[128];
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP Server3::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IDataProcess,
&IID_IProcControl,
};
for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
STDMETHODIMP Server3::iflag(int i, int* rb)
{
// TODO: Add your implementation code here
if((File4.flag[stations[i].stno]&0x80)!=0)
{
if(stations[i].flag) stations[i].flag=0;
*rb=0;
}
else
if(stations[i].flag) *rb=1; else *rb=0;
return S_OK;
}
STDMETHODIMP Server3::getype(int i, int j, int *sensor,int* xing,int* rule,int* position)
{
// TODO: Add your implementation code here
BYTE m,n,h;
int k;
m=File4.info[stations[i].stno].fzindex;
n=File4.info[stations[i].stno].state_type&0xf;
h=(File4.info[stations[i].stno].state_type&0xf0)>>4;
k=Files.st[h].inport;
get_stcfg(i,n,j,k,m,sensor,xing,rule,position);
if(*xing==0)
return E_FAIL;
else
return S_OK;
}
STDMETHODIMP Server3::setktp(int i, int j,int addr_sensor)
{
// TODO: Add your implementation code here
int k,n,rx,vl;
SYSTEMTIME pdt;
DWORD dw;
n=0;
while((n<ktp.numb)&&(ktp.kaijutu[n].addr_sensor!=addr_sensor))
n++;
GetLocalTime(&pdt);
if(ktp.kaijutu[n].addr_sensor!=addr_sensor)
{
ktp.kaijutu[n].addr_sensor=addr_sensor;
ktp.kaijutu[n].timenow=pdt.wHour;
for(k=0;k<=3;k++)
ktp.kaijutu[n].kjt[k]=0xFFFFFFFF;
ktp.numb++;
}
rx=pdt.wMinute % 16;
k=(pdt.wMinute-rx)/16;
dw=(ktp.kaijutu[n].kjt[k]>>(2*rx))&0x3;
if(addr_sensor>=0)
{
int m=0;
while((m<Timedata.DataNum)&&(Timedata.NowdataRec[m].addr_sensor!=addr_sensor))
m++;
if(Timedata.NowdataRec[m].addr_sensor==addr_sensor)
vl=Timedata.NowdataRec[m].nowdata;
}
else //he add 2005-4-15
{
vl=kch[j].nowdata;
if (vl==1)
vl=0;
else if(vl==0)
vl=1;
}
switch(dw)
{
case 00:
if(vl!=0)
ktp.kaijutu[n].kjt[k]^=2<<(2*rx);
break;
case 01:
if(vl!=1)
{
ktp.kaijutu[n].kjt[k]&=~(3<<(2*rx));
ktp.kaijutu[n].kjt[k]^=2<<(2*rx);
}
break;
case 3:
ktp.kaijutu[n].kjt[k]&=~(3<<(2*rx));
if(vl!=0)
ktp.kaijutu[n].kjt[k]^=1<<(2*rx);
break;
}
return S_OK;
}
STDMETHODIMP Server3::clearflag(int i)
{
// TODO: Add your implementation code here
stations[i].flag=false;
return S_OK;
}
STDMETHODIMP Server3::setnowdata(int i, int j, int sensor,int xing,int rule,int position, int *addr_sensor)
{
// TODO: Add your implementation code here
int k,n;
long vl;
k=position*50+File2.file2[sensor].su_index;
n=0;
while((n<Timedata.DataNum)&&(Timedata.NowdataRec[n].addr_sensor!=k))
n++;
if(Timedata.NowdataRec[n].addr_sensor!=k)
{
Timedata.NowdataRec[n].data1 = 0;
Timedata.NowdataRec[n].data2 = 0;
Timedata.NowdataRec[n].data3 = 0;
Timedata.NowdataRec[n].data4 = 0;
if(xing == 3) //开关量
Timedata.NowdataRec[n].nowdata = -1;
else
Timedata.NowdataRec[n].nowdata = 0;
Timedata.NowdataRec[n].timeflag = 0; //开关量计时用
Timedata.DataNum++;
}
if(i==1)
{
switch(stations[i].vl[j].vt)
{
case VT_I2:
case VT_I4:
vl=stations[i].vl[j].lVal;
switch(xing)
{
case 1:
setmnl(n,sensor,vl);
break;
case 2:
if (vl>=Timedata.NowdataRec[n].nowdata)
Timedata.NowdataRec[n].nowdata=vl* File2.file2[sensor].scale_data;
else
Timedata.NowdataRec[n].nowdata+=vl* File2.file2[sensor].scale_data;
break;
case 3:
setkgl(n,vl);
break;
}
break;
case VT_R4:
case VT_R8:
if(xing==1)
{
Timedata.NowdataRec[n].nowdata=stations[i].vl[j].fltVal;
if(Timedata.NowdataRec[n].data1<Timedata.NowdataRec[n].nowdata)
Timedata.NowdataRec[n].data1=Timedata.NowdataRec[n].nowdata;
if((Timedata.NowdataRec[n].data2>Timedata.NowdataRec[n].nowdata)||(Timedata.NowdataRec[n].data2==0))
Timedata.NowdataRec[n].data2=Timedata.NowdataRec[n].nowdata;
Timedata.NowdataRec[n].data3+=Timedata.NowdataRec[n].nowdata;
Timedata.NowdataRec[n].data4++;
}
break;
case VT_BOOL:
if(xing==3)
{
if(stations[i].vl[j].boolVal)
vl=1;
else
vl=0;
setkgl(n,vl);
}
break;
}
Timedata.NowdataRec[n].addr_sensor=k;
return S_OK;
}
vl=stations[i].vl[j].iVal;
Timedata.NowdataRec[n].rcdw=vl;
switch(xing)
{
case 1:
if (initmnl(n,sensor,vl))
setmnl(n,sensor,vl);
break;
case 2:
// if (vl>=Timedata.NowdataRec[n].nowdata)///2002.11.13 深圳改
// Timedata.NowdataRec[n].nowdata=vl* File2.file2[sensor].scale_data;
// else
Timedata.NowdataRec[n].nowdata+=vl* File2.file2[sensor].scale_data;
break;
case 3:
if((rule&4)!=0)
if(vl==0) vl=1; else vl=0;
setkgl(n,vl);
break;
}
Timedata.NowdataRec[n].addr_sensor=k;
*addr_sensor=k;
return S_OK;
}
void Server3::get_stcfg(int i,int n,int j,int k,int m, int *sensor, int *xing, int *rule, int *position)
{
int t,l;
*xing=0;
system_station_cfg stncfg;
if(i==1)
{
stncfg=Cfg4.cfg4[m][j];
*sensor=stncfg.sensor;
*xing=stncfg.xing;
*rule=stncfg.rule;
*position=stncfg.position;
}else{
if (j<k)
{
switch(n)
{
case 0:
stncfg=Cfg0.cfg0[m][j];
break;
case 1:
stncfg=Cfg1.cfg1[m][j];
break;
case 2:
stncfg=Cfg2.cfg2[m][j];
break;
case 3:
stncfg=Cfg3.cfg3[m][j];
break;
case 4:
stncfg=Cfg4.cfg4[m][j];
break;
}
if(stncfg.xing==3)
{
*sensor=stncfg.sensor;
*xing=stncfg.xing;
*rule=stncfg.rule;
*position=stncfg.position;
}
}else{
t=0;
for(l=0;l<k;l++)
{
switch(n)
{
case 0:
stncfg=Cfg0.cfg0[m][l];
break;
case 1:
stncfg=Cfg1.cfg1[m][l];
break;
case 2:
stncfg=Cfg2.cfg2[m][l];
break;
case 3:
stncfg=Cfg3.cfg3[m][l];
break;
case 4:
stncfg=Cfg4.cfg4[m][l];
break;
}
if((stncfg.xing==1)||(stncfg.xing==2))
{
if(j==t+k)
{
*sensor=stncfg.sensor;
*xing=stncfg.xing;
*rule=stncfg.rule;
*position=stncfg.position;
break;
}
t++;
}
}
}
}
}
STDMETHODIMP Server3::ifdel(int *bl)
{
// TODO: Add your implementation code here
if(con_del)
*bl=1;
else
*bl=0;
return S_OK;
}
STDMETHODIMP Server3::setdel()
{
// TODO: Add your implementation code here
dat_del=true;
return S_OK;
}
STDMETHODIMP Server3::ifclear(int *ml, int *hl)
{
// TODO: Add your implementation code here
if(minute_flg)
*ml=1;
else
*ml=0;
if(hour_flg)
*hl=1;
else
*hl=0;
return S_OK;
}
STDMETHODIMP Server3::deltab(int *delct)
{
// TODO: Add your implementation code here
int i,j,k,n;
n=0;
for(i=0;i<delflg.count;i++)
{
j=0;
while((j<Timedata.DataNum)&&(delflg.addr_sensor[i]!=Timedata.NowdataRec[j].addr_sensor))
j++;
if(delflg.addr_sensor[i]==Timedata.NowdataRec[j].addr_sensor)
{
n++;
for(k=j;k<Timedata.DataNum-1;k++)
Timedata.NowdataRec[k]=Timedata.NowdataRec[k+1];
Timedata.DataNum--;
}
if((File3.file3[(delflg.addr_sensor[i] % 50)].property&0xf)==3)
{
j=0;
while((j<ktp.numb)&&(delflg.addr_sensor[i]!=ktp.kaijutu[j].addr_sensor))
j++;
if(delflg.addr_sensor[i]==ktp.kaijutu[j].addr_sensor)
{
for(k=j;k<ktp.numb-1;k++)
ktp.kaijutu[k]=ktp.kaijutu[k+1];
ktp.numb--;
}
}
}
con_del=false;
*delct=n;
return S_OK;
}
STDMETHODIMP Server3::cleartab()
{
// TODO: Add your implementation code here
int i;
for(i=0;i<Timedata.DataNum;i++)
{
if((File3.file3[(Timedata.NowdataRec[i].addr_sensor % 50)].property&0xf)==1)
{
Timedata.NowdataRec[i].data1=0;
Timedata.NowdataRec[i].data2=0;
Timedata.NowdataRec[i].data3=0;
Timedata.NowdataRec[i].data4=0;
}
}
minute_flg=0;
return S_OK;
}
STDMETHODIMP Server3::clearhour()
{
// TODO: Add your implementation code here
int i,j,tm;
SYSTEMTIME pdt;
for(i=0;i<Timedata.DataNum;i++)
{
if(((File3.file3[(Timedata.NowdataRec[i].addr_sensor % 50)].property&0xf)==1)
||((File3.file3[(Timedata.NowdataRec[i].addr_sensor % 50)].property&0xf)==3))
{
Timedata.NowdataRec[i].data1=0;
Timedata.NowdataRec[i].data2=0;
Timedata.NowdataRec[i].data3=0;
Timedata.NowdataRec[i].data4=0;
}
if((File3.file3[(Timedata.NowdataRec[i].addr_sensor % 50)].property&0xf)==2)
Timedata.NowdataRec[i].nowdata=0;
}
GetLocalTime(&pdt);
tm=pdt.wHour;
for(i=0;i<ktp.numb;i++)
{
for(j=0;j<4;j++)
{
ktp.kaijutu[i].kjt[j]=0xffffffff;
ktp.kaijutu[i].timenow=tm;
}
}
hour_flg=0;
return S_OK;
}
STDMETHODIMP Server3::getstct(int i, int *ct)
{
// TODO: Add your implementation code here
int h;
//h=File4.info[stations[i].stno].state_type&0xf;
h=(File4.info[stations[i].stno].state_type&0xf0)>>4;
*ct=Files.st[h].inport;
return S_OK;
}
void Server3::setkgch(short addr_sensor,DATE starttime,DATE steptime,long addtime,long staus)
{
short num;
num=kgch.num;
kgch.bh[num].addr_sensor=addr_sensor;
kgch.bh[num].starttime=starttime;
kgch.bh[num].steptime=steptime;
kgch.bh[num].addtime=addtime;
kgch.bh[num].status=staus;
num+=1;
kgch.num=num;
}
STDMETHODIMP Server3::setkz(int i)
{
// TODO: Add your implementation code here
DATE st_time;
SYSTEMTIME pdt;
byte tmpkckhval;//标记开出口状态变化
kckz[stations[i].stno]=stations[i].kz;
/********************he增加2005-4-15******************/
short j,kckznum;
int addr_sensor;
byte fz,kckh,ival;
GetLocalTime(&pdt);
st_time=Server2::dateCal(pdt.wYear,pdt.wMonth,pdt.wDay,pdt.wHour,pdt.wMinute,pdt.wSecond);
kckznum=KAI_CHUSBpz.KCKZNum;
ival=stations[i].kz;
for(j=0;j<kckznum;j++)
{
kckh=KAI_CHUSBpz.kcpz[j].KCKZ;
fz=KAI_CHUSBpz.kcpz[j].fz;
if(stations[i].stno==fz)
{
if ((kch[j].nowdata!=0) || (kch[j].nowdata!=1))
kch[j].nowdata=0;
tmpkckhval=kch[j].nowdata;
kch[j].addr_sensor=(fz*50 + kckh) *(-1);
kch[j].nowdata=(ival>>kckh) & 0x1;
setktp(0,j,kch[j].addr_sensor); //处理开矩图
if(tmpkckhval==1) //处理开出口状态变化
{
if(kch[j].nowdata==0)
setkgch(kch[j].addr_sensor,st_time,st_time,0,1);
}
else if(tmpkckhval==0) //处理开出口状态变化
{
if(kch[j].nowdata==1)
setkgch(kch[j].addr_sensor,st_time,st_time,0,0);
}
}
}
return S_OK;
}
STDMETHODIMP Server3::clear_con_del()
{
// TODO: Add your implementation code here
delflg.count=0;
return S_OK;
}
STDMETHODIMP Server3::addonetodeltab(int addr_sensor, int *ct)
{
// TODO: Add your implementation code here
if(delflg.count<299)
{
delflg.addr_sensor[delflg.count]=addr_sensor;
delflg.count++;
*ct=delflg.count;
}else{
*ct=0;
}
return S_OK;
}
STDMETHODIMP Server3::set_del_flag()
{
// TODO: Add your implementation code here
con_del=true;
return S_OK;
}
STDMETHODIMP Server3::set_ini_st(int stnum)
{
// TODO: Add your implementation code here
if(!console0out.flag)
{
console0out.stno=stnum;
console0out.ordercode=1;
console0out.flag=1;
return S_OK;
}else{
return S_OK;
}
}
STDMETHODIMP Server3::set_only_st(int stnum,int state)
{
// TODO: Add your implementation code here
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -