📄 control.~cpp
字号:
//---------------------------------------------------------------------------
#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*)¶meter,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 + -