📄 main.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include "draw.h"
#include "bd.h"
#include "query.h"
#include "test_com.h"
#include "password.h"
#include "del_db.h"
#include "thread.h"
#include "jin.h"
#include "print.h"
#include "cpzsetup.h"
#include "debug.h"
#include "memocpz.h"
#include <fstream.h>
#include <stdlib.h>
#include <dir.h>
#include <stdio.h>
#include <process.h>
#include <Classes.hpp>
#include <Filectrl.hpp> // DirectoryExists()
//#include <Printers.hpp>
#include "global.h" // it is the last one *.h file
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tform_main *form_main;
extern TGetdataThread *getDataThread;
extern TDonThread *donThread;
extern TLwThread *lwThread;
//extern bool flag_dong_run;
int dir_no;
int kc=0 ; // 扣除lock_weight
int cg=1; // c_ce,g_ce
bool flag_enter_forjg=false; //for YH_JG
bool flag_hcdc_zj=false;
extern bool upload_success;
int port_bx=2; // port_保险
void CALLBACK ModemInt(int port_bx);
FILE *prn=NULL ;
extern bool is_debug;
extern bool flag_test_ch; // for test 简配车号
extern int com_jpch; // for test 简配车号
//---------------------------------------------------------------------------
__fastcall Tform_main::Tform_main(TComponent* Owner)
: TForm(Owner)
{
Application->OnMessage=ProcessMessage;
}
//---------------------------------------------------------------------------
void __fastcall Tform_main::exitClick(TObject *Sender)
{
TMsgDlgButtons buttons;
buttons<<mbYes;
buttons<<mbNo;
if(MessageDlg(" 退 出 吗 ? ",mtConfirmation,buttons,0)==mrNo) return;
if(dir->Active==true){ dir->Edit(); dir->Post();}
if(data->Active==true){ data->Edit(); data->Post();}
if(table_name->Active==true){ table_name->Edit(); table_name->Post();}
if(table_send->Active==true){ table_send->Edit(); table_send->Post();}
if(table_rec->Active==true){ table_rec->Edit(); table_rec->Post();}
nosound();
getDataThread->Terminate();
Sleep(200);
CloseHandle(hVxd);
dir->Active=FALSE;
data->Active=FALSE;
//write_log("exit...\r\n");
Sleep(100);
PostQuitMessage(0);
}
//---------------------------------------------------------------------------
void __fastcall Tform_main::FormCreate(TObject *Sender)
{
randomize();
char title[200];
Color=clWindow;
AutoScroll=false;
init_jin_mem();
if(alloc_mem()==FALSE)
Application->MessageBox(" 内 存 不 够 ", NULL, MB_OK);
else mem_reset();
//if(read_bd()==FALSE) //move to gdh.cpp
// Application->MessageBox(" 没 有 设 置 数 据 ", NULL, MB_OK);
strcpy(title,bd.name);
//if(bd.yh_mode>=YH_HH&&bd.yh_mode<=2*YH_HH)
// sprintf(title,"%s轨道衡(华横利德公司制造)",bd.name);
//else
sprintf(title,"%s(武汉利德公司制造)",bd.name);
form_main->Caption=title;
zero_jin=bd.zero;
if(!DirectoryExists(DB)) CreateDirectory(DB,NULL);
if(!DirectoryExists(WAVEFILE)) CreateDirectory(WAVEFILE,NULL);
if(!DirectoryExists(LW_PATH)) CreateDirectory(LW_PATH,NULL);
if(!DirectoryExists(BB_PATH)) CreateDirectory(BB_PATH,NULL);
if(!DirectoryExists(CPZDATA_PATH)) CreateDirectory(CPZDATA_PATH,NULL);
db_init();
//debug=FALSE;
hdc_main=GetDC(form_main->Handle);
lock_flag=false;
if(bd.sj_mode==SJ_JKB) TDonThread::load_vxd();
else TDonThread::open_port();
create_getdatathread();
don_susp=TRUE; // suspend donthread
create_donthread();
create_lwthread();
don_flag=FALSE;
flag_collect=1; //for test_com and getdatathread
flag_test=0; //for test_one
clear_input_cehao();
OpenDialog1->InitialDir= WAVEFILE;
flag_collect_over=false; // 保证静态缓冲区里都是有效数据
/*
for(int i=0;i<40;i++){ // 静态清零
if(flag_collect_over==true){ ClearClick(NULL);break;}
Sleep(100);
} */
//if(bd.if_auto==1) StartDonClick(NULL); // 第一次 dongtai need 手动
//write_log("start...\r\n");
if(bd.sj_mode==SJ_JKB) xps=540 ; // 接口板每秒数据量
else if(bd.sj_mode>10) xps=170; // com口:19200 bps
else xps=480; // com口:57600 bps
g_hEvent=CreateEvent(NULL,false,false,NULL);
flag_dc=false;
if(flag_dc==false){
Label4->Font->Color=clBlue;
Label4->Caption="长 车";
}else{
Label4->Font->Color=clRed;
Label4->Caption="短 车";
}
if( bd.hq_mode==HQ_CPZ24&&
(bd.yh_mode==YH_JAXA||bd.yh_mode==YH_JAXB||bd.yh_mode==YH_JAXC)){
if(bd.use_status==USE_ZC){ StartDonClick(NULL);} // 开机自动进入称重
if(!read_cpz_setup(CPZSETUP)){
err("read_cpz_setup failed");
init_cpz_setup();
write_cpz_setup(); // 写默认值
}
lock_flag=cpz_setup.lock_flag;
}
if((prn=fopen("PRN","wb"))==NULL){err("open prn failed");}
init_jpch();
}
void __fastcall Tform_main::init_jpch()
{
// 初始化com
sio_close(com_jpch);
if( sio_open(com_jpch) != SIO_OK ){
return ;
}
if (sio_ioctl (com_jpch, B9600, BIT_8 |P_NONE | STOP_1 ) != SIO_OK){
return ;
}
}
/* DB9 接线:
2 -- RXD 4 -- DTR 7 -- RTS 5 -- GND
3 -- TXD 6 -- DSR 8 -- CTS
*/
/*
if( sio_open (port_bx) != SIO_OK ) err(" open port_bx failed ");
if( sio_DTR(port_bx,0)!=SIO_OK ) err(" clr DTR failed ");
if( sio_RTS(port_bx,1)!=SIO_OK ) err(" set RTS failed ");
if( sio_modem_irq( port_bx, ModemInt )!= SIO_OK ) err(" set modem irq RTS failed ");
*/
void __fastcall Tform_main::init_jin_mem()
{
jin_j[0] =jin_j1; jin_j[1] =jin_j2;
jin_j[2] =jin_j3; jin_j[3] =jin_j4;
jin_j[4] =jin_j5; jin_j[5] =jin_j6;
jin_j[6] =jin_j7; jin_j[7] =jin_j8;
jin_j[8] =jin_j9; jin_j[9] =jin_j10;
jin_j[10] =jin_j11; jin_j[11] =jin_j12;
jin_j[12] =jin_j13; jin_j[13] =jin_j14;
jin_j[14] =jin_j15; jin_j[15] =jin_j16;
jin_z[0] =jin_z1; jin_z[1] =jin_z2;
jin_z[2] =jin_z3; jin_z[3] =jin_z4;
jin_z[4] =jin_z5; jin_z[5] =jin_z6;
jin_z[6] =jin_z7; jin_z[7] =jin_z8;
}
void __fastcall Tform_main::write_winhandle()
{
/* // failed
FILE *fd;
struct{
HWND hwnd;
DWORD threadid;
}hwnd_id;
hwnd_id.hwnd=form_main->Handle;
hwnd_id.threadid=GetCurrentThreadId();
if((fd=fopen(WINHANDLE,"wb"))!=NULL){
fwrite(&hwnd_id,sizeof(hwnd_id),1,fd);
fclose(fd);
}
*/
}
void __fastcall Tform_main::show_mode()
{
// 显示格式
char str[500];
if(bd.use_status==USE_ZC || bd.use_status==USE_JH) Canvas->Font->Size=14;
else Canvas->Font->Size=10;
Canvas->Font->Color=clBlue;
if(bd.use_status==USE_ZC){Bevel3->Visible=true;Bevel4->Visible=true;}
else{ Bevel3->Visible=false;Bevel4->Visible=false;}
switch(bd.use_status){
case USE_TS: //调试
if(bd.hq_mode==HQ_CPZ){ //超偏载
sprintf(str," 序 内1 内2 内3 内4 外1 外2 外3 外4 AD值 重量 档比 速度 偏重差 偏载率");
}else if(bd.hq_mode==HQ_NEWCPZ||bd.hq_mode==HQ_CPZ24||bd.hq_mode==HQ_CPZGZ){
sprintf(str," 序 内1 内2 内3 内4 外1 外2 外3 外4 前架y 后架y AD值 总重 速度 档比(x1,x2,x3)");
}else{
sprintf(str,"%s%s%s"," 序 AD值 重量 速度 档轴比 方向 " ,
" 序 AD值 重量 速度 档轴比 方向 " ,
" 序 AD值 重量 速度 档轴比 方向 " );
}
break;
case USE_CPZJH: //超偏载检衡
sprintf(str," 序 内1 内2 内3 内4 外1 外2 外3 外4 前架y 后架y 整车y 前架重 后架重 偏重差 总重 速度");
break;
case USE_JH:
sprintf(str," 序 重量 速度 ");
break;
case USE_ZC:
default:
sprintf(str,"%s%s%s%s",
" 序 重量 速度 "," 序 重量 速度 ",
" 序 重量 速度 "," 序 重量 速度 " );
break;
}
Canvas->TextOut(8,8,str);
// 数据库data显示方式
if((bd.hq_mode!=HQ_CPZ24 && bd.hq_mode!=HQ_CPZ )|| bd.yh_mode==YH_BJDTM) //不显示n1,n2,n3,n4,w1,w2,w3,w4
for(int i=9;i<18;i++) grid_data->Columns->Items[i]->Visible=FALSE;
else
for(int i=9;i<18;i++) grid_data->Columns->Items[i]->Visible=TRUE;
// 按钮的显示方式
if(bd.pb_mode==PB_KP) start_jin->Visible=true; //准静态
else start_jin->Visible=false;
if(bd.use_status==USE_TS) del->Visible=true; // del
else del->Visible=false;
if(bd.use_status==USE_TS){
Maxmin ->Visible=true;
Test_one ->Visible=true;
Draw ->Visible=true;
send->Visible=true;
Qtest->Visible=true;
OpenData->Visible=true;
del->Visible=true;
}else if(bd.use_status==USE_CPZJH||bd.use_status==USE_JH){
Maxmin ->Visible=false;
Test_one ->Visible=false;
Draw ->Visible=true;
send->Visible=false;
Qtest->Visible=false;
OpenData->Visible=false;
del->Visible=false;
}else{
Maxmin ->Visible=false;
Test_one ->Visible=false;
Draw ->Visible=false;
send->Visible=false;
Qtest->Visible=false;
OpenData->Visible=false;
del->Visible=false;
}
test_com ->Visible=true;
if(bd.yh_mode==YH_ZD) get_cehao->Visible=true;
else get_cehao->Visible=false;
if(bd.lw==LW_COM) Label2->Visible=true;
else Label2->Visible=false;
if(bd.hq_mode==HQ_BDG3) Label4->Visible=true;
else Label4->Visible=false;
if(bd.use_status==USE_ZC){
dataMao->DisplayFormat="#.00";
dataN1->DisplayFormat="#.00";
dataN2->DisplayFormat="#.00";
dataN3->DisplayFormat="#.00";
dataN4->DisplayFormat="#.00";
dataW1->DisplayFormat="#.00";
dataW2->DisplayFormat="#.00";
dataW3->DisplayFormat="#.00";
dataW4->DisplayFormat="#.00";
}else{
dataMao->DisplayFormat="#.000";
dataN1->DisplayFormat="#.000";
dataN2->DisplayFormat="#.000";
dataN3->DisplayFormat="#.000";
dataN4->DisplayFormat="#.000";
dataW1->DisplayFormat="#.000";
dataW2->DisplayFormat="#.000";
dataW3->DisplayFormat="#.000";
dataW4->DisplayFormat="#.000";
}
}
void __fastcall Tform_main::db_init()
{
try{
dir->Active = false;
dir->DatabaseName = DB;
dir->TableType = ttParadox;
dir->TableName = "dir.db";
if(dir->Exists==FALSE){ // dir.db
create_dirdb();
TDonThread::create_db("data");
}
dir->Active=TRUE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -