• 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
Saltar al contenido principal
Ctrl+K

< Back to Platform Select

  • VEX V5
  • Referencia API VEX V5
  • VEXlink
  • Enlace del mensaje
Español Latinoamericano
  • English
  • العربية
  • বাংলা
  • Česky
  • Deutsch
  • Ελληνικά
  • Español
  • 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

Sección Navegación

  • Bloques
  • Python
  • C++
    • Tren de transmisión
    • Motores y controladores de motor
    • Controlador
    • Cerebro
    • Competencia
    • Dispositivos de puerto inteligente
    • Dispositivos de 3 cables
    • Consola
    • Lógica
    • VEXlink
      • Enlace del mensaje
      • Enlace serie
    • CTE Workcell
  • Tutoriales de VEXcode

Navegación de plataforma

  • 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

Enlace del mensaje#

  • Introducción

  • Constructores de clase

  • Destructor de clase

  • Parámetros

  • Ejemplo

  • Funciones de los miembros

    • isLinked

    • enviar

    • recibir

    • recibido

Introducción#

La clase message_link permite que dos cerebros V5 se comuniquen enviando mensajes de cadena corta con datos pequeños opcionales. Está diseñado para la coordinación de robot a robot, como iniciar rutinas, compartir resultados de sensores o activar comportamientos en otro robot.

Cada uso de send agrega un mensaje a la cola del cerebro V5 vinculado, y la cola se lee primero en entrar, primero en salir (FIFO). Si se envían varios mensajes antes de que el otro cerebro V5 use receive, se almacenarán y devolverán uno a la vez en el orden en que se enviaron. Debido a que los mensajes pueden ponerse en cola, enviar repetidamente el mismo estado en cada bucle puede crear retraso; para la lógica de tiempo crítico, envíe solo cuando cambien los valores.

Importante: Ambos robots deben estar ejecutando proyectos que usen message_link al mismo tiempo, o no se enviarán/recibirán mensajes.

Constructores de clase#

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

Destructor de clase#

Destruye el objeto message_link y libera los recursos asociados.

virtual ~message_link();

Parámetros#

Parámetro

Tipo

Descripción

index

int32_t

El puerto inteligente al que está conectado la radio V5, o el cable inteligente, escrito como PORTx, donde x es el número de puerto (por ejemplo, PORT1).

name

char

El nombre del enlace del mensaje.

type

linkType

El tipo de enlace, ya sea linkType::manager o linkType::worker. Esta información se utiliza para configurar correctamente la radio y también determina el ancho de banda disponible para la transmisión y recepción. Un robot gestor tiene el doble de ancho de banda disponible (1040 bytes/segundo) para enviar información al robot trabajador (520 bytes/segundo).

  • linkType::manager - El objeto message_link es un gestor.
  • linkType::worker - El objeto message_link es un trabajador.

isWired

bool

Si el objeto message_link está cableado.

  • true - El objeto message_link está cableado.
  • false - El objeto message_link es inalámbrico.

Ejemplo#

Código para Robot 1

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

Código para Robot 2

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

Funciones de los miembros#

La clase message_link incluye las siguientes funciones de miembro:

  • isLinked — Devuelve si este cerebro está conectado activamente a su cerebro emparejado.

  • send — Envía un mensaje al cerebro emparejado.

  • receive — Espera y devuelve el siguiente mensaje entrante.

  • received — Registra una función que se llamará cada vez que se reciba un nuevo mensaje.

Antes de llamar a cualquier función miembro de message_link, se debe crear una instancia de message_link, como se muestra a continuación:

Código para Robot 1

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

Código para Robot 2

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

isLinked#

isLinked el método isLinked devuelve si los cerebros V5 en un MessageLink están emparejados entre sí.

Available Functions
bool isLinked();

Parameters

Esta función no tiene ningún parámetro.

Return Values

Esta función devuelve un valor booleano.

  • true – Los dos cerebros V5 están emparejados y se comunican en este enlace.

  • false – Los dos cerebros V5 no están emparejados en este enlace.

Notes

Es una buena práctica verificar siempre que los cerebros V5 estén vinculados al comienzo de un proyecto antes de ejecutar cualquier código adicional.

Examples

Código para 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);
  }

Código para 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#

Envía un mensaje a través de la conexión de enlace.

Available Functions

1 — Envía una cadena de mensajes.

int32_t send( 
  const char *message );

2 — Envía una cadena de mensajes con un double.

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

3 — Envía una cadena de mensajes con un int32_t y un double.

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

Parameters

Parámetro

Tipo

Descripción

message

const char*

El mensaje a enviar al otro cerebro V5 vinculado.

index

int32_t

Un número entero para enviar al otro cerebro V5 vinculado.

value

double

Un doble para enviar al otro cerebro V5 vinculado. Los dobles se formatean con 4 decimales; si se proporcionan menos decimales, se agregan ceros al final hasta que se muestren 4.

Return Values

Esta función no devuelve ningún valor.

Notes

Si solo se envía el mensaje message , el otro cerebro V5 vinculado recibe ese mismo mensaje.

