• 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
Przejdź do treści głównej
Ctrl+K

< Back to Platform Select

  • VEX V5
  • Dokumentacja API VEX V5
  • VEXlink
  • MessageLink
Polski
  • English
  • العربية
  • বাংলা
  • Česky
  • Deutsch
  • Ελληνικά
  • Español
  • Español Latinoamericano
  • Suomi
  • Français
  • Gaeilge
  • हिंदी
  • Magyar
  • Bahasa Indonesia
  • 日本語
  • 한국어
  • Lietuvių
  • Latviešu
  • മലയാളം
  • Nederlands
  • Português
  • Русский
  • Svenska
  • ไทย
  • Türkçe
  • Українська
  • Tiếng Việt
  • 简体中文
  • 繁體中文
  • VEXcode Robotics Logo

Nawigacja sekcji

  • Bloki
  • Python
    • Układ napędowy
    • Ruch
    • Wizja
    • Ekran
    • Kontroler
    • Wyczuwanie
    • Bezwładnościowy
    • Urządzenia 3-przewodowe
    • Pneumatyka
    • Mózg
    • Dźwięk
    • Karta SD
    • VEXlink
      • MessageLink
      • Łącze szeregowe
    • Konsola
    • Logika
    • Ramię 6-osiowe
    • Magnes
    • Konkurs
    • Biblioteki MicroPython
  • C++
  • Samouczki VEXcode

Nawigacja platformy

  • 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#

  • Wstęp

  • Utwórz link

  • Dostępne metody

    • jest_powiązany

    • wysłać

    • odbierać

    • otrzymane

Wstęp#

MessageLink umożliwia komunikację dwóch robotów V5 Brain poprzez wysyłanie krótkich wiadomości z opcjonalnymi małymi danymi. Został zaprojektowany do koordynacji między robotami — na przykład uruchamiania procedur, udostępniania wyników czujników lub wyzwalania zachowań u innego robota.

Każde użycie send dodaje wiadomość do kolejki połączonego mózgu V5, a kolejka jest odczytywana metodą FIFO (pierwszy wszedł, pierwszy wyszedł). Jeśli wiele wiadomości zostanie wysłanych przed użyciem przez drugi mózg V5 polecenia receive, zostaną one zapisane i zwrócone pojedynczo w kolejności wysłania. Ponieważ wiadomości mogą być kolejkowane, wielokrotne wysyłanie tego samego statusu w każdej pętli może powodować zaległości. W przypadku logiki krytycznej czasowo wysyłaj tylko wtedy, gdy wartości się zmienią.

Ważne: Oba roboty muszą jednocześnie obsługiwać projekty wykorzystujące MessageLink , w przeciwnym razie żadne wiadomości nie zostaną wysłane ani odebrane.

Ta strona używa przykładowej nazwy łącza link , łącza MessageLink W razie potrzeby zastąp ją własną, skonfigurowaną nazwą.

Poniżej znajduje się lista dostępnych metod:

  • is_linked – Zwraca informację, czy ten Mózg jest aktywnie połączony ze sparowanym Mózgiem.

  • send – Wysyła wiadomość do sparowanego Mózgu.

  • receive – czeka na następną przychodzącą wiadomość i ją zwraca.

  • otrzymanoreceived – Rejestruje funkcję, która ma zostać wywołana po otrzymaniu nowej wiadomości.

Utwórz link#

Utwórz MessageLink na obu mózgach V5, aby ustanowić między nimi kanał komunikacyjny — bezprzewodowo za pomocą radioodbiorników V5 Robot Radios lub za pomocą przewodowego inteligentnego kabla — dzięki czemu roboty będą mogły przesyłać sobie nawzajem wiadomości.

MessageLink(smartport, name, linktype, wired)

Parametr

Opis

smartport

Port Smart używany do tego połączenia – port, do którego podłączone jest radio robota V5 (bezprzewodowo) lub kabel Smart Cable (przewodowo). Zapisujemy to jako Ports.PORTx , gdzie x to numer portu.

