Browse Source

Add code to servoControler class

test
nasi 3 years ago
parent
commit
1bc6a16708
  1. 7
      Servo/src/ServoController.cpp
  2. 173
      Servo/src/ServoController.cpp.autosave

7
Servo/src/ServoController.cpp

@ -74,16 +74,9 @@ void ServoController::changeMode(double startAngle, double stopAngle, double spe
/*************************************************************************************************/ /*************************************************************************************************/
void ServoController::init() void ServoController::init()
{ {
_modbusWrapper.init(); _modbusWrapper.init();
_modbusWrapper.connectToDevice(initiateConfig()); _modbusWrapper.connectToDevice(initiateConfig());
// timer = new QTimer();
// timer->setInterval(2000);
// timer->start();
// connect(timer, &QTimer::timeout, &this, &ServoController::handleGetRequestFromServo);
// timer->stop();
} }
/*************************************************************************************************/ /*************************************************************************************************/

173
Servo/src/ServoController.cpp.autosave

@ -1,173 +0,0 @@
#include "ServoController.h"
ServoController::ServoController()
{
}
/*************************************************************************************************/
ModbusConfig ServoController::initiateConfig()
{
ModbusConfig _config;
_config.baud =QSerialPort::Baud19200;
_config.parity = QSerialPort::EvenParity;
_config.dataBits = QSerialPort::Data8;
_config.stopBits = QSerialPort::OneStop;
_config.responseTime = 2000;
return _config;
}
/*************************************************************************************************/
void ServoController::apply()
{
_modbusWrapper.setSingleRegister(SRV_APPLY_SETTING_REG, SRV_APPLY_SETTING_VAL);
}
/*************************************************************************************************/
void ServoController::enableDrive()
{
_modbusWrapper.setSingleRegister(SRV_ENABLE_DRIVE_REG, 3);
apply();
}
void ServoController::setStartStop(bool start)
{
if(start)
_modbusWrapper.setSingleRegister(SRV_START_STOP_REG, 3);
else
_modbusWrapper.setSingleRegister(SRV_START_STOP_REG, 0);
apply();
}
/*************************************************************************************************/
void ServoController::setStartAngle(double angle)
{
_modbusWrapper.setSingleRegister(SRV_START_ANGLE_INT_PART_REG, static_cast<quint16>(angle));
_modbusWrapper.setSingleRegister(SRV_START_ANGLE_FRAC_PART_REG, static_cast<quint16>((angle - (static_cast<int>(angle))) * 100));
}
/*************************************************************************************************/
void ServoController::setStopAngle(double angle)
{
_modbusWrapper.setSingleRegister(SRV_STOP_ANGLE_INT_PART_REG, static_cast<quint16>(angle));
_modbusWrapper.setSingleRegister(SRV_STOP_ANGLE_FRAC_PART_REG, static_cast<quint16>((angle - (static_cast<int>(angle))) * 100));
}
/*************************************************************************************************/
void ServoController::setSpeed(double speed)
{
_modbusWrapper.setSingleRegister(SRV_AZIMUTH_SPEED_REG, static_cast<quint16>(speed*SRV_SPEED_FACTOR));
}
/*************************************************************************************************/
void ServoController::changeMode(double startAngle, double stopAngle, double speed)
{
setStartAngle(startAngle);
setStopAngle(stopAngle);
setSpeed(speed);
setStartStop(true);
enableDrive();
apply();
}
/*************************************************************************************************/
void ServoController::init()
{
_modbusWrapper.init();
_modbusWrapper.connectToDevice(initiateConfig());
}
/*************************************************************************************************/
void ServoController::startMoving()
{
setStartStop(true);
}
/*************************************************************************************************/
void ServoController::stopMoving()
{
setStartStop(false);
}
/*************************************************************************************************/
void ServoController::resetAzimuth()
{
_modbusWrapper.setSingleRegister(SRV_CALIBRATE_REG, SRV_CALIBRATION_VAL);
}
/*************************************************************************************************/
void ServoController::fix(double angle)
{
changeMode(angle, angle, 5/6.0);
}
/*************************************************************************************************/
void ServoController::sector(double startAngle, double stopAngle, double speed)
{
changeMode(startAngle, stopAngle, speed);
}
/*************************************************************************************************/
double ServoController::getSpeed()
{
double speed;
QVector<quint16> speedVector;
speedVector = _modbusWrapper.getHoldingRegister(SRV_AZIMUTH_SPEED_REG,1);
speed = speedVector[0] / SRV_SPEED_FACTOR;
return speed;
}
/*************************************************************************************************/
double ServoController::getStopAngle()
{
double speed;
QVector<quint16> speedVector1, speedVector2;
speedVector1 = _modbusWrapper.getHoldingRegister(SRV_STOP_ANGLE_INT_PART_REG,1);
speedVector2 = _modbusWrapper.getHoldingRegister(SRV_STOP_ANGLE_FRAC_PART_REG,1);
speed = (speedVector1[0] + speedVector2[0]) / SRV_ANGLE_FACTOR;
return speed;
}
/*************************************************************************************************/
double ServoController::getStartAngle()
{
double speed;
QVector<quint16> speedVector1, speedVector2;
speedVector1 = _modbusWrapper.getHoldingRegister(SRV_START_ANGLE_INT_PART_REG,1);
speedVector2 = _modbusWrapper.getHoldingRegister(SRV_START_ANGLE_FRAC_PART_REG,1);
speed = (speedVector1[0] + speedVector2[0]) / SRV_ANGLE_FACTOR;
return speed;
}
/*************************************************************************************************/
double ServoController::getAngleOffset()
{
double angleOffset;
QVector<quint16> angleOffsetVector;
angleOffsetVector = _modbusWrapper.getHoldingRegister(SRV_ZERO_OFFSET_ANGLE,1);
angleOffset = angleOffsetVector[0] / SRV_ANGLE_FACTOR;
return angleOffset;
}
/*************************************************************************************************/
void ServoController::setAngleOffset(double offset)
{
_modbusWrapper.setSingleRegister(SRV_ZERO_OFFSET_ANGLE, static_cast<quint16>(offset*SRV_ANGLE_FACTOR));
}
/*************************************************************************************************/
double ServoController::getAzimuth()
{
double azimuth;
QVector<quint16> azimuthVector;
azimuthVector = _modbusWrapper.getHoldingRegister(SRV_AZIMUTH_REG,1);
azimuth = azimuthVector[0] / SRV_ANGLE_FACTOR;
return azimuth;
}
Loading…
Cancel
Save