Si se incluyen el value (y el index si se proporciona), el cerebro receptor recibe un único mensaje codificado que combina todos los campos en este orden: .message_index_value

Examples

Usando link.send(“string”, 1, 2.55) se recibe como .string_1_2.5500.

Código para 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);
}

Código para 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#

Recibe un mensaje de la conexión de enlace.

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

Parameters

Parámetro

Tipo

Descripción

buffer

char*

El búfer para almacenar el mensaje recibido.

length

int32_t

La longitud del búfer.

timeoutMs

int32_t

Cuánto tiempo en milisegundos receive recibirá esperará un nuevo mensaje solo si la cola está vacía. El valor predeterminado es 300,000 (300 segundos).

Return Values

Esta función devuelve el número de bytes recibidos.

Notes
  • receive devuelve el siguiente mensaje en cola del otro V5 Brain vinculado. Los mensajes se leen en orden FIFO (el más antiguo sin leer primero). Si la cola está vacía cuando se llama a receive , espera hasta el tiempo de espera receive para un nuevo mensaje. Si no llega ningún mensaje en ese intervalo, receive devuelve 0, y cualquier mensaje enviado posteriormente permanece en la cola para ser leído la próxima vez que se utilice timeout.

  • Si el otro cerebro V5 vinculado envió solo una string, receive devuelve esa cadena exacta.

  • Si el otro cerebro V5 vinculado envió un número entero y/o flotante, receive devuelve una sola cadena codificada que combina todos los campos en este orden: .string_integer_float

    • Por ejemplo, si el otro cerebro V5 vinculado usa link.send(“string”, 1, 2.55), entonces link.receive() devuelve una cadena codificada como .string_1_2.5500. Puede dividir esta cadena codificada (consulte los ejemplos a continuación) para extraer el nombre del mensaje, el número entero y los valores flotantes.

    • Si prefiere evitar la división/análisis manual, use received para registrar un controlador para un nombre de mensaje específico; el controlador recibe los valores enviados como argumentos.

Examples

Usando link.send(“string”, 1, 2.55) se recibe como .string_1_2.5500.

Código para 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);
}

Código para 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#

Registra una función para ser llamada cada vez que el cerebro V5 recibe un mensaje enviado.

Available Functions

1 Registra una devolución de llamada para todos los mensajes recibidos (mensaje + valor).

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

2 Registra una devolución de llamada para todos los mensajes recibidos (mensaje + índice + valor).

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

3 Registra una devolución de llamada para un mensaje específico (mensaje + valor).

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

4 Registra una devolución de llamada para un mensaje específico (mensaje + índice + valor).

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

Parameters

Parámetro

Tipo

Descripción

message

const char *

El nombre del mensaje para escuchar. Si se omite, la devolución de llamada se ejecuta para todos los mensajes recibidos.

callback

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

Una función que se ejecuta cuando se recibe un mensaje.

Return Values

Esta función no devuelve ningún valor.

Callback Signature

1 Recibe el nombre del remitente, el nombre del mensaje y el valor.

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

2 Recibe el nombre del remitente, el nombre del mensaje, el índice y el valor.

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

Tipo

Descripción

1st const char *

El nombre del enlace del remitente.

2nd const char *

El nombre del mensaje recibido.

int32_t

El índice asociado al mensaje.

double

El valor asociado al mensaje.

Examples

Código para 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);
  }
}

Código para 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);
  }
}

anterior

VEXlink

siguiente

Enlace serie

En esta página
  • Introducción
  • Constructores de clase
  • Destructor de clase
  • Parámetros
  • Ejemplo
  • Funciones de los miembros
    • isLinked
    • send
    • receive
    • received
Innovation First, International
​

VEX Y VEX Robotics son marcas comerciales o marcas de servicio de Innovation First, Inc. Copyright ©2026. Todos los derechos reservados. VEX Robotics, Inc. es una subsidiaria de Innovation First International, Inc. Todos los demás nombres / marcas de productos de terceros son propiedad de sus respectivos propietarios. Patentes y / o patentes pendientes - innovationfirst.com/patents Política de privacidad
del sitio /Términos de uso del sitio /Política de cookies /Política de privacidad del software

Visita la página de Facebook de VEX ROBOTICS Visita la página de Twitter de VEX ROBOTICS Visita la página de Instagram de VEX ROBOTICS Visita la página de YouTube de VEX ROBOTICS
Formulario de comentarios de la API de VEX

¡Valoramos tus comentarios! Utilice este formulario para compartir sugerencias, cumplidos o informar errores con la API de VEX. Su opinión nos ayuda a mejorar la documentación de la API de VEX.

​

Si tiene problemas técnicos o necesita atención al cliente, visite support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Nota: la URL actual se compartirá con tu mensaje

Al incluir tu dirección de correo electrónico, aceptas que VEX pueda enviarte correos electrónicos si tenemos preguntas sobre tus comentarios.
Política de privacidad >
Por favor, envíe sus comentarios. ¡Comentarios enviados con éxito!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)