📄 thread.~cp
字号:
#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 + -