📄 readme.txt
字号:
pl1=0;
pl2=0;
pl3=0;
pl4=0;
pl5=0;
}
//====================================================
int pl_init(int scxh)
{
char txtSQL[200];
char ss[200];
int RowCount;
char Ret[50][200];
int mm;
strcpy(txtSQL,"SELECT pfbh, pfmc, ps, pzl, hhsj, hfjh from scpf where xh=");
sprintf(ss, "%d", scxh);
strcat(txtSQL, ss);
strcat(txtSQL, " order by xh");
mm = SelectSQL(txtSQL, 6, Ret, &RowCount);
if(RowCount==0)
{
MessageBox(NULL,"全部生产完毕","提示信息",MB_OK);
return 1;
}
sscanf(Ret[1],"%s%s%d%f%d%d", pfbh,pfmc,&ppend,&pzl,&hhsj,&hfjh);
fl_n1=1;
fl_n2=1;
fl_n3=1;
fl_n4=1;
fl_n5=1;
//每批开始前的初始化
pp_init();
//得到系统参数
//料柱检测设置值
w_jcz1=(float)1;
w_jcz2=(float)1;
w_jcz3=(float)2;
w_jcz4=(float)2;
w_jcz5=(float)2;
//仪表低低限,变频值
ybwc1=0.25; bpz1=2;
ybwc2=0.25; bpz2=2;
ybwc3=0.5; bpz3=5;
ybwc4=0.5; bpz4=5;
ybwc5=0.5; bpz5=5;
//取配方数据
pp=1; //从第一批开始
//从生产配方库中得到生产配方
// ppend=1; //生产批次
// strcpy(pfbh,"0002"); //配方编号
// strcpy(pfmc,"配方2"); //配方名称
// pzl=100/100; //每批重量
// hfjh=12; //混合机号
// hhsj=10; //混合时间
//得到配方数据
GetPF(pfbh, pzl);
return 0;
}
//====================================================
void dispdata(char ylname[31][20], float llz[31], float xszl[31])
{
int k;
for(k=1;k<31;k++)
{
strcpy(ylname[k],"");
llz[k]=0;
xszl[k]=0;
}
for(k=1;k<=end1[fl_n1];k++)
{
strcpy(ylname[k],pf1[fl_n1][k].mc);
llz[k]=pf1[fl_n1][k].llz;
xszl[k]=pf1[fl_n1][k].xsz;
}
for(k=1;k<=end2[fl_n2];k++)
{
strcpy(ylname[k+6],pf2[fl_n2][k].mc);
llz[k+6]=pf2[fl_n2][k].llz;
xszl[k+6]=pf2[fl_n2][k].xsz;
}
for(k=1;k<=end3[fl_n3];k++)
{
strcpy(ylname[k+12],pf3[fl_n3][k].mc);
llz[k+12]=pf3[fl_n3][k].llz;
xszl[k+12]=pf3[fl_n3][k].xsz;
}
for(k=1;k<=end4[fl_n4];k++)
{
strcpy(ylname[k+18],pf4[fl_n4][k].mc);
llz[k+18]=pf4[fl_n4][k].llz;
xszl[k+18]=pf4[fl_n4][k].xsz;
}
for(k=1;k<=end5[fl_n5];k++)
{
strcpy(ylname[k+24],pf5[fl_n5][k].mc);
llz[k+24]=pf5[fl_n5][k].llz;
xszl[k+24]=pf5[fl_n5][k].xsz;
}
}
//====================================================
//kypl:==0:允许配料(PLC-->WCC),=1:正在卸料不允许配料(PLC<--WCC)
//stch0:不为0表示要启动的绞龙号(WCC-->PLC),==0 绞龙停(WCC<--PLC)
void pl_loop(int stch0[10], int kypl[10], int *pstart, double ybshow[10], int ybset[10], int pover[10], int StartPL)
{
char ss[100];
int k,j;
yb_read(1, &ybshow[1]);
yb_read(2, &ybshow[2]);
yb_read(3, &ybshow[3]);
yb_read(4, &ybshow[4]);
yb_read(5, &ybshow[5]);
if(StartPL==0) return;
if(stch0[1]!=0 && kypl[1]==0) pf1[fl_n1][start1].xsz = (float)ybshow[1]-pf1[fl_n1][start1].csz;
if(stch0[2]!=0 && kypl[2]==0) pf2[fl_n2][start2].xsz = (float)ybshow[2]-pf2[fl_n2][start2].csz;
if(stch0[3]!=0 && kypl[3]==0) pf3[fl_n3][start3].xsz = (float)ybshow[3]-pf3[fl_n3][start3].csz;
if(stch0[4]!=0 && kypl[4]==0) pf4[fl_n4][start4].xsz = (float)ybshow[4]-pf4[fl_n4][start4].csz;
if(stch0[5]!=0 && kypl[5]==0) pf5[fl_n5][start5].xsz = (float)ybshow[5]-pf5[fl_n5][start5].csz;
if(kypl[1]==0 && end1[fl_n1]>0 && pover1==0)
{
ppll(1, pf1[fl_n1], &start1, end1[fl_n1], ybwc1, bpz1, pp, &stch0[1], &pl1, &pover[1], w_jcz1,1000, &ybset[1]);
if(fl_n1==fl_end1 && pover[1]==1) pover1=1;
if(pover[1]==1 && fl_n1<fl_end1)
{
//下一次接料
fl_n1++;
start1=1;
//MessageBox(NULL,"1号秤下一次接料","safd",MB_OK);
}
}
if(kypl[2]==0 && end2[fl_n2]>0 && pover2==0)
{
ppll(2, pf2[fl_n2], &start2, end2[fl_n2], ybwc2, bpz2, pp, &stch0[2], &pl2, &pover[2], w_jcz2,1000, &ybset[2]);
if(fl_n2==fl_end2 && pover[2]==1) pover2=1;
if(pover[2]==1 && fl_n2<fl_end2)
{
fl_n2++;
start2=1;
//MessageBox(NULL,"2号秤下一次接料","safd",MB_OK);
}
}
if(kypl[3]==0 && end3[fl_n3]>0 && pover3==0)
{
ppll(3, pf3[fl_n3], &start3, end3[fl_n3], ybwc3, bpz3, pp, &stch0[3], &pl3, &pover[3], w_jcz3,100, &ybset[3]);
if(fl_n3==fl_end3 && pover[3]==1) pover3=1;
if(pover[3]==1 && fl_n3<fl_end3)
{
fl_n3++;
start3=1;
}
}
if(kypl[4]==0 && end4[fl_n4]>0 && pover4==0)
{
ppll(4, pf4[fl_n4], &start4, end4[fl_n4], ybwc4, bpz4, pp, &stch0[4], &pl4, &pover[4], w_jcz4,100, &ybset[4]);
if(fl_n4==fl_end4 && pover[4]==1) pover4=1;
if(pover[4]==1 && fl_n4<fl_end4)
{
fl_n4++;
start4=1;
}
}
if(kypl[5]==0 && end5[fl_n5]>0 && pover5==0)
{
ppll(5, pf5[fl_n5], &start5, end5[fl_n5], ybwc5, bpz5, pp, &stch0[5], &pl5, &pover[5], w_jcz5,100, &ybset[5]);
if(fl_n5==fl_end5 && pover[5]==1) pover5=1;
if(pover[5]==1 && fl_n5<fl_end5)
{
fl_n5++;
start5=1;
}
}
if(end1[1]==0) pover1=1;
if(end2[1]==0) pover2=1;
if(end3[1]==0) pover3=1;
if(end4[1]==0) pover4=1;
if(end5[1]==0) pover5=1;
if((end1[1]+end2[1]+end3[1]+end4[1]+end5[1])>0 && (pover1+pover2+pover3+pover4+pover5)==5)
{
if(kypl[1]+kypl[2]+kypl[3]+kypl[4]+kypl[5]==0)
{
// MessageBox(NULL,"本批次配料完成!","提示信息",MB_OK);
pover1=0;
pover2=0;
pover3=0;
pover4=0;
pover5=0;
if(pp==ppend)
{
strcpy(ss, "配方[");
strcat(ss, pfbh);
strcat(ss, " ");
strcat(ss, pfmc);
strcat(ss, "]生产完成!");
MessageBox(NULL,ss,"提示信息",MB_OK);
*pstart=1;
//如果所有配方没有完毕则开始下一个配方
scpf_XH++;
if(pl_init(scpf_XH)==1) *pstart=2; //所有配方生产完毕
for(j=1;j<3;j++)
for(k=1;k<7;k++)
{
strcpy(pf1[j][k].mc,"");
pf1[j][k].llz=0;
pf1[j][k].xsz=0;
strcpy(pf2[j][k].mc,"");
pf2[j][k].llz=0;
pf2[j][k].xsz=0;
strcpy(pf3[j][k].mc,"");
pf3[j][k].llz=0;
pf3[j][k].xsz=0;
strcpy(pf4[j][k].mc,"");
pf4[j][k].llz=0;
pf4[j][k].xsz=0;
strcpy(pf5[j][k].mc,"");
pf5[j][k].llz=0;
pf5[j][k].xsz=0;
}
}
else
{
//开始下一批配料
pp++;
pp_init();
}
}
}
}
//========================================================
int SaveData(int k)
{
char txtSQL[200];
char ss[200];
int record;
char strTime[30];
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) values('");
strcat(txtSQL, pfbh);
if(k==1)
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f)", pp, pf1[fl_n1][start1].ch,
pf1[fl_n1][start1].llz,
pf1[fl_n1][start1].sjz,
pf1[fl_n1][start1].sjz-pf1[fl_n1][start1].llz,
strTime,
pf1[fl_n1][start1].mc,
pf1[fl_n1][start1].tql);
if(k==2)
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f)", pp, pf2[fl_n2][start2].ch,
pf2[fl_n2][start2].llz,
pf2[fl_n2][start2].sjz,
pf2[fl_n2][start2].sjz-pf2[fl_n2][start2].llz,
strTime,
pf2[fl_n2][start2].mc,
pf2[fl_n2][start2].tql);
if(k==3)
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f)", pp, pf3[fl_n3][start3].ch,
pf3[fl_n3][start3].llz,
pf3[fl_n3][start3].sjz,
pf3[fl_n3][start3].sjz-pf3[fl_n3][start3].llz,
strTime,
pf3[fl_n3][start3].mc,
pf3[fl_n3][start3].tql);
if(k==4)
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f)", pp, pf4[fl_n4][start4].ch,
pf4[fl_n4][start4].llz,
pf4[fl_n4][start4].sjz,
pf4[fl_n4][start4].sjz-pf4[fl_n4][start4].llz,
strTime,
pf4[fl_n4][start4].mc,
pf4[fl_n4][start4].tql);
if(k==5)
sprintf(ss, "',%d,'%02d',%1.3f,%1.3f,%1.3f,'%s','%s',%1.3f)", pp, pf5[fl_n5][start5].ch,
pf5[fl_n5][start5].llz,
pf5[fl_n5][start5].sjz,
pf5[fl_n5][start5].sjz-pf5[fl_n5][start5].llz,
strTime,
pf5[fl_n5][start5].mc,
pf5[fl_n5][start5].tql);
strcat(txtSQL, ss);
record=ExecSQL(txtSQL);
if(record==1){
MessageBox(NULL,txtSQL ,"错误信息",MB_OK);
return 1;
}
return 0;
}
//======================================
int GetPF(char *pfbh0, float pzl0)
{
char txtSQL[200];
char ss[200];
int RowCount;
char Ret[50][200];
int flsx,ch,k1,k2,k3,k4,k5;
int j1,j2,j3,j4,j5, n, n1,n2,n3,n4,n5;
char ylmc[30];
float bl;
int mm, k;
float tql[40];
//得到以前的提前量
strcpy(txtSQL,"SELECT llzl from lcyl order by ch");
mm = SelectSQL(txtSQL, 1, Ret, &RowCount);
for(k=1;k<=RowCount;k++)
{
sscanf(Ret[k],"%f",&tql[k]);
}
strcpy(txtSQL,"SELECT flsx, ch, ylmc, bl from pf where pfbh='");
sprintf(ss, "%s", pfbh0);
strcat(txtSQL, ss);
strcat(txtSQL, "' order by flsx");
k1=0; k2=0; k3=0; k4=0; k5=0;
j1=0; j2=0; j3=0; j4=0; j5=0;
n1=0; n2=0; n3=0; n4=0; n5=0;
end1[1]=0; end2[1]=0; end3[1]=0; end4[1]=0; end5[1]=0;
mm = SelectSQL(txtSQL, 4, Ret, &RowCount);
// if(mm==1) return 1;
for(k=1;k<=RowCount;k++)
{
sscanf(Ret[k],"%d%d%s%f",&flsx, &ch, ylmc, &bl);
sprintf(ss,"%d,%d,%s,%f",flsx, ch, ylmc, bl);
if(flsx>100 && flsx<200)
{
n=(flsx-100)/10; //第几次下料
if(n>n1)
{
j1++;
k1=0;
n1=n;
}
k1++;
pf1[j1][k1].xh = 100+j1*10+k1;
pf1[j1][k1].ch=ch;
pf1[j1][k1].jlh=ch;
pf1[j1][k1].bl=bl;
pf1[j1][k1].llz = bl*pzl0/100;
pf1[j1][k1].tql=tql[ch];
pf1[j1][k1].tql0=tql[ch];
strcpy(pf1[j1][k1].mc, ylmc);
end1[j1]=k1;
fl_end1=j1;
}
if(flsx>200 && flsx<300)
{
n=(flsx-200)/10; //第几次下料
if(n>n2)
{
j2++;
k2=0;
n2=n;
}
k2++;
pf2[j2][k2].xh = 200+j2*10+k2;
pf2[j2][k2].ch=ch;
pf2[j2][k2].jlh=ch-6;
pf2[j2][k2].bl=bl;
pf2[j2][k2].llz=bl*pzl0/100;
pf2[j2][k2].tql=tql[ch];
pf2[j2][k2].tql0=tql[ch];
strcpy(pf2[j2][k2].mc, ylmc);
end2[j2]=k2;
fl_end2=j2;
}
if(flsx>300 && flsx<400)
{
n=(flsx-300)/10; //第几次下料
if(n>n3)
{
j3++;
k3=0;
n3=n;
}
k3++;
pf3[j3][k3].xh = 300+j3*10+k3;
pf3[j3][k3].ch=ch;
pf3[j3][k3].jlh=ch-12;
pf3[j3][k3].bl=bl;
pf3[j3][k3].llz=bl*pzl0/100;
pf3[j3][k3].tql=tql[ch];
pf3[j3][k3].tql0=tql[ch];
strcpy(pf3[j3][k3].mc, ylmc);
end3[j3]=k3;
fl_end3=j3;
}
if(flsx>400 && flsx<500)
{
n=(flsx-400)/10; //第几次下料
if(n>n4)
{
j4++;
k4=0;
n4=n;
}
k4++;
pf4[j4][k4].xh = 400+j4*10+k4;
pf4[j4][k4].ch=ch;
pf4[j4][k4].jlh=ch-18;
pf4[j4][k4].bl=bl;
pf4[j4][k4].llz=bl*pzl0/100;
pf4[j4][k4].tql=tql[ch];
pf4[j4][k4].tql0=tql[ch];
strcpy(pf4[j4][k4].mc, ylmc);
end4[j4]=k4;
fl_end4=j4;
}
if(flsx>500 && flsx<600)
{
n=(flsx-500)/10; //第几次下料
if(n>n5)
{
j5++;
k5=0;
n5=n;
}
k5++;
pf5[j5][k5].xh = 500+j5*10+k5;
pf5[j5][k5].ch=ch;
pf5[j5][k5].jlh=ch-24;
pf5[j5][k5].bl=bl;
pf5[j5][k5].llz=bl*pzl0/100;
pf5[j5][k5].tql=tql[ch];
pf5[j5][k5].tql0=tql[ch];
strcpy(pf5[j5][k5].mc, ylmc);
end5[j5]=k5;
fl_end5=j5;
}
}
return 0;
}
//========================
//小车运行路径
int GetPLCS(char *pfbh0, char *pfmc0, int *hfjh0, int *hhsj0, int xc[11])
{
char txtSQL[200];
char ss[100];
int RowCount;
char Ret[50][200];
char xclj[30];
int mm, k, n;
char *p;
strcpy(pfbh0,pfbh);
strcpy(pfmc0,pfmc);
*hhsj0=hhsj;
*hfjh0=hfjh;
for(k=0;k<11;k++)xc[k]=0;
strcpy(txtSQL,"SELECT xc from pfmc where pfbh='");
sprintf(ss, "%s", pfbh);
strcat(txtSQL, ss);
strcat(txtSQL, "'");
mm = SelectSQL(txtSQL, 1, Ret, &RowCount);
// if(mm==1) return 1;
sscanf(Ret[1],"%s",xclj);
p=xclj;
n=0;
k=0;
while(xclj[k])
{
if(xclj[k]==',')
{
n++;
xclj[k]=0;
xc[n]= atoi(p);
k++;
p=&(xclj[k]);
}
k++;
}
xc[n+1]= atoi(p);
return 0;
}
//=========================================
//得到总批数以及当前批次
void GetPC(int *zps, int *ps)
{
*zps=ppend;
*ps=pp;
}
//=========================================
//设置当前生产配方的总批数
void SetPC(int zps)
{
ppend=zps;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -