• 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
Přejít k hlavnímu obsahu
Ctrl+K

< Back to Platform Select

  • VEX EXP
  • Referenční informace k API VEX EXP
  • VEXlink
  • Odkaz na zprávu
Česky
  • English
  • العربية
  • বাংলা
  • 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

Navigace v sekcích

  • Bloky
  • Python
    • Hnací ústrojí
    • Pohyb
    • Zvuk
    • Vidění
    • Obrazovka
    • Ovladač
    • Snímání
    • Inerciální
    • 3vodičová zařízení
    • Pneumatický
    • Mozek
    • SD karta
    • 6osé rameno
    • Signální věž
    • VEXlink
      • Odkaz na zprávu
      • SerialLink
    • Utěšit
    • Logika
    • Knihovny MicroPythonu
  • C++
  • Výukové programy VEXcode

Navigace na platformě

  • 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

Odkaz na zprávu#

  • Zavedení

  • Vytvořit odkaz

  • Dostupné metody

    • je_propojeno

    • poslat

    • dostávat

    • přijato

Zavedení#

MessageLink umožňuje dvěma EXP Brains komunikaci odesíláním krátkých řetězcových zpráv s volitelnými malými daty. Je navržen pro koordinaci mezi roboty – například pro spouštění rutin, sdílení výsledků senzorů nebo spouštění chování u jiného robota.

Každé použití send přidá zprávu do fronty propojeného EXP Brainu a fronta se čte v systému FIFO (first in, first out). Pokud je odesláno více zpráv předtím, než druhý EXP Brain použije receive, budou uloženy a vráceny jedna po druhé v pořadí, v jakém byly odeslány. Protože se zprávy mohou čekat ve frontě, opakované odesílání stejného stavu v každé smyčce může způsobit nahromadění zpráv; z časově kritické logiky odesílejte pouze při změně hodnot.

Důležité: Oba roboti musí současně spouštět projekty, které používají MessageLink , jinak nebudou odesílány/přijímány žádné zprávy.

Tato stránka používá jako příklad názvu MessageLink hodnotu link V případě potřeby jej nahraďte vlastním nakonfigurovaným názvem.

Níže je uveden seznam dostupných metod:

  • is_linked – Vrací, zda je tento mozek aktivně připojen k jeho spárovanému mozku.

  • send – Odešle zprávu spárovanému mozku.

  • receive – Čeká na další příchozí zprávu a vrací ji.

  • received – Registruje funkci, která má být volána při každém přijetí nové zprávy.

Vytvořit odkaz#

Vytvořte MessageLink na obou EXP Brainech, abyste mezi nimi navázali komunikační kanál – buď bezdrátově s robotickými rádii V5, nebo prostřednictvím kabelového chytrého kabelu – aby si roboti mohli navzájem posílat zprávy.

MessageLink(smartport, name, linktype, wired)

Parametr

Popis

smartport

Inteligentní port použitý pro toto propojení – port, ke kterému je připojeno robotické rádio V5 (bezdrátově) nebo je do něj zapojen inteligentní kabel (kabelově). Zapisuje se jako Ports.PORTx , kde x je číslo portu.

name

Jedinečný název, který se má tomuto odkazu zadat jako řetězec.
Poznámka: Tento název by měl být dostatečně dlouhý, aby vytvořil jedinečné ID a omylem se neshodoval s odkazem jiného týmu.

linktype

Role, kterou tento mozek použije pro tento pár odkazů. Každý pár musí obsahovat jednoho manažera a jednoho pracovníka:

  • VexlinkType.MANAGER – Použijte pro robota, který bude odesílat více zpráv nebo větší objem zpráv. Manažeři mají vyšší odchozí šířku pásma (~1040 bajtů/s).
  • VexlinkType.WORKER – Použijte pro robota, který bude odesílat méně zpráv nebo menší objem zpráv. Pracovníci mají nižší odchozí šířku pásma (~520 bajtů/s).

wired

Volitelné. Zda je toto připojení kabelové nebo bezdrátové:

  • True – Moduly EXP Brains jsou připojeny pomocí chytrého kabelu (Smart Cable).
  • False (výchozí) – Moduly EXP Brains se připojují bezdrátově pomocí robotických rádií V5.

Kód pro robota 1

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

Kód pro Robota 2

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

Dostupné metody#

Jakmile je váš MessageLink nastaven a Brains jsou propojeny, můžete k odesílání, přijímání a odpovídání na zprávy použít níže uvedené metody.

is_linked#

Metoda is_linked vrací, zda jsou EXP Brains v MessageLinku vzájemně spárovány.

  • True – Dva EXP mozky jsou spárované a komunikují prostřednictvím tohoto spojení.

  • False – Dva EXP mozky nejsou v tomto odkazu spárovány.

Poznámka: Je dobrým zvykem vždy na začátku projektu zkontrolovat, zda jsou EXP Brains propojeny, než spustíte jakýkoli další kód.

Usage:
link.is_linked()

Parametry

Popis

Tato metoda nemá žádné parametry.

Kód pro 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)

