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

📄 comm.cpp

📁 利用VC编写的关于配料的动态库程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
 {
//  MessageBox(NULL,"" ,"读仪表数据1111",MB_OK);
  return 1;
 }
 len=strlen(yb_out);
 yb_out[len-4]=0;
 
 *zl=atof(&yb_out[7]);
 if(yb_out[6]=='-') *zl=-(*zl);
 return 0;
}
//=============================================
int yb_write(int id, long yb_hh, long yb_hi, long yb_ll)
{
 char yb_set0[]={5,'I','D','1','8',13,10,0};
 char yb_set1[11][20];
 char crlf[3]={13,10,0};
 char yb_out[30];
 int k, Ret;
 long yb_lo;
 char ss[50];
 
// sprintf(ss, "%d号仪表 %ld %ld %ld", id, yb_hh,yb_hi,yb_ll);
// MessageBox(NULL,ss ,"仪表设置数据",MB_OK);
 
 if(id==2)yb_set0[3]='2';
 if(id==3)yb_set0[3]='3';
 if(id==4)yb_set0[3]='4';
 if(id==5)yb_set0[3]='5';
 
 
 if(yb_ll<0) yb_ll=0;
 if(yb_hi<yb_ll) yb_hi=yb_ll;
 
 if(yb_hh<yb_hi)
 { 
  sprintf(ss, "%d号仪表 %ld %ld %ld", id, yb_hh,yb_hi,yb_ll);
  MessageBox(NULL,ss ,"仪表设置数据错误",MB_OK);
  return 1;
 }
 
 //设置仪表数据
// for(k=0;k<3;k++)
// {
//  yb_tx(id, yb_set0, yb_out,150);
//  if(atoi(&(yb_out[1]))==id*10+8) break;
//    }
 
 strcpy(yb_set1[0],"SET");
 sprintf(yb_set1[1],"%ld", yb_hh);
 
 strcpy(yb_set1[2],"N");
 sprintf(yb_set1[3],"%ld", yb_hi);
 
 yb_lo=(yb_hi+yb_ll)/2;
 strcpy(yb_set1[4],"N");
 sprintf(yb_set1[5],"%ld", yb_lo);
 
 strcpy(yb_set1[6],"N");
 sprintf(yb_set1[7],"%ld", yb_ll);
 
 strcpy(yb_set1[8],"N");
 sprintf(yb_set1[9],"R");
 
 sprintf(ss, "%d   %ld %ld %ld", id, yb_hh,yb_hi,yb_ll);
 //MessageBox(NULL,ss , "仪表数据",MB_OK);
 //设置数据
 for(k=0;k<10;k++)
 {
 // MessageBox(NULL,yb_set1[k], "仪表数据",MB_OK);
  strcat(yb_set1[k],crlf);
  yb_tx(id, yb_set1[k], yb_out,150);
 }
 if(yb_out[0]=='Y' && yb_out[1]=='E' && yb_out[2]=='S') 
  Ret = 0;
 else
  Ret = 1;
 return Ret;
}
//================================================
//==============================
void pp_init1(void)//一号配料系统开始新批次初始化
{
 int k;
 
 for(k=1;k<9;k++) //一号1称配方初始化
  {
   pf1[1][k].xsz = 0;
   pf1[1][k].sjz = 0;
  }
 for(k=1;k<15;k++)  //一号2称配方初始化
  {
   pf1[2][k].xsz = 0;
   pf1[2][k].sjz = 0;
  }
  for(k=1;k<10;k++)  //一号3称配方初始化
  {
   pf1[3][k].xsz = 0;
   pf1[3][k].sjz = 0;
  }


 fl_n1=1; //一号大称放料顺序置1
 fl_n2=1;//一号小称放料顺序置1
 fl_n3=1;//一号液体称放料顺序置1
 
 pover1=0;//一号大称配料结束标志置0
 pover2=0;//一号小称配料结束标志置0
 pover3=0;//一号液体称配料结束标志置0
 
 start1=1;//一号大称配料开始标志置1
 start2=1;//一号大称配料开始标志置1
 start3=1;//一号大称配料开始标志置1
 
 pl1=0;   //
 pl2=0;
 pl3=0;
 
}
//==============================
void pp_init2(void)//二号系统初始化
{
                
 pf2[1][1].xsz = 0;   //二号大称配方初始化
 pf2[1][1].sjz = 0;

 fl_n4=1;
 
 pover4=0;
 
 start4=1;
 
 pl4=0;
}
//====================================================
//函数功能:根据scxh(生产系统)查询scpf(生产配方)数据表中的配方编号把配方按生产系统和仪表称进行分类
//参数说明:scxh--生产系统编号,pfbh--配方编号,pfmc--配方名称,--混合时间,tjjzl--添加剂重量,oilzl--油重量,
//         chn[0]--大秤几个仓下料,chn[1]--小秤几个仓下料
int pl_init(int scxh, char *pfbh, char *pfmc, int *ghsj, int *shsj, 
   float *tjjzl, float *oilzl, 
   int chn[2], int *oilmc, float *oildw)

{ char txtSQL[200];//数据库查询语句
 char ss[200], temp[30]; //临时字符数组
 int RowCount; //记录条数
 char Ret[50][200];//数据集对象
 int mm,k; //循环变量记录
 int ppend; //生产批次
 float pzl, xlwc;//批重量和下料误差
 
 strcpy(txtSQL,"SELECT pfbh, pfmc, ps, pzl, ghsj, shsj from scpf where xh='");
 sprintf(ss, "%d号'", scxh);
 strcat(txtSQL, ss);
  //MessageBox(NULL,txtSQL,"",MB_OK);
 
    mm = SelectSQL(txtSQL, 6, Ret, &RowCount);
  //生产配方数据表为空,全部生存完毕。对配方数组初始化
 if(RowCount==0) 
  {
  //MessageBox(NULL,"全部生产完毕","提示信息",MB_OK);
  strcpy(pfbh,"");
  strcpy(pfmc,"");
  if(scxh==1)
  {
   ppend1=0;
   pp1=0; 
   for(k=1;k<15;k++)
   {
   //一号大称配方
    pf1[1][k].xsz = 0;
    pf1[1][k].llz = 0;
    strcpy(pf1[1][k].mc,"");
    //一号小称配方
    pf1[2][k].xsz = 0;
    pf1[2][k].llz = 0;
    strcpy(pf1[2][k].mc,"");
    //一号液体称配方
    pf1[3][k].xsz = 0;
    pf1[3][k].llz = 0;
    strcpy(pf1[3][k].mc,"");
   }
  }
  if(scxh==2)
  {
   ppend2=0;
   pp2=0;
   pf2[1][1].xsz = 0;//二号大称配方
   pf2[1][1].llz = 0;
   strcpy(pf2[1][1].mc,"");
  }
  return 1;
 }
 //查询记录不为空,则将记录的相对应数据项赋值给pfbh,pfmc,ppend,pzl,hhsj
 //MessageBox(NULL,Ret[1],"",MB_OK);
 sscanf(Ret[1],"%s%s%d%f%d%d", pfbh,pfmc,&ppend,&pzl,ghsj,shsj);
 
 //根据生产序号,配方编号,批重量得到配方数据
 GetPF(scxh, pfbh, pzl, chn, tjjzl, oilzl, oilmc, oildw);
 
//sprintf(ss,"pzl=%f,1===%d,2===%d,*tjjzl=%f,*oilzl=%f",pzl,chn[0], chn[1], *tjjzl,*oilzl);
//MessageBox(NULL,pfbh,ss,MB_OK);
 
 fl_n1=1;
 fl_n2=1;
 fl_n3=1;
 fl_n4=1;
 fl_n5=1;
 
 //料柱检测设置值
 w_jcz1=(float)1; 
 w_jcz2=(float)1;
 w_jcz3=(float)2;
 w_jcz4=(float)2;
 w_jcz5=(float)2;
 
 //读取INI文件ybwc1 hc_sj hhj1flsj hcd1flsj  hhj2flsj hcd2flsj c5flsj c6flsj cflsj cm_sj hhm_sj
 GetPrivateProfileStringA( "仪表允许误差","1号秤称重误差(公斤):",temp,ss,20,"d:\\zgpl\\pl.ini");
 ybwc1=(float)atof(ss);
 GetPrivateProfileStringA( "仪表允许误差","2号秤称重误差(公斤):",temp,ss,20,"d:\\zgpl\\pl.ini");
 ybwc2=(float)atof(ss);
 GetPrivateProfileStringA( "仪表允许误差","3号秤称重误差(公斤):",temp,ss,20,"d:\\zgpl\\pl.ini");
 ybwc3=(float)atof(ss);
 GetPrivateProfileStringA( "仪表允许误差","4号秤称重误差(公斤):",temp,ss,20,"d:\\zgpl\\pl.ini");
 ybwc4=(float)atof(ss);
 GetPrivateProfileStringA( "仪表允许误差","5号秤称重误差(公斤):",temp,ss,20,"d:\\zgpl\\pl.ini");
 ybwc5=(float)atof(ss);
 GetPrivateProfileStringA( "仪表允许误差","6号秤称重误差(公斤):",temp,ss,20,"d:\\zgpl\\pl.ini");
 ybwc6=(float)atof(ss);
 GetPrivateProfileStringA( "系统参数(秒)","换仓的间隔即秤稳定时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 hc_sj=(float)atof(ss);
 GetPrivateProfileStringA( "系统参数(秒)","1号混合机-放料时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 hhj1_flsj=(float)atof(ss);
 GetPrivateProfileStringA( "系统参数(秒)","1号缓冲斗-放料时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 hcd1_flsj=(float)atof(ss);
 GetPrivateProfileStringA( "系统参数(秒)","2号混合机-放料时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 hhj2_flsj=(float)atof(ss);
 GetPrivateProfileStringA( "系统参数(秒)","2号缓冲斗-放料时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 hcd2_flsj=(float)atof(ss);
 GetPrivateProfileStringA( "系统参数(秒)","5号小料秤-放料时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 c5_flsj=(float)atof(ss);
 GetPrivateProfileStringA( "系统参数(秒)","6号小料秤-放料时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 c6_flsj=(float)atof(ss);
 GetPrivateProfileStringA( "报警参数(秒)","秤放料时允许的最长放料时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 c_flsj=(float)atof(ss);
 GetPrivateProfileStringA( "报警参数(秒)","秤门开关门-允许等待时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 cm_sj=(float)atof(ss);
 GetPrivateProfileStringA( "报警参数(秒)","混合门开关门-允许等待时间(秒):",temp,ss,20,"d:\\zgpl\\pl.ini");
 hhm_sj=(float)atof(ss);
 if(scxh==1)
 {
  //对一号配料系统参数进行初始化
   strcpy(pfbh1,pfbh);
   ppend1=ppend;//生产批次
   pzl1=pzl;//批重量
   PL_END1=0;//配料结束标志
   pp1=1;//生产批次
   pp_init1(); //每批开始前的初始化
 //  if( (*tjjzl)>0.5)
 // {
 //设置添加剂仪表
 //  GetPrivateProfileStringA( "仪表允许误差","1号小料称重误差(公斤):",temp, ss, 20, "d:\\zgpl\\pl.ini");
 // xlwc=(float)atof(ss);
   // yb_write(3, (int)((*tjjzl+xlwc)*10), (int)((*tjjzl-xlwc)*10), (int)(xlwc*10));
  // }
 }
 if(scxh==2 )
 {
   strcpy(pfbh2,pfbh);
   ppend2=ppend;
   pzl2=pzl;
   PL_END2=0;
   pp2=1;
   pp_init2(); //每批开始前的初始化
   //设置添加剂仪表
   //设置添加剂仪表
//   if( (*tjjzl)>0.5)
 //  {
 // GetPrivateProfileStringA( "仪表允许误差","2号小料称重误差(公斤):",temp, ss, 20, "d:\\zgpl\\pl.ini");
 // xlwc=(float)atof(ss);
 // yb_write(5, (int)((*tjjzl+xlwc)*10), (int)((*tjjzl-xlwc)*10), (int)(xlwc*10));
  // }
 }
 
 return 0;
}
//====================================================
//说明:数值显示函数在wincc的全局脚本中写了,这里的函数并没有用到
//void dispdata1(char ylname[20][20], float llz[20], float xszl[20], int *kk)
//{
  //int k,j;
 
  //for(k=1;k<20;k++)
 //{
   //strcpy(ylname[k]," ");
   //llz[k]=0;
   //xszl[k]=0;
 //}
  
  //for(k=1;k<=end1[1];k++)
 //{
  // sprintf(ylname[k],"%s(%0d)", pf1[1][k].mc, pf1[1][k].ch);
 //  llz[k]=pf1[1][k].llz;
 //  xszl[k]=pf1[1][k].xsz;
// }0
//  k--;
// for(j=1;j<=end1[2];j++)
// {
   //sprintf(ylname[k+j],"%s(%0d)", pf1[2][j].mc, pf1[2][j].ch);
   //llz[k+j]=pf1[2][j].llz;
   //xszl[k+j]=pf1[2][j].xsz;
 //}
 // if(mm==1) return 1;
 //为一号系统变量赋初值
 // if(mm==1) return 1;
  // *kk=end1[1]+end1[2];
//}
void Readlccr( float lcrl[50] )
{
 char txtSQL[200];
 char Ret[50][200];
 int RowCount;
 int mm,k,j,m;
 float n;
 strcpy(txtSQL,"SELECT lccr from lcyl order by ch,cheng " );
 mm = SelectSQL(txtSQL, 1, Ret, &RowCount);
 for(k=1;k<33;k++)
  {
  //sscanf(Ret[k],"%d%f",&m,&lcrl[k]);
  sscanf(Ret[k],"%f",&lcrl[k]);
  }
}
//==================================================== //配方中添加剂所占的总比例
//获取一号大称配料仓号和原料名称,理论值,提前量,允许误差和下料仓的数量where ch>22 and ch<28"
void Writelccr( float lcrl[50] )
{
 char txtSQL[200];
 int mm,k;
 float n;
 char ss[200];
 for(k=1;k<=28;k++)
 {
  n=lcrl[k];
  mm=k;
  strcpy(txtSQL, "Update lcyl set lccr ='");
  sprintf(ss, "%f'", n);
  strcat(txtSQL, ss);
  strcat(txtSQL, "where ch='"); 
  sprintf(ss, "%d'", mm);
  strcat(txtSQL, ss);
  ExecSQL(txtSQL);
 }
}
//====================================================
//  cm_sj hhm_sj
void GetIni(float ybwc[7], float *hcsj, float hhjflsj[3],float hcdflsj[3],float *c5flsj,float *c6flsj,float *cflsj,float *cmsj,float *hhmsj)
{
  int k;
  //读取一号大称配方数组,并把值传递到wincc中
    ybwc[1]=ybwc1;
    ybwc[2]=ybwc2;
    ybwc[3]=ybwc3;
    ybwc[4]=ybwc4;
    ybwc[5]=ybwc5;
    ybwc[6]=ybwc6;
   *hcsj=hc_sj;
   hhjflsj[1]=hhj1_flsj;
   hhjflsj[2]=hhj2_flsj;  
   hcdflsj[1]=hcd1_flsj;
   hcdflsj[2]=hcd2_flsj;
   *c5flsj=c5_flsj;
   *c6flsj=c6_flsj;
   *cflsj=c_flsj;
   *cmsj=cm_sj;
   *hhmsj=hhm_sj;
 }

//====================================================
//获取一号大称配料仓号和原料名称,理论值,提前量,允许误差和下料仓的数量
void GetPF11(char chhh[20][5], char ylname[20][20], float llz[20], float tql[20], float yxwc[20],float bjwc[20],float bpz[20], int ch[20],char tj[2][20], int *kk)
{
  int k;
  //读取一号大称配方数组,并把值传递到wincc中
  for(k=1;k<=end1[1];k++)
 {
   sprintf(ylname[k],"%10s", pf1[1][k].mc);
   sprintf(chhh[k],"(%02d)", pf1[1][k].ch);
   llz[k]=pf1[1][k].llz;
   tql[k]=pf1[1][k].tql;
   bpz[k]=pf1[1][k].bpz;
   yxwc[k]=pf1[1][k].yxwc;
   bjwc[k]=pf1[1][k].bjwc;
   ch[k]=pf1[1][k].ch;
 }
 sprintf(tj[1],"%10s", tjj[1].mc);
 *kk=end1[1];   //仓数量
}

//获取一号小称配料仓号和原料名称,理论值,提前量,允许误差和下料仓的数量
void GetPF12(char chhh[20][5], char ylname[20][20], float llz[20], float tql[20], float yxwc[20],float bjwc[20],float bpz[20], int ch[20], int *kk)
{
  int j;
  for(j=1;j<=end1[2];j++)
 {
   sprintf(ylname[j],"%10s", pf1[2][j].mc);
   sprintf(chhh[j],"(%02d)", pf1[2][j].ch);
   llz[j]=pf1[2][j].llz;
   tql[j]=pf1[2][j].tql;
   yxwc[j]=pf1[2][j].yxwc;
   bpz[j]=pf1[2][j].bpz;
   bjwc[j]=pf1[2][j].bjwc;
   ch[j]=pf1[2][j].ch;
 }
   *kk=end1[2];
}
//获取一号液体称配料仓号和原料名称,理论值,提前量,允许误差和下料仓的数量
void GetPF13(char chhh[20][5], char ylname[20][20], float llz[20], float tql[20], float yxwc[20],float bjwc[20],float bpz[20], int ch[20], int *kk)
{
  int i;
  for(i=1;i<=end1[3];i++)
 {
   sprintf(ylname[i],"%10s", pf1[3][i].mc);
   sprintf(chhh[i],"(%02d)", pf1[3][i].ch);
   llz[i]=pf1[3][i].llz;
   tql[i]=pf1[3][i].tql;
   yxwc[i]=pf1[3][i].yxwc;
   bpz[i]=pf1[3][i].bpz;
   bjwc[i]=pf1[3][i].bjwc;
   ch[i]=pf1[3][i].ch;
 }
   *kk=end1[3];
}
//////获取配料仓号和原料名称,理论值,提前量,允许误差和下料仓的数量
void GetPF21(char ylname[20][20], float llz[20], float tql[20], float yxwc[20],float bjwc[20],float bpz[20], int ch[20], char tj[2][20],int *kk)
{
  int m;
  for(m=1;m<=end2[1];m++)
 {
   sprintf(ylname[m],"%8s(%d)", pf2[1][m].mc, pf2[1][m].ch);
   llz[m]=pf2[1][m].llz;
   tql[m]=pf2[1][m].tql;
   yxwc[m]=pf2[1][m].yxwc;
   bpz[m]=pf2[1][m].bpz;
   bjwc[m]=pf2[1][m].bjwc;
   ch[m]=pf2[1][m].ch;
 }
   sprintf(tj[2],"%10s", tjj[2].mc);
   *kk=end2[1];
}
//================ 显示正在下料仓 ====================
void GetN1N2(int *n1, int *n2)
{
  *n1 = start1;
  *n2 = end1[1] + start2;
}
//====================================================
//说明:数值显示函数在wincc的全局脚本中写了,这里的函数并没有用到
//void dispdata2(char ylname[20][20], float llz[20], float xszl[20], int *kk)
//{
//  int k;
 
//  for(k=1;k<20;k++)
// {
//   strcpy(ylname[k]," ");
//   llz[k]=0;
//   xszl[k]=0;
// } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -