• 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
    • Трансмісія
    • Рух
    • Бачення
    • Екран
    • Контролер
    • Зондування
    • Інерційний
    • 3-провідні пристрої
    • Пневматика
    • Мозок
    • Звук
    • SD-карта
    • VEXlink
      • Посилання на повідомлення
      • Серійне посилання
    • Консоль
    • Логіка
    • 6-осьова рука
    • Магніт
    • Конкуренція
    • Бібліотеки MicroPython
  • C++
  • Підручники з 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

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

  • Вступ

  • Створити посилання

  • Доступні методи

    • є_пов’язаним

    • відправити

    • отримувати

    • отримано

Вступ#

MessageLink дозволяє двом роботам V5 Brains спілкуватися, надсилаючи короткі рядкові повідомлення з необов’язковими невеликими даними. Він розроблений для координації між роботами, наприклад, для запуску процедур, обміну результатами датчиків або запуску поведінки в іншого робота.

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

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

This page uses link as the example MessageLink name. Replace it with your own configured name as needed.

Нижче наведено список доступних методів:

  • is_linked – Повертає, чи цей Мозок активно підключений до свого парного Мозку.

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

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

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

Створити посилання#

Створіть MessageLink на обох роботах V5 Brains, щоб встановити канал зв’язку між ними — або бездротовим способом за допомогою радіостанцій V5 Robot Radio, або через дротовий Smart Cable — щоб роботи могли надсилати повідомлення один одному.

MessageLink(smartport, name, linktype, wired)

Параметр

Опис

smartport

Розумний порт, що використовується для цього з’єднання — порт, до якого підключено радіо V5 Robot (бездротовий зв’язок) або до якого підключено розумний кабель (дротовий зв’язок). Записується як Ports.PORTx , де x — номер порту.

name

Унікальна назва, яка буде надана цьому посиланню у вигляді рядка.
Примітка: Ця назва має бути достатньо довгою, щоб створити унікальний ідентифікатор, щоб випадково не збігатися з посиланням іншої команди.

linktype

Роль, яку цей Мозок використовуватиме для цієї пари посилань. Кожна пара повинна містити одного Менеджера та одного Працівника:

  • VexlinkType.MANAGER – Використовується для робота, який надсилатиме більше або більший обсяг повідомлень. Менеджери мають вищу вихідну пропускну здатність (~1040 байт/сек).
  • VexlinkType.WORKER – Використовується для робота, який надсилатиме менше або менший обсяг повідомлень. Працівники мають нижчу вихідну пропускну здатність (~520 байт/сек).

wired

Необов’язково. Чи є це з’єднання дротовим, чи бездротовим:

  • True – V5 Brains підключені за допомогою смарт-кабелю.
  • False (за замовчуванням) – V5 Brains підключаються бездротовим способом за допомогою радіостанцій V5 Robot.

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

"""
Create a wireless link in Port 1
name: VEXRoboticsLink123456789
linktype: Manager
"""
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

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

"""
Create a wireless link in Port 1
name: VEXRoboticsLink123456789
linktype: Worker
"""
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

Доступні методи#

Після налаштування MessageLink та підключення Brains ви можете використовувати наведені нижче методи для надсилання, отримання та відповіді на повідомлення.

is_linked#

Метод is_linked повертає, чи сполучені V5 Brains на MessageLink один з одним.

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

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

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

Usage:
link.is_linked()

Параметри

Опис

Цей метод не має параметрів.

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

# Tell the other robot when the screen is being pressed

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    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(50, MSEC)

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

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

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

# Continuously check if Robot 1 has sent "pressed"
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Robot 2 - Worker")
    brain.screen.next_row()

    if link.receive() == "pressed":
        brain.screen.new_line()
        brain.screen.print("Manager is being pressed!")

    wait(50, MSEC)

send#

send надсилає рядок та/або ціле число та/або число з плаваючою комою до іншого підключеного V5 Brain.

Usage:
send(string, integer, float)

Параметри

Опис

string

