📄 main.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include "adt8940.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define NORUN 0
#define RUNNING 1
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ifRel=false;//默认为绝对模式
g_WorkStatus=NORUN;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
objx->Text =10;
objy->Text =15;
objz->Text =10;
objw->Text =5;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::InitClick(TObject *Sender)
{
int result=adt8940_init_board();
if (result<=0)
{
Application->MessageBoxA("卡初始化失败!","提示");
return;
}
result=get_hardware_ver(0);
Hard->Caption ="硬件版本:V"+AnsiString(result);
Timer1->Enabled =true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
float pos[4];
float act[4];
float speed[4];
for (int i=0;i<4;i++)
{
pos[i]=get_logical_pos(i+1,0);
act[i]=get_fact_pos(i+1,0);
speed[i]=get_move_speed(i+1,0);
}
logx->Caption =(long)(pos[0]*1000)/1000.0;
logy->Caption =(long)(pos[1]*1000)/1000.0;
logz->Caption =(long)(pos[2]*1000)/1000.0;
logw->Caption =(long)(pos[3]*1000)/1000.0;
actx->Caption = (long)(act[0]*1000)/1000.0;
acty->Caption =(long)(act[1]*1000)/1000.0;
actz->Caption =(long)(act[2]*1000)/1000.0;
actw->Caption=(long)(act[3]*1000)/1000.0;
spdx->Caption =(long)(speed[0]*1000)/1000.0;
spdy->Caption =(long)(speed[1]*1000)/1000.0;
spdz->Caption =(long)(speed[2]*1000)/1000.0;
spdw->Caption =(long)(speed[3]*1000)/1000.0;
int IO[]={0,1,2,4,5,6,8,9,10,12,13,14};
int s[12];
for (int i=0;i<12;i++)
{
s[i]=get_input(IO[i]);
}
lmtx0->Checked =s[0]==0?true:false;
lmtx1->Checked =s[1]==0?true:false;
orgx->Checked =s[2]==0?true:false;
lmty0->Checked =s[3]==0?true:false;
lmty1->Checked =s[4]==0?true:false;
orgy->Checked =s[5]==0?true:false;
lmtz0->Checked =s[6]==0?true:false;
lmtz1->Checked =s[7]==0?true:false;
orgz->Checked =s[8]==0?true:false;
lmtw0->Checked =s[9]==0?true:false;
lmtw1->Checked =s[10]==0?true:false;
orgw->Checked =s[11]==0?true:false;
}
//---------------------------------------------------------------------------
void ActionFunction()
{
Application->ProcessMessages();
}
void __fastcall TForm1::HomeClick(TObject *Sender)
{
if(g_WorkStatus==RUNNING)return;
int result;
g_WorkStatus=RUNNING;
if (ChkX->Checked && ChkY->Checked && ChkZ->Checked && ChkW->Checked)
result=home4(ActionFunction);
else if(ChkX->Checked && ChkY->Checked && ChkZ->Checked)
result=home3(1,2,3,ActionFunction);
else if(ChkX->Checked && ChkY->Checked && ChkW->Checked)
result=home3(1,2,4,ActionFunction);
else if(ChkX->Checked && ChkZ->Checked && ChkW->Checked)
result=home3(1,3,4,ActionFunction);
else if(ChkY->Checked && ChkZ->Checked && ChkW->Checked)
result=home3(2,3,4,ActionFunction);
else if (ChkX->Checked && ChkY->Checked)
result=home2(1,2,ActionFunction);
else if (ChkX->Checked && ChkZ->Checked)
result=home2(1,3,ActionFunction);
else if (ChkX->Checked && ChkW->Checked)
result=home2(1,4,ActionFunction);
else if (ChkY->Checked && ChkZ->Checked)
result=home2(2,3,ActionFunction);
else if (ChkY->Checked && ChkW->Checked)
result=home2(2,4,ActionFunction);
else if (ChkZ->Checked && ChkW->Checked)
result=home2(3,4,ActionFunction);
else if (ChkX->Checked)
result=home1(1,ActionFunction);
else if (ChkY->Checked)
result=home1(2,ActionFunction);
else if (ChkZ->Checked)
result=home1(3,ActionFunction);
else if (ChkW->Checked)
result=home1(4,ActionFunction);
else
Application->MessageBoxA("请先选定轴!","提示");
if (result==-2)
Application->MessageBoxA("未找到原点信号,回原点失败!","提示");
else if (result==-1)
Application->MessageBoxA("有禁止轴参与运动","提示");
else if (result==0)
Application->MessageBoxA("人为终止","提示");
else if (result==1)
Application->MessageBoxA("回原点成功","提示");
g_WorkStatus=NORUN;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StopClick(TObject *Sender)
{
all_stop(0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PmoveClick(TObject *Sender)
{
if(g_WorkStatus==RUNNING)return;
int result;
float cood[4];
cood[0]=StrToFloat(objx->Text);
cood[1]=StrToFloat(objy->Text);
cood[2]=StrToFloat(objz->Text);
cood[3]=StrToFloat(objw->Text);
g_WorkStatus=RUNNING;
if (ChkX->Checked && ChkY->Checked && ChkZ->Checked && ChkW->Checked)
result=work_move4(cood[0],cood[1],cood[2],cood[3],ifRel?0:1,0,ActionFunction);
else if(ChkX->Checked && ChkY->Checked && ChkZ->Checked)
result=work_move3(1,cood[0],2,cood[1],3,cood[2],ifRel?0:1,0,ActionFunction);
else if(ChkX->Checked && ChkY->Checked && ChkW->Checked)
result=work_move3(1,cood[0],2,cood[1],4,cood[3],ifRel?0:1,0,ActionFunction);
else if(ChkX->Checked && ChkZ->Checked && ChkW->Checked)
result=work_move3(1,cood[0],3,cood[2],4,cood[3],ifRel?0:1,0,ActionFunction);
else if(ChkY->Checked && ChkZ->Checked && ChkW->Checked)
result=work_move3(2,cood[1],3,cood[2],4,cood[3],ifRel?0:1,0,ActionFunction);
else if (ChkX->Checked && ChkY->Checked)
result=work_move2(1,cood[0],2,cood[1],ifRel?0:1,0,ActionFunction);
else if (ChkX->Checked && ChkZ->Checked)
result=work_move2(1,cood[0],3,cood[2],ifRel?0:1,0,ActionFunction);
else if (ChkX->Checked && ChkW->Checked)
result=work_move2(1,cood[0],4,cood[3],ifRel?0:1,0,ActionFunction);
else if (ChkY->Checked && ChkZ->Checked)
result=work_move2(2,cood[1],3,cood[2],ifRel?0:1,0,ActionFunction);
else if (ChkY->Checked && ChkW->Checked)
result=work_move2(2,cood[1],4,cood[3],ifRel?0:1,0,ActionFunction);
else if (ChkZ->Checked && ChkW->Checked)
result=work_move2(3,cood[2],4,cood[3],ifRel?0:1,0,ActionFunction);
else if (ChkX->Checked)
result=work_move1(1,cood[0],ifRel?0:1,0,ActionFunction);
else if (ChkY->Checked)
result=work_move1(2,cood[1],ifRel?0:1,0,ActionFunction);
else if (ChkZ->Checked)
result=work_move1(3,cood[2],ifRel?0:1,0,ActionFunction);
else if (ChkW->Checked)
result=work_move1(4,cood[3],ifRel?0:1,0,ActionFunction);
else
Application->MessageBoxA("请先选定轴!","提示");
if (result==-3)
Application->MessageBoxA("限位报警终止!","提示");
else if (result==-2)
Application->MessageBoxA("软限位报警,回原点终止!","提示");
else if (result==-1)
Application->MessageBoxA("有禁止轴参与运动","提示");
else if (result==0)
Application->MessageBoxA("人为终止","提示");
else if (result==1)
Application->MessageBoxA("驱动成功","提示");
g_WorkStatus=NORUN;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ModeClick(TObject *Sender)
{
ifRel=ifRel?false:true;
Mode->Caption =ifRel?"相对模式":"绝对模式" ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::InpClick(TObject *Sender)
{
if(g_WorkStatus==RUNNING)return;
int result;
float cood[4];
cood[0]=StrToFloat(objx->Text);
cood[1]=StrToFloat(objy->Text);
cood[2]=StrToFloat(objz->Text);
cood[3]=StrToFloat(objw->Text);
g_WorkStatus=RUNNING;
if (ChkX->Checked && ChkY->Checked && ChkZ->Checked && ChkW->Checked)
result=work_inp4(cood[0],cood[1],cood[2],cood[3],ifRel?0:1,0,ActionFunction);
else if (ChkX->Checked && ChkY->Checked && ChkZ->Checked)
result=work_inp3(1,cood[0],2,cood[1],3,cood[2],ifRel?0:1,0,ActionFunction);
else if (ChkX->Checked && ChkY->Checked && ChkW->Checked)
result=work_inp3(1,cood[0],2,cood[1],4,cood[3],ifRel?0:1,0,ActionFunction);
else if (ChkX->Checked && ChkZ->Checked && ChkW->Checked)
result=work_inp3(1,cood[0],3,cood[2],4,cood[3],ifRel?0:1,0,ActionFunction);
else if (ChkY->Checked && ChkZ->Checked && ChkW->Checked)
result=work_inp3(2,cood[1],3,cood[2],4,cood[3],ifRel?0:1,0,ActionFunction);
else if (ChkX->Checked && ChkY->Checked)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -