• 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
Ga direct naar de hoofdinhoud
Ctrl+K

< Back to Platform Select

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

Sectienavigatie

  • Blokken
  • Python
  • C++
    • Aandrijving
    • Motoren en motorcontrollers
    • Controller
    • Brein
    • Concurrentie
    • Slimme poortapparaten
    • 3-draads apparaten
    • Troosten
    • Logica
    • VEXlink
      • Berichtlink
      • Seriële link
    • CTE-werkcel
  • VEXcode-handleidingen

Platformnavigatie

  • 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

Berichtlink#

  • Invoering

  • Klasseconstructors

  • Klasse-destructor

  • Parameters

  • Voorbeeld

  • Lidfuncties

    • isLinked

    • versturen

    • ontvangen

    • ontvangen

Invoering#

De klasse message_link maakt het mogelijk dat twee V5 Brains met elkaar communiceren door korte tekenreeksberichten te verzenden met optioneel kleine hoeveelheden data. Deze klasse is ontworpen voor robot-naar-robot-coördinatie, zoals het starten van routines, het delen van sensorresultaten of het activeren van gedragingen op een andere robot.

Elke keer dat send wordt gebruikt, wordt een bericht toegevoegd aan de wachtrij van de gekoppelde V5 Brain, en de wachtrij wordt gelezen volgens het first-in, first-out (FIFO) principe. Als er meerdere berichten worden verzonden voordat de andere V5 Brain receive gebruikt, worden ze één voor één opgeslagen en geretourneerd in de volgorde waarin ze zijn verzonden. Omdat berichten in de wachtrij kunnen staan, kan het herhaaldelijk verzenden van dezelfde status in elke lus een opstopping veroorzaken; voor tijdskritieke logica is het raadzaam alleen te verzenden wanneer waarden veranderen.

Belangrijk: Beide robots moeten tegelijkertijd projecten uitvoeren die gebruikmaken van message_link , anders worden er geen berichten verzonden/ontvangen.

Klasseconstructors#

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

Klasse-destructor#

Vernietigt het message_link object en geeft de bijbehorende resources vrij.

virtual ~message_link();

Parameters#

Parameter

Type

Beschrijving

index

int32_t

De Smart Port waarop de V5 Radio, of de Smart Cable, is aangesloten, wordt weergegeven als PORTx, waarbij x het poortnummer is (bijvoorbeeld PORT1).

name

char

De naam van de berichtlink.

type

linkType

Het type link, ofwel linkType::manager of linkType::workerDeze informatie wordt gebruikt om de radio correct te configureren en bepaalt ook de beschikbare bandbreedte voor verzenden en ontvangen. Een managerrobot heeft tweemaal de beschikbare bandbreedte (1040 bytes/seconde) om informatie naar de workerrobot te sturen (520 bytes/seconde).

  • linkType::manager - Het message_link-object is een manager.
  • linkType::worker - Het message_link-object is een worker.

isWired

bool

Of het message_link-object bedraad is.

  • true - Het message_link-object is bedraad.
  • false - Het message_link-object is draadloos.

Voorbeeld#

Code voor Robot 1

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

Code voor Robot 2

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

Lidfuncties#

De klasse message_link bevat de volgende lidfuncties:

  • isLinked — Geeft aan of dit brein actief verbonden is met het bijbehorende brein.

  • send — Verstuurt een bericht naar het gekoppelde brein.

  • receive — Wacht op het volgende binnenkomende bericht en retourneert dit.

  • received — Registreert een functie die wordt aangeroepen wanneer een nieuw bericht wordt ontvangen.

Voordat er lidfuncties van message_link worden aangeroepen, moet er een instantie van message_link worden aangemaakt, zoals hieronder weergegeven:

Code voor Robot 1

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

Code voor Robot 2

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

isLinked#

De methode isLinked geeft aan of de V5 Brains op een MessageLink met elkaar gekoppeld zijn.

Available Functions
bool isLinked();

Parameters

Deze functie heeft geen parameters.

Return Values

Deze functie retourneert een booleaanse waarde.

  • true – De twee V5-hersenen zijn gekoppeld en communiceren via deze verbinding.

  • false – De twee V5-hersenen zijn niet gekoppeld op deze link.

Notes

Het is goede gewoonte om aan het begin van een project altijd te controleren of de V5 Brains correct zijn gekoppeld voordat er verdere code wordt uitgevoerd.

Examples

Code voor 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);
  }

Code voor 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#

Verstuurt een bericht via de linkverbinding.

Available Functions

1 — Verzendt een berichtreeks.

int32_t send( 
  const char *message );

2 — Verstuurt een berichtreeks met een double.

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

3 — Verstuurt een berichtreeks met een int32_t en een double.

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

Parameters

Parameter

Type

Beschrijving

message

const char*

Het bericht dat naar de andere gekoppelde V5-hersenen moet worden gestuurd.

index

int32_t

Een geheel getal om naar de andere gekoppelde V5 Brain te sturen.

value

double

Een double om naar de andere gekoppelde V5 Brain te sturen. Doubles worden opgemaakt met 4 decimalen; als er minder decimalen worden opgegeven, worden er nullen achter de komma toegevoegd totdat er 4 worden weergegeven.

Return Values

Deze functie retourneert geen waarden.

Notes

Als er slechts message worden verzonden, ontvangt de andere gekoppelde V5 Brain precies datzelfde bericht.

Als value (en index indien aanwezig) zijn opgenomen, ontvangt het ontvangende brein één gecodeerd bericht dat alle velden in deze volgorde combineert: .message_index_value

Examples

Bij gebruik van link.send(“string”, 1, 2.55) ontvangen als .string_1_2.5500.

Code voor 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);
}

Code voor 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#

Ontvangt een bericht van de linkverbinding.

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

Parameters

Parameter

Type

Beschrijving

buffer

char*

De buffer om het ontvangen bericht op te slaan.

length

int32_t

De lengte van de buffer.

timeoutMs

int32_t

Hoe lang in milliseconden ontvangt receive wacht alleen op een nieuw bericht als de wachtrij leeg is. De standaardwaarde is 300.000 (300 seconden).

Return Values

Deze functie retourneert het aantal ontvangen bytes.

Notes
  • receive en retourneert het volgende bericht uit de wachtrij van de andere gekoppelde V5 Brain. Berichten worden in FIFO-volgorde gelezen (oudste ongelezen eerst). Als de wachtrij leeg is wanneer receive wordt aangeroepen, wacht het tot de opgegeven timeout op een nieuw bericht. Als er binnen dat tijdsvenster geen bericht arriveert, retourneert receive 0en blijft elk bericht dat daarna wordt verzonden in de wachtrij staan ​​om te worden gelezen wanneer receive de volgende keer wordt gebruikt.

  • Als de andere gekoppelde V5 Brain alleen een string, receive precies die string terug.

  • Als de andere gekoppelde V5 Brain een geheel getal en/of een drijvende-kommawaarde heeft verzonden, ontvangt receive een enkele gecodeerde tekenreeks die alle velden in deze volgorde combineert: .string_integer_float

    • Als de andere gekoppelde V5 Brain bijvoorbeeld link.send(“string”, 1, 2.55)gebruikt, dan retourneert link.receive() een gecodeerde tekenreeks zoals .string_1_2.5500Je kunt deze gecodeerde tekenreeks splitsen (zie de voorbeelden hieronder) om de berichtnaam, de gehele getallen en de drijvende-kommawaarden te extraheren.

    • Als je liever handmatig splitsen/parsen vermijdt, gebruik dan received om een ​​handler te registreren voor een specifieke berichtnaam; de handler ontvangt de verzonden waarden als argumenten.

Examples

Bij gebruik van link.send(“string”, 1, 2.55) ontvangen als .string_1_2.5500.

Code voor 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);
}

Code voor 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#

Registreert een functie die wordt aangeroepen wanneer de V5 Brain een verzonden bericht ontvangt.

Available Functions

1 Registreert een callback voor alle ontvangen berichten (bericht + waarde).

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

2 Registreert een callback voor alle ontvangen berichten (bericht + index + waarde).

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

3 Registreert een callback voor een specifiek bericht (bericht + waarde).

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

4 Registreert een callback voor een specifiek bericht (bericht + index + waarde).

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

Parameters

Parameter

Type

Beschrijving

message

const char *

De naam van het bericht waarnaar geluisterd moet worden. Indien weggelaten, wordt de callback uitgevoerd voor alle ontvangen berichten.

callback

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

Een functie die wordt uitgevoerd wanneer een bericht wordt ontvangen.

Return Values

Deze functie retourneert geen waarden.

Callback Signature

1 Ontvangt de naam van de afzender, de naam van het bericht en de waarde.

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

2 Ontvangt de naam van de afzender, de naam van het bericht, de index en de waarde.

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

Type

Beschrijving

1st const char *

De naam van de afzenderlink.

2nd const char *

De naam van het ontvangen bericht.

int32_t

De index die aan het bericht is gekoppeld.

double

De waarde die aan het bericht is gekoppeld.

Examples

Code voor 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);
  }
}

Code voor 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);
  }
}

vorige

VEXlink

volgende

Seriële link

On this page
  • Invoering
  • Klasseconstructors
  • Klasse-destructor
  • Parameters
  • Voorbeeld
  • Lidfuncties
    • isLinked
    • send
    • receive
    • received
Innovation First, International
​

VEX en VEX Robotics zijn handelsmerken of dienstmerken van Innovation First, Inc. Copyright ©2026Alle rechten voorbehouden. VEX Robotics, Inc. is een dochteronderneming van Innovation First International, Inc. Alle andere productnamen/merken van derden zijn eigendom van hun respectievelijke eigenaren. Octrooien en/of aangevraagde octrooien - innovationfirst.com/patents
Privacybeleid website / Gebruiksvoorwaarden website / Cookiebeleid / Privacybeleid software

Bezoek de Facebookpagina van VEX Robotics Bezoek de Twitterpagina van VEX Robotics Bezoek de Instagrampagina van VEX Robotics Bezoek de VEX Robotics YouTube-pagina.
VEX API-feedbackformulier

Wij stellen uw feedback zeer op prijs! Gebruik dit formulier om suggesties, complimenten of fouten met betrekking tot de VEX API te delen. Uw input helpt ons de VEX API-documentatie te verbeteren.

​

Als u technische problemen ondervindt of klantondersteuning nodig heeft, ga dan naar support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Let op: de huidige URL wordt met uw bericht gedeeld.

Door uw e-mailadres op te geven, gaat u ermee akkoord dat VEX u e-mails mag sturen als we vragen hebben over uw feedback.
Privacybeleid >
Geef alstublieft uw feedback. Feedback succesvol verzonden!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)