• 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
  • Підручники з 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 Brains взаємодіяти, надсилаючи короткі рядкові повідомлення з необов’язковими невеликими даними. Він розроблений для координації між роботами, наприклад, для запуску підпрограм, обміну результатами датчиків або запуску поведінки в іншого робота.

Кожне використання send додає повідомлення до черги пов’язаного V5 Brain, і черга зчитується в порядку першої надсилання (FIFO). Якщо кілька повідомлень надіслано до того, як інший 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 або розумний кабель, записується як PORTx, де x – номер порту (наприклад, PORT1).

name

char

Назва посилання на повідомлення.

type

linkType

Тип посилання: linkType::manager або linkType::workerЦя інформація використовується для правильного налаштування радіо, а також визначає доступну пропускну здатність для передачі та прийому. Робот-менеджер має вдвічі більшу доступну пропускну здатність (1040 байт/секунду) для надсилання інформації роботу-робітнику (520 байт/секунду).

  • 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 — Повертає, чи цей Brain активно підключений до свого парного Brain.

  • 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 Brains на MessageLink один з одним.

Available Functions
bool isLinked();

Parameters

Ця функція не має жодних параметрів.

Return Values

Ця функція повертає логічне значення.

  • true – Два V5-мозки спарені та спілкуються через цей канал.

  • false – Два V5 Brains не спарені на цьому зв’язку.

Notes

Гарною практикою є завжди перевіряти, чи підключені V5 Brains на початку проекту, перш ніж запускати будь-який подальший код.

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 Brain.

value

double

Подвійний номер для надсилання до іншого підключеного V5 Brain. Подвійні номери форматуються до 4 знаків після коми; якщо вказано менше знаків після коми, додаються завершальні нулі, доки не буде показано 4.

Return Values

Ця функція не повертає жодних значень.

Notes

Якщо надіслано лише message , інший підключений V5 Brain отримає саме це повідомлення.

Якщо включено value (і index якщо вказано), приймаючий Brain отримує одне закодоване повідомлення, яке поєднує всі поля в такому порядку: .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

Довжина буфера.

timeoutMs

int32_t

Скільки часу в мілісекундах receive очікуватиме на нове повідомлення, лише якщо черга порожня. Значення за замовчуванням — 300 000 (300 секунд).

Return Values

Ця функція повертає кількість отриманих байтів.

Notes
  • receive повертає наступне повідомлення з черги від іншого підключеного V5 Brain. Повідомлення зчитуються в порядку FIFO (спочатку найстаріші непрочитані). Якщо черга порожня, коли викликається receive , вона очікує нового повідомлення до зазначеного timeout Якщо в цьому вікні повідомлення не надходить, receive повертає 0, і будь-яке повідомлення, надіслане після цього, залишається в черзі для зчитування під час наступного використання receive.

  • Якщо інший пов’язаний V5 Brain надіслав лише рядок string, receive повертає саме цей рядок.

  • Якщо інший пов’язаний V5 Brain надіслав ціле число та/або число з плаваючою комою, 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 Brain отримає надіслане повідомлення.

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 у Твіттері Відвідайте сторінку 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)