የታንጎ መቆጣጠሪያዎች

የታንጎ መቆጣጠሪያዎች

ምን ታንጎ?

የተለያዩ ሃርድዌር እና ሶፍትዌሮችን የማስተዳደር ስርዓት ነው።
TANGO በአሁኑ ጊዜ 4 መድረኮችን ይደግፋል፡ ሊኑክስ፣ ዊንዶውስ ኤንቲ፣ Solaris እና HP-UX።
እዚህ ከሊኑክስ ጋር መስራትን እንገልፃለን (ኡቡንቱ 18.04)

ለምንድን ነው?

በተለያዩ መሳሪያዎች እና ሶፍትዌሮች ስራን ያቃልላል።

  • በመረጃ ቋቱ ውስጥ ውሂብን እንዴት ማከማቸት እንዳለብዎ ማሰብ አያስፈልግዎትም ፣ አስቀድሞ ለእርስዎ ተሠርቷል ።
  • የምርጫ ዳሳሾችን ዘዴ መግለጽ ብቻ አስፈላጊ ነው.
  • ሁሉንም ኮድዎን ወደ አንድ መስፈርት ይቀንሳል።

የት እንደሚያገኙ?

ከምንጩ ኮድ ማስጀመር አልቻልኩም፤ ለመስራት ዝግጁ የሆነ የታንጎቦክስ 9.3 ምስል ተጠቀምኩ።
መመሪያው ከጥቅሎች እንዴት እንደሚጫኑ ይገልፃል.

ምንን ያካትታል?

  • ቀጥታ - የ TANGO የውሂብ ጎታውን ለማየት እና ለማረም ይጠቅማል።
  • POGO - ለ TANGO መሣሪያ አገልጋዮች ኮድ ጄኔሬተር።
  • አስትሮ - ለ TANGO ስርዓት የፕሮግራም አስተዳዳሪ.

በመጀመሪያዎቹ ሁለት አካላት ላይ ብቻ ፍላጎት እናደርጋለን.

የሚደገፉ የፕሮግራም ቋንቋዎች

  • C
  • በ C ++
  • ጃቫ
  • ጃቫስክሪፕት
  • ዘንዶ
  • ማቲብ
  • LabVIEW

በ Python እና c++ ውስጥ አብሬው ሠርቻለሁ። እዚህ C++ እንደ ምሳሌ ይጠቅማል።

አሁን መሣሪያውን ከ TANGO ጋር እንዴት ማገናኘት እንደሚቻል እና ከእሱ ጋር እንዴት እንደሚሰራ ወደ መግለጫው እንሂድ. ክፍያው እንደ ምሳሌ ይወሰዳል ጂፒኤስ ኒዮ-6ሜ-0-001:

የታንጎ መቆጣጠሪያዎች

በሥዕሉ ላይ እንደሚታየው ሰሌዳውን በ UART CP2102 በኩል ከፒሲ ጋር እናገናኘዋለን. ከፒሲ ጋር ሲገናኙ መሣሪያው ይታያል /dev/ttyUSB[0-N]፣ ብዙ ጊዜ /dev/ttyUSB0።

POGO

አሁን እንሩጥ ፓጎ, እና ከእኛ ቦርድ ጋር ለመስራት የአጽም ኮድ ያመነጫሉ.

pogo

የታንጎ መቆጣጠሪያዎች

ኮዱን አስቀድሜ ፈጠርኩት፣ እንደገና እንፈጥረው ፋይል-> አዲስ.

የታንጎ መቆጣጠሪያዎች

የሚከተለውን እናገኛለን:

የታንጎ መቆጣጠሪያዎች

የእኛ መሳሪያ (ወደፊት በመሳሪያ የምንለው የሶፍትዌር ክፍል ማለታችን ነው) ባዶ እና ሁለት የቁጥጥር ትዕዛዞች አሉት፡- ሁኔታ & ሁናቴ.

በአስፈላጊ ባህሪያት መሞላት አለበት:

የመሣሪያ ንብረት - እሱን ለማስጀመር ወደ መሣሪያው የምናስተላልፋቸው ነባሪ እሴቶች ፣ ለጂፒኤስ ሰሌዳ በሲስተሙ ውስጥ የቦርዱን ስም ማስተላለፍ ያስፈልግዎታል com="/dev/ttyUSB0" እና ኮም ወደብ ፍጥነት baudrade=9600

