• 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
Pāriet uz galveno saturu
Ctrl+K

< Back to Platform Select

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

Sadaļu navigācija

  • Bloki
  • Python
  • C++
    • Piedziņa
    • Motori un motoru kontrolleri
    • 3 vadu ierīces
    • Smadzenes
    • Konsole
    • Kontrolieris
    • Loģika
    • Viedās ostas ierīces
    • VEXlink
      • Ziņojuma saite
      • Seriālā saite
    • CTE darba šūna
  • VEXkoda pamācības

Platformas navigācija

  • 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

Ziņojuma saite#

  • Ievads

  • Klases konstruktori

  • Klases iznīcinātājs

  • Parametri

  • Piemērs

  • Dalībnieku funkcijas

    • ir saistīts

    • sūtīt

    • saņemt

    • saņemts

Ievads#

Klase message_link ļauj divām EXP smadzenēm sazināties, nosūtot īsas virknes ziņojumus ar nelieliem papildu datiem. Tā ir paredzēta robotu savstarpējai koordinācijai — piemēram, rutīnu palaišanai, sensoru rezultātu koplietošanai vai uzvedības aktivizēšanai citā robotā.

Katru reizi, kad tiek izmantota send, saistītā EXP Brain rindai tiek pievienots ziņojums, un rinda tiek lasīta pēc principa “pirmais iekšā, pirmais ārā” (FIFO). Ja pirms otra EXP Brain izmanto receive, tiek nosūtīti vairāki ziņojumi, tie tiks saglabāti un atgriezti pa vienam tādā secībā, kādā tie tika nosūtīti. Tā kā ziņojumi var tikt ievietoti rindā, atkārtota viena un tā paša statusa nosūtīšana katrā ciklā var radīt uzkrāšanos; laika ziņā kritiskas loģikas gadījumā sūtiet tikai tad, kad mainās vērtības.

Svarīgi: Abiem robotiem vienlaikus jādarbojas projektos, kas izmanto message_link , pretējā gadījumā ziņojumi netiks nosūtīti/saņemti.

Klases konstruktori#

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

Klases iznīcinātājs#

Iznīcina objektu message_link un atbrīvo saistītos resursus.

virtual ~message_link();

Parametri#

Parametrs

Tips

Apraksts

index

int32_t

Viedports, kuram ir pievienots V5 radio vai viedkabelis, tiek rakstīts kā PORTx, kur x ir porta numurs (piemēram, PORT1).

name

char

Ziņojuma saites nosaukums.

type

linkType

Saites veids — linkType::manager vai linkType::workerŠī informācija tiek izmantota, lai pareizi konfigurētu radio, kā arī noteiktu pieejamo joslas platumu pārraidei un uztveršanai. Vadītāja robotam ir divreiz lielāks pieejamais joslas platums (1040 baiti sekundē), lai nosūtītu informāciju darba robotam (520 baiti sekundē).

  • linkType::manager — message_link objekts ir vadītājs.
  • linkType::worker — message_link objekts ir darbinieks.

isWired

bool

Vai message_link objekts ir savienots ar vadu savienojumu.

  • true — message_link objekts ir savienots ar vadu savienojumu.
  • false — message_link objekts ir bezvadu savienojums.

Piemērs#

1. robota kods

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

Robots 2 kods

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

Dalībnieku funkcijas#

Klase message_link ietver šādas dalībfunkcijas:

  • isLinked — Atgriež, vai šīs smadzenes ir aktīvi savienotas ar pārī savienotajām smadzenēm.

  • send — Nosūta ziņojumu pārī savienotajām smadzenēm.

  • receive — Gaida un atgriež nākamo ienākošo ziņojumu.

  • received — Reģistrē funkciju, kas tiks izsaukta ikreiz, kad tiek saņemts jauns ziņojums.

Pirms jebkuru message_link dalībfunkciju izsaukšanas ir jāizveido message_link instance, kā parādīts zemāk:

1. robota kods

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

Robots 2 kods

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

isLinked#

isLinked metode atgriež, vai EXP smadzenes MessageLink ir savienotas pārī viena ar otru.

Available Functions
bool isLinked();

Parameters

Šai funkcijai nav parametru.

Return Values

Šī funkcija atgriež Būla vērtību.

  • true – Abas EXP smadzenes ir savienotas pārī un sazinās, izmantojot šo saiti.

  • false – Abas EXP smadzenes šajā saitē nav savienotas pārī.

Notes

Pirms jebkāda turpmāka koda palaišanas projekta sākumā vienmēr ir ieteicams pārbaudīt, vai EXP smadzenes ir saistītas.

Examples

1. robota kods

// 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);
  }

Robots 2 kods

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

Nosūta ziņojumu, izmantojot saites savienojumu.

Available Functions

1 — Nosūta ziņojuma virkni.

int32_t send( 
  const char *message );

2 — Nosūta ziņojuma virkni ar vērtību double.

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

3 — Nosūta ziņojuma virkni ar int32_t un double.

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

Parameters

Parametrs

Tips

Apraksts

message

const char*

Ziņojums, kas jānosūta otrai saistītajai EXP smadzenei.

index

int32_t

Vesels skaitlis, kas jānosūta uz otru saistīto EXP Brain.

value

double

Dubultskaitlis, kas jānosūta uz otru saistīto EXP Brain. Dubultskaitļi tiek formatēti ar 4 zīmēm aiz komata; ja norādīts mazāk zīmju aiz komata, tiek pievienotas nulles, līdz tiek parādīti 4.

Return Values

Šī funkcija neatgriež nekādas vērtības.

Notes

Ja tiek nosūtīts tikai message , otra saistītā EXP Brain saņem tieši šo ziņojumu.

Ja ir iekļauta value (un index ja tāds ir), saņēmēja smadzenes saņem vienu kodētu ziņojumu, kas apvieno visus laukus šādā secībā: .message_index_value

Examples

Izmantojot link.send(“string”, 1, 2.55) tiek saņemts kā .string_1_2.5500.

1. robota kods

// 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);
}

Robots 2 kods

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

Saņem ziņojumu no saites savienojuma.

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

Parameters

Parametrs

Tips

Apraksts

buffer

char

Buferis saņemtā ziņojuma glabāšanai.

length

int32_t

Bufera garums.

timeoutMs

int32_t

Cik ilgi milisekundēs receive gaidīs jaunu ziņojumu tikai tad, ja rinda ir tukša. Noklusējuma vērtība ir 300 000 (300 sekundes).

Return Values

Šī funkcija atgriež saņemto baitu skaitu.

Notes
  • receive atgriež nākamo rindā esošo ziņojumu no otras saistītās EXP Brain. Ziņojumi tiek lasīti FIFO secībā (vispirms vecākie nelasītie). Ja rinda ir tukša, kad tiek izsaukta receive , tā gaida jaunu ziņojumu līdz norādītajam timeout Ja šajā logā netiek saņemts neviens ziņojums, receive atgriež 0, un visi pēc tam nosūtītie ziņojumi paliek rindā, lai tos nolasītu nākamajā reizē, kad tiks izmantota receive.

  • Ja otrs saistītais EXP Brain nosūtīja tikai string, receive atgriež precīzu virkni.

  • Ja otrs saistītais EXP Brain nosūtīja veselu skaitli un/vai peldošo skaitli, receive atgriež vienu kodētu virkni, kas apvieno visus laukus šādā secībā: .string_integer_float

    • Piemēram, ja otrs saistītais EXP Brain izmanto link.send(“string”, 1, 2.55), tad, izmantojot link.receive() tiek atgriezta kodēta virkne, piemēram, .string_1_2.5500Šo kodēto virkni var sadalīt (skatīt piemērus zemāk), lai iegūtu ziņojuma nosaukumu, veselu skaitli un peldošās vērtības.

    • Ja vēlaties izvairīties no manuālas sadalīšanas/parsēšanas, izmantojiet received, lai reģistrētu apstrādātāju konkrētam ziņojuma nosaukumam; apstrādātājs saņem nosūtītās vērtības kā argumentus.

