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

📄 main.cpp

📁 运动控制卡的详细开发资料
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#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 + -