📄 main.cpp
字号:
//检测通道
bool flag_bh=false; // 变化
for(int i=1;i<JIN_SIZE;i++){
if( jin_j1[0]!=jin_j1[i] || jin_j2[0]!=jin_j2[i] ||
jin_z1[0]!=jin_z1[i] || jin_z2[0]!=jin_z2[i] ){
flag_bh=true;
break;
}
}
static long bak_ofst=0,bb_cnt; // ofst不变 对数据来自串口
if(bak_ofst!=jin_ofst){
bb_cnt=0;
bak_ofst=jin_ofst;
}else bb_cnt++;
if( bd.sj_mode!=0){
if(bb_cnt>=2 ){
wei_for_see->Font->Color=clRed;
wei_for_see->Font->Size=14;
wei_for_see->Caption="请开采集仪";
}
}else{
if(bb_cnt>=2){
wei_for_see->Font->Color=clRed;
wei_for_see->Font->Size=14;
wei_for_see->Caption="没有中断";
}else if(flag_bh==false){ // 变化
wei_for_see->Font->Color=clRed;
wei_for_see->Font->Size=14;
wei_for_see->Caption= "请开采集仪" ;//+IntToStr((int)bb_cnt);
}
}
if(bd.hq_mode==HQ_2J1Z && bd.pb_mode==PB_WAVE){
Label5->Caption=cnt_exit;
}
}
//---------------------------------------------------------------------------
void __fastcall Tform_main::create_getdatathread()
{
getDataThread=new TGetdataThread;
getDataThread->FreeOnTerminate=TRUE;
if(getDataThread==NULL)
Application->MessageBox("create getdatathread failed",NULL,MB_OK);
}
void __fastcall Tform_main::create_donthread()
{
donThread=new TDonThread;
donThread->FreeOnTerminate=TRUE;
if(donThread==NULL)
Application->MessageBox("create donthread failed",NULL,MB_OK);
}
void __fastcall Tform_main::create_lwthread()
{
lwThread=new TLwThread;
lwThread->FreeOnTerminate=TRUE;
if(lwThread==NULL)
Application->MessageBox("create lwthread failed",NULL,MB_OK);
}
void __fastcall Tform_main::StartDonClick(TObject *Sender)
{
if(don_susp==true){
collect_jinzero(); // 静态清零,调试时便于观察零点的变化
flag_test=0; // it is not test
don_susp=FALSE;
donThread->Resume();
StartDon->Caption="退出动态称重Esc";
//write_log("进入动态称重\n");
}else{
StartDon->Caption="进入动态称重 F5";
don_susp=true;
//write_log("手动退出动态称重\n");
/*
if(bd.yh_mode==YH_375){
bd.hq_mode=HQ_CPZ24;
} */
}
}
/*
void __fastcall Tform_main::EndDonClick(TObject *Sender)
{
don_susp=TRUE;
} */
//---------------------------------------------------------------------------
void __fastcall Tform_main::clearClick(TObject *Sender)
{
// err(IntToStr((int)random(30)).c_str());
// return;
char msg[100];
collect_jinzero();
if(bd.hq_mode==HQ_STMBDG || bd.hq_mode==HQ_STMDG||bd.hq_mode==HQ_BDG3|| bd.hq_mode==HQ_NEWBDG){
sprintf(msg," 台面1零点AD值 = %ld 台面2零点AD值 = %ld ",zero_jin1,zero_jin2);
}else{
sprintf(msg," 零点AD值 = %ld ",zero_jin);
}
Application->MessageBox(msg," ",MB_OK);
}
//---------------------------------------------------------------------------
void __fastcall Tform_main::collect_jinzero()
{
long now_ad_j1,now_ad_z1,now_ad_j2,now_ad_z2;
if(!flag_collect_over) return; //静态缓冲区里不都是有效数据,不清零
get_ad_jin(&now_ad_j1,&now_ad_j2,&now_ad_z1,&now_ad_z2);
if(bd.hq_mode==HQ_2J1Z){
zero_jin=(now_ad_j1+now_ad_j2)/2*bd.k_j_z +now_ad_z1;
}else if(bd.hq_mode==HQ_DG){
if(bd.fx==1 && bd.pb_mode==PB_WAVE)//wave判别方向需2个重力通道
zero_jin=(now_ad_z1+now_ad_z2)/2;
else
zero_jin=now_ad_z1;
}else if(bd.hq_mode==HQ_BDG){
if(bd.fx==1 && bd.pb_mode==PB_WAVE)//wave判别方向需2个重力通道
zero_jin=now_ad_j1*bd.k_j_z +(now_ad_z1+now_ad_z2)/2;
else
zero_jin=now_ad_j1*bd.k_j_z +now_ad_z1;
}else if(bd.hq_mode==HQ_CPZ){
zero_jin=((now_ad_j1+now_ad_j2)*bd.k_j_z+now_ad_z1+now_ad_z2)/2;
}else if(bd.hq_mode==HQ_STMDG){
zero_jin1=now_ad_z1;
zero_jin2=now_ad_z2;
zero_jin=zero_jin1+zero_jin2;
}else if(bd.hq_mode==HQ_STMBDG||bd.hq_mode==HQ_BDG3){
zero_jin1=now_ad_j1*bd.k_j_z + now_ad_z1;
zero_jin2=now_ad_j2*bd.k_j_z + now_ad_z2;
zero_jin=zero_jin1+zero_jin2;
}else if(bd.hq_mode==HQ_NEWCPZ){
long now_ad_j1,now_ad_z1;
long now_ad_j2,now_ad_z2;
long now_ad_j3,now_ad_z3;
long now_ad_j4,now_ad_z4;
long now_ad_j5;
long now_ad_j6;
long now_ad_j7;
long now_ad_j8;
get_ad_jin_newcpz(now_ad_j1,now_ad_j2,now_ad_z1,now_ad_z2,
now_ad_j3,now_ad_j4,now_ad_z3,now_ad_z4,
now_ad_j5,now_ad_j6,now_ad_j7,now_ad_j8 );
zero_jin=( now_ad_j1+now_ad_j2+now_ad_j3+now_ad_j4+
now_ad_j5+now_ad_j6+now_ad_j7+now_ad_j8 )/8*bd.k_j_z +
( now_ad_z1+now_ad_z2+now_ad_z3+now_ad_z4)/4;
}else if(bd.hq_mode==HQ_CPZ24){
long adj[16],adz[8];
long tmp_j,tmp_z,i;
get_ad_jin_cpz24(adj,adz);
for(i=0,tmp_j=0;i<16;i++) tmp_j+=adj[i];
for(i=0,tmp_z=0;i<8; i++) tmp_z+=adz[i];
zero_jin=tmp_j*bd.k_j_z/16+tmp_z/8;
}else if(bd.hq_mode==HQ_CPZGZ){
long adj[16],adz[8];
long tmp_j,tmp_z,i;
get_ad_jin_cpz24(adj,adz);
for(i=0,tmp_j=0;i<4;i++) tmp_j+=adj[i];
for(i=0,tmp_z=0;i<2; i++) tmp_z+=adz[i];
zero_jin=tmp_j*bd.k_j_z/2+tmp_z;
}else if(bd.hq_mode==HQ_NEWBDG){
long adj[16],adz[8];
get_ad_jin_cpz24(adj,adz);
zero_jin1=(adj[0]+adj[1])/2*bd.k_j_z + now_ad_z1;
zero_jin2=(adj[2]+adj[3])/2*bd.k_j_z + now_ad_z2;
zero_jin=zero_jin1+zero_jin2;
}else{err("collect_jin_zero()");}
}
void __fastcall Tform_main::setupClick(TObject *Sender)
{
form_password->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall Tform_main::FormHide(TObject *Sender)
{
Timer1->Enabled=FALSE;
form_main_is_show=FALSE;
dir->DisableConstraints(); // 为提高速度
data->DisableConstraints();
s_data->Enabled=false;
s_dir->Enabled=false;
if(dir->Active==true) dir->Refresh();
if(data->Active==true) data->Refresh();
dir->Close();
dir->Open();
dir->RecNo=dir_no;
data->Close(); // be sure data is refresh
if(data->Exists==true){ dataopen();}
}
//---------------------------------------------------------------------------
void __fastcall Tform_main::FormShow(TObject *Sender)
{
flag_collect=1; //for getdata_thread
Timer1->Enabled=TRUE;
form_main_is_show=TRUE;
dir->EnableConstraints();
data->EnableConstraints();
s_data->Enabled=true;
s_dir->Enabled=true;
dir->Open();
dir->RecNo=dir_no;
try{
data->Active=false; // important if change tablename
data->TableName=dirTm->Value;
if(data->Exists==TRUE){ dataopen();}
}catch(...){
Application->MessageBox(" when main show, data open error "," ",MB_OK);
}
}
//---------------------------------------------------------------------------
void __fastcall Tform_main::PrintClick(TObject *Sender)
{
if(get_version()>4) return; // win98=4 win2000=5,winxp=5
//FILE *prn ;
char title[60];
double total_mao=0.0,total_jin=0.0,total_piao=0.0,total_yq=0.0;
if( bd.use_status==USE_CPZJH ){
TMsgDlgButtons buttons;
buttons<<mbYes;
buttons<<mbNo;
if(MessageDlg(" 打 印 吗 ? ",mtConfirmation,buttons,0)==mrNo) return;
//if((prn=fopen("PRN","wb"))==NULL){ err("open prn failed");return ;}
if(prn==NULL){ err("open prn failed");return ;}
fprintf(prn," %04s-%02s-%02s %02s:%02s:%02s \n",
dirTm->Value.SubString(1,4).c_str(),
dirTm->Value.SubString(5,2).c_str(),
dirTm->Value.SubString(7,2).c_str(),
dirTm->Value.SubString(10,2).c_str(),
dirTm->Value.SubString(12,2).c_str(),
dirTm->Value.SubString(14,2).c_str() );
fprintf(prn,"-------------------------------------------------\n");
for(data->First();data->Eof!=TRUE;data->Next()){
int nn= data->FindField("No")->AsInteger;
int n1= (int)(data->FindField("N1")->Value*(double)1000.0);
int n2= (int)(data->FindField("N2")->Value*(double)1000.0);
int n3= (int)(data->FindField("N3")->Value*(double)1000.0);
int n4= (int)(data->FindField("N4")->Value*(double)1000.0);
int w1= (int)(data->FindField("W1")->Value*(double)1000.0);
int w2= (int)(data->FindField("W2")->Value*(double)1000.0);
int w3= (int)(data->FindField("W3")->Value*(double)1000.0);
int w4= (int)(data->FindField("W4")->Value*(double)1000.0);
int wei_q= dirDirect->Value=="-->" ? (w3+w4+n3+n4):(w1+w2+n1+n2);
int wei_h= dirDirect->Value=="-->" ? (w1+w2+n1+n2):(w3+w4+n3+n4);
int pzc = wei_q - wei_h ;
int wei = (int)(data->FindField("Mao")->Value*(double)1000.0);//wei_q + wei_h ;
int spd = data->FindField("Spd")->AsInteger ;
float y1= dirDirect->Value=="-->" ? (float(w1-n1)*100.0)/(w1+n1) : (float(n1-w1)*100.0)/(n1+w1);
float y2= dirDirect->Value=="-->" ? (float(w2-n2)*100.0)/(w2+n2) : (float(n2-w2)*100.0)/(n2+w2);
float y3= dirDirect->Value=="-->" ? (float(w3-n3)*100.0)/(w3+n3) : (float(n3-w3)*100.0)/(n3+w3);
float y4= dirDirect->Value=="-->" ? (float(w4-n4)*100.0)/(w4+n4) : (float(n4-w4)*100.0)/(n4+w4);
float yq= dirDirect->Value=="-->" ? (float(w3+w4-n3-n4)*100.0)/(w3+w4+n3+n4) :
(float(n1+n2-w1-w2)*100.0)/(n1+n2+w1+w2) ;
float yh= dirDirect->Value=="-->" ? (float(w1+w2-n1-n2)*100.0)/(w1+w2+n1+n2) :
(float(n3+n4-w3-w4)*100.0)/(n3+n4+w3+w4) ;
float yzc= dirDirect->Value=="-->" ? (float(w1+w2+w3+w4-n1-n2-n3-n4)*100.0)/wei :
(float(n1+n2+n3+n4-w1-w2-w3-w4)*100.0)/wei ;
int zuo1,zuo2,zuo3,zuo4;
int you1,you2,you3,you4;
//int qin,hou;
double pzl1,pzl2,pzl3,pzl4;
if(dirDirect->Value=="-->"){
zuo1=w4; you1=n4; pzl1=y4;
zuo2=w3; you2=n3; pzl2=y3;
zuo3=w2; you3=n2; pzl3=y2;
zuo4=w1; you4=n1; pzl4=y1;
}else{
zuo1=n1; you1=w1; pzl1=y1;
zuo2=n2; you2=w2; pzl2=y2;
zuo3=n3; you3=w3; pzl3=y3;
zuo4=n4; you4=w4; pzl4=y4;
}
//qin=zuo1+zuo2+you1+you2;
//hou=zuo3+zuo4+you3+you4;
fprintf(prn,"序号: %d 总重: %d kg 速度:%d km/h\n",
nn,wei,spd);
fprintf(prn,"左轮重1: %d kg 左轮重2: %d kg 左轮重3: %d kg 左轮重4: %d kg\n",
zuo1,zuo2,zuo3,zuo4);
fprintf(prn,"右轮重1: %d kg 右轮重2: %d kg 右轮重3: %d kg 右轮重4: %d kg\n",
you1,you2,you3,you4);
fprintf(prn,"轴1 偏载率:%7.2f%c 轴2 偏载率:%7.2f%c 轴3 偏载率:%7.2f%c 轴4偏载率:%7.2f%c \n",
pzl1,'%',pzl2,'%',pzl3,'%',pzl4,'%');
fprintf(prn,"前架偏载率:%7.2f%c 后架偏载率:%7.2f%c 整车偏载率:%7.2f%c \n",
yq,'%',yh,'%',yzc,'%');
fprintf(prn,"前架重: %d kg 后架重: %d kg 前后重量差: %d kg 重心偏差: %d mm \n",
wei_q,wei_h,pzc,(int)(yzc*746.5/100));
if(abs(pzc)>=bd.zpz*1000 || yzc*746.5/100>=bd.hpz){
fprintf(prn,"偏载报警!!\n");
}
if(dataYq->Value>bd.cz){
fprintf(prn,"超载报警!!\n");
}
fprintf(prn,"\n");
}
fprintf(prn,"-------------------------------------------------\n");
fprintf(prn,"\n\n\n");
//fclose(prn);
return;
}
if(bd.yh_mode==YH_WG81){ // 武钢81#
if(data->Active==TRUE){
strcpy(title,bd.name);
strcat(title,"轨道衡过衡报告单");
// if((prn=fopen("PRN","wb"))!=NULL){
if(prn!=NULL){
fprintf(prn,"%60s\n\n",title);
fprintf(prn,"%10s%4s%10s%8s%8s%8s%12s%6s\n"," ","序号","车号",
"毛重","皮重","净重","货名","速度");
fprintf(prn,"%10s------------------------------------------------------------\n"," ");
for(data->First();data->Eof!=TRUE;data->Next()){
fprintf(prn,"%10s%4s%10s%8.02f%8.02f%8.02f%12s%6d\n"," ",
data->FindField("No")->AsString.c_str(),
data->FindField("Cehao")->AsString.c_str(),
data->FindField("Mao")->AsFloat,
data->FindField("Pi")->AsFloat,
data->FindField("Jin")->AsFloat,
data->FindField("Name")->AsString.c_str(),
data->FindField("Spd")->AsInteger );
total_mao+=(double)(data->FindField("Mao")->AsFloat) ;
total_jin+=(double)(data->FindField("Jin")->AsFloat) ;
}
fprintf(prn,"%10s------------------------------------------------------------\n"," ");
fprintf(prn,"%10s日期_时间:%s 方向:%4s \n%10s毛重合计:%-8.2f 净重合计:%-8.2f 单位:吨\n ",
"",data->TableName.c_str(),
dir->FindField("Direct")->AsString.c_str() ,
"",total_mao,total_jin);
fprintf(prn,"\n\n\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -