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

📄 readme.txt

📁 利用VC编写的关于配料的动态库程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:

	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 + -