• 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 V5
  • Tài liệu tham khảo API VEX V5
  • VEXlink
  • Liên kết tin nhắn
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
  • C++
    • Hệ thống truyền động
    • Động cơ và bộ điều khiển động cơ
    • Bộ điều khiển
    • Não
    • Cuộc thi
    • Thiết bị cổng thông minh
    • Thiết bị 3 dây
    • Bảng điều khiển
    • Logic
    • VEXlink
      • Liên kết tin nhắn
      • Liên kết nối tiếp
    • CTE Workcell
  • 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

Liên kết tin nhắn#

  • Giới thiệu

  • Hàm tạo lớp

  • Lớp Destructor

  • Thông số

  • Ví dụ

  • Chức năng thành viên

    • isLinked

    • gửi

    • nhận được

    • đã nhận

Giới thiệu#

Lớp message_link cho phép hai bộ xử lý V5 Brain giao tiếp bằng cách gửi các tin nhắn chuỗi ngắn kèm theo dữ liệu nhỏ tùy chọn. Nó được thiết kế để phối hợp giữa các robot với nhau — chẳng hạn như khởi động các quy trình, chia sẻ kết quả cảm biến hoặc kích hoạt các hành vi trên một robot khác.

Mỗi lần sử dụng send sẽ thêm một tin nhắn vào hàng đợi của V5 Brain được liên kết, và hàng đợi được đọc theo thứ tự vào trước ra trước (FIFO). Nếu nhiều tin nhắn được gửi trước khi V5 Brain khác sử dụng receive, chúng sẽ được lưu trữ và trả về từng tin nhắn một theo thứ tự chúng được gửi. Vì tin nhắn có thể được xếp hàng đợi, việc liên tục gửi cùng một trạng thái trong mỗi vòng lặp có thể tạo ra sự tắc nghẽn; đối với logic cần xử lý nhanh, chỉ gửi khi giá trị thay đổi.

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

Hàm tạo lớp#

message_link( 
  int32_t     index, 
  const char  *name, 
  linkType    type, 
  bool        isWired = false );

Lớp Destructor#

Hủy đối tượng message_link và giải phóng các tài nguyên liên quan.

virtual ~message_link();

Thông số#

Tham số

Kiểu

Sự miêu tả

index

int32_t

Cổng thông minh mà bộ thu phát V5 hoặc cáp thông minh được kết nối, được viết dưới dạng PORTx, trong đó x là số cổng (ví dụ: PORT1).

name

char

Tên của liên kết tin nhắn.

type

linkType

Loại liên kết, hoặc linkType::manager hoặc linkType::workerThông tin này được sử dụng để cấu hình radio chính xác và cũng xác định băng thông khả dụng cho việc truyền và nhận. Robot quản lý có băng thông khả dụng gấp đôi (1040 byte/giây) để gửi thông tin đến robot công nhân (520 byte/giây).

  • linkType::manager - Đối tượng message_link là một robot quản lý.
  • linkType::worker - Đối tượng message_link là một robot công nhân.

isWired

bool

Cho biết đối tượng message_link có kết nối dây hay không.

  • true - Đối tượng message_link có kết nối dây.
  • false - Đối tượng message_link không dây.

Ví dụ#

Mã lệnh cho Robot 1

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::manager, // type
  true); // isWired

Mã lệnh cho Robot 2

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::worker, // type
  true); // isWired

Chức năng thành viên#

Lớp message_link bao gồm các hàm thành viên sau:

  • isLinked — 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 tin nhắ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.

Trước khi gọi bất kỳ hàm thành viên message_link , cần phải tạo một thể hiện message_link , như được hiển thị bên dưới:

Mã lệnh cho Robot 1

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::manager, // type
  true); // isWired

Mã lệnh cho Robot 2

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::worker, // type
  true); // isWired

isLinked#

Phương thức isLinked trả về giá trị cho biết liệu các V5 Brains trên MessageLink có được ghép nối với nhau hay không.

Available Functions
bool isLinked();

Parameters

Hàm này không có tham số nào.

Return Values

Hàm này trả về một giá trị boolean.

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

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

Notes

Nên kiểm tra kỹ xem các thiết bị V5 Brains đã được liên kết chưa trước khi chạy bất kỳ đoạn mã nào khác trong quá trình khởi tạo dự án.

Examples

Mã lệnh cho Robot 1

// Tell the other robot when the screen is being pressed
  // Create the link
  message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::manager, true);

  // Do not run code UNTIL the Brains are linked
  while (!link.isLinked()){
    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(0.05, seconds);
  }

Mã lệnh cho Robot 2

