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

📄 comm.cpp

📁 利用VC编写的关于配料的动态库程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//  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 + -