Рядок, який потрібно надіслати іншому підключеному V5 Brain.

integer

Необов’язково. Ціле число для надсилання іншому підключеному V5 Brain.

float

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

If only string is sent, the other linked V5 Brain receives that exact string.

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

Приклад: При використанні link.send(“string”, 1, 2.55) отримується як .string_1_2.5500.

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

# Tell the other robot when the screen is being pressed

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    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(50, MSEC)

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

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

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

# Continuously check if Robot 1 has sent "pressed"
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Robot 2 - Worker")
    brain.screen.next_row()

    if link.receive() == "pressed":
        brain.screen.new_line()
        brain.screen.print("Manager is being pressed!")

    wait(50, MSEC)

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

# Tell the other robot where the screen was pressed

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 1 - Manager")
brain.screen.next_row()
brain.screen.print("Tap to send circles")

# Send the coordinates whenever the screen is pressed
while True:
    if brain.screen.pressing():
        x = brain.screen.x_position()
        y = brain.screen.y_position()

        link.send("touch", x, y)

    wait(10, MSEC)

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

# Draw a circle where Robot 1's screen was pressed

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 2 - Worker")

while True:
    # Get the full encoded string
    circle_coordinates = link.receive(200)

    if circle_coordinates:

        # Split the encoded string by _
        parts = circle_coordinates.split("_")

        if len(parts) == 3:
            # Convert the coordinates back into numbers
            x = float(parts[1])
            y = float(parts[2])

            brain.screen.set_fill_color(Color.WHITE)
            brain.screen.draw_circle(x, y, 20)

    wait(10, MSEC)

receive#

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

Usage:
receive(timeout)

Параметри

Опис

timeout

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

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

# Tell the other robot when the screen is being pressed

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    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(50, MSEC)

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

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

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

# Continuously check if Robot 1 has sent "pressed"
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Robot 2 - Worker")
    brain.screen.next_row()

    if link.receive() == "pressed":
        brain.screen.new_line()
        brain.screen.print("Manager is being pressed!")

    wait(50, MSEC)

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

# Send a math problem for the other Brain to solve

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 1 - Manager")

"""
Change whether to "add" or "subtract",
then what numbers to use in the operation.
"""
link.send("add", 7, 2.5)

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

# Solve the math problem that the other Brain sends

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 2 - Worker")
brain.screen.next_row()

math_problem = link.receive()

if math_problem:

    # Split the encoded string by _
    parts = math_problem.split("_")

    if len(parts) == 3:
        # Remove the . from the beginning of the string
        operator = "".join([c for c in parts[0] if c.isalpha()])

        # Separate out the numbers for the operation
        a = int(parts[1])
        b = float(parts[2])

        # Use what operator was sent
        if operator == "add":
            result = a + b
        elif operator == "subtract":
            result = a - b
        # If neither add or subtract is sent, do nothing
        else:
            pass

brain.screen.print("Result = ", result)

received#

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

Usage:
link.received(message, arg)

Параметри

Опис

message

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

callback

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

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

Підпис зворотного виклику:
callback(message, linkname, index, value)

Аргумент

Опис

message

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

linkname

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

index

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

value

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

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

# Send a math problem for the other Brain to solve

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 1 - Manager")

"""
Change whether to "add" or "subtract",
then what numbers to use in the operation.
"""
link.send("add", 7, 2.5)

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

# Solve the math problem that the other Brain sends

# Create the link
link = MessageLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 2 - Worker")
brain.screen.next_row()

# add if "add" is received
def add_cmd(message, linkname, a, b):
    result = a + b
    brain.screen.print("Result = ", result)

# subtract if ""subtract" is received
def subtract_cmd(message, linkname, a, b):
    result = a - b
    brain.screen.print("Result = ", result)

# Create event handlers for "add" and "subtract"
link.received("add", add_cmd)
link.received("subtract", subtract_cmd)

попередній

VEXlink

наступний

Серійне посилання

On this page
  • Вступ
  • Створити посилання
  • Доступні методи
    • is_linked
    • 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)