• 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

Послідовне посилання#

  • Вступ

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

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

  • Параметри

  • Нотатки

  • Приклад

  • Функції-члени

    • Пов’язано

    • відправити

    • отримувати

    • отримано

Вступ#

Клас serial_link дозволяє надсилати потік необроблених байтів між роботами. Він розроблений для зв’язку між роботами, де робот-передавач і робот-отримувач розуміють вміст потоку даних.

Кожне використання send додає дані до черги пов’язаного EXP Brain, і черга зчитується в порядку FIFO (перший прийшов, перший вийшов). Якщо кілька повідомлень надіслано до того, як інший EXP Brain використає receive, вони будуть збережені та повернуті по одному в порядку надсилання. Оскільки повідомлення можуть стояти в черзі, багаторазове надсилання одного й того ж статусу в кожному циклі може створити затримку; для логіки, критичної за часом, надсилайте лише тоді, коли значення змінюються.

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

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

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

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

Знищує об’єкт serial_link та звільняє пов’язані з ним ресурси.

~serial_link();

Параметри#

Параметр

Тип

Опис

index

int32_t

Розумний порт, до якого підключено посилання повідомлення, записується як PORTx, де x – номер порту (наприклад, PORT1).

name

const char*

Назва цього посилання. Рекомендується, щоб цей унікальний рядок був достатньо довгим, щоб після хешування vexos він створив унікальний ідентифікатор. Неправильною назвою посилання буде щось загальне, наприклад, «vexlink», оскільки її може використовувати інша команда.

type

linkType

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

  • linkType::manager — Об’єкт serial_link є менеджером
  • linkType::worker — Об’єкт serial_link є робочим роботом

isWired

bool

Чи є об’єкт serial_link дротовим (за замовчуванням false):

  • true — Об’єкт serial_link дротовий
  • false — Об’єкт serial_link бездротовий

Нотатки#

  • VEXlink підтримує як бездротовий, так і дротовий зв’язок, при цьому для дротового підключення рекомендується використовувати модифікований смарт-кабель, щоб уникнути проблем із прокладанням живлення.

  • Для бездротового зв’язку кожному роботу потрібен радіомодуль V5 Robot Radio, підключений до смарт-порту.

  • Радіоприймач VEXlink можна використовувати разом із радіоприймачем VEXnet контролера EXP, який слід підключити до Smart Port з найвищим номером, щоб уникнути конфліктів.

  • Щоб створити VEX-з’єднання, обидва EXP-мізки повинні бути підключені до радіостанції робота V5.

Приклад#

Код для робота 1

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

Код для Робота 2

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

Функції-члени#

Клас serial_link містить такі функції-члени:

  • isLinked — Перевіряє, чи EXP Brains спарені та чи взаємодіють вони через це з’єднання.

  • send — Надсилає повідомлення парному мозку.

  • receive — Очікує та повертає наступне вхідне повідомлення.

  • received — Реєструє функцію, яка викликається щоразу, коли надходить нове повідомлення.

Перед викликом будь-яких функцій-членів serial_link необхідно створити екземпляр serial_link , як показано нижче:

Код для робота 1

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

Код для Робота 2

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

isLinked#

Повертає, чи пов’язані між собою EXP Brains на послідовному з’єднанні.

Available Functions
bool isLinked();

Parameters

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

Return Values

Повертає логічне значення, яке вказує, чи пов’язані EXP Brains:

  • true — The two EXP Brains are paired and communicating on this link.
  • false — The two EXP Brains are not paired on this link.
Notes
  • Гарною практикою є завжди перевіряти, чи пов’язані EXP Brains на початку проекту, перш ніж запускати будь-який подальший код.

Examples

Код для робота 1

// Create the link
  serial_link 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");
  Brain.Screen.newLine();
  Brain.Screen.print("Sending message...");

  // Message to send
  const char* message = "Hello Robot 2";

  // Send the message
  link.send((uint8_t*)message, strlen(message));

Код для Робота 2

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

  // Do not run code UNTIL the Brains are linked
  while (!link.isLinked()) {
    wait(0.1, seconds);
  }
  
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  Brain.Screen.print("Waiting...");

  // Buffer to store incoming bytes
  uint8_t buffer[32] = {0};

  int32_t n = link.receive(buffer, sizeof(buffer) - 1);

  // Null-terminate
  if (n > 0) {
    buffer[n] = 0;

    // Display the message that was sent
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print("Robot 2 - Worker");
    Brain.Screen.newLine();
    Brain.Screen.print((char*)buffer);
  }
  else {
    Brain.Screen.newLine();
    Brain.Screen.print("No message received");
  }

send#

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

Available Functions

1 — Надсилає повідомлення, використовуючи байтовий буфер.

int32_t send( 
  uint8_t *buffer, 
  int32_t  length );

2 — Надсилає повідомлення, використовуючи буфер символів.

int32_t send( 
  const char *buffer, 
  int32_t     length );

Parameters

Параметр

Тип

Опис

buffer

uint8_t* or const char*

Буфер для надсилання до іншого підключеного EXP Brain.

length

int32_t

Довжина буфера для надсилання.

Return Values

Повертає int32_t , що представляє кількість надісланих байтів.

Examples

Код для робота 1

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

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

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

  // Track last sent state
  uint8_t lastState = 255;  // impossible initial value

 // Tell Robot 2 when the screen is being pressed
  while (true) {
    uint8_t state = Brain.Screen.pressing() ? 1 : 0;

    // Only send if state changed
    if (state != lastState) {
      link.send(&state, 1);
      lastState = state;
    }

    wait(0.02, seconds);
  }