ትዕዛዞች - መሳሪያችንን ለመቆጣጠር ትእዛዝ ይሰጣሉ፤ ነጋሪ እሴቶች እና የመመለሻ እሴት ሊሰጡ ይችላሉ።

  • STATE - የአሁኑን ሁኔታ ይመልሳል, ከ ስቴትስ
  • ሁኔታ - የአሁኑን ሁኔታ ይመልሳል ፣ ይህ የሕብረቁምፊው ማሟያ ነው። STATE
  • GPSArray - ይመለሳል አቅጣጫ መጠቆሚያ በቅጹ ውስጥ ሕብረቁምፊ DevVarCharArray

በመቀጠል የመሣሪያውን ባህሪያት ወደ እሱ ሊነበቡ/መፃፍ ይችላሉ።
Scalar ባህሪያት - ቀላል ባህሪያት (ቻር, ሕብረቁምፊ, ረጅም, ወዘተ.)
የስፔክትረም ባህሪዎች - አንድ-ልኬት ድርድሮች
የምስል ባህሪያት - ባለ ሁለት ገጽታ ድርድሮች

ስቴትስ - መሳሪያችን የሚገኝበት ሁኔታ.

  • ክፈት - መሣሪያው ክፍት ነው.
  • ገጠመ - መሣሪያው ተዘግቷል.
  • አልተሳካም። - ስህተት.
  • ON - ከመሣሪያው ውሂብ ይቀበሉ።
  • ጠፍቷል - ከመሣሪያው ምንም ውሂብ የለም.

ባህሪ የመጨመር ምሳሌ gps_string:

የታንጎ መቆጣጠሪያዎች

የምርጫ ጊዜ በ ms ውስጥ ጊዜ፣ የጂፒኤስ_string እሴቱ ምን ያህል ጊዜ እንደሚዘመን። የዝማኔው ጊዜ ካልተገለጸ፣ ባህሪው የሚዘምነው ሲጠየቅ ብቻ ነው።

ተከሰተ፡-

የታንጎ መቆጣጠሪያዎች

አሁን ኮዱን መፍጠር ያስፈልግዎታል ፋይል -> ፍጠር

የታንጎ መቆጣጠሪያዎች

በነባሪ ፣ Makefile አልተፈጠረም ፣ እሱን ለመፍጠር ለመጀመሪያ ጊዜ ሳጥኑ ላይ ምልክት ማድረግ ያስፈልግዎታል። ይህ የሚደረገው በአዲስ ትውልድ ጊዜ በእሱ ላይ የተደረጉ ለውጦች እንዳይሰረዙ ነው. አንድ ጊዜ ፈጥረው ለፕሮጀክትዎ ካዋቀሩት (የማጠናቀር ቁልፎችን ፣ ተጨማሪ ፋይሎችን ይመዝገቡ) ስለ እሱ ሊረሱት ይችላሉ።

አሁን ወደ ፕሮግራሚንግ እንሂድ። pogo ጋር የሚከተለውን ፈጠረልን፡-

የታንጎ መቆጣጠሪያዎች

የ NEO6M.cpp እና NEO6M.h ፍላጎት ይኖረናል። የክፍል ገንቢን እንደ ምሳሌ እንውሰድ፡-

NEO6M::NEO6M(Tango::DeviceClass *cl, string &s)
 : TANGO_BASE_CLASS(cl, s.c_str())
{
    /*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
    init_device();

    /*----- PROTECTED REGION END -----*/    //  NEO6M::constructor_1
}

እዚህ ምን አለ እና ምን አስፈላጊ ነው? የ init_device() ተግባር ማህደረ ትውስታን ለባህሪያችን ይመድባል፡- gps_string & gps_array, ግን አስፈላጊ አይደለም. እዚህ በጣም አስፈላጊው ነገር, እነዚህ አስተያየቶች ናቸው:

/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
    .......
/*----- PROTECTED REGION END -----*/    //  NEO6M::constructor_1

በዚህ የአስተያየት እገዳ ውስጥ ያለው ነገር ሁሉ በቀጣይ የኮድ እድሳት ወቅት በፖጎ ውስጥ አይካተትም። ራቁ!. በብሎኮች ውስጥ ያልሆነ ነገር ሁሉ ይሆናል! ፕሮግራም የምናዘጋጅባቸው እና የራሳችንን አርትኦት የምናደርግባቸው ቦታዎች ናቸው።

አሁን በክፍሉ ውስጥ ያሉት ዋና ዋና ተግባራት ምንድናቸው? NEO6M:

void always_executed_hook();
void read_attr_hardware(vector<long> &attr_list);
void read_gps_string(Tango::Attribute &attr);
void read_gps_array(Tango::Attribute &attr);

የባህሪውን ዋጋ ለማንበብ ስንፈልግ gps_string, ተግባሮቹ በሚከተለው ቅደም ተከተል ይጠራሉ. ሁልጊዜ_የሚፈፀም_መንጠቆ, read_attr_hardware и አንብብ_ጂፒኤስ_ሕብረቁምፊ. Read_gps_string የጂፒኤስ_ሕብረቁምፊውን በእሴቱ ይሞላል።

