• 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++
    • Трансмиссия
    • Двигатели и контроллеры двигателей
    • Контроллер
    • Мозг
    • Соревнование
    • Устройства Smart Port
    • 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

Ссылка на сообщение#

  • Введение

  • Конструкторы классов

  • Деструктор класса

  • Параметры

  • Пример

  • Функции участников

    • isLinked

    • отправлять

    • получать

    • полученный

Введение#

Класс message_link позволяет двум роботам V5 Brain обмениваться данными, отправляя короткие строковые сообщения с дополнительными небольшими данными. Он предназначен для координации действий между роботами — например, для запуска процедур, обмена результатами датчиков или запуска поведения на другом роботе.

Каждое использование send добавляет сообщение в очередь связанного V5 Brain, и очередь читается по принципу «первым пришел — первым вышел» (FIFO). Если несколько сообщений отправлены до того, как другой V5 Brain использует receive, они будут сохраняться и возвращаться по одному в порядке их отправки. Поскольку сообщения могут стоять в очереди, многократная отправка одного и того же статуса в каждом цикле может создавать задержку; для критически важной по времени логики отправка должна происходить только при изменении значений.

Важно: Оба робота должны одновременно запускать проекты, использующие message_link , иначе сообщения отправляться/получаться не будут.

Конструкторы классов#

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

Деструктор класса#

Уничтожает объект message_link 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 — Возвращает значение, указывающее, активно ли этот мозг связан с парным мозгом.

  • send — Отправляет сообщение в парный мозг.

  • receive — Ожидает и возвращает следующее входящее сообщение.

  • received — Регистрирует функцию, которая будет вызываться при получении нового сообщения.

Перед вызовом любой из функций-членов message_link message_link необходимо создать экземпляр 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 не связаны между собой по этой ссылке.

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

Число типа double для отправки на другой связанный модуль V5 Brain. Число типа double форматируется до 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 , она ожидает нового сообщения до истечения указанного receive . Если в течение этого времени сообщение не поступает, timeout возвращает 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

вперёд

Последовательное соединение

На этой странице
  • Введение
  • Конструкторы классов
  • Деструктор класса
  • Параметры
  • Пример
  • Функции участников
    • 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)