2025-05-28 10:47:46 +08:00

199 lines
5.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "Mycontrol.h"
Mycontrol::Mycontrol()
{
}
// 获取单例实例C++11 线程安全)
Mycontrol& Mycontrol::getInstance() {
static Mycontrol instance;
return instance;
}
void Mycontrol::init() {
volatile int result = 0;
// Init vars
int ioin_count = 0, motor_count = 0, connect_rebuild = 1;
// Load config file
wchar_t path[] = L"D:\\Program Files\\demo\\glass.csv";
result = XT_Controler_Extend::Profile_Load(path);
if (result == 1) {
qDebug() << "XTSystem - Init: Profile_Load succeed!";
}
else {
qDebug() << "XTSystem - Init: Profile_Load failed!";
return;
}
// Init controller
//XT_Controler_Extend::Profile_DeInit_Controller();
//qDebug() << "Do deinit controller";
result = XT_Controler_Extend::Profile_Init_Controller(1);
qDebug() << "XTSystem - Init: Do init controller";
if (result == 1) {
qDebug() << "XTSystem - Init: Profile_Init_Controller succeed!";
ioin_count = XT_Controler_Extend::Profile_Get_IoIn_Count();
motor_count = XT_Controler_Extend::Profile_Get_Axis_Count();
connect_rebuild = 0;
qDebug() << "XTSystem - Init:ioin_count: " << ioin_count << ", "
<< "motor_count: " << motor_count << ", "
<< "connect_rebuild: " << connect_rebuild;
}
else {
qDebug() << "XTSystem - Init: Profile_Init_Controller failed!";
return;
}
// Init 3 axis motors
VCM_Resource_struct xtMotorsResources[3];
xtMotorsResources[0].CanID = 1;
xtMotorsResources[0].iAxis = motor_count + 1;
xtMotorsResources[0].Connet_Rebuild = connect_rebuild;
xtMotorsResources[0].IO_ID = ioin_count + 3 * 0;
xtMotorsResources[0].iThread = 2;
xtMotorsResources[0].iThread_Curve = 3;
xtMotorsResources[0].Z_Index_ID = -1;
xtMotorsResources[0].IO_CAN_ID = 4;
xtMotorsResources[0].Extren_IO_Index = 0;
xtMotorsResources[1].CanID = 2;
xtMotorsResources[1].iAxis = motor_count + 2;
xtMotorsResources[1].Connet_Rebuild = connect_rebuild;
xtMotorsResources[1].IO_ID = ioin_count + 3 * 1;
xtMotorsResources[1].iThread = 5;
xtMotorsResources[1].iThread_Curve = 6;
xtMotorsResources[1].Z_Index_ID = -1;
xtMotorsResources[1].IO_CAN_ID = 4;
xtMotorsResources[1].Extren_IO_Index = 1;
xtMotorsResources[2].CanID = 3;
xtMotorsResources[2].iAxis = motor_count + 3;
xtMotorsResources[2].Connet_Rebuild = connect_rebuild;
xtMotorsResources[2].IO_ID = ioin_count + 3 * 2;
xtMotorsResources[2].iThread = 8;
xtMotorsResources[2].iThread_Curve = 9;
xtMotorsResources[2].Z_Index_ID = -1;
xtMotorsResources[2].IO_CAN_ID = 4;
xtMotorsResources[2].Extren_IO_Index = 2;
VCMT_resource_alloc(xtMotorsResources, 3);
// 初始化音圈控制端
result = Soft_landing_dll_init(3);
if (result == 1) {
qDebug() << "XTSystem - Init:Soft_landing_dll_init succeed!";
}
else {
qDebug() << "XTSystem - Init:Soft_landing_dll_init failed!";
}
// 获取电机状态
result = Get_Init_Ready();
if (result == -1) {
qDebug() << "XTSystem - Init:Motors not exist!";
}
else if (result == 0) {
qDebug() << "XTSystem - Init:Motors busy!";
}
else {
qDebug() << "XTSystem - Init:Motors init succeed!";
}
// 电机使能
SetServoOnOff(1, true);
SetServoOnOff(2, true);
SetServoOnOff(3, true);
QThread::msleep(1000);
qDebug() << "XTSystem - Init:Servos enable succeed!";
// 配置三轴参数motor_id =3, 1, 2 对应 z, y, x
SetPosModejerk(3, 500000);
SetPosModeAcc(3, 50);
SetPosModeSpeed(3, 15);
SetGoZeroSpeed(3, 10);
SetGoZeroDistance(3, 20);
SetRunDirect(3, 0, 20000);
if (Init_Go_Zero(3, 1)) {
qDebug() << "XTsystem - init: Z axis go zero succeed!";
}
SetPosModejerk(1, 500000);
SetPosModeAcc(1, 50);
SetPosModeSpeed(1, 15);
SetGoZeroSpeed(1, 10);
SetGoZeroDistance(1, 500);
SetRunDirect(1, 0, 10000);
if (Init_Go_Zero(1, 1)) {
qDebug() << "XTsystem - init: Y axis go zero succeed!";
}
SetPosModejerk(2, 500000);
SetPosModeAcc(2, 5);
SetPosModeSpeed(2, 15);
SetGoZeroSpeed(2, 10);
SetGoZeroDistance(2, 500);
SetRunDirect(2, 1, 10000);
if (Init_Go_Zero(2, 1)) {
qDebug() << "XTsystem - init: x axis go zero succeed!";
}
qDebug() << QString("XTSystem: init() called");
}
void Mycontrol::moveBy(int motorID, double distance, int block) {
qDebug() << QString("Mycontrol: moveBy(motorID=%1, distance=%2, block=%3)")
.arg(motorID).arg(distance).arg(block);
double nowPosition = 0.0;
GetNowPos(motorID, nowPosition);
SetPosModePos(motorID, nowPosition + distance);
TillPosModePos(motorID, block);
}
void Mycontrol::moveTo(int motorID, double targetPosition, int block) {
qDebug() << QString("Mycontrol: moveTo(motorID=%1, targetPosition=%2, block=%3)")
.arg(motorID).arg(targetPosition).arg(block);
SetPosModePos(motorID, targetPosition);
TillPosModePos(motorID, block);
}
void Mycontrol::moveByX(double xDis) {
moveBy(2, xDis);
}
void Mycontrol::moveByY(double yDis) {
moveBy(1, yDis);
}
void Mycontrol::moveByZ(double zDis) {
moveBy(3, zDis);
}
double Mycontrol::getXPos() const {
double xPos;
GetNowPos(2, xPos);
return xPos;
}
double Mycontrol::getYPos() const {
double yPos;
GetNowPos(1, yPos);
return yPos;
}
double Mycontrol::getZPos() const {
double zPos;
GetNowPos(3, zPos);
return zPos;
}