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

📄 control.~cpp

📁 c++builder编写的机器人参数传递上位机软件.
💻 ~CPP
📖 第 1 页 / 共 3 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "control.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hComm;

//命令数据结构体
struct STRUCommand {
char type_sign;
char control_command;
short int control_num;
}command,*command_pointer;

//参数设置结构体
struct STRUParameter {
char type_sign;
char adress;
short int parameter_value;
}parameter,*parameter_pointer;

//电机A(运行电机)参数
short int parameterA[10];
//电机B(转向电机)参数
short int parameterB[10];
//宏观场景参数
short int parameterMacro[16];
//微观场景参数
short int parameterMicro[6];
//读取缓冲区过84字节标记
char ReadFlag;
//3秒钟后未收到84字节延时标志
char ReadDelayFlag;


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::com_send_parameter(void)
{
  unsigned long lrc,BS;
  BS=4;
  DWORD nBytesRead,dwError,inack;
  COMSTAT cs;   //端口状态

  if (hComm==0) return;

//判断当前读取缓冲区中是否只有"REQU"响应字符
  ClearCommError(hComm,&dwError,&cs); //清除错误,检测状态
  if  (cs.cbInQue != 4)
    {
      ShowMessage("Read Buffer Error!There are more or less bytes in Read Buffer than REQU!");
      return;
    }

  ReadFile(hComm,(char *)&inack,BS,&nBytesRead,NULL);
  if (inack != 0x55514552) //"REQU"
    {
      ShowMessage("Ack Error!The bytes in Read Buffer is not REQU!");
      return;
    }
//有"REQU"响应,可以写出数据
  WriteFile(hComm,(char*)&parameter,BS,&lrc,NULL);

//清除接收缓存器内容
  PurgeComm(hComm,PURGE_RXCLEAR);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::com_send_command(void)
{
  unsigned long lrc,BS;
  BS=4;
  DWORD nBytesRead,dwError,inack;
  COMSTAT cs;   //端口状态

  if (hComm==0) return;

//判断当前读取缓冲区中是否只有"REQU"响应字符
  ClearCommError(hComm,&dwError,&cs); //清除错误,检测状态
  if  (cs.cbInQue != 4)
    {
      ShowMessage("Read Buffer Error!There are more or less bytes in Read Buffer than REQU!");
      return;
    }

  ReadFile(hComm,(char *)&inack,BS,&nBytesRead,NULL);
  if (inack != 0x55514552) //"REQU"
    {
      ShowMessage("Ack Error!The bytes in Read Buffer is not REQU!");
      return;
    }
//有"REQU"响应,可以写出数据
  WriteFile(hComm,(char*)&command,BS,&lrc,NULL);

//清除接收缓存器内容
  PurgeComm(hComm,PURGE_RXCLEAR);
}
//---------------------------------------------------------------------------
//***************************************************
//控制命令
//***************************************************
//---------------------------------------------------------------------------
//快速前进
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int num_FastForwardStep=Edit1->Text.ToInt();

command.type_sign='C';
command.control_command='F';
command.control_num=num_FastForwardStep;

com_send_command();

}
//---------------------------------------------------------------------------
//快速后退
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int num_FastBackStep=Edit2->Text.ToInt();

command.type_sign='C';
command.control_command='Q';
command.control_num=num_FastBackStep;

com_send_command();
}
//---------------------------------------------------------------------------
//慢速前进
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int num_SlowForwardStep=Edit3->Text.ToInt();

command.type_sign='C';
command.control_command='S';
command.control_num=num_SlowForwardStep;

com_send_command();
}
//---------------------------------------------------------------------------
//慢速后退
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int num_SlowBackStep=Edit4->Text.ToInt();

command.type_sign='C';
command.control_command='B';
command.control_num=num_SlowBackStep;

