• 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
  • MessageLink
Русский
  • 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
      • MessageLink
      • SerialLink
    • Консоль
    • Логика
    • 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#

  • Введение

  • Создать ссылку

  • Доступные методы

    • is_linked

    • отправлять

    • получать

    • полученный

Введение#

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

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

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

На этой странице в качестве примера используется имя MessageLink , а в качестве имени link При необходимости замените его на собственное имя.

Ниже приведён список доступных методов:

  • is_linked – Возвращает значение, указывающее, активно ли данный мозг связан с парным мозгом.

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

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

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

Создать ссылку#

Создайте интерфейс MessageLink на обоих блоках управления V5, чтобы установить канал связи между ними — либо беспроводным способом с помощью радиомодулей V5 Robot Radios, либо через проводной интеллектуальный кабель — чтобы роботы могли отправлять друг другу сообщения.

MessageLink(smartport, name, linktype, wired)

Параметр

Описание

smartport

Для этой связи используется «умный порт» — порт, к которому подключено радиоустройство робота V5 (беспроводное соединение) или в который вставлен «умный кабель» (проводное соединение). Записывается как Ports.PORTx , где x — номер порта.

name

Уникальное имя для этой ссылки в виде строки.
Примечание: Это имя должно быть достаточно длинным, чтобы создать уникальный идентификатор и избежать случайного совпадения со ссылкой другой команды.

linktype

Роль, которую этот «мозг» будет использовать для этой пары связей. Каждая пара должна включать одного менеджера и одного работника:

  • VexlinkType.MANAGER – Используется для робота, который будет отправлять больше или более крупные сообщения. У менеджеров более высокая исходящая пропускная способность (~1040 байт/сек).
  • VexlinkType.WORKER – Используется для робота, который будет отправлять меньше или более мелкие сообщения. У работников более низкая исходящая пропускная способность (~520 байт/сек).

wired

Необязательно. Тип соединения: проводное или беспроводное:

  • True – Блоки управления V5 подключены через интеллектуальный кабель.
  • False (по умолчанию) – Блоки управления V5 подключаются по беспроводной связи с помощью радиомодулей V5 Robot Radio.

Код для робота 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 знака после запятой.

Если отправлена ​​только строка string , то другой связанный с ним модуль V5 Brain получит именно эту строку.

Если включены 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

Имя сообщения (строка), которое нужно сопоставить. Если имя полученного сообщения совпадает с этим значением, вызывается функция обратного вызова callback.

callback

Ранее определенная функция, которая запускается, когда мозг V5 получает сообщение, соответствующее сообщению 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

вперёд

SerialLink

На этой странице
  • Введение
  • Создать ссылку
  • Доступные методы
    • 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)