name

Unikalna nazwa, jaką należy podać temu linkowi w postaci ciągu znaków.
Uwaga: Nazwa ta powinna być wystarczająco długa, aby utworzyć unikalny identyfikator i zapobiec przypadkowemu dopasowaniu jej do linku innego zespołu.

linktype

Rola, jaką ten Mózg będzie pełnił dla tej pary łączy. Każda para musi zawierać jednego Menedżera i jednego Pracownika:

  • VexlinkType.MANAGER – Użyj dla robota, który będzie wysyłał więcej lub większe wiadomości. Menedżerowie mają większą przepustowość wychodzącą (~1040 bajtów/s).
  • VexlinkType.WORKER – Użyj dla robota, który będzie wysyłał mniej lub mniejsze wiadomości. Pracownicy mają niższą przepustowość wychodzącą (~520 bajtów/s).

wired

Opcjonalnie. Czy to połączenie jest przewodowe, czy bezprzewodowe:

  • True – Mózgi V5 są połączone za pomocą inteligentnego kabla.
  • False (domyślnie) – Mózgi V5 łączą się bezprzewodowo za pomocą radia V5 Robot.

Kod dla Robota 1

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

Kod dla Robota 2

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

Dostępne metody#

Po skonfigurowaniu MessageLink i połączeniu Brains możesz używać poniższych metod do wysyłania, odbierania i odpowiadania na wiadomości.

is_linked#

Metoda is_linked zwraca informację, czy mózgi V5 w MessageLink są ze sobą sparowane.

  • True – Dwa mózgi V5 są sparowane i komunikują się za pomocą tego łącza.

  • False – Dwa mózgi V5 nie są sparowane w tym łączu.

Uwaga: Dobrą praktyką jest zawsze sprawdzenie, czy moduły V5 Brains są połączone na początku projektu, zanim uruchomisz dalszy kod.

Usage:
link.is_linked()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

Kod dla Robota 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)

Kod dla Robota 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 wysyła ciąg znaków i/lub liczbę całkowitą i/lub zmiennoprzecinkową do drugiego połączonego mózgu V5.

Usage:
send(string, integer, float)

Parametry

Opis

string

Ciąg znaków do wysłania do drugiego połączonego mózgu V5.

integer

Opcjonalnie. Liczba całkowita do wysłania do drugiego połączonego mózgu V5.

float

Opcjonalnie. Liczba zmiennoprzecinkowa do wysłania do drugiego połączonego mózgu V5. Liczby zmiennoprzecinkowe są formatowane do 4 miejsc po przecinku; jeśli podano mniej miejsc po przecinku, dodawane są zera końcowe, aż do wyświetlenia 4.

Jeżeli wysłany zostanie tylko ciąg string , drugi połączony mózg V5 odbierze dokładnie ten ciąg.

Jeżeli uwzględniono integer i/lub float , odbierający mózg otrzymuje pojedynczy zakodowany ciąg, który łączy wszystkie pola w następującej kolejności: .string_integer_float

Przykład: Używając link.send(“string”, 1, 2.55) jest odbierane jako .string_1_2.5500.

Kod dla Robota 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)

Kod dla Robota 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)

Kod dla Robota 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)

Kod dla Robota 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 zwraca kolejną wiadomość w kolejce z drugiego połączonego modułu V5 Brain. Wiadomości są odczytywane w kolejności FIFO (najstarsze nieprzeczytane jako pierwsze). Jeśli kolejka jest pusta w momencie wywołania receive , oczekuje ona na nową wiadomość do określonego limitu czasu timeout Jeśli w tym przedziale czasowym nie pojawi się żadna wiadomość, receive zwraca None, a każda wiadomość wysłana później pozostaje w kolejce do odczytania przy następnym użyciu receive.

Jeśli drugi połączony mózg V5 wysłał tylko ciąg string, receive zwraca dokładnie ten ciąg.

Jeżeli drugi połączony mózg V5 wysłał liczbę całkowitą i/lub zmiennoprzecinkową, receive i zwraca pojedynczy zakodowany ciąg, który łączy wszystkie pola w następującej kolejności: .string_integer_float

Na przykład, jeśli drugi połączony moduł V5 Brain używa link.send(“string”, 1, 2.55), to użycie link.receive() zwraca zakodowany ciąg znaków, taki jak .string_1_2.5500. Możesz podzielić ten zakodowany ciąg znaków (zobacz poniższe przykłady), aby wyodrębnić nazwę wiadomości, wartości całkowite i zmiennoprzecinkowe.

Jeśli wolisz uniknąć ręcznego dzielenia/analizowania, użyj received w celu zarejestrowania obsługi dla określonej nazwy wiadomości; obsługa odbiera wysłane wartości jako argumenty.

Usage:
receive(timeout)

Parametry

Opis

timeout

Optional. How long in milliseconds receive will wait for a new message only if the queue is empty. Default is 300,000 (300 seconds).

Kod dla Robota 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)

Kod dla Robota 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)

Kod dla Robota 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)

Kod dla Robota 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 rejestruje funkcję, która ma zostać wywołana za każdym razem, gdy V5 Brain otrzyma wysłaną wiadomość.

Usage:
link.received(message, arg)

Parametry

Opis

message

Nazwa wiadomości (ciąg znaków) do dopasowania. Gdy nazwa odebranej wiadomości pasuje do tej wartości, wywoływana jest funkcja zwrotna callback.

callback

Wcześniej zdefiniowana funkcja, która jest uruchamiana, gdy mózg V5 otrzymuje wiadomość pasującą message.

Otrzymano received są wywoływane z czterema argumentami:

Sygnatura wywołania zwrotnego:
callback(message, linkname, index, value)

Argument

Opis

message

Nazwa otrzymanej wiadomości (na przykład “add”).

linkname

Nazwa łącza, z którego otrzymano wiadomość.

index

Wartość całkowita wysyłana w wiadomości (jeśli podano).

value

Wartość zmiennoprzecinkowa wysyłana w wiadomości (jeśli została podana).

Kod dla Robota 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)

Kod dla Robota 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)

wstecz

VEXlink

dalej

Łącze szeregowe

On this page
  • Wstęp
  • Utwórz link
  • Dostępne metody
    • is_linked
    • send
    • receive
    • received
Innovation First, International
​

VEX i VEX Robotics są znakami towarowymi lub usługowymi Innovation First, Inc. Copyright ©2026. Wszelkie prawa zastrzeżone. VEX Robotics, Inc. jest spółką zależną Innovation First International, Inc. Wszystkie inne nazwy produktów/znaki innych firm są własnością ich odpowiednich właścicieli. Patenty i/lub patenty w toku - innovationfirst.com/patents
Polityka prywatności witryny / Warunki korzystania z witryny / Polityka plików cookie / Polityka prywatności oprogramowania

Odwiedź stronę VEX Robotics na Facebooku Odwiedź stronę VEX Robotics na Twitterze Odwiedź stronę VEX Robotics na Instagramie Odwiedź stronę VEX Robotics na YouTube
Formularz opinii API VEX

Cenimy Twoją opinię! Użyj tego formularza, aby podzielić się sugestiami, pochwałami lub zgłosić błędy w API VEX. Twój wkład pomoże nam ulepszyć dokumentację API VEX.

​

Jeśli masz problemy techniczne lub potrzebujesz pomocy klienta, odwiedź stronę support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Uwaga: aktualny adres URL zostanie udostępniony w Twojej wiadomości

Podając swój adres e-mail, wyrażasz zgodę na otrzymywanie od VEX wiadomości e-mail w przypadku pytań dotyczących Twojej opinii.
Polityka prywatności >
Proszę o przekazanie opinii. Opinia została pomyślnie przesłana!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)