• 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
Hoppa till huvudinnehåll
Ctrl+K

< Back to Platform Select

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

Sektionsnavigering

  • Block
  • Python
  • C++
    • Drivlina
    • Motorer och motorstyrenheter
    • 3-trådsenheter
    • Hjärna
    • Trösta
    • Kontroller
    • Logik
    • Smarta portenheter
    • VEXlänk
      • Meddelandelänk
      • Seriell länk
    • CTE-arbetscell
  • VEXcode-handledning

Plattformsnavigering

  • 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

Meddelandelänk#

  • Introduktion

  • Klasskonstruktörer

  • Klassförstörare

  • Parametrar

  • Exempel

  • Medlemsfunktioner

    • ärLänkad

    • skicka

    • få

    • mottagen

Introduktion#

Klassen message_link låter två EXP-hjärnor kommunicera genom att skicka korta strängmeddelanden med valfri liten data. Den är utformad för robot-till-robot-koordination – som att starta rutiner, dela sensorresultat eller utlösa beteenden på en annan robot.

Varje gång man använder send läggs ett meddelande till i den länkade EXP Brain-kön, och kön läses först in, först ut (FIFO). Om flera meddelanden skickas innan den andra EXP Brain använder receive, kommer de att lagras och returneras ett i taget i den ordning de skickades. Eftersom meddelanden kan köa kan det skapa en eftersläpning om man upprepar sändningar av samma status i varje loop; för tidskritisk logik, skicka endast när värdena ändras.

Viktigt: Båda robotarna måste köra projekt som använder message_link samtidigt, annars skickas/tas inga meddelanden emot.

Klasskonstruktörer#

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

Klassförstörare#

Förstör objektet message_link och frigör tillhörande resurser.

virtual ~message_link();

Parametrar#

Parameter

Typ

Beskrivning

index

int32_t

Smart Port som V5-radion, eller Smart Cable, är ansluten till, skriven som PORTx, där x är portnumret (till exempel PORT1).

name

char

Namnet på meddelandelänken.

type

linkType

Länktypen, antingen linkType::manager eller linkType::workerDenna information används för att korrekt konfigurera radion och avgör även tillgänglig bandbredd för sändning och mottagning. En managerrobot har dubbelt så mycket tillgänglig bandbredd (1040 byte/sekund) för att skicka information till arbetsroboten (520 byte/sekund).

  • linkType::manager - message_link-objektet är en manager.
  • linkType::worker - message_link-objektet är en worker.

isWired

bool

Om message_link-objektet är trådbundet.

  • true - message_link-objektet är trådbundet.
  • false - message_link-objektet är trådlöst.

Exempel#

Kod för robot 1

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

Kod för robot 2

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

Medlemsfunktioner#

Klassen message_link innehåller följande medlemsfunktioner:

  • isLinked — Returnerar om denna hjärna är aktivt ansluten till sin parade hjärna.

  • send — Skickar ett meddelande till den parade hjärnan.

  • receive — Väntar på och returnerar nästa inkommande meddelande.

  • received — Registrerar en funktion som ska anropas när ett nytt meddelande tas emot.

Innan några message_link medlemsfunktioner anropas måste en message_link instans skapas, som visas nedan:

Kod för robot 1

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

Kod för 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 metoden returnerar om EXP-hjärnorna på en MessageLink är parade med varandra.

Available Functions
bool isLinked();

Parameters

Den här funktionen har inga parametrar.

Return Values

Den här funktionen returnerar ett booleskt värde.

  • true – De två EXP-hjärnorna är parade ihop och kommunicerar på den här länken.

  • false – De två EXP-hjärnorna är inte parade ihop på den här länken.

Notes

Det är god praxis att alltid kontrollera att EXP-hjärnorna är länkade i början av ett projekt innan du kör ytterligare kod.

Examples

Kod för 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);
  }

Kod för 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#

Skickar ett meddelande via länkanslutningen.

Available Functions

1 — Skickar en meddelandesträng.

int32_t send( 
  const char *message );

2 — Skickar en meddelandesträng med värdet double som dubbelvärde.

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

3 — Skickar en meddelandesträng med int32_t och double.

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

Parameters

Parameter

Typ

Beskrivning

message

const char*

Meddelandet som ska skickas till den andra länkade EXP-hjärnan.

index

int32_t

Ett heltal att skicka till den andra länkade EXP-hjärnan.

value

double

En dubbel att skicka till den andra länkade EXP-hjärnan. Dubbler formateras till 4 decimaler; om färre decimaler anges läggs efterföljande nollor tills 4 visas.

Return Values

Den här funktionen returnerar inga värden.

Notes

Om endast message skickas, får den andra länkade EXP-hjärnan exakt det meddelandet.

Om value (och index om det anges) inkluderas, får den mottagande hjärnan ett enda kodat meddelande som kombinerar alla fält i denna ordning: .message_index_value

Examples

Med hjälp av link.send(“string”, 1, 2.55) emot som .string_1_2.5500.

Kod för 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);
}

Kod för 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#

Tar emot ett meddelande från länkanslutningen.

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

Parameters

Parameter

Typ

Beskrivning

buffer

char

Bufferten för att lagra det mottagna meddelandet.

length

int32_t

Buffertens längd.

timeoutMs

int32_t

Hur länge i millisekunder receive väntar på ett nytt meddelande endast om kön är tom. Standard är 300 000 (300 sekunder).

Return Values

Denna funktion returnerar antalet mottagna byte.

Notes
  • receive returnerar nästa meddelande i kö från den andra länkade EXP Brain. Meddelanden läses i FIFO-ordning (äldsta olästa först). Om kön är tom när receive anropas, väntar den upp till den angivna timeout på ett nytt meddelande. Om inget meddelande anländer i det fönstret, returnerar receive 0, och alla meddelanden som skickas efteråt finns kvar i kön för att läsas nästa gång receive används.

  • Om den andra länkade EXP-hjärnan bara skickade en string, receive exakt den strängen.

  • Om den andra länkade EXP Brain skickade ett heltal och/eller flyttal, returnerar receive en enda kodad sträng som kombinerar alla fält i denna ordning: .string_integer_float

    • Om till exempel den andra länkade EXP Brain använder link.send(“string”, 1, 2.55), returnerar link.receive() en kodad sträng som .string_1_2.5500. Du kan dela denna kodade sträng (se exemplen nedan) för att extrahera meddelandenamnet, heltal och flyttal.

    • Om du hellre vill undvika manuell delning/parsning, använd received för att registrera en hanterare för ett specifikt meddelandenamn; hanteraren tar emot de skickade värdena som argument.

Examples

Med hjälp av link.send(“string”, 1, 2.55) emot som .string_1_2.5500.

Kod för 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);
}

Kod för 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#

Registrerar en funktion som ska anropas när EXP-hjärnan tar emot ett skickat meddelande.

Available Functions

1 Registrerar en återuppringning för alla mottagna meddelanden (meddelande + värde).

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

2 Registrerar en återuppringning för alla mottagna meddelanden (meddelande + index + värde).

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

3 Registrerar en återuppringning för ett specifikt meddelande (meddelande + värde).

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

4 Registrerar en återanropning för ett specifikt meddelande (meddelande + index + värde).

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

Parameters

Parameter

Typ

Beskrivning

message

const char *

Meddelandenamnet att lyssna efter. Om det utelämnas körs återanropet för alla mottagna meddelanden.

callback

Funktionspekare

En funktion som körs när ett meddelande tas emot.

Return Values

Den här funktionen returnerar inga värden.

Callback Signature

1 Tar emot avsändarnamn, meddelandenamn och värde.

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

2 Tar emot avsändarnamn, meddelandenamn, index och värde.

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

Typ

Beskrivning

1st const char *

Avsändarlänkens namn.

2nd const char *

Meddelandenamnet mottogs.

int32_t

Indexet som är associerat med meddelandet.

double

Värdet som är kopplat till meddelandet.

Examples

Kod för robot 1

// 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();
  
// Create the link
  message_link link(PORT1, "LeftRightLink", 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");

  Brain.Screen.pressed(screen_pressed);

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

Kod för 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);
  }
}

föregående

VEXlänk

nästa

Seriell länk

On this page
  • Introduktion
  • Klasskonstruktörer
  • Klassförstörare
  • Parametrar
  • Exempel
  • Medlemsfunktioner
    • 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

Besök VEX Robotics Facebook-sida Besök VEX Robotics Twitter-sida Besök VEX Robotics Instagram-sida Besök VEX Robotics YouTube-sida
VEX API-feedbackformulär

Vi värdesätter din feedback! Använd det här formuläret för att dela förslag, komplimanger eller rapportera fel med VEX API. Dina synpunkter hjälper oss att förbättra VEX API-dokumentationen.

​

Om du upplever tekniska problem eller behöver kundsupport, besök support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Obs: den aktuella URL:en kommer att delas med ditt meddelande

Genom att ange din e-postadress samtycker du till att VEX kan skicka e-postmeddelanden till dig om vi har frågor om din feedback.
Integritetspolicy >
Vänligen ge din feedback. Feedback skickad!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)