Simple cpp example showing how to read attributes and properties.
/* * example of a client using the TANGO C++ api. */ #include <tango.h> using namespace Tango; main(unsigned int argc, char **argv) { unsigned long temp; float out; int nb_read; DeviceAttribute da; long acceleration; long base_rate; long slew_rate; double current_unit_position; // // create a connection to a TANGO device // DeviceProxy *device = new DeviceProxy( "tango://has107k:10000/exp/line1/mot1"); // Read the state DevState dev_state; dev_state = device->state(); // Read attributes da = device->read_attribute("Acceleration"); da >> acceleration; cout << "Acceleration " << acceleration << endl; da = device->read_attribute("BaseRate"); da >> base_rate; cout << " BaseRate " << base_rate << endl; da = device->read_attribute("SlewRate"); da >> slew_rate; cout << "SlewRate " << slew_rate << endl; // Write value to attribute DeviceAttribute *da_write = new DeviceAttribute( "Acceleration", (long)20); device->write_attribute(*da_write); // Read Properties DbData prop; prop.push_back(DbDatum("Base")); prop.push_back(DbDatum("Channel")); prop.push_back(DbDatum("AccuMin")); prop.push_back(DbDatum("AccuMax")); prop.push_back(DbDatum("SlewRateMinHw")); device->get_property(prop); unsigned long base; unsigned long channel; long accu_min; long accu_max; unsigned long slew_rate_min_hw; prop[0] >> base; prop[1] >> channel; prop[2] >> accu_min; prop[3] >> accu_max; prop[4] >> slew_rate_min_hw; cout << "Base " << base << " Channel " << channel << " AccuMin " << accu_min << " AccuMax " << accu_max << " SlewRateMinHw " << slew_rate_min_hw << endl; // Write new value to existing properties or insert new ones. unsigned long base_temp = 61440; unsigned long channel_temp = 0; DbDatum base_toput("Base"), channel_toput("Channel"); DbData db_data; base_toput << base_temp; channel_toput << channel_temp; db_data.push_back(base_toput); db_data.push_back(channel_toput); device->put_property(db_data); // Execute command without arguments device->command_inout( "StartMove"); // Execute command with arguments DeviceData units_to_move_to_tmp; double units_to_move_to = 1000; units_to_move_to_tmp << units_to_move_to; device->command_inout( "SetupUnitMove", units_to_move_to_tmp); // Read string properties (for example for dynamic attributes) DbData prop1; prop1.push_back(DbDatum("dyNbUnitsToMoveTo")); prop1.push_back(DbDatum("dyNbMotorName")); DeviceProxy *device1 = new DeviceProxy( "tango://has107k:10000/exp/test/mm1"); device1->get_property(prop1); if ((prop1[0].is_empty() == false)){ vector<string> temp; short int length; prop1[0] >> temp; length = prop1[0].size(); cout << "Teresa: de prop1 " << prop1[0].size() << " " << temp[0].c_str() << " " << temp[1].c_str() << endl; } if ((prop1[1].is_empty() == false)){ vector<string> temp; short int length; prop1[1] >> temp; length = prop1[1].size(); cout << "Teresa: de prop1 " << length << " " << prop1[1].size() << " " << temp[0].c_str() << " " << temp[1].c_str() << endl; } }
Cpp example for setting the properties and attributes of a new OmsVme58 Device to default values.
/* * File for setting the properties and attributes of a new OmsVme58 device to * default values. * */ #include <tango.h> using namespace Tango; main(unsigned int argc, char **argv) { // // create a connection to the new OmsVme58 TANGO device // DeviceProxy *device = new DeviceProxy( "tango://has107k:10000/exp/line1/mot2"); // Write value to attributes DeviceAttribute *da_write1 = new DeviceAttribute( "Acceleration", (long)500000); device->write_attribute(*da_write1); DeviceAttribute *da_write2 = new DeviceAttribute( "BaseRate", (long)1000); device->write_attribute(*da_write2); DeviceAttribute *da_write3 = new DeviceAttribute("Conversion", (double)10); device->write_attribute(*da_write3); DeviceAttribute *da_write4 = new DeviceAttribute("SettleTime", (double)0.1); device->write_attribute(*da_write4); DeviceAttribute *da_write5 = new DeviceAttribute("SlewRate", (long)1000); device->write_attribute(*da_write5); DeviceAttribute *da_write6 = new DeviceAttribute("SlewRateMax", (long)134938064); device->write_attribute(*da_write6); DeviceAttribute *da_write7 = new DeviceAttribute("SlewRateMin", (long)1); device->write_attribute(*da_write7); DeviceAttribute *da_write8 = new DeviceAttribute("UnitCalibration", (double)0); device->write_attribute(*da_write8); DeviceAttribute *da_write9 = new DeviceAttribute("StepCalibration", (long)0); device->write_attribute(*da_write9); DeviceAttribute *da_write10 = new DeviceAttribute("StepBacklash", (long)100); device->write_attribute(*da_write10); DeviceAttribute *da_write11 = new DeviceAttribute("StepLimitMax", (long)1000000); device->write_attribute(*da_write11); DeviceAttribute *da_write12 = new DeviceAttribute("StepLimitMin", (long)-1000000); device->write_attribute(*da_write12); // Write default values to properties unsigned long base = 61440; unsigned long channel = 0; long accu_min = -3350000; long accu_max = 3350000; unsigned long slew_rate_min_hw = 0; unsigned long slew_rate_max_hw = 1044000; unsigned long acceleration_min_hw = 0; unsigned long acceleration_max_hw = 1000000000; unsigned short type = 0; DbDatum base_toput("Base"), channel_toput("Channel"); DbDatum accu_min_toput("AccuMin"), accu_max_toput("AccuMax"); DbDatum slew_rate_min_hw_toput("SlewRateMinHw"), slew_rate_max_hw_toput("SlewRateMaxHw"); DbDatum acceleration_min_hw_toput("AccelerationMinHw"), acceleration_max_hw_toput("AccelerationMaxHw"); DbDatum type_toput("Type"); DbData db_data; base_toput << base; channel_toput << channel; accu_min_toput << accu_min; accu_max_toput << accu_max; slew_rate_min_hw_toput << slew_rate_min_hw; slew_rate_max_hw_toput << slew_rate_max_hw; acceleration_min_hw_toput << acceleration_min_hw; acceleration_max_hw_toput << acceleration_max_hw; type_toput << type; db_data.push_back(base_toput); db_data.push_back(channel_toput); db_data.push_back(accu_min_toput); db_data.push_back(accu_max_toput); db_data.push_back(slew_rate_min_hw_toput); db_data.push_back(slew_rate_max_hw_toput); db_data.push_back(acceleration_min_hw_toput); db_data.push_back(acceleration_max_hw_toput); db_data.push_back(type_toput); device->put_property(db_data); }