Код для Робота 2

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

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

  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  Brain.Screen.print("Waiting...");

  // Track the last state
  uint8_t lastShown = 255;

  while (true) {
    // Variable stores 1 - pressed, 0 - not pressed 
    uint8_t state = 0;
    int32_t n = link.receive(&state, 1, 200);

    // Only update screen if state changes
    if (n == 1 && state != lastShown) {
      Brain.Screen.clearScreen();
      Brain.Screen.setCursor(1, 1);
      Brain.Screen.print("Robot 2 - Worker");
      Brain.Screen.newLine();

      // Display text if Robot 1's screen is being pressed
      if (state == 1) {
        Brain.Screen.print("Manager IS being pressed!");
      } else {
        Brain.Screen.print("Manager is NOT being pressed");
      }

      lastShown = state;
    }
    wait(0.02, seconds);
  }

receive#

Очікує та повертає наступне вхідне повідомлення.

Available Functions

1 — Отримує повідомлення в буфер символів з додатковим тайм-аутом.

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

Parameters

Параметр

Тип

Опис

buffer

char*

Буфер для зберігання отриманого повідомлення.

length

int32_t

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

timeoutMs

int32_t

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

Return Values

Повертає int32_t , що представляє кількість отриманих байтів.

Notes
  • receive повертає наступне повідомлення з черги від іншого пов’язаного EXP Brain.

  • Повідомлення читаються в порядку FIFO (спочатку найстаріші непрочитані).

  • Якщо черга порожня, коли викликається receive , вона очікує нового повідомлення до зазначеного часу очікування timeoutMs.

  • Якщо в цьому вікні не надходить жодного повідомлення, receive повертає 0, і будь-яке повідомлення, надіслане після цього, залишається в черзі для зчитування під час наступного використання receive.

Examples

Код для робота 1

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

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

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

  // Track last sent state
  uint8_t lastState = 255;  // impossible initial value

 // Tell Robot 2 when the screen is being pressed
  while (true) {
    uint8_t state = Brain.Screen.pressing() ? 1 : 0;

    // Only send if state changed
    if (state != lastState) {
      link.send(&state, 1);
      lastState = state;
    }

    wait(0.02, seconds);
  }

Код для Робота 2

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

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

  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  Brain.Screen.print("Waiting...");

  // Track the last state
  uint8_t lastShown = 255;

  while (true) {
    // Variable stores 1 - pressed, 0 - not pressed 
    uint8_t state = 0;
    int32_t n = link.receive(&state, 1, 200);

    // Only update screen if state changes
    if (n == 1 && state != lastShown) {
      Brain.Screen.clearScreen();
      Brain.Screen.setCursor(1, 1);
      Brain.Screen.print("Robot 2 - Worker");
      Brain.Screen.newLine();

      // Display text if Robot 1's screen is being pressed
      if (state == 1) {
        Brain.Screen.print("Manager IS being pressed!");
      } else {
        Brain.Screen.print("Manager is NOT being pressed");
      }

      lastShown = state;
    }
    wait(0.02, seconds);
  }

received#

Реєструє функцію, яка викликається щоразу, коли EXP Brain отримує надіслане повідомлення.

Available Functions

1 — Реєструє функцію зворотного виклику для кожного отриманого повідомлення.

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

2 — Реєструє зворотний виклик, що викликається для кожного отриманого повідомлення, яке містить додаткове поле int32_t.

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

3 — Реєструє зворотний виклик, який викликається лише для отриманих повідомлень, ім’я яких збігається з message.

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

4 — Реєструє зворотний виклик, який викликається лише для отриманих повідомлень, ім’я яких відповідає message, де корисне навантаження повідомлення містить додаткове поле int32_t.

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

Parameters

Параметр

Тип

Опис

message

const char*

The message name (string) to match. When a received message’s name matches this value, the callback function is called.

callback

function

Раніше визначена функція, яка виконується, коли EXP Brain отримує повідомлення, що відповідає message.

Return Values

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

Notes
  • received викликів зворотних викликів з чотирма аргументами:

Callback Signature

callback(message, linkname, index, value)

Аргумент

Опис

message

Назва отриманого повідомлення (наприклад, “add”).

linkname

Назва посилання, з якого було отримано повідомлення.

index

Цілочисельне значення, що надсилається разом із повідомленням (якщо вказано).

value

Значення з плаваючою комою, що надсилається разом із повідомленням (якщо вказано).

Examples

Код для робота 1

// Send left or right when pressed
void screen_pressed() {
  if (Brain.Screen.xPosition() < 240) {
    link.send((uint8_t*)"left", 4);
  } else {
    link.send((uint8_t*)"right", 5);
  }
}

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

// Create the link
serial_link 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");


  Brain.Screen.pressed(screen_pressed);
}

Код для Робота 2

// Called when message received
void received_callback(uint8_t *buffer, int32_t length) {
  char msg[32];

  // Copy safely and null terminate
  int n = (length < 31) ? length : 31;
  memcpy(msg, buffer, n);
  msg[n] = '\0';

  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1,1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();

  // Display if Robot 1's screen is pressed on left or right
  if (strcmp(msg, "left") == 0) {
    Brain.Screen.print("Manager pressed LEFT");
  }
  else if (strcmp(msg, "right") == 0) {
    Brain.Screen.print("Manager pressed RIGHT");
  }
}

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

// Create the link
serial_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(received_callback);

  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1,1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  Brain.Screen.print("Waiting...");
}

попередній

Посилання на повідомлення

наступний

Робоча клітина CTE

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)