com_send_command();
}
//---------------------------------------------------------------------------
//快速左转
void __fastcall TForm1::Button5Click(TObject *Sender)
{
int num_TurnAnticlockwiseStep=Edit5->Text.ToInt();

command.type_sign='C';
command.control_command='L';
command.control_num=num_TurnAnticlockwiseStep;

com_send_command();
}
//---------------------------------------------------------------------------
//快速右转
void __fastcall TForm1::Button6Click(TObject *Sender)
{
int num_TurnClockwiseStep=Edit6->Text.ToInt();

command.type_sign='C';
command.control_command='R';
command.control_num=num_TurnClockwiseStep;

com_send_command();
}
//---------------------------------------------------------------------------
//慢速左转
void __fastcall TForm1::Button7Click(TObject *Sender)
{
int num_TurnAnticlockwiseStep_Slow=Edit7->Text.ToInt();

command.type_sign='C';
command.control_command='N';
command.control_num=num_TurnAnticlockwiseStep_Slow;

com_send_command();
}
//---------------------------------------------------------------------------
//慢速右转
void __fastcall TForm1::Button8Click(TObject *Sender)
{
int num_TurnClockwiseStep_Slow=Edit8->Text.ToInt();

command.type_sign='C';
command.control_command='M';
command.control_num=num_TurnClockwiseStep_Slow;

com_send_command();
}
//---------------------------------------------------------------------------
//抓取物体
void __fastcall TForm1::Button9Click(TObject *Sender)
{
command.type_sign='C';
command.control_command='C';
command.control_num=0;

com_send_command();
}
//---------------------------------------------------------------------------
//放下物体
void __fastcall TForm1::Button10Click(TObject *Sender)
{
command.type_sign='C';
command.control_command='U';
command.control_num=0;

com_send_command();
}
//---------------------------------------------------------------------------
//停机
void __fastcall TForm1::Button11Click(TObject *Sender)
{
command.type_sign='E';
command.control_command='0';
command.control_num=0;

com_send_command();
}
//---------------------------------------------------------------------------
//*********************************************
//参数传递命令
//*********************************************
//******************************
//行走电机      (parameterA数组)
//******************************
//---------------------------------------------------------------------------
//运行换相时间 parameterA[0]
void __fastcall TForm1::Button14Click(TObject *Sender)
{
parameterA[0]=Edit9->Text.ToInt();

//结构体赋值
parameter.type_sign='D';
parameter.adress=1;
parameter.parameter_value=parameterA[0];

com_send_parameter();
}
//---------------------------------------------------------------------------
//制动换相时间parameterA[1]
void __fastcall TForm1::Button15Click(TObject *Sender)
{
parameterA[1]=Edit10->Text.ToInt();

//结构体赋值
parameter.type_sign='D';
parameter.adress=2;
parameter.parameter_value=parameterA[1];

com_send_parameter();
}
//---------------------------------------------------------------------------
//运行控制参数1parameterA[2]
void __fastcall TForm1::Button16Click(TObject *Sender)
{
parameterA[2]=Edit11->Text.ToInt();

//结构体赋值
parameter.type_sign='D';
parameter.adress=3;
parameter.parameter_value=parameterA[2];

com_send_parameter();
}
//---------------------------------------------------------------------------
//制动控制参数1 parameterA[3]
void __fastcall TForm1::Button51Click(TObject *Sender)
{
parameterA[3]=Edit57->Text.ToInt();

//结构体赋值
parameter.type_sign='D';
parameter.adress=4;
parameter.parameter_value=parameterA[3];

com_send_parameter();
}
//---------------------------------------------------------------------------
//运行控制参数2parameterA[4]
void __fastcall TForm1::Button12Click(TObject *Sender)
{
//将参数的实际高8位在接收到数据后左移8位,与第8位相与
//但在串口传递中由于结构体的存储由低位到高位堆栈排列,故先发送低8位再发送高8位
   int ParameterTemp;
   parameterA[4] = Edit12->Text.ToInt();
   ParameterTemp = parameterA[4] << 8;
   parameterA[4] = Edit13->Text.ToInt();
   ParameterTemp = ParameterTemp | parameterA[4];
   parameterA[4] = ParameterTemp;
//结构体赋值
   parameter.type_sign = 'D';
   parameter.adress = 5;
   parameter.parameter_value=parameterA[4];

   com_send_parameter();
}
//---------------------------------------------------------------------------
//制动控制参数2parameterA[5]
void __fastcall TForm1::Button18Click(TObject *Sender)
{
//将参数的实际高8位在接收到数据后左移8位,与第8位相与
//但在串口传递中由于结构体的存储由低位到高位堆栈排列,故先发送低8位再发送高8位
   int ParameterTemp;
   parameterA[5] = Edit18->Text.ToInt();
   ParameterTemp = parameterA[5] << 8;
   parameterA[5] = Edit19->Text.ToInt();
   ParameterTemp = ParameterTemp | parameterA[5];
   parameterA[5] = ParameterTemp;
//结构体赋值
   parameter.type_sign = 'D';
   parameter.adress = 6;
   parameter.parameter_value=parameterA[5];

   com_send_parameter();
}
//---------------------------------------------------------------------------
//运行控制参数3parameterA[6]
void __fastcall TForm1::Button13Click(TObject *Sender)
{
//将参数的实际高8位在接收到数据后左移8位,与第8位相与
//但在串口传递中由于结构体的存储由低位到高位堆栈排列,故先发送低8位再发送高8位
   int ParameterTemp;
   parameterA[6] = Edit14->Text.ToInt();
   ParameterTemp = parameterA[6] << 8;
   parameterA[6] = Edit15->Text.ToInt();
   ParameterTemp = ParameterTemp | parameterA[6];
   parameterA[6] = ParameterTemp;
//结构体赋值
   parameter.type_sign = 'D';
   parameter.adress = 7;
   parameter.parameter_value=parameterA[6];

   com_send_parameter();
}
//---------------------------------------------------------------------------
//制动控制参数3parameterA[7]
void __fastcall TForm1::Button19Click(TObject *Sender)
{
//将参数的实际高8位在接收到数据后左移8位,与第8位相与
//但在串口传递中由于结构体的存储由低位到高位堆栈排列,故先发送低8位再发送高8位
   int ParameterTemp;
   parameterA[7] = Edit20->Text.ToInt();
   ParameterTemp = parameterA[7] << 8;
   parameterA[7] = Edit21->Text.ToInt();
   ParameterTemp = ParameterTemp | parameterA[7];
   parameterA[7] = ParameterTemp;
//结构体赋值
   parameter.type_sign = 'D';
   parameter.adress = 8;
   parameter.parameter_value=parameterA[7];

   com_send_parameter();
}
//---------------------------------------------------------------------------
//电机A相位索引1   parameterA[8]
//电机A相位索引2   parameterA[9]
//---------------------------------------------------------------------------
//******************************
//转向电机      (parameterB数组)
//******************************
//---------------------------------------------------------------------------
//运行换相时间 parameterB[0]
void __fastcall TForm1::Button24Click(TObject *Sender)
{
parameterB[0]=Edit22->Text.ToInt();

//结构体赋值
parameter.type_sign='D';
parameter.adress=11;
parameter.parameter_value=parameterB[0];

com_send_parameter();
}
//---------------------------------------------------------------------------
//制动换相时间parameterB[1]
void __fastcall TForm1::Button25Click(TObject *Sender)
{
parameterB[1]=Edit23->Text.ToInt();

//结构体赋值
parameter.type_sign='D';
parameter.adress=12;

⌨️ 快捷键说明

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