// Display if the other robot's screen is being pressed

  // Create the link
  message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);
  
  // Do not run code UNTIL the Brains are linked
  while (!link.isLinked()){
   wait(0.1, seconds);
  }

  // Continuously check if Robot 1 has sent "pressed"
  while (true){
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print("Robot 2 - Worker");
    Brain.Screen.newLine();
    char msg[32] = {0};                         // buffer for incoming message
    int32_t n = link.receive(msg, sizeof(msg), 100);  // wait up to 100ms
    if (n > 0 && strcmp(msg, "pressed") == 0) {
      Brain.Screen.newLine();
      Brain.Screen.print("Manager is being pressed!");
    }
    wait(0.05, seconds);
  }

send#

Gửi tin nhắn qua kết nối liên kết.

Available Functions

1 — Gửi một chuỗi tin nhắn.

int32_t send( 
  const char *message );

2 — Gửi một chuỗi tin nhắn với double.

int32_t send( 
  const char *message, 
  double      value );

3 — Gửi một chuỗi tin nhắn với int32_t và double.

int32_t send(
  const char *message, 
  int32_t     index, 
  double      value );

Parameters

Tham số

Kiểu

Sự miêu tả

message

const char*

Thông điệp cần gửi đến bộ não V5 được liên kết khác.

index

int32_t

Một số nguyên cần gửi đến bộ não V5 được liên kết khác.

value

double

Một giá trị kiểu double được gửi đến bộ xử lý V5 Brain còn lại. Giá trị double được định dạng với 4 chữ số thập phân; nếu cung cấp ít hơn số chữ số thập phân, các số 0 ở cuối sẽ được thêm vào cho đến khi hiển thị đủ 4 chữ số.

Return Values

Hàm này không trả về bất kỳ giá trị nào.

Notes

Nếu chỉ có tin nhắn message được gửi đi, thì bộ xử lý V5 Brain được liên kết còn lại sẽ nhận được chính xác tin nhắn đó.

Nếu giá trị value (và chỉ số index nếu được cung cấp), bộ não nhận được một thông điệp được mã hóa duy nhất kết hợp tất cả các trường theo thứ tự này: .message_index_value

Examples

Sử dụng link.send(“string”, 1, 2.55) được nhận là .string_1_2.5500.

Mã lệnh cho Robot 1

// Tell the other robot when the screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::manager, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  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(0.05, seconds);
}

Mã lệnh cho Robot 2

// Display if the other robot's screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}
// Continuously check if Robot 1 has sent "pressed"
while (true){
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  char msg[32] = {0};  // buffer for incoming message
  int32_t n = link.receive(msg, sizeof(msg), 100);  // wait up to 100ms
  if (n > 0 && strcmp(msg, "pressed") == 0) {
    Brain.Screen.newLine();
    Brain.Screen.print("Manager is being pressed!");
  }
  wait(0.05, seconds);
}

receive#

Nhận được tin nhắn từ kết nối liên kết.

Available Functions
int32_t receive(
  char     *buffer,
  int32_t   length, 
  int32_t   timeoutMs = 500 );

Parameters

Tham số

Kiểu

Sự miêu tả

buffer

char*

Bộ đệm để lưu trữ thông điệp đã nhận.

length

int32_t

Độ dài của vùng đệm.

timeoutMs

int32_t

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à 300.000 (300 giây).

Return Values

Hàm này trả về số byte đã nhận được.

Notes
  • receive trả về tin nhắn tiếp theo trong hàng đợi từ bộ xử lý V5 Brain được liên kết khác. Tin nhắn được đọc theo thứ tự FIFO (tin nhắn cũ nhất chưa đọc trước). Nếu hàng đợi trống khi receive được gọi, nó sẽ đợi tối đa đến thời gian chờ receive để nhận tin nhắn mới. Nếu không có tin nhắn nào đến trong khoảng thời gian đó, receive trả về 0, và bất kỳ tin nhắn nào được gửi sau đó vẫn nằm trong hàng đợi để được đọc vào lần tiếp theo timeout được sử dụng.

  • Nếu bộ não V5 được liên kết khác chỉ gửi chuỗi string, receive và trả về chính xác chuỗi đó.

  • Nếu bộ xử lý V5 Brain được liên kết khác gửi một số nguyên và/hoặc số thực, thì receive sẽ trả về một chuỗi được mã hóa duy nhất kết hợp tất cả các trường theo thứ tự này: .string_integer_float

    • Ví dụ, nếu V5 Brain được liên kết khác sử dụng link.send(“string”, 1, 2.55), thì việc sử dụng link.receive() sẽ trả về một chuỗi được mã hóa như .string_1_2.5500. Bạn có thể tách chuỗi được mã hóa này (xem các ví dụ bên dưới) để trích xuất tên thông báo, giá trị số nguyên và số thực.

    • Nếu bạn muốn tránh việc tách/phân tích cú pháp thủ công, hãy sử dụng received để đăng ký trình xử lý cho một tên tin nhắn cụ thể; trình xử lý sẽ nhận các giá trị đã gửi dưới dạng đối số.

