• 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
Chuyển đến nội dung chính
Ctrl+K

< Back to Platform Select

  • VEX EXP
  • Tài liệu tham khảo API VEX EXP
  • VEXlink
  • SerialLink
Tiếng Việt
  • 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
  • Українська
  • 简体中文
  • 繁體中文
  • VEXcode Robotics Logo

Điều hướng mục

  • Khối
  • Python
    • Hệ thống truyền động
    • Cử động
    • Âm thanh
    • Tầm nhìn
    • Màn hình
    • Bộ điều khiển
    • Cảm biến
    • Quán tính
    • Thiết bị 3 dây
    • Khí nén
    • Não
    • Thẻ SD
    • Cánh tay 6 trục
    • Tháp tín hiệu
    • VEXlink
      • Liên kết tin nhắn
      • SerialLink
    • Bảng điều khiển
    • Logic
    • Thư viện MicroPython
  • C++
  • Hướng dẫn VEXcode

Điều hướng nền tảng

  • 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

SerialLink#

  • Giới thiệu

  • Tạo liên kết

  • Các phương pháp có sẵn

    • is_linked

    • gửi

    • nhận được

    • đã nhận

Giới thiệu#

SerialLink cho phép hai EXP Brain giao tiếp bằng cách gửi và nhận dữ liệu nối tiếp thô qua VEX Link. Thay vì các thông điệp được gắn nhãn, SerialLink truyền một bộ đệm (một chuỗi ký tự hoặc một mảng byte). Điều này làm cho nó hữu ích cho giao tiếp robot-với-robot nâng cao, chẳng hạn như truyền dữ liệu cảm biến, gửi các định dạng gói tùy chỉnh hoặc xây dựng giao thức riêng của bạn dựa trên các byte.

Mỗi lần sử dụng send sẽ thêm dữ liệu vào bộ đệm nhận của EXP Brain được liên kết. Dữ liệu được đọc theo thứ tự đến (vào trước ra trước). Nếu nhiều bộ đệm được gửi trước khi EXP Brain kia sử dụng receive, chúng sẽ vẫn được xếp hàng và được trả về từng cái một theo thứ tự chúng được gửi. Vì dữ liệu có thể được xếp hàng, việc liên tục gửi các bộ đệm lớn trong mỗi vòng lặp có thể tạo ra tắc nghẽn; đối với các liên kết cần thời gian chính xác, chỉ gửi những gì bạn cần.

Quan trọng: Cả hai robot phải cùng lúc chạy các dự án sử dụng SerialLink SerialLink , nếu không sẽ không có dữ liệu nào được gửi/nhận.

Trang này sử dụng link làm ví dụ cho tên SerialLink thay thế bằng tên do bạn cấu hình nếu cần.

Dưới đây là danh sách các phương pháp có sẵn:

  • is_linked – Trả về liệu Brain này có đang được kết nối tích cực với Brain được ghép nối của nó hay không.

  • send – Gửi một tin nhắn ngắn (với dữ liệu int/float tùy chọn) tới Brain được ghép nối.

  • receive – Chờ và trả về tin nhắn đến tiếp theo.

  • received – Đăng ký một hàm được gọi bất cứ khi nào nhận được tin nhắn mới.

Tạo liên kết#

Tạo SerialLink trên cả hai EXP Brain để thiết lập kênh liên lạc giữa chúng — có thể là không dây với V5 Robot Radio hoặc thông qua cáp thông minh có dây — để các robot có thể gửi dữ liệu nối tiếp thô cho nhau.

SerialLink(smartport, name, linktype, wired)

Tham số

Sự miêu tả

smartport

Cổng thông minh được sử dụng cho liên kết này—cổng mà bộ thu phát vô tuyến V5 Robot được kết nối (không dây) hoặc cáp thông minh được cắm vào (có dây). Được viết dưới dạng Ports.PORTx , trong đó x là số cổng.

name

Tên duy nhất để đặt cho liên kết này dưới dạng chuỗi.
Lưu ý: Tên này phải đủ dài để tạo ra một ID duy nhất, tránh trường hợp trùng khớp với liên kết của nhóm khác.

linktype

Vai trò mà Brain này sẽ sử dụng cho cặp liên kết này. Mỗi cặp phải bao gồm một Manager và một Worker:

  • VexlinkType.MANAGER – Sử dụng cho robot sẽ gửi nhiều tin nhắn hơn hoặc tin nhắn lớn hơn. Manager có băng thông gửi đi cao hơn (~1040 byte/giây).
  • VexlinkType.WORKER – Sử dụng cho robot sẽ gửi ít tin nhắn hơn hoặc tin nhắn nhỏ hơn. Worker có băng thông gửi đi thấp hơn (~520 byte/giây).

wired

Tùy chọn. Kết nối này là có dây hay không dây:

  • True – Các EXP Brains được kết nối qua Cáp thông minh.
  • False (mặc định) – Các EXP Brains kết nối không dây bằng Bộ thu phát vô tuyến Robot V5.

Mã lệnh cho Robot 1

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

Mã lệnh cho Robot 2

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

Các phương pháp có sẵn#

Sau khi SerialLink được thiết lập và các Brains được liên kết, bạn có thể sử dụng các phương pháp dưới đây để gửi, nhận và phản hồi dữ liệu nối tiếp thô.

is_linked#

Phương thức is_linked trả về trạng thái cho biết các EXP Brains trên SerialLink có được ghép nối với nhau hay không.

  • True – Hai bộ não EXP được ghép nối và đang giao tiếp qua liên kết này.

  • False – Hai bộ não EXP không được ghép nối trên liên kết này.

