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

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

Available Functions
bool isLinked();

Parameters

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

Return Values

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

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

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

Notes

Гарною практикою є завжди перевіряти, чи пов’язані EXP 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*

Повідомлення, яке потрібно надіслати іншому пов’язаному EXP Brain.

index

int32_t

Ціле число для надсилання іншому пов’язаному EXP Brain.

value

double

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

Return Values

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

Notes

Якщо надіслано лише message , інший пов’язаний EXP 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 повертає наступне повідомлення з черги від іншого пов’язаного EXP Brain. Повідомлення зчитуються в порядку FIFO (спочатку найстаріші непрочитані). Якщо черга порожня, коли викликається receive , вона очікує нового повідомлення до зазначеного timeout Якщо в цьому вікні повідомлення не надходить, receive повертає 0, і будь-яке повідомлення, надіслане після цього, залишається в черзі для зчитування під час наступного використання receive.

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

  • Якщо інший пов’язаний EXP Brain надіслав ціле число та/або число з плаваючою комою, receive повертає один закодований рядок, який об’єднує всі поля в такому порядку: .string_integer_float

    • Наприклад, якщо інший пов’язаний EXP 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#

Реєструє функцію, яка викликається щоразу, коли EXP 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

Вказівник функції

Функція, яка виконується при отриманні повідомлення.

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

// 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();
  
// Create the link
  message_link link(PORT1, "LeftRightLink", 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");

  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)