Examples

Izmantojot link.send(“string”, 1, 2.55) tiek saņemts kā .string_1_2.5500.

1. robota kods

// 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);
}

Robots 2 kods

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

Reģistrē funkciju, kas tiks izsaukta ikreiz, kad EXP Brain saņem nosūtītu ziņojumu.

Available Functions

1 Reģistrē atzvanu visiem saņemtajiem ziņojumiem (ziņojums + vērtība).

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

2 Reģistrē atzvanu visiem saņemtajiem ziņojumiem (ziņojums + indekss + vērtība).

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

3 Reģistrē atzvanīšanas pieprasījumu konkrētam ziņojumam (ziņojums + vērtība).

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

4 Reģistrē atzvanīšanas pieprasījumu konkrētam ziņojumam (ziņojums + indekss + vērtība).

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

Parameters

Parametrs

Tips

Apraksts

message

const char *

Ziņojuma nosaukums, kas jāklausa. Ja netiek norādīts, atzvans tiek veikts visiem saņemtajiem ziņojumiem.

callback

Funkcijas rādītājs

Funkcija, kas tiek izpildīta, kad tiek saņemts ziņojums.

Return Values

Šī funkcija neatgriež nekādas vērtības.

Callback Signature

1 Saņem sūtītāja vārdu, ziņojuma nosaukumu un vērtību.

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

2 Saņem sūtītāja vārdu, ziņojuma nosaukumu, indeksu un vērtību.

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

Tips

Apraksts

1st const char *

Sūtītāja saites nosaukums.

2nd const char *

Saņemtā ziņojuma nosaukums.

int32_t

Ar ziņojumu saistītais indekss.

double

Ar ziņojumu saistītā vērtība.

Examples

1. robota kods

// 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);
  }
}

Robots 2 kods

// 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);
  }
}

iepriekšējs

VEXlink

nākošais

Seriālā saite

On this page
  • Ievads
  • Klases konstruktori
  • Klases iznīcinātājs
  • Parametri
  • Piemērs
  • Dalībnieku funkcijas
    • isLinked
    • send
    • receive
    • received
Innovation First, International
​

VEX un VEX Robotics ir Innovation First, Inc. preču zīmes vai pakalpojumu zīmes. Autortiesības ©2026Visas tiesības aizsargātas. VEX Robotics, Inc. ir Innovation First International, Inc. meitasuzņēmums. Visi pārējie citu produktu nosaukumi/zīmes pieder to attiecīgajiem īpašniekiem. Patenti un/vai patenti gaida apstiprinājumu - innovationfirst.com/patents
Vietnes konfidencialitātes politika / Vietnes lietošanas noteikumi / Sīkfailu politika / Programmatūras konfidencialitātes politika

Apmeklējiet VEX Robotics Facebook lapu Apmeklējiet VEX Robotics Twitter lapu Apmeklējiet VEX Robotics Instagram lapu Apmeklējiet VEX Robotics YouTube lapu
VEX API atsauksmju veidlapa

Mēs novērtējam jūsu atsauksmes! Izmantojiet šo veidlapu, lai sniegtu ieteikumus, komplimentus vai ziņotu par kļūdām saistībā ar VEX API. Jūsu sniegtā informācija palīdz mums uzlabot VEX API dokumentāciju.

​

Ja rodas tehniskas problēmas vai nepieciešams klientu atbalsts, lūdzu, apmeklējiet vietni support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Piezīme. Pašreizējais URL tiks kopīgots ar jūsu ziņojumu.

Norādot savu e-pasta adresi, jūs piekrītat, ka VEX var jums sūtīt e-pastus, ja mums ir jautājumi par jūsu atsauksmēm.
Privātuma politika >
Lūdzu, sniedziet savu atsauksmi. Atsauksme iesniegta veiksmīgi!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)