📄 comm.cpp
字号:
// for(k=1;k<=end3[1];k++)
// {
// sprintf(ylname[k],"%s(%0d)",pf3[1][k].mc, pf3[1][k].ch);
// llz[k]=pf3[1][k].llz;
// xszl[k]=pf3[1][k].xsz;
// }
// *kk=end3[1];
//}
//====================================================
//========================================================
//函数功能:更据传递的参数,保存每批的生产数据
//参数说明:k--仪表称编号,n--下料序号,sjz-实际值
int SaveData(int k, int n, int ps, float sjz)
{
char txtSQL[250];//数据库操作语句
char ss[200];//临时字符串
int record;//定义数据集对象
char strTime[30];//时间字符串
float wc;//误差值
SYSTEMTIME sysTime;//定义系统时间变量
GetLocalTime(&sysTime);//获取系统时间
sprintf(strTime,"%4d-%02d-%02d %02d:%02d:%02d",sysTime.wYear,sysTime.wMonth, sysTime.wDay,
sysTime.wHour,sysTime.wMinute,sysTime.wSecond);//把系统时间组合为字符串
strcpy(txtSQL, "INSERT INTO scdata(pfbh, pc, ch, llz, sjz, wc, rq, ylmc,tql,cheng) values('");
//k=1,对应1号系统大称下料数据
if(k==1)
{
wc = sjz-pf1[1][n].llz;//计算误差
strcat(txtSQL, pfbh1);
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f,%d)", ps, pf1[1][n].ch,
pf1[1][n].llz,
sjz,
sjz-pf1[1][n].llz,
strTime,
pf1[1][n].mc,
pf1[1][n].tql,
1);
}
//k=2,对应1号系统小称下料数据
if(k==2)
{
wc = pf1[2][n].sjz-pf1[2][n].llz;
strcat(txtSQL, pfbh1);
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f,%d)", ps, pf1[2][n].ch,
pf1[2][n].llz,
sjz,
sjz-pf1[2][n].llz,
strTime,
pf1[2][n].mc,
pf1[2][n].tql,
2);
}
//k=3,对应1号系统液体称下料数据
if(k==3)
{
strcat(txtSQL, pfbh1);
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f,%d)", ps, pf1[3][n].ch,
pf1[3][n].llz,
sjz,
sjz-pf1[3][n].llz,
strTime,
pf1[3][n].mc,
pf1[3][n].tql,
3);
}
if(k==4)
{
strcat(txtSQL, pfbh2);
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f,%d)", ps, pf2[1][n].ch,
pf2[1][n].llz,
sjz,
sjz-pf2[1][n].llz,
strTime,
pf2[1][n].mc,
pf2[1][n].tql,
4);
}
strcat(txtSQL, ss);
record=ExecSQL(txtSQL);
if(record==1)
{
MessageBox(NULL,txtSQL ,"错误信息",MB_OK);
return 2;
}
return 0;
}
//==========================================================
//函数功能:存储小料重量,默认小料仓号为51,实际值等于理论值,误差为0
//存在问题:批次没有变化一直显示1
void SaveXL(int y, int ps ,float sjz)
{
char ss[200], txtSQL[250], strTime[30];
int k;
SYSTEMTIME sysTime;
GetLocalTime(&sysTime);
sprintf(strTime,"%4d-%02d-%02d %02d:%02d:%02d",sysTime.wYear,sysTime.wMonth, sysTime.wDay,
sysTime.wHour,sysTime.wMinute,sysTime.wSecond);
if(tjj[1].llz>=0.1)
{
if(y==1)
{
strcpy(txtSQL, "INSERT INTO scdata(pfbh, pc, ch, llz, sjz, wc, rq, ylmc,tql) values('");
strcat(txtSQL, pfbh1);
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f)", ps, 98,
tjj[1].llz,
sjz,
sjz-tjj[1].llz,
strTime,
tjj[1].mc,
0.0);
strcat(txtSQL, ss);
ExecSQL(txtSQL);
}
}
if(tjj[2].llz>=0.1)
{
if(y==2)
{
strcpy(txtSQL, "INSERT INTO scdata(pfbh, pc, ch, llz, sjz, wc, rq, ylmc,tql) values('");
strcat(txtSQL, pfbh2);
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f)", ps, 99,
tjj[2].llz,
sjz,
sjz-tjj[2].llz,
strTime,
tjj[2].mc,
0.0);
strcat(txtSQL, ss);
ExecSQL(txtSQL);
}
}
}
//======================================
//函数功能:
//参数说明:xh--生产序号,pfbh0--配方编号,pzl0--批重量
// chn[0]--大秤几个仓下料,chn[1]--小秤几个仓下料
// tjjzl--添加剂重量,oilzl--油脂重量,oilmc--油脂脉冲
int GetPF(int xh, char *pfbh0, float pzl0, int chn[2], float *tjjzl, float *oilzl, int *oilmc, float *oildw)
{
char txtSQL[200];
char ss[200];
int RowCount;
char Ret[50][200];
int flsx,ch,k1,k2,k3,k4,cheng;
char ylmc[30], ymc[20];
float bl,tjjbl,oilbl,oildw1,oildw2;
int mm, k,cheng1[40];
float tql[40],yxwc[40],bpz[40],bjwc[40];//提前量,允许误差
//为变量赋初值
*oilmc=0;
*oildw=0;
*tjjzl=0;
*oilzl=0;
//得到所有料仓以前的提前量和允许误差值
strcpy(txtSQL,"SELECT llzl, yxwc, bpz, bjwc from lcyl order by ch,cheng");
mm = SelectSQL(txtSQL, 4, Ret, &RowCount);
for(k=1;k<=RowCount;k++)
{
sscanf(Ret[k],"%f%f%f%f",&tql[k],&yxwc[k],&bpz[k],&bjwc[k]);
}
//配方中添加剂所占的总比例
strcpy(txtSQL,"SELECT tjjbl,tjjmc from tjj where pfbh='");
sprintf(ss, "%s'", pfbh0);
strcat(txtSQL, ss);
mm = SelectSQL(txtSQL, 2, Ret, &RowCount);
if(RowCount>0)
{
/* for(k=1;k<=RowCount;k++)
{
tjj[k].llz=0;
sscanf(Ret[k],"%f%s",&tjjbl, tjj[k].mc);
tjj[k].llz = tjjbl*pzl0/100;
*tjjzl = (*tjjzl) + tjj[k].llz; //添加剂总重量
}*/
if(xh==1)
{
tjj[1].llz=0;
sscanf(Ret[1],"%f%s",&tjjbl, tjj[1].mc);
tjj[1].llz = tjjbl*pzl0/100;
*tjjzl= tjj[1].llz; //添加剂总重量
}
if(xh==2)
{
tjj[2].llz=0;
sscanf(Ret[1],"%f%s",&tjjbl, tjj[2].mc);
tjj[2].llz = tjjbl*pzl0/100;
*tjjzl= tjj[2].llz; //添加剂总重量
}
}
else
{
*tjjzl=0;
}
//配方中油所占的比例
strcpy(txtSQL,"SELECT ybl, ymc from pfmc where pfbh='");
sprintf(ss, "%s'", pfbh0);
strcat(txtSQL, ss);
mm = SelectSQL(txtSQL, 2, Ret, &RowCount);
if(RowCount>0)
sscanf(Ret[1],"%f %s", &oilbl, ymc);
else
oilbl=0;
*oilzl = oilbl*pzl0/100; //油重量
//MessageBox(NULL,"油所占的比例",Ret[1],MB_OK);
//计算油脉冲数量
strcpy(txtSQL,"SELECT dw1, dw2 from yy where oilmc='");
sprintf(ss, "%s'", ymc);
strcat(txtSQL, ss);
mm = SelectSQL(txtSQL, 2, Ret, &RowCount);
if(RowCount>0)
{
sscanf(Ret[1],"%f%f", &oildw1, &oildw2);
//计算一号系统油脉冲
if(xh==1)
{
*oilmc=(int)(*oilzl/oildw1);
*oildw=oildw1;
}
//计算二号系统油脉冲
if(xh==2)
{
*oilmc=(int)(*oilzl/oildw2);
*oildw=oildw2;
}
}
else
{
*oilmc=0;
*oildw=0;
}
//sprintf(ss,"%1.2f %1.2f %d %s",*oilzl, *oildw, *oilmc, ymc);
//MessageBox(NULL,"油所占的比例",ss,MB_OK);
//配方中各原料所占的比例
strcpy(txtSQL,"SELECT flsx, ch, ylmc, bl,cheng from pf where pfbh='");
sprintf(ss, "%s", pfbh0);
strcat(txtSQL, ss);
strcat(txtSQL, "' order by flsx");
//为一号系统变量赋初值
if(xh==1)
{
k1=0;//为一号大称循环用
k2=0;//为一号小称循环用
k3=0 ;//为一号液体称称循环用
end1[1]=0; //记录一号大称下料仓数用
end1[2]=0;//记录一号小称下料仓数用
end1[3]=0;//记录一号大液体称下料仓数用
}
//为二号系统变量赋初值
if(xh==2)
{
k4=0;
end2[1]=0;
}
mm = SelectSQL(txtSQL, 5, Ret, &RowCount);
// if(mm==1) return 1;
if(RowCount>0)
{
for(k=1;k<=RowCount;k++)
{
sscanf(Ret[k],"%d%d%s%f%d",&flsx, &ch, ylmc, &bl, &cheng);
//sprintf(ss,"%d,%d,%s,%1.2f",flsx, ch, ylmc, bl);
//MessageBox(NULL,pfmc1,ss,MB_OK);
if(xh==1)
{
//记录一号大称配方下料的仓号和仓号对应的原料名称,比例,理论值,提前量,允许误差
if(cheng==1) //,&tql[k],&yxwc[k],&bpz[k],&bjwc[k],&cheng1[k]);
{
k1++;
if(ch>0 && ch<6)
{
pf1[1][k1].xh = k1;
pf1[1][k1].ch=ch;
pf1[1][k1].jlh=ch;
pf1[1][k1].bl=bl;
pf1[1][k1].llz = bl*pzl0/100;
pf1[1][k1].tql=tql[ch];
pf1[1][k1].tql0=tql[ch];
pf1[1][k1].yxwc=yxwc[ch];
pf1[1][k1].bpz=bpz[ch];
pf1[1][k1].bjwc=bjwc[ch];
strcpy(pf1[1][k1].mc, ylmc);
}
if(ch>5 && ch<9)
{
pf1[1][k1].xh = k1;
pf1[1][k1].ch=ch;
pf1[1][k1].jlh=ch;
pf1[1][k1].bl=bl;
pf1[1][k1].llz = bl*pzl0/100;
pf1[1][k1].tql=tql[2*ch-5];
pf1[1][k1].tql0=tql[2*ch-5];
pf1[1][k1].yxwc=yxwc[2*ch-5];
pf1[1][k1].bpz=bpz[2*ch-5];
pf1[1][k1].bjwc=bjwc[2*ch-5];
strcpy(pf1[1][k1].mc, ylmc);
}
end1[1]=k1;
fl_end1=1;
}
//记录一号小称配方下料的仓号和仓号对应的原料名称,比例,理论值,提前量,允许误差
if(cheng==2)
{
k2++;
if(ch>4 && ch<9)
{
pf1[2][k2].xh = k2;
pf1[2][k2].ch=ch;
pf1[2][k2].jlh=ch;
pf1[2][k2].bl=bl;
pf1[2][k2].llz = bl*pzl0/100;
pf1[2][k2].tql=tql[2*ch-4];
pf1[2][k2].tql0=tql[2*ch-4];
pf1[2][k2].yxwc=yxwc[2*ch-4];
pf1[2][k2].bpz=bpz[2*ch-4];
pf1[2][k2].bjwc=bjwc[2*ch-4];
strcpy(pf1[2][k2].mc, ylmc);
}
if(ch>8 && ch<19)
{
pf1[2][k2].xh = k2;
pf1[2][k2].ch=ch;
pf1[2][k2].jlh=ch;
pf1[2][k2].bl=bl;
pf1[2][k2].llz = bl*pzl0/100;
pf1[2][k2].tql=tql[ch+4];
pf1[2][k2].tql0=tql[ch+4];
pf1[2][k2].yxwc=yxwc[ch+4];
pf1[2][k2].bpz=bpz[ch+4];
pf1[2][k2].bjwc=bjwc[ch+4];
strcpy(pf1[2][k2].mc, ylmc);
}
end1[2]=k2;
fl_end1=1;
}
if(cheng==3)
{
k3++;
pf1[3][k3].xh=k3;
pf1[3][k3].ch=ch;
pf1[3][k3].jlh=ch;
pf1[3][k3].bl=bl;
pf1[3][k3].llz = bl*pzl0/100;
pf1[3][k3].tql=tql[ch+4];
pf1[3][k3].tql0=tql[ch+4];
pf1[3][k3].yxwc=yxwc[ch+4];
pf1[3][k3].bpz=bpz[ch+4];
pf1[3][k3].bjwc=bjwc[ch+4];
strcpy(pf1[3][k3].mc, ylmc);
end1[3]=k3;
fl_end1=1;
}
chn[0]=k1;
chn[1]=k2;
chn[2]=k3;
}
//说明:下面是对二号配料系统配方的设置,因为双桥配料系统中只有一号系统,所以下面的程序注释掉了
if(xh==2)
{
pf2[1][1].xh =1;
pf2[1][1].ch=28;
pf2[1][1].jlh=28;
pf2[1][1].bl=bl;
pf2[1][1].llz=bl*pzl0/100;
pf2[1][1].tql=tql[ch+4];
pf2[1][1].tql0=tql[ch+4];
pf2[1][1].yxwc=yxwc[ch+4];
pf2[1][1].bpz=bpz[ch+4];
pf2[1][1].bjwc=bjwc[ch+4];
strcpy(pf2[1][1].mc, ylmc);
end2[1]=1;
fl_end2=1;
chn[0]=1;
}
}
}
else
{
if(xh==2)
{
pf2[1][1].xh =1;
pf2[1][1].ch=28;
pf2[1][1].jlh=28;
pf2[1][1].bl=0;
pf2[1][1].llz=0*pzl0/100;
pf2[1][1].tql=0;
pf2[1][1].tql0=0;
pf2[1][1].yxwc=0;
pf2[1][1].bpz=0;
pf2[1][1].bjwc=0;
strcpy(pf2[1][1].mc, "");
end2[1]=0;
fl_end2=1;
chn[0]=0;
}
}
return 0;
}
//========================
//得到总批数以及当前批次
void GetPC1(int *zps, int *ps)
{
*zps=ppend1;
*ps=pp1;
}
//=========================================
//得到总批数以及当前批次
void GetPC2(int *zps, int *ps)
{
*zps=ppend2;
*ps=pp2;
}
//=========================================
//设置当前生产配方的总批数
void SetPC1(int zps)
{
ppend1=zps;
}
//=========================================
//设置当前生产配方的总批数
void SetPC2(int zps)
{
ppend2=zps;
}
//=========================================
//换仓设置
//h1--原来仓号
//h2--换后仓号
int SetHc(int h1, int h2)
{
int i;
if(h1<8 && h2<8)
// 一号大称换仓
for(i=1;i<=end1[1];i++)
if(pf1[1][i].jlh==h1)
{
pf1[1][i].jlh=h2;
pf1[1][i].ch=h2;
return 1;
}
//一号小称换仓
if(h1>7 && h1<28 && h2>7 && h2<28)
for(i=1;i<=end1[2];i++)
if(pf1[2][i].jlh==h1)
{
pf1[2][i].jlh=h2;
pf1[2][i].ch=h2;
return 2;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -