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

📄 thread.~cp

📁 数据采集
💻 ~CP
📖 第 1 页 / 共 5 页
字号:

#include <vcl.h>
#pragma hdrstop
#include <stdlib.h>
#include <dir.h>
#include <stdio.h>
#include <math.h>
#include <set>

#include "main.h"
#include "thread.h"
#include "global.h"

#define HIGH_BT 1200
#define ZHOU_JV 0

bool is_debug=true;  /////////////////////////////////////////////

//long bd2_ad_lr[5]={0,0,0,0,0}; // -->
//long bd2_ad_rl[5]={0,0,0,0,0}; // <--
//long bd2_wei[5]={0,0,0,0,0};

extern struct str_port {
        USHORT port_w1;
        USHORT port_w2;
        USHORT port_w3;
        USHORT port_w4;
        USHORT port_w5;
        USHORT port_w6;
        USHORT port_w7;
        USHORT port_w8;

        USHORT port_s1;
        USHORT port_s2;
        USHORT port_s3;
        USHORT port_s4;
        USHORT port_s5;
        USHORT port_s6;
        USHORT port_s7;
        USHORT port_s8;
        USHORT port_s9;
        USHORT port_s10;

        USHORT port_st;
        USHORT port_st2;
        USHORT port_st3;
        USHORT port_st4;
        USHORT port_kg;
}struct_port;


extern bool dial_up(unsigned long & dial_ul);
extern void hangup(unsigned long  dial_ul);
void CALLBACK ModemIrq(int port);
int CALLBACK xCallback(long sendlen, int buflen, char *buf, long flen);

unsigned long  dial_ul;
TGetdataThread *getDataThread=NULL;
TDonThread  *donThread=NULL;
TLwThread  *lwThread=NULL;
extern kc; //扣除lock_weight
extern cg;

bool flag_link=false;
int port_lw;
int baut;
//bool flag_dong_run=false;


bool upload_success;
extern FILE *prn ;


bool flag_test_ch=true; // for test 简配车号
int com_jpch=1;         // for test 简配车号

void __fastcall TDonThread::Execute()
{
  int ret;

  while(1){
    try{
      form_main->timer_chsb->Enabled=true;

      if(don_susp==TRUE){    // 退出动态称重时线程挂起
        Synchronize(show_end);
        this->Suspend();
      }

      Synchronize(show_start); //进入动态称重时线程从该点开始执行
      form_main->collect_jinzero(); // 静态清零,调试时便于观察零点的变化

      flag_don_runing=TRUE; //  donThread 运行,通知getdata开始采开关

      if(flag_test==0) mem_reset();// for test_one
      ce_cnt=0;
      //Synchronize(show_wait);

      try{

      if(bd.pb_mode==PB_WAVE){
        if(bd.hq_mode==HQ_2J1Z){
          ret = weight_don_2j1z(); // 2003-7-31
        }else if(bd.hq_mode==HQ_CPZGZ){
          ret = weight_don_cpzgz(); // 2003-8-20
        }else{
          ret = weight_don_wave();
        }
      }else ret = weight_don_kg();

      }catch(Exception& e){
        write_log((String("weight_don:")+e.Message+"\n").c_str());
        ret=EXIT_OK;
      }

      stop_wb();
      
      don_flag=FALSE; // 控制 getdata

      // 如果ce_cnt!=dlt.cnt表示不是衡车
      if(bd.hq_mode==HQ_CPZ24 && ce_cnt!=cpz_setup.cnt){
        if(FileExists(CPZDATABAK)){
          copyfile(CPZDATABAK,CPZDATA);  // copyfile(from,to)
        }else{
          DeleteFile(CPZDATA); // 表示第一趟车就不是衡车
        }
      }

      if(bd.use_status==USE_TS && offset_buf>0){
        Synchronize(show_ofst_time);
      }


      form_main->nosound();

      //Synchronize(show_end);
      Synchronize(create_savename_dbname_del_old);


      if(flag_test==1){ // test_one
        if(ce_cnt>0){
          Synchronize(new_db);
          Synchronize(refresh_dir); //refresh dir database
          if(bd.yh_mode==YH_TYGC){
            Synchronize(create_txt);
          }
          Synchronize(print);
        }
        be_ready_for_suspend();

        continue;
      }else{  // 实际使用
        save_zero_in_buf();
        Synchronize(save_wav); //save wave and kg
        if(ce_cnt>0){
          Synchronize(new_db);
          Synchronize(refresh_dir); //refresh dir database
          Synchronize(print);
          if(bd.yh_mode==YH_TYGC){
            Synchronize(create_txt);
          }
        }

        if(ret==EXIT_OK){
          if( ce_cnt==0 ){  // 只过了车头, 延时9秒,让台面可靠回零
            for(int i=0;i<900;i++){
              Sleep(10);
              if(don_susp==TRUE){be_ready_for_suspend(); break;}
            }
            continue;
          }else if( bd.if_auto==0 ){
            be_ready_for_suspend();
            continue;
          }else{
            for(int i=0;i<900;i++){
              Sleep(10); // 无人职守时 延时9秒,让台面可靠回零
              if(don_susp==TRUE){be_ready_for_suspend(); break;}
            }
            continue;
          }
        }

        else if(ret==EXIT_YC){
          if( bd.if_auto==0 ){
            be_ready_for_suspend();
            continue;
          }else{  // 压车,无人职守
            Synchronize(show_yc);
            for(int zero_cnt=0;zero_cnt<900;){ // 无人职守时,回零后延时9秒,让台面可靠回零
              if(now_ad>1500) zero_cnt=0; // Timer1Timer() 里赋值
              else zero_cnt++;
              Sleep(10);
              if(don_susp==TRUE){be_ready_for_suspend(); break;}
            }
            continue;
          }
        }

        else if(ret==EXIT_ESC){
          be_ready_for_suspend();
          continue;
        }
      }//else

    }catch(...){
      be_ready_for_suspend();
      Synchronize(show_error);
      //flag_dong_run=false;
      continue;
    }

  }// while(1)
}

void __fastcall TGetdataThread::Execute()
{
  if(bd.sj_mode==SJ_JKB) get_data_from_bus(); //数据来源:接口板
  else get_data_from_port();//数据来源:COM1,COM2,COM3,COM4
}

void __fastcall TGetdataThread::get_data_from_bus()
{
  DWORD ret_cnt,i;
  enum {N=19};// kg(1)+j(10)+z(8)
  USHORT buf_get_data[VXD_BUF_SIZE*N];//[VXD_BUF_SIZE*5];
  static long cnt_for_show;

  //if(bd.hq_mode==HQ_NEWCPZ||bd.hq_mode==HQ_CPZ24){
  while(1){
      if(this->Terminated==TRUE) return;
      if(DeviceIoControl(hVxd,GET_DATA,NULL,0,buf_get_data,0,&ret_cnt,NULL)==TRUE){
        if(ret_cnt<=0){ Sleep(1);continue;}
        else{
          if(ret_cnt>VXD_BUF_SIZE/2){
            write_log((String("!!!!!!!!rec_cnt:")+ret_cnt).c_str());
          }
          for(i=0;i<ret_cnt;i++){
            if(bd.hq_mode==HQ_BDG3){
              if(flag_dc==true){  // 短车
                jin_z1[jin_ofst]=buf_get_data[N*i];
                jin_z2[jin_ofst]=buf_get_data[N*i+1];
                jin_j1[jin_ofst]=buf_get_data[N*i+8];
                jin_j2[jin_ofst]=buf_get_data[N*i+9];
              }else{
                jin_z1[jin_ofst]=buf_get_data[N*i+1];
                jin_z2[jin_ofst]=buf_get_data[N*i+2];
                jin_j1[jin_ofst]=buf_get_data[N*i+9];
                jin_j2[jin_ofst]=buf_get_data[N*i+10];
              }
            }else if(bd.hq_mode==HQ_NEWBDG){
              jin_z1[jin_ofst]=buf_get_data[N*i];
              jin_z2[jin_ofst]=buf_get_data[N*i+1];
              jin_j1[jin_ofst]=buf_get_data[N*i+8];
              jin_j2[jin_ofst]=buf_get_data[N*i+9];
              jin_j3[jin_ofst]=(short)((short)32768-jin_j2[jin_ofst]);
              jin_j4[jin_ofst]=buf_get_data[N*i+10]; //jin_j3
            }else if(bd.hq_mode==HQ_CPZGZ){
              jin_z1[jin_ofst]=buf_get_data[N*i];
              jin_z2[jin_ofst]=buf_get_data[N*i+1];
              jin_j1[jin_ofst]=buf_get_data[N*i+8];
              jin_j2[jin_ofst]=buf_get_data[N*i+9];
              jin_j3[jin_ofst]=buf_get_data[N*i+10];
              jin_j4[jin_ofst]=buf_get_data[N*i+11]; //jin_j3
            }else{
              jin_z1[jin_ofst]=buf_get_data[N*i];
              jin_z2[jin_ofst]=buf_get_data[N*i+1];
              jin_z3[jin_ofst]=buf_get_data[N*i+2];
              jin_z4[jin_ofst]=buf_get_data[N*i+3];
              jin_z5[jin_ofst]=buf_get_data[N*i+4];
              jin_z6[jin_ofst]=buf_get_data[N*i+5];
              jin_z7[jin_ofst]=buf_get_data[N*i+6];
              jin_z8[jin_ofst]=buf_get_data[N*i+7];
              jin_j1[jin_ofst]=buf_get_data[N*i+8];
              jin_j2[jin_ofst]=buf_get_data[N*i+9];
              jin_j5[jin_ofst]=buf_get_data[N*i+10]; //jin_j3
              jin_j6[jin_ofst]=buf_get_data[N*i+11]; //jin_j4
              jin_j9[jin_ofst]=buf_get_data[N*i+12]; //7
              jin_j10[jin_ofst]=buf_get_data[N*i+13];//8
              jin_j13[jin_ofst]=buf_get_data[N*i+14];//11
              jin_j14[jin_ofst]=buf_get_data[N*i+15];//12
              jin_j15[jin_ofst]=buf_get_data[N*i+16];
              jin_j16[jin_ofst]=buf_get_data[N*i+17];

              jin_j3[jin_ofst]=(short)((short)32768-jin_j5[jin_ofst]);
              jin_j4[jin_ofst]=(short)((short)32768-jin_j6[jin_ofst]);
              jin_j7[jin_ofst]=(short)((short)32768-jin_j9[jin_ofst]);
              jin_j8[jin_ofst]=(short)((short)32768-jin_j10[jin_ofst]);
              jin_j11[jin_ofst]=(short)((short)32768-jin_j13[jin_ofst]);
              jin_j12[jin_ofst]=(short)((short)32768-jin_j14[jin_ofst]);
            }

            if(bd.pb_mode!=PB_WAVE && bd.pb_mode!=PB_JG2 &&
               bd.pb_mode!=PB_JG3 && bd.pb_mode!=PB_DY && flag_don_runing==TRUE)
               get_kg(buf_get_data[N*i+18]);

            if(don_flag==TRUE && flag_test==0){
              if(offset_buf==0){ // 2001-8-7加,将静态buf的数据加到动态buf的首部
                for(int i=jin_ofst;i<JIN_SIZE+jin_ofst;i++,offset_buf++){
                  int ii=i%JIN_SIZE;
                  *(p_buf_j1+offset_buf)=jin_j1[ii];*(p_buf_z1+offset_buf)=jin_z1[ii];
                  *(p_buf_j2+offset_buf)=jin_j2[ii];*(p_buf_z2+offset_buf)=jin_z2[ii];
                  *(p_buf_j3+offset_buf)=jin_j3[ii];*(p_buf_z3+offset_buf)=jin_z3[ii];
                  *(p_buf_j4+offset_buf)=jin_j4[ii];*(p_buf_z4+offset_buf)=jin_z4[ii];
                  *(p_buf_j5+offset_buf)=jin_j5[ii];
                  *(p_buf_j6+offset_buf)=jin_j6[ii];
                  *(p_buf_j7+offset_buf)=jin_j7[ii];
                  *(p_buf_j8+offset_buf)=jin_j8[ii];
                  if(bd.hq_mode==HQ_CPZ24){
                    *(p_buf_j9 +offset_buf)=jin_j9[ii]; *(p_buf_z5+offset_buf)=jin_z5[ii];
                    *(p_buf_j10+offset_buf)=jin_j10[ii];*(p_buf_z6+offset_buf)=jin_z6[ii];
                    *(p_buf_j11+offset_buf)=jin_j11[ii];*(p_buf_z7+offset_buf)=jin_z7[ii];
                    *(p_buf_j12+offset_buf)=jin_j12[ii];*(p_buf_z8+offset_buf)=jin_z8[ii];
                    *(p_buf_j13+offset_buf)=jin_j13[ii];
                    *(p_buf_j14+offset_buf)=jin_j14[ii];
                    *(p_buf_j15+offset_buf)=jin_j15[ii];
                    *(p_buf_j16+offset_buf)=jin_j16[ii];
                  } 
                }
              }
              *(p_buf_z1+offset_buf)=jin_z1[jin_ofst];
              *(p_buf_z2+offset_buf)=jin_z2[jin_ofst];
              *(p_buf_z3+offset_buf)=jin_z3[jin_ofst];
              *(p_buf_z4+offset_buf)=jin_z4[jin_ofst];
              *(p_buf_j1+offset_buf)=jin_j1[jin_ofst];
              *(p_buf_j2+offset_buf)=jin_j2[jin_ofst];
              *(p_buf_j3+offset_buf)=jin_j3[jin_ofst];
              *(p_buf_j4+offset_buf)=jin_j4[jin_ofst];
              *(p_buf_j5+offset_buf)=jin_j5[jin_ofst];
              *(p_buf_j6+offset_buf)=jin_j6[jin_ofst];
              *(p_buf_j7+offset_buf)=jin_j7[jin_ofst];
              *(p_buf_j8+offset_buf)=jin_j8[jin_ofst];
              if(bd.hq_mode==HQ_CPZ24){
                *(p_buf_z5+offset_buf)=jin_z5[jin_ofst];
                *(p_buf_z6+offset_buf)=jin_z6[jin_ofst];
                *(p_buf_z7+offset_buf)=jin_z7[jin_ofst];
                *(p_buf_z8+offset_buf)=jin_z8[jin_ofst];
                *(p_buf_j9+offset_buf)=jin_j9[jin_ofst];
                *(p_buf_j10+offset_buf)=jin_j10[jin_ofst];
                *(p_buf_j11+offset_buf)=jin_j11[jin_ofst];
                *(p_buf_j12+offset_buf)=jin_j12[jin_ofst];
                *(p_buf_j13+offset_buf)=jin_j13[jin_ofst];
                *(p_buf_j14+offset_buf)=jin_j14[jin_ofst];
                *(p_buf_j15+offset_buf)=jin_j15[jin_ofst];
                *(p_buf_j16+offset_buf)=jin_j16[jin_ofst];
              }

              for_fx(); // for方向, 注意该喊数

              if(offset_buf<BUF_SIZE-1) offset_buf++;
            }
            if(jin_ofst<JIN_SIZE-1) jin_ofst++;
            else{
              jin_ofst=0;
              if(flag_collect_over==false)flag_collect_over=true;
            }
          }//for

          if(bd.use_status!=USE_ZC){
            if(cnt_for_show>100){
              cnt_for_show=0;

⌨️ 快捷键说明

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