📄 comm.cpp
字号:
{
// 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 + -