Lưu ý: Tốt nhất là luôn kiểm tra để đảm bảo các EXP Brains đã được liên kết trước khi chạy bất kỳ đoạn mã nào khác khi bắt đầu dự án.

Usage:
link.is_linked()

Thông số

Sự miêu tả

Phương pháp này không có tham số.

Mã lệnh cho Robot 1

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

Mã lệnh cho Robot 2

# 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 truyền các byte nối tiếp thô đến EXP Brain được liên kết khác.

Khi đọc dữ liệu đó bằng receive, receive sẽ chỉ trả về sau khi nó đã thu thập được số byte được chỉ định bởi tham số receive của nó. Vì vậy, nếu mã của bạn luôn gọi length với độ dài length, bạn nên đảm bảo mỗi tin nhắn được gửi bằng send có chính xác số byte đó (thường bằng cách thêm phần đệm) để người nhận không bị chặn chờ thêm byte.

Nếu bạn không muốn phụ thuộc vào số lượng byte chính xác, hãy sử dụng received thay thế; nó cho phép bạn xử lý bất kỳ byte nào có sẵn mà không yêu cầu độ dài cụ thể.

Usage:
send(buffer)

Thông số

Sự miêu tả

buffer

The data to send to the other linked EXP Brain. This can be a string or a bytearray.

Mã lệnh cho Robot 1

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

Mã lệnh cho Robot 2

# 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 trả về dữ liệu nối tiếp từ EXP Brain được liên kết khác theo thứ tự FIFO (dữ liệu chưa đọc cũ nhất trước).

Vì receive chờ một lượng byte chính xác, việc nhắn tin có độ dài cố định thường yêu cầu thêm phần đệm khi sử dụng receive để mỗi tin nhắn đạt kích thước dự kiến. Nếu người gửi truyền ít hơn send byte, length sẽ tiếp tục chờ các byte còn lại và không trả về gì.

Nếu hàng đợi trống và bạn cung cấp thời gian chờ timeout, receive và chờ tối đa 0 mili giây để nhận dữ liệu mới. Nếu không có gì đến trong khoảng thời gian đó, nó sẽ trả về NoneBất kỳ dữ liệu nào được gửi sau đó vẫn được xếp vào hàng đợi để đọc sau.

Usage:
receive(length, timeout)

Thông số

Sự miêu tả

length

Số byte cần nhận. receive chờ cho đến khi nhận được đủ số byte này, sau đó trả về chúng dưới dạng một mảng byte receiveNếu receive là 0, bytearray trả về length ngay lập tức. Nếu bạn yêu cầu nhiều byte hơn số byte mà người gửi truyền đi, length sẽ tiếp tục chờ. Nếu người gửi truyền đi nhiều hơn số này, bộ đệm trả về sẽ bị giới hạn ở None byte.

timeout

Tùy chọn. Thời gian chờ (tính bằng mili giây) receive sẽ chỉ chờ tin nhắn mới nếu hàng đợi trống. Mặc định là 300000 (300 giây).

Mã lệnh cho Robot 1

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

Mã lệnh cho Robot 2

# 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 đăng ký một hàm sẽ được gọi bất cứ khi nào EXP Brain nhận được dữ liệu nối tiếp.

Usage:
link.received(callback)

Thông số

Sự miêu tả

callback

Một hàm được định nghĩa trước đó sẽ thực thi khi EXP Brain nhận được dữ liệu nối tiếp.

received hàm gọi lại được gọi với hai đối số:

Chữ ký hàm gọi lại:
callback(buffer, length)

Lý lẽ

Sự miêu tả

buffer

Một mảng byte bytearray nối tiếp nhận được. Mảng byte này có thể lớn hơn thông điệp nhận được.

length

Số byte hợp lệ nhận được trong bộ đệm buffer cho hàm gọi lại này. Sử dụng bộ đệm buffer[:length] để truy cập dữ liệu đã nhận.

Mã lệnh cho Robot 1

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

Mã lệnh cho Robot 2

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

xem lại

Liên kết tin nhắn

xem tiếp

Bảng điều khiển

On this page
  • Giới thiệu
  • Tạo liên kết
  • Các phương pháp có sẵn
    • 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

Hãy truy cập trang Facebook của VEX Robotics. Hãy truy cập trang Twitter của VEX Robotics. Hãy truy cập trang Instagram của VEX Robotics. Hãy truy cập trang YouTube của VEX Robotics.
Biểu mẫu phản hồi API VEX

Chúng tôi rất coi trọng phản hồi của bạn! Hãy sử dụng biểu mẫu này để chia sẻ đề xuất, lời khen ngợi hoặc báo cáo lỗi với API VEX. Ý kiến ​​đóng góp của bạn giúp chúng tôi cải thiện tài liệu API VEX.

​

Nếu bạn gặp sự cố kỹ thuật hoặc cần hỗ trợ khách hàng, vui lòng truy cập support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Lưu ý: URL hiện tại sẽ được chia sẻ cùng với tin nhắn của bạn.

Bằng cách cung cấp địa chỉ email của bạn, bạn đồng ý rằng VEX có thể gửi email cho bạn nếu chúng tôi có thắc mắc về phản hồi của bạn.
Chính sách bảo mật >
Vui lòng cho chúng tôi biết ý kiến ​​phản hồi của bạn. Phản hồi đã được gửi thành công!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)