Skip to content
Snippets Groups Projects
Commit 68051be2 authored by BAHJI's avatar BAHJI Committed by Florent LANGLOIS
Browse files

[ICATHALES-230] GalilAxisPlugin renamed to StandardMotorPlugin + Remove...

[ICATHALES-230] GalilAxisPlugin renamed to StandardMotorPlugin + Remove SimulatedAxisPlugin + code cleaning
parent f82cf4ef
No related branches found
No related tags found
1 merge request!1[ICATHALES-230] GalilAxisPlugin renamed to StandardMotor + Remove SimulatedAxisPlugin
Showing
with 609 additions and 778 deletions
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>fr.soleil.device.ActuatorSystem</groupId>
<artifactId>ActuatorPlugins</artifactId>
<version>1.0.8-SNAPSHOT</version>
</parent>
<groupId>fr.soleil.device.ActuatorSystem.ActuatorPlugins</groupId>
<artifactId>GalilAxisPlugin-${aol}-shared-${mode}</artifactId>
<packaging>nar</packaging>
<name>GalilAxisPlugin</name> <!-- used for the name of executable -->
<description>Plugin in order to work with galil axis device</description>
<build>
<plugins>
<plugin>
<groupId>org.freehep</groupId>
<artifactId>freehep-nar-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>fr.soleil.lib</groupId>
<artifactId>YAT4Tango-${aol}-${library}-${mode}</artifactId>
</dependency>
<dependency>
<groupId>fr.soleil.lib</groupId>
<artifactId>YAT-${aol}-${library}-${mode}</artifactId>
</dependency>
</dependencies>
</project>
//=============================================================================
// SimulatedAxisPlugin.cpp
//=============================================================================
// abstraction.......Plugin to use SimulatedAxisDevice in BeamPositionTracking application
// class.............SimulatedAxisPlugin
// original author...thiam - SOLEIL
//=============================================================================
#include <SimulatedAxisPlugin.h>
#include <yat/plugin/PlugInSymbols.h>
#include <yat/utils/StringTokenizer.h>
#include <yat/threading/Thread.h>
#include <iostream>
EXPORT_SINGLECLASS_PLUGIN(SimulatedAxisPlugin::SimulatedAxisPlugin, SimulatedAxisPlugin::SimulatedAxisPluginInfo);
namespace SimulatedAxisPlugin
{
std::string SIMULTATED_AXIS_DEVICE_ADRESS_STR = "SimulatedAxisDeviceDeviceUrl";
std::string CMD_MOVE_AXIS_RELATIVE_STR = "MoveRelativeWithSpeed";
std::string CMD_STOP_MOVEMENT = "Stop";
// ============================================================================
// SimulatedAxisPlugin::SimulatedAxisPlugin
// ============================================================================
SimulatedAxisPlugin::SimulatedAxisPlugin()
: yat4tango::TangoLogAdapter(NULL)
{
_simulatedAxisDevice = NULL;
this->_stateStatus.isConnexionOperational = false;
}
// ============================================================================
// SimulatedAxisPlugin::~SimulatedAxisPlugin
// ============================================================================
SimulatedAxisPlugin::~SimulatedAxisPlugin()
{
if(_simulatedAxisDevice)
delete _simulatedAxisDevice;
_simulatedAxisDevice = NULL;
}
// ============================================================================
// SPECIFIC PLUGIN PROPERTIES
// ============================================================================
// ============================================================================
// SimulatedAxisPlugin::enumerate_properties
// ============================================================================
void SimulatedAxisPlugin::enumerate_properties (yat4tango::PlugInPropertyInfoList& propInfoList) const
throw (Tango::DevFailed)
{
//NO properties here ..
}
// ============================================================================
// SimulatedAxisPlugin::set_properties
// ============================================================================
void SimulatedAxisPlugin::set_properties (yat4tango::PlugInPropertyValueList& propValueList)
throw (Tango::DevFailed)
{
//NO properties here ..
}
// ============================================================================
// SimulatedAxisPlugin::enumerate_attributes
// ============================================================================
void SimulatedAxisPlugin::enumerate_attributes (yat4tango::DynamicAttributeDescriptionList& attrDescList) const
throw (Tango::DevFailed)
{
}
// ============================================================================
// SimulatedAxisPlugin::initialize_connection
// ============================================================================
void SimulatedAxisPlugin::initialize_connection (std::string deviceAdress)
{
this->_simulatedAxisDevice = new Tango::DeviceProxy (deviceAdress);
Tango::DeviceData test = this->_simulatedAxisDevice->command_inout("Status");
std::string statusOut;
test>>statusOut;
this->_stateStatus.isConnexionOperational = true;
}
// ============================================================================
// SimulatedAxisPlugin::init
// ============================================================================
void SimulatedAxisPlugin::init(Tango::DeviceImpl * host_device, std::string deviceAdress) throw (Tango::DevFailed){
this->initialize_connection(deviceAdress);
if (this->_stateStatus.isConnexionOperational){
this->_stateStatus.axisStatus = "Plugin is ready";
this->_stateStatus.axisState = Tango::STANDBY;
}
}
// ============================================================================
// SimulatedAxisPlugin::getAxisCurrentPosition
// ============================================================================
double SimulatedAxisPlugin::getAxisCurrentPosition()throw (Tango::DevFailed){
Tango::DevShort positionValue = NULL;
//First check if connexion is still alive
this->updateStateStatus();
if (_stateStatus.isConnexionOperational){
Tango::DeviceAttribute positionAttr = this->_simulatedAxisDevice->read_attribute("RPositionMoteur");
positionAttr >> positionValue;
}
return (double)positionValue;
}
// ============================================================================
// SimulatedAxisPlugin::getAxisUnit
// ============================================================================
std::string SimulatedAxisPlugin::getAxisUnit()throw (Tango::DevFailed)
{
std::string axisUnit = "" ;
//First check if connexion is still alive
this->updateStateStatus();
if (_stateStatus.isConnexionOperational){
std::string posAttrName = "RPositionMoteur";
Tango::AttributeInfoEx posAttributeInfo;
posAttributeInfo = this->_simulatedAxisDevice->get_attribute_config(posAttrName);
axisUnit = posAttributeInfo.unit;
}
return axisUnit;
}
// ============================================================================
// SimulatedAxisPlugin::setAxisPosition
// ============================================================================
void SimulatedAxisPlugin::setAxisPosition(double position)throw (Tango::DevFailed){
if (_stateStatus.isConnexionOperational /*&& Normaly check if axe is moving, but its fake anyway*/){
_stateStatus.axisState = Tango::MOVING;
_stateStatus.axisStatus = "Movement is starting..";
double currentPosition = this->getAxisCurrentPosition();
double relativeMovement = 0;
//Need to estimate relative movement !
relativeMovement = position - currentPosition;
moveAxisRelative(relativeMovement);
}
}
// ============================================================================
// SimulatedAxisPlugin::moveAxisRelative
// ============================================================================
void SimulatedAxisPlugin::moveAxisRelative(double relativeMovement)throw (Tango::DevFailed){
//First check if connexion is still alive
this->updateStateStatus();
if (_stateStatus.isConnexionOperational /*&& Normaly check if axe is moving, but its fake anyway*/){
_stateStatus.axisState = Tango::MOVING;
_stateStatus.axisStatus = "Movement is starting..";
Tango::DevVarShortArray* w_argsStepsSpeed = new Tango::DevVarShortArray();
w_argsStepsSpeed->length(2);
(*w_argsStepsSpeed)[0] = (short)relativeMovement;
(*w_argsStepsSpeed)[1] = 1;
Tango::DeviceData relativeMovmentData;
relativeMovmentData<<w_argsStepsSpeed;
sendCommandToActuatorSystem(CMD_MOVE_AXIS_RELATIVE_STR, true, relativeMovmentData);
}
}
// ============================================================================
// SimulatedAxisPlugin::stopAxisMovement
// ============================================================================
void SimulatedAxisPlugin::stopAxisMovement()throw (Tango::DevFailed){
Tango::DeviceData emptyData;
sendCommandToActuatorSystem(CMD_STOP_MOVEMENT, false, emptyData);
}
// ============================================================================
// SimulatedAxisPlugin::getAxisStatus
// ============================================================================
AS::ActuatorInterface::ActuatorInterface::AxisStateStatus SimulatedAxisPlugin::getAxisStateStatus()throw (Tango::DevFailed){
this->updateStateStatus();
return this->_stateStatus;
}
// ============================================================================
// SimulatedAxisPlugin::updateStateStatus
// ============================================================================
void SimulatedAxisPlugin::updateStateStatus(){
try{
_stateStatus.axisState = this->_simulatedAxisDevice->state();
//in our case -> standby means ON
if(_stateStatus.axisState == Tango::STANDBY)
_stateStatus.axisState = Tango::ON;
_stateStatus.axisStatus = this->_simulatedAxisDevice->status();
_stateStatus.isConnexionOperational = true;
}catch(...){
_stateStatus.isConnexionOperational = false;
}
}
// ============================================================================
// SimulatedAxisPlugin::sendCommandToActuatorSystem
// ============================================================================
void SimulatedAxisPlugin::sendCommandToActuatorSystem(std::string cmdName, bool args, Tango::DeviceData argsData){
if (args)
this->_simulatedAxisDevice->command_inout(cmdName, argsData);
else
this->_simulatedAxisDevice->command_inout(cmdName);
}
}// namespace SimulatedAxisPlugin
//=============================================================================
// SimulatedAxisPlugin.h
//=============================================================================
// abstraction.......Plugin to use a simulated axis in beam tracking position
// class.............SimulatedAxisPlugin
// original author...Thiam- SOLEIL
//=============================================================================
#ifndef _ACTUATOR_AXIS_PLUGIN_H_
#define _ACTUATOR_AXIS_PLUGIN_H_
// ============================================================================
// DEPENDENCIES
// ============================================================================
#include <tango.h>
#include <yat/utils/StringTokenizer.h>
#include <yat/plugin/IPlugInInfo.h>
#include <yat/plugin/IPlugInObject.h>
#include <yat/plugin/PlugInSymbols.h>
#include "../../../PluginInterfaces/include/ActuatorInterface.h"
#include <yat4tango/LogHelper.h>
#include <iostream>
namespace SimulatedAxisPlugin
{
//=============================================================================
//! \class SimulatedAxisPluginInfo
//! \brief Plugin infos class
//!
//! Inherits from yat::IPlugInInfo class.
//=============================================================================
class SimulatedAxisPluginInfo : public yat::IPlugInInfo
{
public:
std::string get_plugin_id() const
{ return "SimulatedAxis"; }
virtual std::string get_interface_name() const
{ return "ActuatorInterface"; }
virtual std::string get_version_number() const
{ return "1.0.0"; }
};
//=============================================================================
//! \class SimulatedAxisPlugin
//!
//! Inherits from BeamPositionTracking_ns::ActuatorInterface::ActuatorInterface class.
//=============================================================================
class SimulatedAxisPlugin : public AS::ActuatorInterface::ActuatorInterface,
public yat4tango::TangoLogAdapter
{
public:
SimulatedAxisPlugin();
~SimulatedAxisPlugin();
//-------------------------------------------------------------------------
// yat4tango::DevicePlugIn interface
//-------------------------------------------------------------------------
//!\brief Gets the plugin's specific properties.
void enumerate_properties (yat4tango::PlugInPropertyInfoList& propInfoList) const
throw (Tango::DevFailed);
//!\brief Sets the plugin properties.
void set_properties (yat4tango::PlugInPropertyValueList& propValueList)
throw (Tango::DevFailed);
//!\brief Gets the plugin dynamic attributes.
void enumerate_attributes (yat4tango::DynamicAttributeDescriptionList& attrDescList) const
throw (Tango::DevFailed);
//-------------------------------------------------------------------------
// yat4tango::DevicePlugIn interface
//-------------------------------------------------------------------------
void init(Tango::DeviceImpl * host_device, std::string deviceAdress)
throw (Tango::DevFailed);
void setAxisPosition(double position)
throw (Tango::DevFailed);
void moveAxisRelative(double relativeMovement)
throw (Tango::DevFailed);
void stopAxisMovement()
throw (Tango::DevFailed);
double getAxisCurrentPosition()
throw (Tango::DevFailed);
std::string getAxisUnit()
throw (Tango::DevFailed);
AS::ActuatorInterface::ActuatorInterface::AxisStateStatus getAxisStateStatus()
throw (Tango::DevFailed);
private:
AS::ActuatorInterface::ActuatorInterface::AxisStateStatus _stateStatus;
bool _simulatedAxisProxyInit;
void initialize_connection(std::string deviceAdress);
void sendCommandToActuatorSystem(std::string cmdName, bool args, Tango::DeviceData argsData);
// mp_SimulatedAxisDevice: device to access axis
Tango::DeviceProxy *_simulatedAxisDevice;
std::string _simulatedAxisDeviceDeviceAdressStr;
void updateStateStatus();
};
} // namespace SimulatedAxisPlugin
#endif // _ACTUATOR_AXIS_PLUGIN_H_
......@@ -4,15 +4,15 @@
<parent>
<groupId>fr.soleil.device.ActuatorSystem</groupId>
<artifactId>ActuatorPlugins</artifactId>
<version>1.0.8-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</parent>
<groupId>fr.soleil.device.ActuatorSystem.ActuatorPlugins</groupId>
<artifactId>SimulatedAxisPlugin-${aol}-shared-${mode}</artifactId>
<artifactId>StandardMotorPlugin-${aol}-shared-${mode}</artifactId>
<packaging>nar</packaging>
<name>SimulatedAxisPlugin</name> <!-- used for the name of executable -->
<description>Fake axis Plugin - Tests purpose</description>
<name>StandardMotorPlugin</name> <!-- used for the name of executable -->
<description>Plugin in order to work with standard motors axis device</description>
<build>
......
//=============================================================================
// GalilAxisPlugin.cpp
// StandardMotorPlugin.cpp
//=============================================================================
// abstraction.......Plugin to use galilAxisDevice in BeamPositionTracking application
// class.............GalilAxisPlugin
// abstraction.......Plugin to use StandardMotorDevice in BeamPositionTracking application
// class.............StandardMotorPlugin
// original author...thiam - SOLEIL
//=============================================================================
#include <GalilAxisPlugin.h>
#include <StandardMotorPlugin.h>
EXPORT_SINGLECLASS_PLUGIN(GalilAxisPlugin::GalilAxisPlugin, GalilAxisPlugin::GalilAxisPluginInfo);
EXPORT_SINGLECLASS_PLUGIN(StandardMotorPlugin::StandardMotorPlugin, StandardMotorPlugin::StandardMotorPluginInfo);
namespace GalilAxisPlugin
namespace StandardMotorPlugin
{
std::string SIMULTATED_AXIS_DEVICE_ADRESS_STR = "galilAxisDeviceDeviceUrl";
std::string SIMULTATED_AXIS_DEVICE_ADRESS_STR = "StandardMotorDeviceDeviceUrl";
std::string CMD_MOVE_AXIS_RELATIVE_STR = "MoveRelativeWithSpeed";
std::string CMD_STOP_MOVEMENT = "Stop";
std::string ATTR_POSITION_STR = "position";
// ============================================================================
// GalilAxisPlugin::GalilAxisPlugin
// StandardMotorPlugin::StandardMotorPlugin
// ============================================================================
GalilAxisPlugin::GalilAxisPlugin()
StandardMotorPlugin::StandardMotorPlugin()
: yat4tango::TangoLogAdapter(NULL)
{
}
// ============================================================================
// GalilAxisPlugin::~GalilAxisPlugin
// StandardMotorPlugin::~StandardMotorPlugin
// ============================================================================
GalilAxisPlugin::~GalilAxisPlugin()
StandardMotorPlugin::~StandardMotorPlugin()
{
}
......@@ -37,63 +37,60 @@ GalilAxisPlugin::~GalilAxisPlugin()
// SPECIFIC PLUGIN PROPERTIES
// ============================================================================
// ============================================================================
// GalilAxisPlugin::enumerate_properties
// StandardMotorPlugin::enumerate_properties
// ============================================================================
void GalilAxisPlugin::enumerate_properties (yat4tango::PlugInPropertyInfoList& propInfoList) const
throw (Tango::DevFailed)
void StandardMotorPlugin::enumerate_properties (yat4tango::PlugInPropertyInfoList& propInfoList) const
{
//NO properties here ..
}
// ============================================================================
// GalilAxisPlugin::set_properties
// StandardMotorPlugin::set_properties
// ============================================================================
void GalilAxisPlugin::set_properties (yat4tango::PlugInPropertyValueList& propValueList)
throw (Tango::DevFailed)
void StandardMotorPlugin::set_properties (yat4tango::PlugInPropertyValueList& propValueList)
{
//NO properties here ..
}
// ============================================================================
// GalilAxisPlugin::enumerate_attributes
// StandardMotorPlugin::enumerate_attributes
// ============================================================================
void GalilAxisPlugin::enumerate_attributes (yat4tango::DynamicAttributeDescriptionList& attrDescList) const
throw (Tango::DevFailed)
void StandardMotorPlugin::enumerate_attributes (yat4tango::DynamicAttributeDescriptionList& attrDescList) const
{
}
// ============================================================================
// GalilAxisPlugin::initialize_connection
// StandardMotorPlugin::initialize_connection
// ============================================================================
void GalilAxisPlugin::initialize_connection (std::string deviceAdress)
void StandardMotorPlugin::initialize_connection (std::string deviceAdress)
{
this->_galilAxisDevice = new Tango::DeviceProxy (deviceAdress);
Tango::DeviceData test = this->_galilAxisDevice->command_inout("Status");
m_standard_motor_device = new Tango::DeviceProxy (deviceAdress);
Tango::DeviceData test = m_standard_motor_device->command_inout("Status");
std::string statusOut;
test>>statusOut;
this->_stateStatus.isConnexionOperational = true;
m_state_status.isConnexionOperational = true;
}
// ============================================================================
// GalilAxisPlugin::start
// StandardMotorPlugin::start
// ============================================================================
void GalilAxisPlugin::init(Tango::DeviceImpl * host_device, std::string deviceAdress)
throw (Tango::DevFailed)
void StandardMotorPlugin::init(Tango::DeviceImpl * host_device, std::string deviceAdress)
{
this->initialize_connection(deviceAdress);
this->_stateStatus.axisStatus = "GalilAxis plugin is ready";
this->_stateStatus.axisState = Tango::STANDBY;
this->_deviceURLAdress = deviceAdress;
initialize_connection(deviceAdress);
m_state_status.axisStatus = "StandardMotor plugin is ready";
m_state_status.axisState = Tango::STANDBY;
_deviceURLAdress = deviceAdress;
}
// ============================================================================
// GalilAxisPlugin::getAxisCurrentPosition
// StandardMotorPlugin::getAxisCurrentPosition
// ============================================================================
double GalilAxisPlugin::getAxisCurrentPosition()throw (Tango::DevFailed)
double StandardMotorPlugin::getAxisCurrentPosition()
{
Tango::DevDouble positionValue = NULL;
//First check if connexion is still alive
this->updateStateStatus();
if (_stateStatus.isConnexionOperational){
Tango::DeviceAttribute positionAttr = this->_galilAxisDevice->read_attribute(ATTR_POSITION_STR);
update_state_status();
if (m_state_status.isConnexionOperational)
{
Tango::DeviceAttribute positionAttr = m_standard_motor_device->read_attribute(ATTR_POSITION_STR);
positionAttr >> positionValue;
}
......@@ -101,87 +98,100 @@ double GalilAxisPlugin::getAxisCurrentPosition()throw (Tango::DevFailed)
}
// ============================================================================
// GalilAxisPlugin::getAxisUnit
// StandardMotorPlugin::getAxisUnit
// ============================================================================
std::string GalilAxisPlugin::getAxisUnit()throw (Tango::DevFailed)
std::string StandardMotorPlugin::getAxisUnit()
{
std::string axisUnit = "" ;
//First check if connexion is still alive
this->updateStateStatus();
if (_stateStatus.isConnexionOperational){
update_state_status();
if (m_state_status.isConnexionOperational)
{
std::string posAttrName = "Position";
Tango::AttributeInfoEx posAttributeInfo;
posAttributeInfo = this->_galilAxisDevice->get_attribute_config(posAttrName);
posAttributeInfo = m_standard_motor_device->get_attribute_config(posAttrName);
axisUnit = posAttributeInfo.unit;
}
return axisUnit;
}
// ============================================================================
// GalilAxisPlugin::setAxisPosition
// StandardMotorPlugin::setAxisPosition
// ============================================================================
void GalilAxisPlugin::setAxisPosition(double position)throw (Tango::DevFailed){
this->updateStateStatus();
if (_stateStatus.isConnexionOperational){
void StandardMotorPlugin::setAxisPosition(double position)
{
update_state_status();
if (m_state_status.isConnexionOperational)
{
Tango::DeviceAttribute* positionAttribute;
_stateStatus.axisState = Tango::MOVING;
_stateStatus.axisStatus = "Movement is starting..";
m_state_status.axisState = Tango::MOVING;
m_state_status.axisStatus = "Movement is starting..";
positionAttribute = new Tango::DeviceAttribute(ATTR_POSITION_STR, position);
this->_galilAxisDevice->write_attribute(*positionAttribute);
m_standard_motor_device->write_attribute(*positionAttribute);
}
}
// ============================================================================
// GalilAxisPlugin::moveAxisRelative
// StandardMotorPlugin::moveAxisRelative
// ============================================================================
void GalilAxisPlugin::moveAxisRelative(double relativeMovement)throw (Tango::DevFailed){
void StandardMotorPlugin::moveAxisRelative(double relativeMovement)
{
//First check if connexion is still alive
this->updateStateStatus();
if (_stateStatus.isConnexionOperational /*&& Normaly check if axe is moving, but its fake anyway*/){
_stateStatus.axisState = Tango::MOVING;
_stateStatus.axisStatus = "Movement is starting..";
update_state_status();
if (m_state_status.isConnexionOperational /*&& Normaly check if axe is moving, but its fake anyway*/)
{
m_state_status.axisState = Tango::MOVING;
m_state_status.axisStatus = "Movement is starting..";
double position = this->getAxisCurrentPosition();
double position = getAxisCurrentPosition();
double positionToWrite = position + relativeMovement;
Tango::DeviceAttribute* positionAttribute;
positionAttribute = new Tango::DeviceAttribute(ATTR_POSITION_STR, positionToWrite);
this->_galilAxisDevice->write_attribute(*positionAttribute);
m_standard_motor_device->write_attribute(*positionAttribute);
}
}
// ============================================================================
// GalilAxisPlugin::stopAxisMovement
// StandardMotorPlugin::stopAxisMovement
// ============================================================================
void GalilAxisPlugin::stopAxisMovement()throw (Tango::DevFailed){
void StandardMotorPlugin::stopAxisMovement()
{
Tango::DeviceData emptyData;
sendCommandToActuatorSystem(CMD_STOP_MOVEMENT, false, emptyData);
send_command_to_actuator_system(CMD_STOP_MOVEMENT, false, emptyData);
}
// ============================================================================
// GalilAxisPlugin::getAxisStatus
// StandardMotorPlugin::getAxisStateStatus
// ============================================================================
AS::ActuatorInterface::ActuatorInterface::AxisStateStatus GalilAxisPlugin::getAxisStateStatus()throw (Tango::DevFailed){
this->updateStateStatus();
return this->_stateStatus;
AS::ActuatorInterface::ActuatorInterface::AxisStateStatus StandardMotorPlugin::getAxisStateStatus()
{
update_state_status();
return m_state_status;
}
// ============================================================================
// GalilAxisPlugin::updateStateStatus
// StandardMotorPlugin::update_state_status
// ============================================================================
void GalilAxisPlugin::updateStateStatus(){
_stateStatus.axisState = this->_galilAxisDevice->state();
void StandardMotorPlugin::update_state_status()
{
m_state_status.axisState = m_standard_motor_device->state();
//in our case -> standby means ON
if(_stateStatus.axisState == Tango::STANDBY)
_stateStatus.axisState = Tango::ON;
_stateStatus.axisStatus = this->_galilAxisDevice->status();
if(m_state_status.axisState == Tango::STANDBY)
{
m_state_status.axisState = Tango::ON;
}
m_state_status.axisStatus = m_standard_motor_device->status();
}
// ============================================================================
// GalilAxisPlugin::sendCommandToActuatorSystem
// StandardMotorPlugin::send_command_to_actuator_system
// ============================================================================
void GalilAxisPlugin::sendCommandToActuatorSystem(std::string cmdName, bool args, Tango::DeviceData argsData){
void StandardMotorPlugin::send_command_to_actuator_system(std::string cmdName, bool args, Tango::DeviceData argsData)
{
if (args)
this->_galilAxisDevice->command_inout(cmdName, argsData);
{
m_standard_motor_device->command_inout(cmdName, argsData);
}
else
this->_galilAxisDevice->command_inout(cmdName);
{
m_standard_motor_device->command_inout(cmdName);
}
}
}// namespace GalilAxisPlugin
}// namespace StandardMotorPlugin
//=============================================================================
// GalilAxisPlugin.h
// StandardMotorPlugin.h
//=============================================================================
// abstraction.......Plugin to use a simulated axis in beam tracking position
// class.............GalilAxisPlugin
// class.............StandardMotorPlugin
// original author...Thiam- SOLEIL
//=============================================================================
......@@ -22,104 +22,100 @@
#include <yat4tango/LogHelper.h>
#include <iostream>
namespace GalilAxisPlugin
namespace StandardMotorPlugin
{
//=============================================================================
//! \class GalilAxisPluginInfo
//! \class StandardMotorPluginInfo
//! \brief Plugin infos class
//!
//! Inherits from yat::IPlugInInfo class.
//=============================================================================
class GalilAxisPluginInfo : public yat::IPlugInInfo
class StandardMotorPluginInfo : public yat::IPlugInInfo
{
public:
std::string get_plugin_id() const
{ return "galilAxis"; }
{
return "StandardMotor";
}
virtual std::string get_interface_name() const
{ return "ActuatorInterface"; }
{
return "ActuatorInterface";
}
virtual std::string get_version_number() const
{ return "1.0.0"; }
{
return "1.0.0";
}
};
//=============================================================================
//! \class GalilAxisPlugin
//! \class StandardMotorPlugin
//!
//! Inherits from BeamPositionTracking_ns::ActuatorInterface::ActuatorInterface class.
//=============================================================================
class GalilAxisPlugin : public AS::ActuatorInterface::ActuatorInterface,
class StandardMotorPlugin : public AS::ActuatorInterface::ActuatorInterface,
public yat4tango::TangoLogAdapter
{
public:
GalilAxisPlugin();
~GalilAxisPlugin();
StandardMotorPlugin();
~StandardMotorPlugin();
//-------------------------------------------------------------------------
// yat4tango::DevicePlugIn interface
//-------------------------------------------------------------------------
//!\brief Gets the plugin's specific properties.
void enumerate_properties (yat4tango::PlugInPropertyInfoList& propInfoList) const
throw (Tango::DevFailed);
void enumerate_properties (yat4tango::PlugInPropertyInfoList& propInfoList) const;
//!\brief Sets the plugin properties.
void set_properties (yat4tango::PlugInPropertyValueList& propValueList)
throw (Tango::DevFailed);
void set_properties (yat4tango::PlugInPropertyValueList& propValueList);
//!\brief Gets the plugin dynamic attributes.
void enumerate_attributes (yat4tango::DynamicAttributeDescriptionList& attrDescList) const
throw (Tango::DevFailed);
void enumerate_attributes (yat4tango::DynamicAttributeDescriptionList& attrDescList) const;
//-------------------------------------------------------------------------
// yat4tango::DevicePlugIn interface
//-------------------------------------------------------------------------
void init(Tango::DeviceImpl * host_device, std::string deviceAdress)
throw (Tango::DevFailed);
void init(Tango::DeviceImpl * host_device, std::string deviceAdress) ;
void setAxisPosition(double position)
throw (Tango::DevFailed);
void setAxisPosition(double position);
void moveAxisRelative(double relativeMovement)
throw (Tango::DevFailed);
void moveAxisRelative(double relativeMovement) ;
void stopAxisMovement()
throw (Tango::DevFailed);
void stopAxisMovement() ;
double getAxisCurrentPosition()
throw (Tango::DevFailed);
double getAxisCurrentPosition() ;
std::string getAxisUnit()
throw (Tango::DevFailed);
std::string getAxisUnit();
AS::ActuatorInterface::ActuatorInterface::AxisStateStatus getAxisStateStatus()
throw (Tango::DevFailed);
AS::ActuatorInterface::ActuatorInterface::AxisStateStatus getAxisStateStatus();
private:
AS::ActuatorInterface::ActuatorInterface::AxisStateStatus _stateStatus;
AS::ActuatorInterface::ActuatorInterface::AxisStateStatus m_state_status;
bool _galilAxisProxyInit;
bool m_standard_motor_proxy_init;
void initialize_connection(std::string deviceAdress);
void sendCommandToActuatorSystem(std::string cmdName, bool args, Tango::DeviceData argsData);
void send_command_to_actuator_system(std::string cmdName, bool args, Tango::DeviceData argsData);
// mp_galilAxisDevice: device to access axis
Tango::DeviceProxy *_galilAxisDevice;
std::string _galilAxisDeviceDeviceAdressStr;
// m_standard_motor_device: device to access axis
Tango::DeviceProxy *m_standard_motor_device;
std::string m_standard_motor_device_adress_str;
void updateStateStatus();
void update_state_status();
std::string _deviceURLAdress;
};
} // namespace GalilAxisPlugin
} // namespace StandardMotorPlugin
......
......@@ -4,7 +4,7 @@
<parent>
<groupId>fr.soleil.device</groupId>
<artifactId>ActuatorSystem</artifactId>
<version>1.0.8-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</parent>
<groupId>fr.soleil.device.ActuatorSystem</groupId>
......@@ -77,8 +77,7 @@
</build>
<modules>
<module>SimulatedAxisPlugin</module>
<module>GalilAxisPlugin</module>
<module>StandardMotorPlugin</module>
</modules>
</project>
......@@ -148,8 +148,7 @@ The language device desctructor automatically calls the <i> delete_device() </i>
<A NAME="ApplyRelativeMovementOnAxes"><!-- --></A>
<h2>7 - ApplyRelativeMovementOnAxes</h2>
<ul>
<Li><Strong>Description: </Strong> Argin[0] = movementOnXAxis;
Argin[1] = movementOnYAxis<Br>&nbsp
<Li><Strong>Description: </Strong> Argin[1] = movementOnYAxis<Br>&nbsp
<Li><Strong>Argin:<Br>DEVVAR_DOUBLEARRAY</Strong>
: <Br>&nbsp
<Li><Strong>Argout:<Br>DEV_VOID</Strong>
......
......@@ -68,11 +68,13 @@ Revision: - Author: Thiam F.
<Tr><Td><b><a href=#Dev_DefaultValues>XAxisPluginType </a></b></Td>
<Td><Font Size=-1>Tango::DEV_STRING</Font></Td>
<Td><Font Size=-1>X Axis plugin type</Font></Td></Tr>
<Td><Font Size=-1>X Axis plugin type.
Available values: StandardMotor ( Supports: GalilAxis, SimulatedMotor and PowerPMACAxis )</Font></Td></Tr>
<Tr><Td><b><a href=#Dev_DefaultValues>YAxisPluginType </a></b></Td>
<Td><Font Size=-1>Tango::DEV_STRING</Font></Td>
<Td><Font Size=-1>Y Axis plugin type</Font></Td></Tr>
<Td><Font Size=-1>Y Axis plugin type.
Available values: StandardMotor ( Supports: GalilAxis, SimulatedMotor and PowerPMACAxis )</Font></Td></Tr>
<Tr><Td><b><a href=#Dev_DefaultValues>YAxisPluginPath </a></b></Td>
<Td><Font Size=-1>Tango::DEV_STRING</Font></Td>
......@@ -126,11 +128,11 @@ In simulated mode, this device will only read state/status and positions from ax
</Tr>
<Tr>
<Td>XAxisPluginType</Td>
<td>No default value</td>
<td>StandardMotor</td>
</Tr>
<Tr>
<Td>YAxisPluginType</Td>
<td>No default value</td>
<td>StandardMotor</td>
</Tr>
<Tr>
<Td>YAxisPluginPath</Td>
......@@ -146,23 +148,23 @@ In simulated mode, this device will only read state/status and positions from ax
</Tr>
<Tr>
<Td>XAxisMaxPosition</Td>
<td>No default value</td>
<td>1</td>
</Tr>
<Tr>
<Td>XAxisMinPosition</Td>
<td>No default value</td>
<td>0</td>
</Tr>
<Tr>
<Td>YAxisMaxPosition</Td>
<td>No default value</td>
<td>1</td>
</Tr>
<Tr>
<Td>YAxisMinPosition</Td>
<td>No default value</td>
<td>0</td>
</Tr>
<Tr>
<Td>DeviceMode</Td>
<td>No default value</td>
<td>SIMULATED</td>
</Tr>
</Table>
......
......@@ -117,11 +117,13 @@ This device should be used for BeamPositionTracking application only. This devic
<Tr><Td><b><a href=#Dev_DefaultValues>XAxisPluginType </a></b></Td>
<Td><Font Size=-1>Tango::DEV_STRING</Font></Td>
<Td><Font Size=-1>X Axis plugin type</Font></Td></Tr>
<Td><Font Size=-1>X Axis plugin type.
Available values: StandardMotor ( Supports: GalilAxis, SimulatedMotor and PowerPMACAxis )</Font></Td></Tr>
<Tr><Td><b><a href=#Dev_DefaultValues>YAxisPluginType </a></b></Td>
<Td><Font Size=-1>Tango::DEV_STRING</Font></Td>
<Td><Font Size=-1>Y Axis plugin type</Font></Td></Tr>
<Td><Font Size=-1>Y Axis plugin type.
Available values: StandardMotor ( Supports: GalilAxis, SimulatedMotor and PowerPMACAxis )</Font></Td></Tr>
<Tr><Td><b><a href=#Dev_DefaultValues>YAxisPluginPath </a></b></Td>
<Td><Font Size=-1>Tango::DEV_STRING</Font></Td>
......@@ -175,11 +177,11 @@ In simulated mode, this device will only read state/status and positions from ax
</Tr>
<Tr>
<Td>XAxisPluginType</Td>
<td>No default value</td>
<td>StandardMotor</td>
</Tr>
<Tr>
<Td>YAxisPluginType</Td>
<td>No default value</td>
<td>StandardMotor</td>
</Tr>
<Tr>
<Td>YAxisPluginPath</Td>
......@@ -195,23 +197,23 @@ In simulated mode, this device will only read state/status and positions from ax
</Tr>
<Tr>
<Td>XAxisMaxPosition</Td>
<td>No default value</td>
<td>1</td>
</Tr>
<Tr>
<Td>XAxisMinPosition</Td>
<td>No default value</td>
<td>0</td>
</Tr>
<Tr>
<Td>YAxisMaxPosition</Td>
<td>No default value</td>
<td>1</td>
</Tr>
<Tr>
<Td>YAxisMinPosition</Td>
<td>No default value</td>
<td>0</td>
</Tr>
<Tr>
<Td>DeviceMode</Td>
<td>No default value</td>
<td>SIMULATED</td>
</Tr>
</Table>
......@@ -449,8 +451,7 @@ The language device desctructor automatically calls the <i> delete_device() </i>
<A NAME="ApplyRelativeMovementOnAxes"><!-- --></A>
<h2>7 - ApplyRelativeMovementOnAxes</h2>
<ul>
<Li><Strong>Description: </Strong> Argin[0] = movementOnXAxis;
Argin[1] = movementOnYAxis<Br>&nbsp
<Li><Strong>Description: </Strong> Argin[1] = movementOnYAxis<Br>&nbsp
<Li><Strong>Argin:<Br>DEVVAR_DOUBLEARRAY</Strong>
: <Br>&nbsp
<Li><Strong>Argout:<Br>DEV_VOID</Strong>
......
......@@ -4,7 +4,7 @@
<parent>
<groupId>fr.soleil.device</groupId>
<artifactId>ActuatorSystem</artifactId>
<version>1.0.8-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</parent>
<groupId>fr.soleil.device.ActuatorSystem</groupId>
......@@ -39,7 +39,6 @@
<defines>
<define>PROJECT_NAME=${project.name}</define>
<define>PROJECT_VERSION=${project.version}</define>
<define>actuatorSystem_PROJECT_VERSION=${actuatorSystem.version}</define>
</defines>
</cpp>
</configuration>
......@@ -62,13 +61,7 @@
</dependency>
<dependency>
<groupId>fr.soleil.device.ActuatorSystem.ActuatorPlugins</groupId>
<artifactId>GalilAxisPlugin-${aol}-shared-${mode}</artifactId>
<version>${project.version}</version>
<scope>runtime></scope>
</dependency>
<dependency>
<groupId>fr.soleil.device.ActuatorSystem.ActuatorPlugins</groupId>
<artifactId>SimulatedAxisPlugin-${aol}-shared-${mode}</artifactId>
<artifactId>StandardMotorPlugin-${aol}-shared-${mode}</artifactId>
<version>${project.version}</version>
<scope>runtime></scope>
</dependency>
......
This diff is collapsed.
......@@ -88,8 +88,8 @@ public:
//COMMANDS
void i_setXAxisCalibrationState(bool state)throw (Tango::DevFailed);
void i_setYAxisCalibrationState(bool state)throw (Tango::DevFailed);
void i_setXAxisCalibrationState(bool state);
void i_setYAxisCalibrationState(bool state);
void i_moveXAxis(double movement);
void i_moveYAxis(double movement);
......@@ -103,8 +103,7 @@ public:
protected:
//- process_message (implements yat4tango::DeviceTask pure virtual method)
virtual void process_message (yat::Message& msg)
throw (Tango::DevFailed);
virtual void process_message (yat::Message& msg);
//Mutex for data access
yat::Mutex m_dataMutex;
......
......@@ -104,17 +104,22 @@ void ActuatorSystem::delete_device()
{
if (_taskManager)
{
delete _taskManager;
}
// delete _dynAttrManager
if (this->_dynAttrManager){
try{
_dynAttrManager->remove_attributes();
// delete m_dyn_attr_manager
if (m_dyn_attr_manager)
{
try
{
m_dyn_attr_manager->remove_attributes();
}
catch (...){
catch (...)
{
}
delete this->_dynAttrManager;
this->_dynAttrManager = NULL;
delete m_dyn_attr_manager;
m_dyn_attr_manager = NULL;
}
// Delete device allocated objects
......@@ -137,45 +142,52 @@ void ActuatorSystem::delete_device()
//-----------------------------------------------------------------------------
void ActuatorSystem::init_device()
{
// Initialise variables to default values
//--------------------------------------------
get_device_property();
CREATE_SCALAR_ATTRIBUTE(attr_isYCalibrated_read, false);
CREATE_SCALAR_ATTRIBUTE(attr_isXCalibrated_read, false);
CREATE_SCALAR_ATTRIBUTE(attr_isSystemReady_read, false);
_dynAttrManager = 0;
m_dyn_attr_manager = 0;
_taskManager = 0;
this->_initDone = false;
_initDone = false;
INFO_STREAM << "Create the InnerAppender in order to manage logs." << endl;
yat4tango::InnerAppender::initialize(this);
INFO_STREAM << "Create the DeviceInfo in order to manage info on versions." << endl;
yat4tango::DeviceInfo::initialize( this, YAT_XSTR(PROJECT_NAME), YAT_XSTR(PROJECT_VERSION));
yat4tango::DeviceInfo::add_dependency(this, "ActuatorSystem ", YAT_XSTR(actuatorSystem_PROJECT_VERSION));
INFO_STREAM << "ActuatorSystem::ActuatorSystem() create device " << device_name << endl;
std::string propertiesState = check_properties();
if (propertiesState != PROPERTIES_OK){
if (propertiesState != PROPERTIES_OK)
{
set_status (propertiesState);
set_state (Tango::FAULT);
}else{
}
else
{
bool simulated_mode = true;
//check Mode
if (deviceMode == NORMAL_MODE)
{
simulated_mode = false;
}
// Creation of dynAttrManager
try{
_dynAttrManager = new yat4tango::DynamicAttributeManager(this);
}catch( Tango::DevFailed& df ){
try
{
m_dyn_attr_manager = new yat4tango::DynamicAttributeManager(this);
}
catch( Tango::DevFailed& df )
{
ERROR_STREAM << df << std::endl;
set_status ("Initialization error [Tango Exception caught while instantiating DynamicAttributeManager]");
set_state (Tango::FAULT);
return;
}
catch(...){
catch(...)
{
std::string err_msg = "Initialization error [unknown exception caught while instantiating DynamicAttributeManager]";
ERROR_STREAM << err_msg << std::endl;
set_status (err_msg);
......@@ -192,21 +204,25 @@ void ActuatorSystem::init_device()
yAxisMinPositionInt = (int) yAxisMinPosition;
// Creation of ASTaskManager
try{
_taskManager = new ASTaskManager::ASTaskManager(this, _dynAttrManager,
try
{
_taskManager = new ASTaskManager::ASTaskManager(this, m_dyn_attr_manager,
xAxisPluginType, xAxisDeviceAdress,
yAxisPluginType, yAxisDeviceAdress,
xAxisPluginPath, yAxisPluginPath,
xAxisMinPositionInt, xAxisMaxPositionInt,
yAxisMinPositionInt, yAxisMaxPositionInt,
simulated_mode);
}catch( Tango::DevFailed& df ){
}
catch( Tango::DevFailed& df )
{
ERROR_STREAM << df << std::endl;
set_status ("Initialization error [Tango Exception caught while instantiating ASTaskManager]");
set_state (Tango::FAULT);
return;
}
catch(...){
catch(...)
{
std::string err_msg = "Initialization error [unknown exception caught while instantiating ASTaskManager]";
ERROR_STREAM << err_msg << std::endl;
set_status (err_msg);
......@@ -241,7 +257,7 @@ void ActuatorSystem::init_device()
_taskManager = NULL;
return;
}
this->_initDone = true;
_initDone = true;
//Task has been initialized, get axes units
setAxesUnits(_taskManager->i_getAxesUnits());
}
......@@ -253,11 +269,11 @@ void ActuatorSystem::init_device()
// description : To set units on xPosition and yPosition attributes
//
//-----------------------------------------------------------------------------
void ActuatorSystem::setAxesUnits(ASTaskManager::AxesUnits axesUnits){
void ActuatorSystem::setAxesUnits(ASTaskManager::AxesUnits axesUnits)
{
std::string xAxisUnit = axesUnits.xAxisUnit;
std::string yAxisUnit = axesUnits.yAxisUnit;
vector<string> vecPositionsAttributes;
Tango::DevVarStringArray dvsa_attribute;
vecPositionsAttributes.push_back("xPosition");
......@@ -432,8 +448,8 @@ void ActuatorSystem::get_device_property()
// End of Automatic code generation
//------------------------------------------------------------------
yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, "SimulatedAxis", "XAxisPluginType");
yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, "SimulatedAxis", "YAxisPluginType");
yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, "StandardMotor", "XAxisPluginType");
yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, "StandardMotor", "YAxisPluginType");
yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, "Precise/which/device", "XAxisPluginPath");
yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, "Precise/which/device", "YAxisPluginPath");
yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, "Precise/which/device", "XAxisDeviceAdress");
......@@ -444,6 +460,9 @@ void ActuatorSystem::get_device_property()
yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, "1", "YAxisMaxPosition");
yat4tango::PropertyHelper::create_property_if_empty(this, dev_prop, "SIMULATED", "DeviceMode");
std::transform(xAxisPluginType.begin(), xAxisPluginType.end(), xAxisPluginType.begin(), ::toupper);
std::transform(yAxisPluginType.begin(), yAxisPluginType.end(), yAxisPluginType.begin(), ::toupper);
}
//+----------------------------------------------------------------------------
//
......@@ -454,8 +473,10 @@ void ActuatorSystem::get_device_property()
//-----------------------------------------------------------------------------
void ActuatorSystem::always_executed_hook()
{
if(_initDone){
if (_taskManager){
if(_initDone)
{
if (_taskManager)
{
// Refresh beam data
ASTaskManager::ASTaskManager::TaskManagerDataPacket managerDataPacket = _taskManager->i_getManagerDataPacket();
// Update attributs values
......@@ -494,13 +515,18 @@ void ActuatorSystem::write_xPosition(Tango::WAttribute &attr)
double newXPosition;
attr.get_write_value(newXPosition);
if(_initDone){
if (_taskManager){
try{
if(_initDone)
{
if (_taskManager)
{
try
{
set_state(Tango::MOVING);
set_status("Starting movement on x axis...");
_taskManager->i_setXAxisPosition(newXPosition);
}catch(Tango::DevFailed &df){
}
catch(Tango::DevFailed &df)
{
RETHROW_DEVFAILED(df,"","","");
}
}
......@@ -520,13 +546,18 @@ void ActuatorSystem::write_yPosition(Tango::WAttribute &attr)
double newYPosition;
attr.get_write_value(newYPosition);
if(_initDone){
if(_taskManager){
try{
if(_initDone)
{
if(_taskManager)
{
try
{
set_state(Tango::MOVING);
set_status("Starting movement on y axis...");
_taskManager->i_setYAxisPosition(newYPosition);
}catch(Tango::DevFailed &df){
}
catch(Tango::DevFailed &df)
{
RETHROW_DEVFAILED(df,"","","");
}
}
......@@ -543,7 +574,7 @@ void ActuatorSystem::write_yPosition(Tango::WAttribute &attr)
void ActuatorSystem::read_isSystemReady(Tango::Attribute &attr)
{
DEBUG_STREAM << "ActuatorSystem::read_isSystemReady(Tango::Attribute &attr) entering... "<< endl;
if (*attr_isXCalibrated_read && *attr_isYCalibrated_read && (this->get_state() == Tango::ON))
if (*attr_isXCalibrated_read && *attr_isYCalibrated_read && (get_state() == Tango::ON))
*attr_isSystemReady_read = true;
else
*attr_isSystemReady_read = false;
......@@ -680,13 +711,17 @@ void ActuatorSystem::write_isXCalibrated(Tango::WAttribute &attr)
{
DEBUG_STREAM << "ActuatorSystem::write_isXCalibrated(Tango::WAttribute &attr) entering... "<< endl;
if(_initDone){
if (_taskManager){
if(_initDone)
{
if (_taskManager)
{
attr.get_write_value(attr_isXCalibrated_write);
double tmpXRatio = attr_xLinearRatio_write;
//Check value of xLinearRatio
if(attr_isXCalibrated_write){
if(tmpXRatio != 0){
if(attr_isXCalibrated_write)
{
if(tmpXRatio != 0)
{
_taskManager->i_setXAxisCalibrationState(true);
//Update read value
*attr_isXCalibrated_read = attr_isXCalibrated_write;
......@@ -699,7 +734,8 @@ void ActuatorSystem::write_isXCalibrated(Tango::WAttribute &attr)
(const char *)"ActuatorSystem::write_isXCalibrated(Tango::WAttribute &attr)");
}
}
else{
else
{
*attr_isXCalibrated_read = attr_isXCalibrated_write;
_taskManager->i_setXAxisCalibrationState(false);
}
......@@ -730,13 +766,17 @@ void ActuatorSystem::read_isYCalibrated(Tango::Attribute &attr)
void ActuatorSystem::write_isYCalibrated(Tango::WAttribute &attr)
{
DEBUG_STREAM << "ActuatorSystem::write_isYCalibrated(Tango::WAttribute &attr) entering... "<< endl;
if(_initDone){
if (_taskManager){
if(_initDone)
{
if (_taskManager)
{
attr.get_write_value(attr_isYCalibrated_write);
double tmpYRatio = attr_yLinearRatio_write;
//Check value of xLinearRatio
if(attr_isYCalibrated_write){
if(tmpYRatio != 0){
if(attr_isYCalibrated_write)
{
if(tmpYRatio != 0)
{
//To apply last value of ratio, will also set calibrated state to true
_taskManager->i_setYAxisCalibrationState(true);
//Update read value
......@@ -750,7 +790,8 @@ void ActuatorSystem::write_isYCalibrated(Tango::WAttribute &attr)
(const char *)"ActuatorSystem::write_isXCalibrated(Tango::WAttribute &attr)");
}
}
else{
else
{
*attr_isYCalibrated_read = attr_isYCalibrated_write;
_taskManager->i_setYAxisCalibrationState(false);
}
......@@ -823,11 +864,16 @@ void ActuatorSystem::write_yLinearRatio(Tango::WAttribute &attr)
void ActuatorSystem::stop_axes()
{
DEBUG_STREAM << "ActuatorSystem::stop_axes(): entering... !" << endl;
if(_initDone){
if (_taskManager){
try{
if(_initDone)
{
if (_taskManager)
{
try
{
_taskManager->i_stopAxes();
}catch(Tango::DevFailed &df){
}
catch(Tango::DevFailed &df)
{
RETHROW_DEVFAILED(df,"","","");
}
}
......@@ -848,16 +894,22 @@ void ActuatorSystem::stop_axes()
void ActuatorSystem::move_xaxis_relative(Tango::DevDouble argin)
{
DEBUG_STREAM << "ActuatorSystem::move_xaxis_relative(): entering... !" << endl;
if(_initDone){
if (_taskManager){
if(argin != 0){
try{
if(_initDone)
{
if (_taskManager)
{
if(argin != 0)
{
try
{
set_state(Tango::MOVING);
set_status("Starting movement on x axis...");
double relativeMovement = argin;
_taskManager->i_moveXAxis(relativeMovement);
}catch(Tango::DevFailed &df){
}
catch(Tango::DevFailed &df)
{
RETHROW_DEVFAILED(df,"","","");
}
}
......@@ -879,16 +931,22 @@ void ActuatorSystem::move_xaxis_relative(Tango::DevDouble argin)
void ActuatorSystem::move_yaxis_relative(Tango::DevDouble argin)
{
DEBUG_STREAM << "ActuatorSystem::move_yaxis_relative(): entering... !" << endl;
if(_initDone){
if (_taskManager){
if(argin != 0){
try{
if(_initDone)
{
if (_taskManager)
{
if(argin != 0)
{
try
{
set_state(Tango::MOVING);
set_status("Starting movement on y axis...");
double relativeMovement = argin;
_taskManager->i_moveYAxis(relativeMovement);
}catch(Tango::DevFailed &df){
}
catch(Tango::DevFailed &df)
{
RETHROW_DEVFAILED(df,"","","");
}
}
......@@ -901,7 +959,6 @@ void ActuatorSystem::move_yaxis_relative(Tango::DevDouble argin)
* method: ActuatorSystem::apply_relative_movement_on_axes
*
* description: method to execute "ApplyRelativeMovementOnAxes"
* Argin[0] = movementOnXAxis;
* Argin[1] = movementOnYAxis
*
* @param argin
......@@ -912,23 +969,29 @@ void ActuatorSystem::apply_relative_movement_on_axes(const Tango::DevVarDoubleAr
{
DEBUG_STREAM << "ActuatorSystem::apply_relative_movement_on_axes(): entering... !" << endl;
if(_initDone){
if (_taskManager){
if(_initDone)
{
if (_taskManager)
{
double xRelativeMovement;
double yRelativeMovement;
xRelativeMovement = (double)(*argin)[0];
yRelativeMovement = (double)(*argin)[1];
if ((xRelativeMovement != 0) || (yRelativeMovement != 0)){
if ((xRelativeMovement != 0) || (yRelativeMovement != 0))
{
set_state(Tango::MOVING);
set_status("Applying pixel correction on axes");
try{
try
{
double xRelativeMovementToSet = (double)(attr_xLinearRatio_write * xRelativeMovement);
double yRelativeMovementToSet = (double)(attr_yLinearRatio_write * yRelativeMovement);
_taskManager->i_moveAxes(xRelativeMovementToSet, yRelativeMovementToSet);
}catch(Tango::DevFailed &df){
}
catch(Tango::DevFailed &df)
{
RETHROW_DEVFAILED(df,"","","");
}
}
......@@ -943,7 +1006,8 @@ void ActuatorSystem::apply_relative_movement_on_axes(const Tango::DevVarDoubleAr
// description : To check if properties are ok...
//
//-----------------------------------------------------------------------------
std::string ActuatorSystem::check_properties(){
std::string ActuatorSystem::check_properties()
{
if (yAxisMinPosition >= yAxisMaxPosition)
return "YAxisMinPosition can't be superior to YAxisMaxPosition";
if (xAxisMinPosition >= xAxisMaxPosition)
......@@ -970,4 +1034,6 @@ std::string ActuatorSystem::check_properties(){
} // namespace
......@@ -119,11 +119,13 @@ public :
*/
string xAxisPluginPath;
/**
* X Axis plugin type
* X Axis plugin type.
* Available values: StandardMotor ( Supports: GalilAxis, SimulatedMotor and PowerPMACAxis )
*/
string xAxisPluginType;
/**
* Y Axis plugin type
* Y Axis plugin type.
* Available values: StandardMotor ( Supports: GalilAxis, SimulatedMotor and PowerPMACAxis )
*/
string yAxisPluginType;
/**
......@@ -385,7 +387,6 @@ public :
*/
void move_yaxis_relative(Tango::DevDouble);
/**
* Argin[0] = movementOnXAxis;
* Argin[1] = movementOnYAxis
* @param argin
* @exception DevFailed
......@@ -409,7 +410,7 @@ protected :
public :
yat4tango::DynamicAttributeManager* _dynAttrManager;
yat4tango::DynamicAttributeManager* m_dyn_attr_manager;
private :
......
......@@ -511,9 +511,10 @@ void ActuatorSystemClass::set_default_property()
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "XAxisPluginType";
prop_desc = "X Axis plugin type";
prop_def = "";
prop_desc = "X Axis plugin type.\nAvailable values: StandardMotor ( Supports: GalilAxis, SimulatedMotor and PowerPMACAxis )";
prop_def = "StandardMotor";
vect_data.clear();
vect_data.push_back("StandardMotor");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
......@@ -525,9 +526,10 @@ void ActuatorSystemClass::set_default_property()
add_wiz_dev_prop(prop_name, prop_desc);
prop_name = "YAxisPluginType";
prop_desc = "Y Axis plugin type";
prop_def = "";
prop_desc = "Y Axis plugin type.\nAvailable values: StandardMotor ( Supports: GalilAxis, SimulatedMotor and PowerPMACAxis )";
prop_def = "StandardMotor";
vect_data.clear();
vect_data.push_back("StandardMotor");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
......@@ -582,8 +584,9 @@ void ActuatorSystemClass::set_default_property()
prop_name = "XAxisMaxPosition";
prop_desc = "Set maximum position of X axis, in axis position's unit...";
prop_def = "";
prop_def = "1";
vect_data.clear();
vect_data.push_back("1");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
......@@ -596,8 +599,9 @@ void ActuatorSystemClass::set_default_property()
prop_name = "XAxisMinPosition";
prop_desc = "Set minimum position of X axis, in axis position's unit...";
prop_def = "";
prop_def = "0";
vect_data.clear();
vect_data.push_back("0");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
......@@ -610,8 +614,9 @@ void ActuatorSystemClass::set_default_property()
prop_name = "YAxisMaxPosition";
prop_desc = "Set maximum position of Y axis, in axis position's unit...";
prop_def = "";
prop_def = "1";
vect_data.clear();
vect_data.push_back("1");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
......@@ -624,8 +629,9 @@ void ActuatorSystemClass::set_default_property()
prop_name = "YAxisMinPosition";
prop_desc = "Set minimum position of Y axis, in axis position's unit...";
prop_def = "";
prop_def = "0";
vect_data.clear();
vect_data.push_back("0");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
......@@ -638,8 +644,9 @@ void ActuatorSystemClass::set_default_property()
prop_name = "DeviceMode";
prop_desc = "Either NORMAL or SIMULATED;\nIn simulated mode, this device will only read state/status and positions from axes, it will not send any new positions....";
prop_def = "";
prop_def = "SIMULATED";
vect_data.clear();
vect_data.push_back("SIMULATED");
if (prop_def.length()>0)
{
Tango::DbDatum data(prop_name);
......
......@@ -29,25 +29,19 @@ class ActuatorInterface : public yat4tango::DevicePlugIn
Tango::DevState axisState;
};
virtual void init(Tango::DeviceImpl * host_device, std::string deviceAdress)
throw (Tango::DevFailed) = 0;
virtual void init(Tango::DeviceImpl * host_device, std::string deviceAdress) = 0;
//SETTER
virtual void setAxisPosition(double position)
throw (Tango::DevFailed) = 0;
virtual void setAxisPosition(double position) = 0;
virtual void moveAxisRelative(double relativeMovement)
throw (Tango::DevFailed) = 0;
virtual void moveAxisRelative(double relativeMovement) = 0;
virtual void stopAxisMovement()
throw (Tango::DevFailed) = 0;
virtual void stopAxisMovement() = 0;
//GETTER
virtual double getAxisCurrentPosition()
throw (Tango::DevFailed) = 0;
virtual double getAxisCurrentPosition() = 0;
virtual std::string getAxisUnit()
throw (Tango::DevFailed) = 0;
virtual std::string getAxisUnit() = 0;
// Plugin is supposed to return his state this way:
// - ON -> Device is ready to move
......@@ -55,8 +49,7 @@ class ActuatorInterface : public yat4tango::DevicePlugIn
// - STANDBY - > Device is waiting for an action (in this state : init/Standby/off ...)
// - FAULT -> Device is not available (off)
virtual AxisStateStatus getAxisStateStatus()
throw (Tango::DevFailed) = 0;
virtual AxisStateStatus getAxisStateStatus() = 0;
};
} // namespace Actuator Interface
......
......@@ -4,7 +4,7 @@
<parent>
<groupId>fr.soleil.device</groupId>
<artifactId>ActuatorSystem</artifactId>
<version>1.0.8-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</parent>
<groupId>fr.soleil.device.ActuatorSystem</groupId>
......
pom.xml 100644 → 100755
......@@ -10,7 +10,7 @@
<groupId>fr.soleil.device</groupId>
<artifactId>ActuatorSystem</artifactId>
<version>1.0.8-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment