• VEXcode Robotics Logo VEX Robotics Logo
  • VEX API Home Button VEX API Home Button
  • VEX 123 logo in purple VEX 123 logo in white
  • VEX GO logo in lime green VEX GO logo in white
  • VEXcode AIM logo in blue VEXcode AIM logo in white
  • VEX IQ logo in blue VEX IQ logo in white
  • VEX EXP logo in red VEX EXP logo in white
  • VEX V5 logo in red VEX V5 logo in white
  • VEX CTE logo in green VEX CTE logo in white
  • VEX AIR logo in orange VEX AIR logo in white
  • VEXcode VR logo in gold VEXcode VR logo in white
Μετάβαση στο κύριο περιεχόμενο
Ctrl+K

< Back to Platform Select

  • VEX V5
  • Αναφορά API VEX V5
  • VEXlink
  • Σύνδεσμος μηνύματος
Ελληνικά
  • English
  • العربية
  • বাংলা
  • Česky
  • Deutsch
  • Español
  • Español Latinoamericano
  • Suomi
  • Français
  • Gaeilge
  • हिंदी
  • Magyar
  • Bahasa Indonesia
  • 日本語
  • 한국어
  • Lietuvių
  • Latviešu
  • മലയാളം
  • Nederlands
  • Polski
  • Português
  • Русский
  • Svenska
  • ไทย
  • Türkçe
  • Українська
  • Tiếng Việt
  • 简体中文
  • 繁體中文
  • VEXcode Robotics Logo

Πλοήγηση ενότητας

  • Μπλοκ
  • Python
  • C++
    • Σύστημα μετάδοσης κίνησης
    • Κινητήρες και Ελεγκτές Κινητήρων
    • Ελεγκτής
    • Εγκέφαλος
    • Ανταγωνισμός
    • Συσκευές Έξυπνης Θύρας
    • Συσκευές 3 καλωδίων
    • Κονσόλα
    • Λογική
    • VEXlink
      • Σύνδεσμος μηνύματος
      • Σειριακός σύνδεσμος
    • CTE Workcell
  • Εκπαιδευτικά σεμινάρια VEXcode

Πλοήγηση πλατφόρμας

  • VEX 123 logo in purple VEX 123 logo in white
  • VEX GO logo in lime green VEX GO logo in white
  • VEXcode AIM logo in blue VEXcode AIM logo in white
  • VEX IQ logo in blue VEX IQ logo in white
  • VEX EXP logo in red VEX EXP logo in white
  • VEX V5 logo in red VEX V5 logo in white
  • VEX CTE logo in green VEX CTE logo in white
  • VEX AIR logo in orange VEX AIR logo in white
  • VEXcode VR logo in gold VEXcode VR logo in white

Σύνδεσμος μηνύματος#

  • Εισαγωγή

  • Κατασκευαστές κλάσεων

  • Καταστροφέας κλάσης

  • Παράμετροι

  • Παράδειγμα

  • Συναρτήσεις Μελών

    • είναι συνδεδεμένο

    • στέλνω

    • λαμβάνω

    • έλαβε

Εισαγωγή#

Η κλάση message_link επιτρέπει σε δύο εγκεφάλους V5 να επικοινωνούν στέλνοντας σύντομα μηνύματα συμβολοσειράς με προαιρετικά μικρά δεδομένα. Έχει σχεδιαστεί για συντονισμό ρομπότ με ρομπότ — όπως εκκίνηση ρουτινών, κοινή χρήση αποτελεσμάτων αισθητήρων ή ενεργοποίηση συμπεριφορών σε άλλο ρομπότ.

Κάθε χρήση του send προσθέτει ένα μήνυμα στην ουρά του συνδεδεμένου V5 Brain και η ουρά διαβάζεται με τη μέθοδο FIFO (first-in, first-out). Εάν αποσταλούν πολλά μηνύματα πριν το άλλο V5 Brain χρησιμοποιήσει το receive, αυτά θα αποθηκευτούν και θα επιστραφούν ένα κάθε φορά με τη σειρά που στάλθηκαν. Επειδή τα μηνύματα μπορούν να περιέλθουν σε ουρά, η επαναλαμβανόμενη αποστολή της ίδιας κατάστασης σε κάθε βρόχο μπορεί να δημιουργήσει συσσώρευση εκκρεμοτήτων. Για λογική που είναι κρίσιμη για τον χρόνο, στείλτε μόνο όταν αλλάζουν οι τιμές.

Σημαντικό: Και τα δύο ρομπότ πρέπει να εκτελούν έργα που χρησιμοποιούν message_link ταυτόχρονα, διαφορετικά δεν θα αποστέλλονται/λαμβάνονται μηνύματα.

Κατασκευαστές κλάσεων#

message_link( 
  int32_t     index, 
  const char  *name, 
  linkType    type, 
  bool        isWired = false );

Καταστροφέας κλάσης#

Καταστρέφει το αντικείμενο message_link και απελευθερώνει τους σχετικούς πόρους.

virtual ~message_link();

Παράμετροι#

Παράμετρος

Τύπος

Περιγραφή

index

int32_t

Η Έξυπνη Θύρα στην οποία είναι συνδεδεμένο το V5 Radio ή το Έξυπνο Καλώδιο, γράφεται ως PORTx, όπου x είναι ο αριθμός θύρας (για παράδειγμα, PORT1).

name

char

Το όνομα του συνδέσμου μηνύματος.

type

linkType

Ο τύπος σύνδεσης, είτε linkType::manager είτε linkType::workerΑυτές οι πληροφορίες χρησιμοποιούνται για τη σωστή διαμόρφωση του ραδιοφώνου και επίσης καθορίζουν το διαθέσιμο εύρος ζώνης για μετάδοση και λήψη. Ένα ρομπότ διαχείρισης έχει διπλάσιο διαθέσιμο εύρος ζώνης (1040 bytes/δευτερόλεπτο) για την αποστολή πληροφοριών στο ρομπότ εργασίας (520 bytes/δευτερόλεπτο).

  • linkType::manager - Το αντικείμενο message_link είναι ένας διαχειριστής.
  • linkType::worker - Το αντικείμενο message_link είναι ένας εργάτης.

isWired

bool

Εάν το αντικείμενο message_link είναι ενσύρματο.

  • true - Το αντικείμενο message_link είναι ενσύρματο.
  • false - Το αντικείμενο message_link είναι ασύρματο.

Παράδειγμα#

Κωδικός για το Ρομπότ 1

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::manager, // type
  true); // isWired

Κωδικός για το Ρομπότ 2

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::worker, // type
  true); // isWired

Συναρτήσεις Μελών#

Η κλάση message_link περιλαμβάνει τις ακόλουθες συναρτήσεις-μέλη:

  • isLinked — Επιστρέφει εάν αυτός ο Εγκέφαλος είναι ενεργά συνδεδεμένος με τον συζευγμένο Εγκέφαλό του.

  • send — Στέλνει ένα μήνυμα στον ζευγαρωμένο εγκέφαλο.

  • receive — Περιμένει και επιστρέφει το επόμενο εισερχόμενο μήνυμα.

  • received — Καταχωρεί μια συνάρτηση που θα καλείται κάθε φορά που λαμβάνεται ένα νέο μήνυμα.

Πριν από την κλήση οποιασδήποτε συνάρτησης μέλους message_link , πρέπει να δημιουργηθεί μια παρουσία message_link , όπως φαίνεται παρακάτω:

Κωδικός για το Ρομπότ 1

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::manager, // type
  true); // isWired

Κωδικός για το Ρομπότ 2

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::worker, // type
  true); // isWired

isLinked#

Η μέθοδος isLinked επιστρέφει εάν οι εγκέφαλοι V5 σε ένα MessageLink είναι ζευγαρωμένοι μεταξύ τους.

Available Functions
bool isLinked();

Parameters

Αυτή η συνάρτηση δεν έχει παραμέτρους.

Return Values

Αυτή η συνάρτηση επιστρέφει μια λογική τιμή.

  • true – Οι δύο εγκέφαλοι V5 είναι ζευγαρωμένοι και επικοινωνούν σε αυτόν τον σύνδεσμο.

  • false – Οι δύο εγκέφαλοι V5 δεν είναι ζευγαρωμένοι σε αυτόν τον σύνδεσμο.

Notes

Είναι καλή πρακτική να ελέγχετε πάντα για να βεβαιωθείτε ότι οι εγκέφαλοι V5 είναι συνδεδεμένοι στην αρχή ενός έργου πριν από την εκτέλεση οποιουδήποτε περαιτέρω κώδικα.

Examples

Κωδικός για το Ρομπότ 1

// Tell the other robot when the screen is being pressed
  // Create the link
  message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::manager, true);

  // Do not run code UNTIL the Brains are linked
  while (!link.isLinked()){
    wait(0.1, seconds);
  }

  Brain.Screen.print("Robot 1 - Manager");

  // Continuously send if the screen is being pressed
  while (true){
    if (Brain.Screen.pressing()){
      link.send("pressed");
    } else {
      link.send("released");
    }
    wait(0.05, seconds);
  }

Κωδικός για το Ρομπότ 2

// Display if the other robot's screen is being pressed

  // Create the link
  message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);
  
  // Do not run code UNTIL the Brains are linked
  while (!link.isLinked()){
   wait(0.1, seconds);
  }

  // Continuously check if Robot 1 has sent "pressed"
  while (true){
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print("Robot 2 - Worker");
    Brain.Screen.newLine();
    char msg[32] = {0};                         // buffer for incoming message
    int32_t n = link.receive(msg, sizeof(msg), 100);  // wait up to 100ms
    if (n > 0 && strcmp(msg, "pressed") == 0) {
      Brain.Screen.newLine();
      Brain.Screen.print("Manager is being pressed!");
    }
    wait(0.05, seconds);
  }

send#

Στέλνει ένα μήνυμα μέσω της σύνδεσης σύνδεσης.

Available Functions

1 — Στέλνει μια συμβολοσειρά μηνύματος.

int32_t send( 
  const char *message );

2 — Στέλνει μια συμβολοσειρά μηνύματος με double.

int32_t send( 
  const char *message, 
  double      value );

3 — Στέλνει μια συμβολοσειρά μηνύματος με τιμή int32_t και τιμή double.

int32_t send(
  const char *message, 
  int32_t     index, 
  double      value );

Parameters

Παράμετρος

Τύπος

Περιγραφή

message

const char*

Το μήνυμα που θα σταλεί στον άλλο συνδεδεμένο εγκέφαλο V5.

index

int32_t

Ένας ακέραιος αριθμός για αποστολή στον άλλο συνδεδεμένο εγκέφαλο V5.

value

double

Ένα διπλό για αποστολή στον άλλο συνδεδεμένο εγκέφαλο V5. Τα διπλάσια μορφοποιούνται σε 4 δεκαδικά ψηφία. Εάν παρέχονται λιγότερα δεκαδικά ψηφία, προστίθενται μηδενικά στο τέλος μέχρι να εμφανιστούν 4.

Return Values

Αυτή η συνάρτηση δεν επιστρέφει καμία τιμή.

Notes

Εάν σταλεί μόνο το μήνυμα message είναι το άλλο συνδεδεμένο V5 Brain.

Εάν συμπεριληφθούν οι τιμές value (και index εάν παρέχονται), ο εγκέφαλος λήψης λαμβάνει ένα μόνο κωδικοποιημένο μήνυμα που συνδυάζει όλα τα πεδία με την εξής σειρά: .message_index_value

Examples

Χρησιμοποιώντας το link.send(“string”, 1, 2.55) λαμβάνεται ως .string_1_2.5500.

Κωδικός για το Ρομπότ 1

// Tell the other robot when the screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::manager, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}

Brain.Screen.print("Robot 1 - Manager");

// Continuously send if the screen is being pressed
while (true){
  if (Brain.Screen.pressing()){
    link.send("pressed");
  } else {
    link.send("released");
  }
  wait(0.05, seconds);
}

Κωδικός για το Ρομπότ 2

// Display if the other robot's screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}
// Continuously check if Robot 1 has sent "pressed"
while (true){
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  char msg[32] = {0};  // buffer for incoming message
  int32_t n = link.receive(msg, sizeof(msg), 100);  // wait up to 100ms
  if (n > 0 && strcmp(msg, "pressed") == 0) {
    Brain.Screen.newLine();
    Brain.Screen.print("Manager is being pressed!");
  }
  wait(0.05, seconds);
}

receive#

Λαμβάνει ένα μήνυμα από τη σύνδεση σύνδεσης.

Available Functions
int32_t receive(
  char     *buffer,
  int32_t   length, 
  int32_t   timeoutMs = 500 );

Parameters

Παράμετρος

Τύπος

Περιγραφή

buffer

char*

Η προσωρινή μνήμη για την αποθήκευση του ληφθέντος μηνύματος.

length

int32_t

Το μήκος του buffer.

timeoutMs

int32_t

Πόσο χρόνο σε χιλιοστά του δευτερολέπτου θα λάβει το receive θα περιμένει ένα νέο μήνυμα μόνο εάν η ουρά είναι κενή. Η προεπιλογή είναι 300.000 (300 δευτερόλεπτα).

Return Values

Αυτή η συνάρτηση επιστρέφει τον αριθμό των byte που λαμβάνονται.

Notes
  • receive returns the next queued message from the other linked V5 Brain. Messages are read in FIFO order (oldest unread first). If the queue is empty when receive is called, it waits up to the specified timeout for a new message. If no message arrives in that window, receive returns 0, and any message sent afterward remains in the queue to be read the next time receive is used.

  • Εάν ο άλλος συνδεδεμένος εγκέφαλος V5 έστειλε μόνο μια συμβολοσειρά string, receive , επιστρέφει αυτήν ακριβώς τη συμβολοσειρά.

  • Εάν ο άλλος συνδεδεμένος V5 Brain έστειλε έναν ακέραιο ή/και έναν αριθμό float, η συνάρτηση receive επιστρέφει μια ενιαία κωδικοποιημένη συμβολοσειρά που συνδυάζει όλα τα πεδία με την εξής σειρά: .string_integer_float

    • Για παράδειγμα, εάν ο άλλος συνδεδεμένος V5 Brain χρησιμοποιεί link.send(“string”, 1, 2.55), τότε χρησιμοποιώντας link.receive() επιστρέφει μια κωδικοποιημένη συμβολοσειρά όπως .string_1_2.5500. Μπορείτε να διαχωρίσετε αυτήν την κωδικοποιημένη συμβολοσειρά (δείτε τα παρακάτω παραδείγματα) για να εξαγάγετε τις τιμές ονόματος μηνύματος, ακεραίου και κινητής υποδιαστολής.

    • Αν προτιμάτε να αποφύγετε τον χειροκίνητο διαχωρισμό/ανάλυση, χρησιμοποιήστε την εντολή received για να καταχωρήσετε έναν χειριστή για ένα συγκεκριμένο όνομα μηνύματος. Ο χειριστής λαμβάνει τις τιμές που αποστέλλονται ως ορίσματα.

Examples

Χρησιμοποιώντας το link.send(“string”, 1, 2.55) λαμβάνεται ως .string_1_2.5500.

Κωδικός για το Ρομπότ 1

// Tell the other robot when the screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::manager, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}

Brain.Screen.print("Robot 1 - Manager");

// Continuously send if the screen is being pressed
while (true){
  if (Brain.Screen.pressing()){
    link.send("pressed");
  } else {
    link.send("released");
  }
  wait(0.05, seconds);
}

Κωδικός για το Ρομπότ 2

// Display if the other robot's screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}
// Continuously check if Robot 1 has sent "pressed"
while (true){
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  char msg[32] = {0};   // buffer for incoming message
  int32_t n = link.receive(msg, sizeof(msg), 100);  // wait up to 100ms
  if (n > 0 && strcmp(msg, "pressed") == 0) {
    Brain.Screen.newLine();
    Brain.Screen.print("Manager is being pressed!");
  }
  wait(0.05, seconds);
}

received#

Καταγράφει μια συνάρτηση που θα καλείται κάθε φορά που ο εγκέφαλος V5 λαμβάνει ένα απεσταλμένο μήνυμα.

Available Functions

1 Καταγράφει μια επανάκληση για όλα τα ληφθέντα μηνύματα (μήνυμα + τιμή).

void received(
    void (* callback)(const char *, const char *, double)
);

2 Καταγράφει μια επανάκληση για όλα τα ληφθέντα μηνύματα (μήνυμα + δείκτης + τιμή).

void received(
    void (* callback)(const char *, const char *, int32_t, double)
);

3 Καταγράφει μια επανάκληση για ένα συγκεκριμένο μήνυμα (μήνυμα + τιμή).

void received(
    const char *message,
    void      (* callback)(const char *, const char *, double)
);

4 Καταγράφει μια επανάκληση για ένα συγκεκριμένο μήνυμα (μήνυμα + δείκτης + τιμή).

void received(
    const char *message,
    void      (* callback)(const char *, const char *, int32_t, double)
);

Parameters

Παράμετρος

Τύπος

Περιγραφή

message

const char *

Το όνομα του μηνύματος που θα ανακτηθεί. Εάν παραλειφθεί, η επανάκληση εκτελείται για όλα τα ληφθέντα μηνύματα.

callback

void (*)(const char *, const char , double) or void ()(const char *, const char *, int32_t, double)

Μια συνάρτηση που εκτελείται όταν λαμβάνεται ένα μήνυμα.

Return Values

Αυτή η συνάρτηση δεν επιστρέφει καμία τιμή.

Callback Signature

1 Λαμβάνει το όνομα του αποστολέα, το όνομα του μηνύματος και την τιμή.

void callback(const char *, const char *, double)

2 Λαμβάνει το όνομα του αποστολέα, το όνομα του μηνύματος, τον δείκτη και την τιμή.

void callback(const char *, const char *, int32_t, double)

Τύπος

Περιγραφή

1st const char *

Το όνομα του συνδέσμου του αποστολέα.

2nd const char *

Το όνομα του μηνύματος που ελήφθη.

int32_t

Το ευρετήριο που σχετίζεται με το μήνυμα.

double

Η τιμή που σχετίζεται με το μήνυμα.

Examples

Κωδικός για το Ρομπότ 1

// Create the link.
message_link link(PORT1, "LeftRightLink", linkType::manager, true);

// Send whether screen is pressed on left or right.
void screen_pressed() {
  if (Brain.Screen.xPosition() < 240) {
    link.send("left");
  } else {
    link.send("right");
  }
}

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();
  
  // Do not run code UNTIL the Brains are linked.
  while (!link.isLinked()) {
    wait(0.1, seconds);
  }

  Brain.Screen.print("Robot 1 - Manager");

  Brain.Screen.pressed(screen_pressed);

  while (true) {
    wait(10, msec);
  }
}

Κωδικός για το Ρομπότ 2

// Create variable to track where screen is pressed.
int lastPress = 0;

// Update the variable whenever a new message is received.
void message_received(const char* message, const char* linkname, double timestamp) {
  if (strcmp(message, "left") == 0)  lastPress = 1;
  if (strcmp(message, "right") == 0) lastPress = 2;
}

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Create the link.
  message_link link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);

  // Do not run code UNTIL the Brains are linked.
  while (!link.isLinked()) {
    wait(0.1, seconds);
  }

  link.received(message_received);

  // Display if Robot 1's screen was pressed on the left or right
  while (true) {
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print("Robot 2 - Worker");
    Brain.Screen.newLine();

    if (lastPress == 1) {
      Brain.Screen.print("Manager pressed LEFT");
    } else if (lastPress == 2) {
      Brain.Screen.print("Manager pressed RIGHT");
    } else {
      Brain.Screen.print("Waiting...");
    }

    wait(0.1, seconds);
  }
}

προηγούμενο

VEXlink

επόμενο

Σειριακός σύνδεσμος

On this page
  • Εισαγωγή
  • Κατασκευαστές κλάσεων
  • Καταστροφέας κλάσης
  • Παράμετροι
  • Παράδειγμα
  • Συναρτήσεις Μελών
    • isLinked
    • send
    • receive
    • received
Innovation First, International
​

Τα VEX και VEX Robotics είναι εμπορικά σήματα ή σήματα υπηρεσιών της Innovation First, Inc. Πνευματικά δικαιώματα ©2026. Με επιφύλαξη παντός δικαιώματος. Η VEX Robotics, Inc. είναι θυγατρική της Innovation First International, Inc. Όλα τα άλλα ονόματα προϊόντων/σήματα τρίτων αποτελούν ιδιοκτησία των αντίστοιχων κατόχων τους. Διπλώματα ευρεσιτεχνίας ή/και Διπλώματα ευρεσιτεχνίας σε εκκρεμότητα - innovationfirst.com/patents
Πολιτική απορρήτου ιστότοπου / Όροι χρήσης ιστότοπου / Πολιτική για τα cookie / Πολιτική απορρήτου λογισμικού

Επισκεφθείτε τη σελίδα VEX Robotics στο Facebook Επισκεφθείτε τη σελίδα VEX Robotics στο Twitter Επισκεφθείτε τη σελίδα VEX Robotics στο Instagram Επισκεφθείτε τη σελίδα VEX Robotics στο YouTube
Φόρμα σχολίων VEX API

Εκτιμούμε τα σχόλιά σας! Χρησιμοποιήστε αυτήν τη φόρμα για να μοιραστείτε προτάσεις, σχόλια ή να αναφέρετε σφάλματα με το VEX API. Η συμβολή σας μας βοηθά να βελτιώσουμε την τεκμηρίωση του VEX API.

​

Εάν αντιμετωπίζετε τεχνικά προβλήματα ή χρειάζεστε υποστήριξη πελατών, επισκεφθείτε τη διεύθυνση support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Σημείωση: η τρέχουσα διεύθυνση URL θα κοινοποιηθεί στο μήνυμά σας

Συμπεριλαμβάνοντας τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας, συμφωνείτε ότι η VEX μπορεί να σας στέλνει ηλεκτρονικά μηνύματα εάν έχουμε ερωτήσεις σχετικά με τα σχόλιά σας.
Πολιτική Απορρήτου >
Παρακαλώ δώστε τα σχόλιά σας. Τα σχόλια υποβλήθηκαν με επιτυχία!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)