Kód pro 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 odešle řetězec a/nebo celé číslo a/nebo číslo s plovoucí desetinnou čárkou do druhého propojeného EXP Brainu.

Usage:
send(string, integer, float)

Parametry

Popis

string

Řetězec, který se má odeslat do druhého propojeného EXP Brainu.

integer

Volitelné. Celé číslo, které se má odeslat do druhého propojeného EXP mozku.

float

Volitelné. Číslo s plovoucí desetinnou čárkou, které se odešle do druhého propojeného EXP Brainu. Čísla s plovoucí desetinnou čárkou jsou formátována na 4 desetinná místa; pokud je zadáno méně desetinných míst, přidávají se koncové nuly, dokud se nezobrazí 4.

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

Pokud je zahrnuto integer a/nebo float , přijímající Brain dostane jeden zakódovaný řetězec, který kombinuje všechna pole v tomto pořadí: .string_integer_float

Příklad: Použitím link.send(“string”, 1, 2.55) přijata jako .string_1_2.5500.

Kód pro 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)

Kód pro 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)

Kód pro 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)

Kód pro 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#

Funkce receive vrací další zprávu ve frontě z druhého propojeného EXP Brainu. Zprávy se čtou v pořadí FIFO (nejstarší nepřečtené jako první). Pokud je fronta při volání receive prázdná, čeká na novou zprávu až do zadaného časového limitu timeout receive vrátí hodnotu Nonea všechny zprávy odeslané poté zůstanou ve frontě pro přečtení při příštím použití funkce receive.

Pokud druhý propojený EXP Brain odeslal pouze řetězec string, receive vrátí přesný řetězec.

Pokud druhý propojený EXP Brain odeslal celé číslo a/nebo číslo s plovoucí čárkou, receive vrátí jeden zakódovaný řetězec, který kombinuje všechna pole v tomto pořadí: .string_integer_float

Například pokud druhý propojený EXP Brain používá link.send(“string”, 1, 2.55), pak použití link.receive() vrátí zakódovaný řetězec, například .string_1_2.5500. Tento zakódovaný řetězec můžete rozdělit (viz níže uvedené příklady) a extrahovat tak název zprávy, celé číslo a hodnotu s desetinnou čárkou.

Pokud se raději vyhnete ručnímu dělení/parsování, použijte received k registraci obslužné rutiny pro konkrétní název zprávy; obslužná rutina přijímá odeslané hodnoty jako argumenty.

Usage:
receive(timeout)

Parametry

Popis

timeout

Volitelné. Jak dlouho v milisekundách receive bude čekat na novou zprávu, pouze pokud je fronta prázdná. Výchozí hodnota je 300 000 (300 sekund).

Kód pro 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)

Kód pro 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)

Kód pro 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)

Kód pro 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 registruje funkci, která má být volána vždy, když EXP Brain přijme odeslanou zprávu.

Usage:
link.received(message, arg)

Parametry

Popis

message

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

callback

Dříve definovaná funkce, která se spustí, když EXP Brain obdrží zprávu odpovídající message.

received zpětných volání se čtyřmi argumenty:

Podpis zpětného volání:
callback(message, linkname, index, value)

Argument

Popis

message

Název přijaté zprávy (například “add”).

linkname

Název odkazu, ze kterého byla zpráva přijata.

index

Celočíselná hodnota odeslaná se zprávou (pokud je zadána).

value

Hodnota s desetinnou čárkou odeslaná se zprávou (pokud je zadána).

Kód pro 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)

Kód pro 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)

předchozí

VEXlink

další

SerialLink

On this page
  • Zavedení
  • Vytvořit odkaz
  • Dostupné metody
    • is_linked
    • send
    • receive
    • received
Innovation First, International

VEX and VEX Robotics are trademarks or service marks of Innovation First, Inc. Copyright ©2026. All Rights Reserved. VEX Robotics, Inc. is a subsidiary of Innovation First International, Inc. All other product names / marks of others are the property of their respective owners. Patents and / or Patents Pending - innovationfirst.com/patents
Site Privacy Policy / Site Terms of Use / Cookie Policy / Software Privacy Policy

Navštivte stránku VEX Robotics na Facebooku Navštivte stránku VEX Robotics na Twitteru Navštivte instagramovou stránku VEX Robotics Navštivte stránku VEX Robotics na YouTube
Formulář pro zpětnou vazbu k VEX API

Vážíme si vaší zpětné vazby! Pomocí tohoto formuláře se s námi podělte o návrhy, pochvaly nebo nahlaste chyby týkající se VEX API. Vaše podněty nám pomohou vylepšit dokumentaci k VEX API.

​

Pokud máte technické problémy nebo potřebujete zákaznickou podporu, navštivte prosím support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Poznámka: Aktuální URL adresa bude sdílena s vaší zprávou

Uvedením své e-mailové adresy souhlasíte s tím, že vám společnost VEX může zasílat e-maily, pokud budeme mít dotazy k vaší zpětné vazbě.
Zásady ochrany osobních údajů >
Prosím, poskytněte nám svůj názor. Zpětná vazba byla úspěšně odeslána!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)