• 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
Siirry pääsisältöön
Ctrl+K

< Back to Platform Select

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

Osioiden navigointi

  • Lohkot
  • Python
    • Voimansiirto
    • Liike
    • Ääni
    • Visio
    • Näyttö
    • Ohjain
    • Tunnistaminen
    • Inertiaalinen
    • 3-johtimiset laitteet
    • Pneumaattinen
    • Aivot
    • SD-kortti
    • 6-akselinen varsi
    • Signaalitorni
    • VEXlink
      • Viestilinkki
      • Sarjalinkki
    • Konsoli
    • Logiikka
    • MicroPython-kirjastot
  • C++
  • VEXcode-oppaat

Alustan navigointi

  • 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

Viestilinkki#

  • Johdanto

  • Luo linkki

  • Käytettävissä olevat menetelmät

    • on_linkitetty

    • lähetä

    • vastaanottaa

    • vastaanotettu

Johdanto#

MessageLinkin avulla kaksi EXP Braivia kommunikoi keskenään lähettämällä lyhyitä viestejä, jotka sisältävät valinnaisesti pieniä tietoja. Se on suunniteltu robottien väliseen koordinointiin – kuten rutiinien käynnistämiseen, anturitulosten jakamiseen tai toisen robotin toiminnan käynnistämiseen.

Jokainen send -funktion käyttökerta lisää viestin linkitetyn EXP Brainin jonoon, ja jono luetaan FIFO-periaatteella (first-in, first-out). Jos useita viestejä lähetetään ennen kuin toinen EXP Brain käyttää receive -funktiota, ne tallennetaan ja palautetaan yksi kerrallaan lähetysjärjestyksessä. Koska viestit voivat jonottaa, saman tilan toistuva lähettäminen jokaisessa silmukassa voi luoda ruuhkan; aikakriittisissä logiikoissa viesti lähetetään vain, kun arvot muuttuvat.

Tärkeää: Molempien robottien on oltava käynnissä projekteissa, jotka käyttävät MessageLink tä samanaikaisesti, muuten viestejä ei lähetetä/vastaanoteta.

Tällä sivulla käytetään esimerkkinimenä link MessageLink Korvaa se tarvittaessa omalla määritetyllä nimelläsi.

Alla on luettelo käytettävissä olevista menetelmistä:

  • is_linked – Palauttaa, onko tämä aivo aktiivisesti yhteydessä siihen paritettuun aivoon.

  • send – Lähettää viestin parilliselle aivoille.

  • receive – Odottaa seuraavaa saapuvaa viestiä ja palauttaa sen.

  • received – Rekisteröi funktion kutsuttavaksi aina, kun uusi viesti vastaanotetaan.

Luo linkki#

Luo MessageLink molempiin EXP-aivoihin muodostaaksesi niiden välille kommunikaatiokanavan – joko langattomasti V5-robottiradioilla tai langallisen älykaapelin kautta – jotta robotit voivat lähettää viestejä toisilleen.

MessageLink(smartport, name, linktype, wired)

Parametri

Kuvaus

smartport

Tässä linkissä käytetty älyportti – portti, johon V5-robottiradio on kytketty (langaton) tai johon älykaapeli on kytketty (langallinen). Kirjoitetaan muodossa Ports.PORTx , jossa x on portin numero.

name

Linkin yksilöllinen nimi merkkijonona.
Huom: Tämän nimen tulee olla riittävän pitkä, jotta se luo yksilöllisen tunnuksen, jotta se ei vahingossa vastaa toisen tiimin linkkiä.

linktype

Rooli, jota tämä aivo käyttää tälle linkkiparille. Jokaisen parin on sisällettävä yksi johtaja ja yksi työntekijä:

  • VexlinkType.MANAGER – Käytä robotille, joka lähettää enemmän tai suurempia viestejä. Johtajilla on suurempi lähtevä kaistanleveys (~1040 tavua/s).
  • VexlinkType.WORKER – Käytä robotille, joka lähettää vähemmän tai pienempiä viestejä. Työntekijöillä on pienempi lähtevä kaistanleveys (~520 tavua/s).

wired

Valinnainen. Onko tämä yhteys langallinen vai langaton:

  • True – EXP-aivot on yhdistetty älykaapelilla.
  • False (oletus) – EXP-aivot yhdistyvät langattomasti V5-robottiradioilla.

Robotin 1 koodi

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

Robotin 2 koodi

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

Käytettävissä olevat menetelmät#

Kun MessageLink on määritetty ja aivot on linkitetty, voit käyttää alla olevia menetelmiä viestien lähettämiseen, vastaanottamiseen ja niihin vastaamiseen.

is_linked#

is_linked -metodi palauttaa, ovatko MessageLinkin EXP-aivot paritettuja toisiinsa.

  • True – Kaksi EXP-aivoa on paritettu ja kommunikoivat keskenään tämän linkin kautta.

  • False – Kahta EXP-aivoa ei ole yhdistetty tällä linkillä.

Huom: On hyvä käytäntö tarkistaa aina projektin alussa, että EXP-aivot on linkitetty ennen minkään muun koodin suorittamista.

Usage:
link.is_linked()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

Robotin 1 koodi

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

Robotin 2 koodi