void NEO6M::read_gps_string(Tango::Attribute &attr)
{
    DEBUG_STREAM << "NEO6M::read_gps_string(Tango::Attribute &attr) entering... " << endl;
    /*----- PROTECTED REGION ID(NEO6M::read_gps_string) ENABLED START -----*/
    //  Set the attribute value

        *this->attr_gps_string_read = Tango::string_dup(this->gps.c_str());

    attr.set_value(attr_gps_string_read);

    /*----- PROTECTED REGION END -----*/    //  NEO6M::read_gps_string
}

ማጠናቀር

ወደ ምንጭ አቃፊ ይሂዱ እና:

make

ፕሮግራሙ ወደ ~/DeviceServers ፎልደር ይሰበሰባል።

tango-cs@tangobox:~/DeviceServers$ ls
NEO6M

ቀጥታ

jive

የታንጎ መቆጣጠሪያዎች

በመረጃ ቋቱ ውስጥ ቀድሞውኑ አንዳንድ መሣሪያዎች አሉ ፣ አሁን የራሳችንን እንፍጠር አርትዕ -> አገልጋይ ፍጠር

የታንጎ መቆጣጠሪያዎች

አሁን ከእሱ ጋር ለመገናኘት እንሞክር፡-

የታንጎ መቆጣጠሪያዎች

ምንም አይሰራም፣ መጀመሪያ ፕሮግራማችንን ማስኬድ አለብን፡-

sudo ./NEO6M neo6m -v2

ከኮም ወደብ ጋር መገናኘት የምችለው በመብቶች ብቻ ነው። ሥር- አ. v - የመግቢያ ደረጃ.

አሁን ማገናኘት እንችላለን፡-

የታንጎ መቆጣጠሪያዎች

ደንበኛ

በግራፊክስ ውስጥ, ስዕሎችን መመልከት በእርግጥ ጥሩ ነው, ነገር ግን የበለጠ ጠቃሚ ነገር ያስፈልግዎታል. ከመሳሪያችን ጋር የሚገናኝ ደንበኛን እንፃፍ እና ከእሱ ንባቦችን እንውሰድ።

#include <tango.h>
using namespace Tango;

int main(int argc, char **argv) {
    try {

        //
        // create a connection to a TANGO device
        //

        DeviceProxy *device = new DeviceProxy("NEO6M/neo6m/1");

        //
        // Ping the device
        //

        device->ping();

        //
        // Execute a command on the device and extract the reply as a string
        //

        vector<Tango::DevUChar> gps_array;

        DeviceData cmd_reply;
        cmd_reply = device->command_inout("GPSArray");
        cmd_reply >> gps_array;

        for (int i = 0; i < gps_array.size(); i++) {            
            printf("%c", gps_array[i]);
        }
        puts("");

        //
        // Read a device attribute (string data type)
        //

        string spr;
        DeviceAttribute att_reply;
        att_reply = device->read_attribute("gps_string");
        att_reply >> spr;
        cout << spr << endl;

        vector<Tango::DevUChar> spr2;
        DeviceAttribute att_reply2;
        att_reply2 = device->read_attribute("gps_array");
        att_reply2.extract_read(spr2);

        for (int i = 0; i < spr2.size(); i++) {
            printf("%c", spr2[i]);
        }

        puts("");

    } catch (DevFailed &e) {
        Except::print_exception(e);
        exit(-1);
    }
}

እንዴት ማጠናቀር እንደሚቻል፡-

g++ gps.cpp -I/usr/local/include/tango -I/usr/local/include -I/usr/local/include -std=c++0x -Dlinux -L/usr/local/lib -ltango -lomniDynamic4 -lCOS4 -lomniORB4 -lomnithread -llog4tango -lzmq -ldl -lpthread -lstdc++

ውጤት:

tango-cs@tangobox:~/workspace/c$ ./a.out 
$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

$GPRMC,,V,,,,,,,,,,N*53

የሕብረቁምፊ ባህሪያትን እና የቁምፊዎች ድርድርን በመውሰድ ውጤቱን እንደ ትዕዛዝ መመለስ አግኝተናል።

ማጣቀሻዎች

ጽሑፉን ለራሴ ጻፍኩት, ምክንያቱም ከጥቂት ጊዜ በኋላ እንዴት እና ምን ማድረግ እንዳለብኝ መርሳት እጀምራለሁ.

የእርስዎን ትኩረት እናመሰግናለን.

ምንጭ: hab.com

አስተያየት ያክሉ