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

Sarjalinkki#

  • Johdanto

  • Luo linkki

  • Käytettävissä olevat menetelmät

    • on_linkitetty

    • lähetä

    • vastaanottaa

    • vastaanotettu

Johdanto#

SerialLinkin avulla kaksi EXP Brainia kommunikoi lähettämällä ja vastaanottamalla raakaa sarjadataa VEX Linkin kautta. Merkittyjen viestien sijaan SerialLink lähettää puskurin (merkkijonon tai tavutaulukon). Tämä tekee siitä hyödyllisen edistyneessä robottien välisessä viestinnässä, kuten anturidatan suoratoistossa, mukautettujen pakettimuotojen lähettämisessä tai oman protokollan rakentamisessa tavujen päälle.

Jokainen send-käskyn käyttökerta lisää dataa linkitetyn EXP Brainin vastaanottopuskuriin. Data luetaan saapumisjärjestyksessä (ensimmäinen sisään, ensimmäinen ulos). Jos useita puskureita lähetetään ennen kuin toinen EXP Brain käyttää receive-käskyä, ne pysyvät jonossa ja palautetaan yksi kerrallaan lähetysjärjestyksessä. Koska data voi jonottaa, suurten puskurien toistuva lähettäminen jokaisessa silmukassa voi luoda ruuhkan; aikakriittisissä linkeissä lähetä vain tarvitsemasi.

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

Tällä sivulla käytetään esimerkkinä nimeä link ja SerialLink nimeä 2. 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ää lyhytviestin (valinnaisella kokonaisluku-/liukulukudatalla) parilliselle aivoille.

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

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

Luo linkki#

Luo sarjaliikennelinkki molempiin EXP-aivoihin muodostaaksesi niiden välille kommunikaatiokanavan – joko langattomasti V5-robottiradioiden avulla tai langallisen älykaapelin kautta – jotta robotit voivat lähettää raakasarjadataa toisilleen.

SerialLink(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 = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

Robotin 2 koodi

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

Käytettävissä olevat menetelmät#

Kun SerialLink on määritetty ja aivot on linkitetty, voit käyttää alla olevia menetelmiä raakasarjadatan lähettämiseen, vastaanottamiseen ja siihen vastaamiseen.

is_linked#

is_linked -metodi palauttaa, ovatko sarjalinkin 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

# Send a message to the other robot

# Create the link
link = SerialLink(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")

link.send("HELLO")

Robotin 2 koodi

# Display the message that Robot 1 sends

# Create the link
link = SerialLink(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()

def received_message(bytearray, length):
    # Slice the bytearray to the valid data
    data = bytearray[:length]  
    # Decode and strip the message before displaying it
    text = data.decode().strip()
    brain.screen.print("Got: ", text)

# Call received_message whenever a message is received
link.received(received_message)

send#

send lähettää raakat sarjamuotoiset tavut toiseen linkitettyyn EXP Brainiin.

When reading that data with receive, receive will only return once it has collected the number of bytes specified by its length parameter. Because of that, if your code always calls receive with a fixed length, you should ensure each message sent with send is exactly that many bytes (often by padding) so the receiver doesn’t block waiting for additional bytes.

Jos et halua olla riippuvainen tarkasta tavumäärästä, käytä sen sijaan funktiota received; se antaa sinun käsitellä kaikki käytettävissä olevat tavut ilman tiettyä pituutta.

Usage:
send(buffer)

Parametrit

Kuvaus

buffer

Toiseen linkitettyyn EXP Brainiin lähetettävä data. Tämä voi olla string tai bytearray.

Robotin 1 koodi

# Send a message to the other robot

# Create the link
link = SerialLink(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")

link.send("HELLO")

Robotin 2 koodi

# Display the message that Robot 1 sends

# Create the link
link = SerialLink(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()

def received_message(bytearray, length):
    # Slice the bytearray to the valid data
    data = bytearray[:length]  
    # Decode and strip the message before displaying it
    text = data.decode().strip()
    brain.screen.print("Got: ", text)

# Call received_message whenever a message is received
link.received(received_message)

receive#

receive palauttaa sarjadatan toisesta linkitetystä EXP Brainista FIFO-järjestyksessä (vanhin lukematon data ensin).

Koska receive odottaa tarkkaa tavumäärää, kiinteän pituiset viestit vaativat usein täyttöä käytettäessä send , jotta jokainen viesti saavuttaa odotetun koon. Jos lähettäjä lähettää alle length tavua, receive jatkaa odottamista jäljellä oleviin tavuihin eikä palauta mitään.

Jos jono on tyhjä ja annat aikakatkaisuksi timeout, receive odottaa uutta dataa niin monta millisekuntia. Jos kyseiseen ikkunaan ei saavu mitään, se palauttaa arvon None. Tämän jälkeen lähetetyt tiedot pysyvät jonossa myöhempää luettavaa varten.

Usage:
receive(length, timeout)

Parametrit

Kuvaus

length

Vastaanotettavien tavujen määrä. receive odottaa, kunnes tämä määrä tavuja on saapunut, ja palauttaa ne sitten bytearrayJos length on length, receive palauttaa None välittömästi. Jos pyydät enemmän tavuja kuin lähettäjä lähettää, receive jatkaa odottamista. Jos lähettäjä lähettää enemmän, palautettu puskuri on rajoitettu 0 tavuun.

timeout

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

Robotin 1 koodi

# Send a math problem for the other Brain to solve

# Create the link
link = SerialLink(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.
"""
packet = "add,7,2.5"

# Pad with spaces until it's exactly 16 bytes
while len(packet) < 16:
    packet = packet + " "

link.send(packet)

Robotin 2 koodi

# Solve the math problem that the other Brain sends

# Create the link
link = SerialLink(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()

# Receive exactly 16 bytes
buffer = link.receive(16)

# Remove the added " " padding
text = buffer.decode().strip()

# Separate the operator and numbers
parts = text.split(",")

operator = parts[0]
a = float(parts[1])
b = float(parts[2])

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

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

received#

received rekisteröi funktion kutsuttavaksi aina, kun EXP Brain vastaanottaa sarjadataa.

Usage:
link.received(callback)

Parametrit

Kuvaus

callback

Aiemmin määritelty function, joka suoritetaan, kun EXP Brain vastaanottaa sarjadataa.

received takaisinkutsufunktioita kutsutaan kahdella argumentilla:

Takaisinkutsun allekirjoitus:
callback(buffer, length)

Argumentti

Kuvaus

buffer

bytearray joka sisältää vastaanotetun sarjadatan. Tavua voi olla suurempi kuin vastaanotettu viesti.

length

Tässä takaisinkutsussa vastaanotettujen kelvollisten tavujen määrä puskurissa buffer Käytä buffer[:length] vastaanotetun datan käyttämiseen.

Robotin 1 koodi

# Send a message to the other robot

# Create the link
link = SerialLink(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")

link.send("HELLO")

Robotin 2 koodi

# Display the message that Robot 1 sends

# Create the link
link = SerialLink(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()

def received_message(bytearray, length):
    # Slice the bytearray to the valid data
    data = bytearray[:length]  
    # Decode and strip the message before displaying it
    text = data.decode().strip()
    brain.screen.print("Got: ", text)

# Call received_message whenever a message is received
link.received(received_message)

<

Viestilinkki

>

Konsoli

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)