Examples

Sử dụng link.send(“string”, 1, 2.55) được nhận là .string_1_2.5500.

Mã lệnh cho Robot 1

// Tell the other robot when the screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::manager, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  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(0.05, seconds);
}

Mã lệnh cho Robot 2

// Display if the other robot's screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}
// Continuously check if Robot 1 has sent "pressed"
while (true){
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  char msg[32] = {0};   // buffer for incoming message
  int32_t n = link.receive(msg, sizeof(msg), 100);  // wait up to 100ms
  if (n > 0 && strcmp(msg, "pressed") == 0) {
    Brain.Screen.newLine();
    Brain.Screen.print("Manager is being pressed!");
  }
  wait(0.05, seconds);
}

received#

Đăng ký một hàm để được gọi bất cứ khi nào bộ xử lý V5 nhận được một tin nhắn đã gửi.

Available Functions

1 Đăng ký hàm gọi lại cho tất cả các tin nhắn đã nhận (tin nhắn + giá trị).

void received(
    void (* callback)(const char *, const char *, double)
);

2 Đăng ký hàm gọi lại cho tất cả các tin nhắn đã nhận (tin nhắn + chỉ số + giá trị).

void received(
    void (* callback)(const char *, const char *, int32_t, double)
);

3 Đăng ký hàm gọi lại cho một thông báo cụ thể (thông báo + giá trị).

void received(
    const char *message,
    void      (* callback)(const char *, const char *, double)
);

4 Đăng ký hàm gọi lại cho một thông báo cụ thể (thông báo + chỉ số + giá trị).

void received(
    const char *message,
    void      (* callback)(const char *, const char *, int32_t, double)
);

Parameters

Tham số

Kiểu

Sự miêu tả

message

const char *

Tên tin nhắn cần lắng nghe. Nếu bỏ qua, hàm callback sẽ chạy cho tất cả các tin nhắn nhận được.

callback

void (*)(const char *, const char , double) or void ()(const char *, const char *, int32_t, double)

Một hàm được thực thi khi nhận được tin nhắn.

Return Values

Hàm này không trả về bất kỳ giá trị nào.

Callback Signature

1 Nhận tên người gửi, tên tin nhắn và giá trị.

void callback(const char *, const char *, double)

2 Nhận tên người gửi, tên tin nhắn, chỉ mục và giá trị.

void callback(const char *, const char *, int32_t, double)

Kiểu

Sự miêu tả

1st const char *

Tên liên kết người gửi.

2nd const char *

Tên tin nhắn đã nhận được.

int32_t

Chỉ số liên quan đến thông báo.

double

Giá trị gắn liền với thông điệp.

Examples

Mã lệnh cho Robot 1

// Create the link.
message_link link(PORT1, "LeftRightLink", linkType::manager, true);

// Send whether screen is pressed on left or right.
void screen_pressed() {
  if (Brain.Screen.xPosition() < 240) {
    link.send("left");
  } else {
    link.send("right");
  }
}

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();
  
  // Do not run code UNTIL the Brains are linked.
  while (!link.isLinked()) {
    wait(0.1, seconds);
  }

  Brain.Screen.print("Robot 1 - Manager");

  Brain.Screen.pressed(screen_pressed);

  while (true) {
    wait(10, msec);
  }
}

Mã lệnh cho Robot 2

// Create variable to track where screen is pressed.
int lastPress = 0;

// Update the variable whenever a new message is received.
void message_received(const char* message, const char* linkname, double timestamp) {
  if (strcmp(message, "left") == 0)  lastPress = 1;
  if (strcmp(message, "right") == 0) lastPress = 2;
}

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Create the link.
  message_link link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);

  // Do not run code UNTIL the Brains are linked.
  while (!link.isLinked()) {
    wait(0.1, seconds);
  }

  link.received(message_received);

  // Display if Robot 1's screen was pressed on the left or right
  while (true) {
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print("Robot 2 - Worker");
    Brain.Screen.newLine();

    if (lastPress == 1) {
      Brain.Screen.print("Manager pressed LEFT");
    } else if (lastPress == 2) {
      Brain.Screen.print("Manager pressed RIGHT");
    } else {
      Brain.Screen.print("Waiting...");
    }

    wait(0.1, seconds);
  }
}

xem lại

VEXlink

xem tiếp

Liên kết nối tiếp

On this page
  • Giới thiệu
  • Hàm tạo lớp
  • Lớp Destructor
  • Thông số
  • Ví dụ
  • Chức năng thành viên
    • isLinked
    • 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)