# 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 lähettää merkkijonon ja/tai kokonaisluvun ja/tai liukulukun toiseen linkitettyyn EXP Brainiin.

Usage:
send(string, integer, float)

Parametrit

Kuvaus

string

Toiseen linkitettyyn EXP Brainiin lähetettävä merkkijono.

integer

Valinnainen. Kokonaisluku, joka lähetetään toiseen linkitettyyn EXP-aivoon.

float

Valinnainen. Liukuluku lähetettäväksi toiseen linkitettyyn EXP Brainiin. Liukuluvut muotoillaan neljän desimaalin tarkkuudella; jos desimaaleja on vähemmän, perään lisätään nollia, kunnes niitä on enää neljä.

Jos lähetetään vain string , toinen linkitetty EXP-aivot vastaanottavat tarkalleen kyseisen merkkijonon.

Jos mukaan lasketaan arvot integer ja/tai float , vastaanottava aivot saavat yhden koodatun merkkijonon, joka yhdistää kaikki kentät tässä järjestyksessä: .string_integer_float

Esimerkki: Käyttämällä link.send(“string”, 1, 2.55) vastaanotetaan muodossa .string_1_2.5500.

Robotin 1 koodi

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

Robotin 2 koodi

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

Robotin 1 koodi

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

Robotin 2 koodi

# 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 palauttaa seuraavan jonossa olevan viestin toisesta linkitetystä EXP Brainista. Viestit luetaan FIFO-järjestyksessä (vanhin lukematon ensin). Jos jono on tyhjä, kun receive kutsutaan, se odottaa uutta viestiä määritettyyn timeout asti. Jos viestiä ei saavu kyseiseen ikkunaan, receive palauttaa arvon None, ja kaikki sen jälkeen lähetetyt viestit jäävät jonoon luettavaksi seuraavalla kerralla, kun receive käytetään.

Jos toinen linkitetty EXP Brain lähetti vain string, receive palauttaa tarkalleen kyseisen merkkijonon.

Jos toinen linkitetty EXP Brain lähetti kokonaisluvun ja/tai liukulukun, receive palauttaa yhden koodatun merkkijonon, joka yhdistää kaikki kentät tässä järjestyksessä: .string_integer_float

Jos esimerkiksi toinen linkitetty EXP Brain käyttää link.send(“string”, 1, 2.55), niin link.receive() palauttaa koodatun merkkijonon, kuten .string_1_2.5500Voit jakaa tämän koodatun merkkijonon (katso alla olevat esimerkit) purkaaksesi viestin nimen, kokonaisluvun ja liukulukujen arvot.

Jos haluat mieluummin välttää manuaalisen jakamisen/jäsentämisen, käytä received rekisteröidäksesi käsittelijän tietylle viestin nimelle; käsittelijä vastaanottaa lähetetyt arvot argumentteina.

Usage:
receive(timeout)

Parametrit

Kuvaus

timeout

Valinnainen. Kuinka kauan millisekunteina receive odottaa uutta viestiä vain, jos jono on tyhjä. Oletusarvo on 300 000 (300 sekuntia).

Robotin 1 koodi

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

Robotin 2 koodi

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

Robotin 1 koodi

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

Robotin 2 koodi

# 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 rekisteröi funktion kutsuttavaksi aina, kun EXP Brain vastaanottaa lähetetyn viestin.

Usage:
link.received(message, arg)

Parametrit

Kuvaus

message

Vastaavan viestin nimi (merkkijono). Kun vastaanotetun viestin nimi vastaa tätä arvoa, kutsutaan callback -funktiota.

callback

Aiemmin määritelty function, joka suoritetaan, kun EXP Brain vastaanottaa viestin, joka vastaa message.

received takaisinkutsufunktioita kutsutaan neljällä argumentilla:

Takaisinkutsun allekirjoitus:
callback(message, linkname, index, value)

Argumentti

Kuvaus

message

Vastaanotetun viestin nimi (esimerkiksi “add”).

linkname

Linkin nimi, josta viesti vastaanotettiin.

index

Viestin mukana lähetetty kokonaislukuarvo (jos annettu).

value

Viestin mukana lähetetty liukuluku (jos annettu).

Robotin 1 koodi

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

Robotin 2 koodi

# 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

>

Sarjalinkki

On this page
  • Johdanto
  • Luo linkki
  • Käytettävissä olevat menetelmät
    • 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

Käy VEX Roboticsin Facebook-sivulla Käy VEX Roboticsin Twitter-sivulla Käy VEX Roboticsin Instagram-sivulla Käy VEX Roboticsin YouTube-sivulla
VEX API -palautelomake

Arvostamme palautettasi! Käytä tätä lomaketta jakaaksesi ehdotuksia, kehuja tai ilmoittaaksesi VEX API:n virheistä. Palautteesi auttaa meitä parantamaan VEX API:n dokumentaatiota.

​

Jos sinulla on teknisiä ongelmia tai tarvitset asiakastukea, käy osoitteessa support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Huomautus: nykyinen URL-osoite jaetaan viestisi kanssa.

Antamalla sähköpostiosoitteesi hyväksyt, että VEX voi lähettää sinulle sähköpostia, jos meillä on kysyttävää palautteestasi.
Tietosuojakäytäntö >
Anna palautetta. Palaute lähetetty onnistuneesti!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)