====== IMcMem() ====== ''IMcMem()'' sets the sizes of X, Y, M and D memory used by MC Protocol. {{:en-us_commands:reference:imcmem.svg?900|IMcMem command operation flow}} ''void IMcMem(uint16_t x_size, uint16_t y_size, uint16_t m_size, uint16_t d_size)'' ===== Commands ===== ^ Command ^ Arguments ^ Return Value ^ Operation ^ | ''IMcMem(x_size, y_size, m_size, d_size)'' | ''uint16_t x_size'' — Number of X input bits\\ ''uint16_t y_size'' — Number of Y output bits\\ ''uint16_t m_size'' — Number of M internal bits\\ ''uint16_t d_size'' — Number of D words | ''void'' | Sets the sizes of X, Y, M and D memory used by MC Protocol. | ===== Example ===== This example uses the MPINO-16A8R8T RS-485 port ''Serial2'', input ''D22'', and transistor output ''D39''. void setup() { IMcMem(32, 32, 64, 64); // Set the X·Y·M·D memory sizes used by MC Protocol. IMcAdr(0, 0, 0, 0); // Set the start addresses of X·Y·M·D memory. IMcInit(Serial2, 1, 9600); // Set the communication port, station number and baud rate. } void loop() { IMcProtocol(); // Check incoming requests and process MC Protocol responses. if (X != nullptr) X[0] = digitalRead(22) == HIGH; if (Y != nullptr) digitalWrite(39, Y[0] ? HIGH : LOW); } ===== Precautions ===== * Keep calling ''IMcProtocol()'' in ''loop()''. * Do not confuse hexadecimal addressing for X/Y with decimal addressing for M/D. * Do not use X/Y/M/D before allocating the pointers. * If Cnet or Modbus reallocates shared ''M''/''D'' memory at runtime, the addresses used by MC Protocol change. Complete all memory size settings in ''setup()'' and do not call them again at runtime. * Allocation functions do not return success status. For nonzero sizes, verify the corresponding global pointer is not ''nullptr'' before accessing it. ===== Built-in Commands in the Same Category ===== * [[:en-us_commands:reference:imcadr|IMcAdr() View detailed description]] * [[:en-us_commands:reference:imcinit|IMcInit() View detailed description]] * [[:en-us_commands:reference:imcprotocol|IMcProtocol() View detailed description]] [[:en-us_commands:builtin|← Built-in Command List]]