{"id":43915,"date":"2024-08-27T17:34:56","date_gmt":"2024-08-27T23:34:56","guid":{"rendered":"https:\/\/www.logicbus.com.mx\/blog\/?p=43915"},"modified":"2026-02-03T11:13:10","modified_gmt":"2026-02-03T17:13:10","slug":"uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino","status":"publish","type":"post","link":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/","title":{"rendered":"Uso de protocolo de comunicaci\u00f3n ModbusRTU mediante puerto RS485 con PLC Controllino"},"content":{"rendered":"<p><img decoding=\"async\" class=\" wp-image-43916 aligncenter\" src=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/RS485-300x133.jpg\" alt=\"\" width=\"702\" height=\"311\" srcset=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/RS485-300x133.jpg 300w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/RS485-1024x455.jpg 1024w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/RS485-150x67.jpg 150w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/RS485-768x341.jpg 768w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/RS485.jpg 1034w\" sizes=\"(max-width: 702px) 100vw, 702px\" \/><\/p>\n<p>Nuestros PLCs de Controllino en sus modelos <a href=\"https:\/\/tienda.logicbus.com.mx\/automatizacion-y-control-de-procesos-plc-controllino-100-100-00\">MAXI<\/a> y <a href=\"https:\/\/tienda.logicbus.com.mx\/automatizacion-y-control-de-procesos-plc-controllino-100-200-00\">MEGA<\/a> tiene la caracter\u00edstica de poder comunicarse usando el protocolo ModbusRTU a trav\u00e9s del puerto RS485 (interfaz SN65HVD08) integrado en ellos, la cual cuenta con distintos seriales para la transmisi\u00f3n de datos como digital, conexi\u00f3n en l\u00ednea o diferencial. Al conectarse a las terminales atornillables las se\u00f1ales pueden llegar hasta 32 suscriptores en un rango de 1,200 metros, esto gracias al driver del m\u00f3dulo RS845 de Controllino conectado al UART3 (TxD3 \/ RxD3) del microchip ATMEGA2560.<\/p>\n<p>Controllino ofrece un diagrama de conexiones para el PLC de Controllino <a href=\"https:\/\/tienda.logicbus.com.mx\/automatizacion-y-control-de-procesos-plc-controllino-100-100-00\">MAXI<\/a> en archivo <a href=\"https:\/\/www.controllino.com\/wp-content\/uploads\/2023\/05\/CONTROLLINO_MAXI_Pinout_Table.pdf\">pdf<\/a>, haciendo la configuraci\u00f3n de conexi\u00f3n mediante Modbus m\u00e1s sencilla, en este blog le ense\u00f1aremos a configurar y probar la interfaz RS485 en sus equipos (Nota: se debe seleccionar la librer\u00eda correcta buscando en la direcci\u00f3n del men\u00fa de Arduino IDE Tools-&gt;Board-&gt;Controllino MINI\/MAXI\/MEGA, si no encuentra el archivo deseado puede usar la <a href=\"https:\/\/github.com\/CONTROLLINO-PLC\/CONTROLLINO_Library\">esta liga<\/a> para descargarlo, ya que la necesita antes de cargar el c\u00f3digo al PLC).<\/p>\n<p>En este caso lo que va a necesitar para la configuraci\u00f3n son 2 equipos PLC de Controllino <a href=\"https:\/\/tienda.logicbus.com.mx\/automatizacion-y-control-de-procesos-plc-controllino-100-100-00\">MAXI<\/a> y\/o <a href=\"https:\/\/tienda.logicbus.com.mx\/automatizacion-y-control-de-procesos-plc-controllino-100-200-00\">MEGA<\/a>, una fuente de alimentaci\u00f3n de 12\/24 VCD (la cual deber\u00e1 configurar para que el voltaje que reciban los PLC no exceda los 5 Volts, o se corre el riesgo de da\u00f1ar permanentemente los equipos).<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\" wp-image-43917 aligncenter\" src=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/controllino-300x207.jpg\" alt=\"\" width=\"549\" height=\"379\" srcset=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/controllino-300x207.jpg 300w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/controllino-150x104.jpg 150w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/controllino-768x531.jpg 768w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/controllino.jpg 842w\" sizes=\"(max-width: 549px) 100vw, 549px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\" wp-image-43918 aligncenter\" src=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/SN65HVD08-288x300.jpg\" alt=\"\" width=\"471\" height=\"491\" srcset=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/SN65HVD08-288x300.jpg 288w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/SN65HVD08-144x150.jpg 144w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/SN65HVD08-24x24.jpg 24w, https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/SN65HVD08.jpg 450w\" sizes=\"(max-width: 471px) 100vw, 471px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Las im\u00e1genes de arriba muestran el cableado y conexi\u00f3n de los PLCs, antes de realizar esto se debe cargar este c\u00f3digo al PLC que fungir\u00e1 como emisor:<\/p>\n<p>#include &lt;SPI.h&gt;<\/p>\n<p>#include &lt;Controllino.h&gt; \/* Usage of CONTROLLINO library allows you to use CONTROLLINO_xx aliases in your sketch. *\/<\/p>\n<p>void TestRS485 (int mode)<\/p>\n<p>{<\/p>\n<p>DDRJ = DDRJ | B01100000;<\/p>\n<p>PORTJ = PORTJ &amp; B10011111;<\/p>\n<p>\/*pinMode(CONTROLLINO_RS485_TX, OUTPUT);<\/p>\n<p>pinMode(CONTROLLINO_RS485_RX, INPUT);<\/p>\n<p>pinMode(CONTROLLINO_RS485_RE, OUTPUT);<\/p>\n<p>pinMode(CONTROLLINO_RS485_DE, OUTPUT);*\/<\/p>\n<p>switch (mode)<\/p>\n<p>{<\/p>\n<p>case 0:<\/p>\n<p>PORTJ = PORTJ &amp; B10011111;<\/p>\n<p>PORTJ = PORTJ | B01000000;<\/p>\n<p>\/*digitalWrite (CONTROLLINO_RS485_RE, HIGH);<\/p>\n<p>digitalWrite (CONTROLLINO_RS485_DE, HIGH);*\/<\/p>\n<p>delay (10);<\/p>\n<p>Serial.println (&#8220;Sending test message, expected to return;&#8221;);<\/p>\n<p>Serial3.print(&#8220;UUUUU Controllino RS485 test Message.UUUUU&#8221;);<\/p>\n<p>break;<\/p>\n<p>case 1:<\/p>\n<p>PORTJ = PORTJ &amp; B10011111;<\/p>\n<p>PORTJ = PORTJ | B01100000;<\/p>\n<p>\/*digitalWrite (CONTROLLINO_RS485_RE, LOW);<\/p>\n<p>digitalWrite (CONTROLLINO_RS485_DE, HIGH);*\/<\/p>\n<p>delay (10);<\/p>\n<p>Serial.println (&#8220;Sending test message, not expected to return;&#8221;);<\/p>\n<p>Serial3.print(&#8220;UUUUU Controllino RS485 test Message.UUUUU&#8221;);<\/p>\n<p>break;<\/p>\n<p>case 2:<\/p>\n<p>PORTJ = PORTJ &amp; B10011111;<\/p>\n<p>PORTJ = PORTJ | B00100000;<\/p>\n<p>\/* digitalWrite (CONTROLLINO_RS485_RE, HIGH);<\/p>\n<p>digitalWrite (CONTROLLINO_RS485_DE, LOW);*\/<\/p>\n<p>delay (10);<\/p>\n<p>Serial.println (&#8220;Sending test message, not expected to be sended;&#8221;);<\/p>\n<p>Serial3.print(&#8220;UUUUU Controllino RS485 test Message.UUUUU&#8221;);<\/p>\n<p>break;<\/p>\n<p>default:<\/p>\n<p>Serial.println(&#8220;Wrong mode!&#8221;);<\/p>\n<p>return;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>\/* This function enters a loop and waits for any incoming data on serial 3.*\/<\/p>\n<p>void RecieveRS485()<\/p>\n<p>{<\/p>\n<p>Serial.println(&#8220;Recieving RS485.&#8221;);<\/p>\n<p>while(true)<\/p>\n<p>{<\/p>\n<p>if (Serial3.available())<\/p>\n<p>{<\/p>\n<p>\/\/ print the new byte:<\/p>\n<p>Serial.print((char)Serial3.read());<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>void setup() {<\/p>\n<p>\/* Here we initialize USB serial at 9600 baudrate for reporting *\/<\/p>\n<p>Serial.begin(9600);<\/p>\n<p>\/* Here we initialize RS485 serial at 9600 baudrate for communication *\/<\/p>\n<p>Serial3.begin(9600);<\/p>\n<p>\/* This will initialize Controllino RS485 pins *\/<\/p>\n<p>Controllino_RS485Init();<\/p>\n<p>}<\/p>\n<p>void loop() {<\/p>\n<p>\/* Use only one of the two functions, either send or receive *\/<\/p>\n<p>\/\/ ReceiveRS485();<\/p>\n<p>\/* Sends test. 2 seconds apart sending messages with 3 types of different settings.<\/p>\n<p>Check the function comment for more information *\/<\/p>\n<p>TestRS485(0);<\/p>\n<p>delay(2000);<\/p>\n<p>TestRS485(1);<\/p>\n<p>delay(2000);<\/p>\n<p>TestRS485(2);<\/p>\n<p>delay(2000);<\/p>\n<p>}<\/p>\n<p>Una vez hecho esto, no olvide cargar este c\u00f3digo al PLC que fungir\u00e1 como receptor:<\/p>\n<p>#include &lt;SPI.h&gt;<\/p>\n<p>#include &lt;Controllino.h&gt; \/* Usage of CONTROLLINO library allows you to use CONTROLLINO_xx aliases in your sketch. *\/<\/p>\n<p>void TestRS485 (int mode)<\/p>\n<p>{<\/p>\n<p>DDRJ = DDRJ | B01100000;<\/p>\n<p>PORTJ = PORTJ &amp; B10011111;<\/p>\n<p>\/*pinMode(CONTROLLINO_RS485_TX, OUTPUT);<\/p>\n<p>pinMode(CONTROLLINO_RS485_RX, INPUT);<\/p>\n<p>pinMode(CONTROLLINO_RS485_RE, OUTPUT);<\/p>\n<p>pinMode(CONTROLLINO_RS485_DE, OUTPUT);*\/<\/p>\n<p>switch (mode)<\/p>\n<p>{<\/p>\n<p>case 0:<\/p>\n<p>PORTJ = PORTJ &amp; B10011111;<\/p>\n<p>PORTJ = PORTJ | B01000000;<\/p>\n<p>\/*digitalWrite (CONTROLLINO_RS485_RE, HIGH);<\/p>\n<p>digitalWrite (CONTROLLINO_RS485_DE, HIGH);*\/<\/p>\n<p>delay (10);<\/p>\n<p>Serial.println (&#8220;Sending test message, expected to return;&#8221;);<\/p>\n<p>Serial3.print(&#8220;UUUUU Controllino RS485 test Message.UUUUU&#8221;);<\/p>\n<p>break;<\/p>\n<p>case 1:<\/p>\n<p>PORTJ = PORTJ &amp; B10011111;<\/p>\n<p>PORTJ = PORTJ | B01100000;<\/p>\n<p>\/*digitalWrite (CONTROLLINO_RS485_RE, LOW);<\/p>\n<p>digitalWrite (CONTROLLINO_RS485_DE, HIGH);*\/<\/p>\n<p>delay (10);<\/p>\n<p>Serial.println (&#8220;Sending test message, not expected to return;&#8221;);<\/p>\n<p>Serial3.print(&#8220;UUUUU Controllino RS485 test Message.UUUUU&#8221;);<\/p>\n<p>break;<\/p>\n<p>case 2:<\/p>\n<p>PORTJ = PORTJ &amp; B10011111;<\/p>\n<p>PORTJ = PORTJ | B00100000;<\/p>\n<p>\/* digitalWrite (CONTROLLINO_RS485_RE, HIGH);<\/p>\n<p>digitalWrite (CONTROLLINO_RS485_DE, LOW);*\/<\/p>\n<p>delay (10);<\/p>\n<p>Serial.println (&#8220;Sending test message, not expected to be sended;&#8221;);<\/p>\n<p>Serial3.print(&#8220;UUUUU Controllino RS485 test Message.UUUUU&#8221;);<\/p>\n<p>break;<\/p>\n<p>default:<\/p>\n<p>Serial.println(&#8220;Wrong mode!&#8221;);<\/p>\n<p>return;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>\/* This function enters a loop and waits for any incoming data on serial 3.*\/<\/p>\n<p>void ReceiveRS485()<\/p>\n<p>{<\/p>\n<p>Serial.println(&#8220;Receiving RS485.&#8221;);<\/p>\n<p>while(true)<\/p>\n<p>{<\/p>\n<p>if (Serial3.available())<\/p>\n<p>{<\/p>\n<p>\/\/ print the new byte:<\/p>\n<p>Serial.print((char)Serial3.read());<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>void setup() {<\/p>\n<p>\/* Here we initialize USB serial at 9600 baudrate for reporting *\/<\/p>\n<p>Serial.begin(9600);<\/p>\n<p>\/* Here we initialize RS485 serial at 9600 baudrate for communication *\/<\/p>\n<p>Serial3.begin(9600);<\/p>\n<p>\/* This will initialize Controllino RS485 pins *\/<\/p>\n<p>Controllino_RS485Init();<\/p>\n<p>}<\/p>\n<p>void loop() {<\/p>\n<p>\/* Use only one of the two functions, either send or receive *\/<\/p>\n<p>ReceiveRS485();<\/p>\n<p>\/* Sends test. 2 seconds apart sending messages with 3 types of different settings.<\/p>\n<p>Check the function comment for more information *\/<\/p>\n<p>\/\/ TestRS485(0);<\/p>\n<p>\/\/ delay(2000);<\/p>\n<p>\/\/ TestRS485(1);<\/p>\n<p>\/\/ delay(2000);<\/p>\n<p>\/\/ TestRS485(2);<\/p>\n<p>\/\/ delay(2000);<\/p>\n<p>}<\/p>\n<ul>\n<li><strong>Usar ModbusRTU<\/strong><\/li>\n<\/ul>\n<p>El siguiente paso una vez que salieron positivas las pruebas en los PLCs es comunicar los dispositivos v\u00eda RS485 con ayuda del protocolo ModbusRTU. Para eso usaremos el sistema de enlace conocido de Maestro y Esclavo. La funci\u00f3n del Maestro ser\u00e1 la lectura peri\u00f3dica de los registros de 16 bits del Esclavo e impresi\u00f3n del estatus actual al serial de debug, luego escribir\u00e1 y alternar\u00e1 los registros:<\/p>\n<p>0 \u2013 analog CONTROLLINO_A0 value (0 \u2013 1024)<\/p>\n<p>1 \u2013 digital CONTROLLINO_D0 value (0\/1)<\/p>\n<p>2 \u2013 Modbus messages received<\/p>\n<p>3 \u2013 Modbus messages transmitted<\/p>\n<p>4 \u2013 relay CONTROLLINO_R0 (0\/1)<\/p>\n<p>5 \u2013 relay CONTROLLINO_R1 (0\/1)<\/p>\n<p>6 \u2013 relay CONTROLLINO_R2 (0\/1)<\/p>\n<p>7 \u2013 relay CONTROLLINO_R3 (0\/1)<\/p>\n<p>Para lograr la conexi\u00f3n necesitamos adem\u00e1s al segundo PLC Controllino como Esclavo, recordando cargar antes las librer\u00edas de Modbus Maestro-Esclavo de <a href=\"https:\/\/github.com\/smarmengol\/Modbus-Master-Slave-for-Arduino\">este enlace<\/a>, esto nos ayudar\u00e1 a modificar los par\u00e1metros de los puertos para los pines de control DE (PIN6) y RE (PIN5).<\/p>\n<p>El c\u00f3digo para el equipo ModbusRTU Maestro es el siguiente:<\/p>\n<p>#include &lt;Controllino.h&gt; \/* Usage of CONTROLLINO library allows you to use CONTROLLINO_xx aliases in your sketch. *\/<\/p>\n<p>#include &#8220;ModbusRtu.h&#8221; \/* Usage of ModBusRtu library allows you to implement the Modbus RTU protocol in your sketch. *\/<\/p>\n<p>\/\/ This MACRO defines the Modbus master address.<\/p>\n<p>\/\/ For any Modbus slave devices are reserved addresses in the range from 1 to 247.<\/p>\n<p>\/\/ Important note only address 0 is reserved for a Modbus master device!<\/p>\n<p>#define MasterModbusAdd 0<\/p>\n<p>#define SlaveModbusAdd 1<\/p>\n<p>\/\/ This MACRO defines the number of the comport that is used for RS 485 interface.<\/p>\n<p>\/\/ For MAXI and MEGA RS485 is reserved UART Serial3.<\/p>\n<p>#define RS485Serial 3<\/p>\n<p>\/\/ The object ControllinoModbuSlave of the class Modbus is initialized with three parameters.<\/p>\n<p>\/\/ The first parameter specifies the address of the Modbus slave device.<\/p>\n<p>\/\/ The second parameter specifies the type of the interface used for communication between devices &#8211; in this sketch &#8211; RS485.<\/p>\n<p>\/\/ The third parameter can be any number. During the initialization of the object this parameter has no effect.<\/p>\n<p>Modbus ControllinoModbusMaster(MasterModbusAdd, RS485Serial, 0);<\/p>\n<p>\/\/ This uint16 array specified internal registers in the Modbus slave device.<\/p>\n<p>\/\/ Each Modbus device has particular internal registers that are available for the Modbus master.<\/p>\n<p>\/\/ In this example sketch internal registers are defined as follows:<\/p>\n<p>\/\/ (ModbusSlaveRegisters 0 &#8211; 3 read only and ModbusSlaveRegisters 4 &#8211; 7 write only from the Master perspective):<\/p>\n<p>\/\/ ModbusSlaveRegisters[0] &#8211; Read an analog value from the CONTROLLINO_A0 &#8211; returns value in the range from 0 to 1023.<\/p>\n<p>\/\/ ModbusSlaveRegisters[1] &#8211; Read an digital value from the CONTROLLINO_D0 &#8211; returns only the value 0 or 1.<\/p>\n<p>\/\/ ModbusSlaveRegisters[2] &#8211; Read the number of incoming messages &#8211; Communication diagnostic.<\/p>\n<p>\/\/ ModbusSlaveRegisters[3] &#8211; Read the number of outcoming messages &#8211; Communication diagnostic.<\/p>\n<p>\/\/ ModbusSlaveRegisters[4] &#8211; Sets the Relay output CONTROLLINO_R0 &#8211; only the value 0 or 1 is accepted.<\/p>\n<p>\/\/ ModbusSlaveRegisters[5] &#8211; Sets the Relay output CONTROLLINO_R1 &#8211; only the value 0 or 1 is accepted.<\/p>\n<p>\/\/ ModbusSlaveRegisters[6] &#8211; Sets the Relay output CONTROLLINO_R2 &#8211; only the value 0 or 1 is accepted.<\/p>\n<p>\/\/ ModbusSlaveRegisters[7] &#8211; Sets the Relay output CONTROLLINO_R3 &#8211; only the value 0 or 1 is accepted.<\/p>\n<p>uint16_t ModbusSlaveRegisters[8];<\/p>\n<p>\/\/ This is an structure which contains a query to an slave device<\/p>\n<p>modbus_t ModbusQuery[2];<\/p>\n<p>uint8_t myState; \/\/ machine state<\/p>\n<p>uint8_t currentQuery; \/\/ pointer to message query<\/p>\n<p>unsigned long WaitingTime;<\/p>\n<p>void setup() {<\/p>\n<p>\/\/ initialize serial communication at 9600 bits per second:<\/p>\n<p>Serial.begin(9600);<\/p>\n<p>Serial.println(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#8220;);<\/p>\n<p>Serial.println(&#8220;CONTROLLINO Modbus RTU Master Test Sketch&#8221;);<\/p>\n<p>Serial.println(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#8220;);<\/p>\n<p>Serial.println(&#8220;&#8221;);<\/p>\n<p>\/\/ ModbusQuery 0: read registers<\/p>\n<p>ModbusQuery[0].u8id = SlaveModbusAdd; \/\/ slave address<\/p>\n<p>ModbusQuery[0].u8fct = 3; \/\/ function code (this one is registers read)<\/p>\n<p>ModbusQuery[0].u16RegAdd = 0; \/\/ start address in slave<\/p>\n<p>ModbusQuery[0].u16CoilsNo = 4; \/\/ number of elements (coils or registers) to read<\/p>\n<p>ModbusQuery[0].au16reg = ModbusSlaveRegisters; \/\/ pointer to a memory array in the CONTROLLINO<\/p>\n<p>\/\/ ModbusQuery 1: write a single register<\/p>\n<p>ModbusQuery[1].u8id = SlaveModbusAdd; \/\/ slave address<\/p>\n<p>ModbusQuery[1].u8fct = 6; \/\/ function code (this one is write a single register)<\/p>\n<p>ModbusQuery[1].u16RegAdd = 4; \/\/ start address in slave<\/p>\n<p>ModbusQuery[1].u16CoilsNo = 1; \/\/ number of elements (coils or registers) to write<\/p>\n<p>ModbusQuery[1].au16reg = ModbusSlaveRegisters+4; \/\/ pointer to a memory array in the CONTROLLINO<\/p>\n<p>ModbusSlaveRegisters[4] = 1; \/\/ initial value for the relays<\/p>\n<p>ControllinoModbusMaster.begin( 19200 ); \/\/ baud-rate at 19200<\/p>\n<p>ControllinoModbusMaster.setTimeOut( 5000 ); \/\/ if there is no answer in 5000 ms, roll over<\/p>\n<p>WaitingTime = millis() + 1000;<\/p>\n<p>myState = 0;<\/p>\n<p>currentQuery = 0;<\/p>\n<p>}<\/p>\n<p>void loop() {<\/p>\n<p>switch( myState ) {<\/p>\n<p>case 0:<\/p>\n<p>if (millis() &gt; WaitingTime) myState++; \/\/ wait state<\/p>\n<p>break;<\/p>\n<p>case 1:<\/p>\n<p>Serial.print(&#8220;&#8212;- Sending query &#8220;);<\/p>\n<p>Serial.print(currentQuery);<\/p>\n<p>Serial.println(&#8221; &#8212;&#8212;&#8212;&#8212;-&#8220;);<\/p>\n<p>ControllinoModbusMaster.query( ModbusQuery[currentQuery] ); \/\/ send query (only once)<\/p>\n<p>myState++;<\/p>\n<p>currentQuery++;<\/p>\n<p>if (currentQuery == 2)<\/p>\n<p>{<\/p>\n<p>currentQuery = 0;<\/p>\n<p>}<\/p>\n<p>break;<\/p>\n<p>case 2:<\/p>\n<p>ControllinoModbusMaster.poll(); \/\/ check incoming messages<\/p>\n<p>if (ControllinoModbusMaster.getState() == COM_IDLE)<\/p>\n<p>{<\/p>\n<p>\/\/ response from the slave was received<\/p>\n<p>myState = 0;<\/p>\n<p>WaitingTime = millis() + 1000;<\/p>\n<p>\/\/ debug printout<\/p>\n<p>if (currentQuery == 0)<\/p>\n<p>{<\/p>\n<p>\/\/ registers write was proceed<\/p>\n<p>Serial.println(&#8220;&#8212;&#8212;&#8212;- WRITE RESPONSE RECEIVED &#8212;-&#8220;);<\/p>\n<p>Serial.println(&#8220;&#8221;);<\/p>\n<p>}<\/p>\n<p>if (currentQuery == 1)<\/p>\n<p>{<\/p>\n<p>\/\/ registers read was proceed<\/p>\n<p>Serial.println(&#8220;&#8212;&#8212;&#8212;- READ RESPONSE RECEIVED &#8212;-&#8220;);<\/p>\n<p>Serial.print(&#8220;Slave &#8220;);<\/p>\n<p>Serial.print(SlaveModbusAdd, DEC);<\/p>\n<p>Serial.print(&#8221; ADC0: 0x&#8221;);<\/p>\n<p>Serial.print(ModbusSlaveRegisters[0], HEX);<\/p>\n<p>Serial.print(&#8221; , Digital0: &#8220;);<\/p>\n<p>Serial.print(ModbusSlaveRegisters[1], BIN);<\/p>\n<p>Serial.print(&#8221; , ModbusCounterIn: &#8220;);<\/p>\n<p>Serial.print(ModbusSlaveRegisters[2], DEC);<\/p>\n<p>Serial.print(&#8221; , ModbusCounterOut: &#8220;);<\/p>\n<p>Serial.println(ModbusSlaveRegisters[3], DEC);<\/p>\n<p>Serial.println(&#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;);<\/p>\n<p>Serial.println(&#8220;&#8221;);<\/p>\n<p>\/\/ toggle with the relays<\/p>\n<p>ModbusQuery[1].u16RegAdd++;<\/p>\n<p>if (ModbusQuery[1].u16RegAdd == 8)<\/p>\n<p>{<\/p>\n<p>ModbusQuery[1].u16RegAdd = 4;<\/p>\n<p>if (ModbusSlaveRegisters[4])<\/p>\n<p>{<\/p>\n<p>ModbusSlaveRegisters[4] = 0;<\/p>\n<p>}<\/p>\n<p>else<\/p>\n<p>{<\/p>\n<p>ModbusSlaveRegisters[4] = 1;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>break;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>El c\u00f3digo para el equipo ModbusRTU Esclavo es el siguiente:<\/p>\n<p>#include &lt;Controllino.h&gt; \/* Usage of CONTROLLINO library allows you to use CONTROLLINO_xx aliases in your sketch. *\/<\/p>\n<p>#include &#8220;ModbusRtu.h&#8221; \/* Usage of ModBusRtu library allows you to implement the Modbus RTU protocol in your sketch. *\/<\/p>\n<p>\/\/ This MACRO defines a Modbus slave address.<\/p>\n<p>\/\/ For any Modbus slave devices are reserved addresses in the range from 1 to 247.<\/p>\n<p>\/\/ Important note only address 0 is reserved for a Modbus master device!<\/p>\n<p>#define SlaveModbusAdd 1<\/p>\n<p>\/\/ This MACRO defines the number of the comport that is used for RS 485 interface.<\/p>\n<p>\/\/ For MAXI and MEGA RS485 is reserved UART Serial3.<\/p>\n<p>#define RS485Serial 3<\/p>\n<p>\/\/ The object ControllinoModbuSlave of the class Modbus is initialized with three parameters.<\/p>\n<p>\/\/ The first parameter specifies the address of the Modbus slave device.<\/p>\n<p>\/\/ The second parameter specifies the type of the interface used for communication between devices &#8211; in this sketch &#8211; RS485.<\/p>\n<p>\/\/ The third parameter can be any number. During the initialization of the object this parameter has no effect.<\/p>\n<p>Modbus ControllinoModbusSlave(SlaveModbusAdd, RS485Serial, 0);<\/p>\n<p>\/\/ This uint16 array specified internal registers in the Modbus slave device.<\/p>\n<p>\/\/ Each Modbus device has particular internal registers that are available for the Modbus master.<\/p>\n<p>\/\/ In this example sketch internal registers are defined as follows:<\/p>\n<p>\/\/ (ModbusSlaveRegisters 0 &#8211; 3 read only and ModbusSlaveRegisters 4 &#8211; 7 write only from the Master perspective):<\/p>\n<p>\/\/ ModbusSlaveRegisters[0] &#8211; Read an analog value from the CONTROLLINO_A0 &#8211; returns value in the range from 0 to 1023.<\/p>\n<p>\/\/ ModbusSlaveRegisters[1] &#8211; Read an digital value from the CONTROLLINO_D0 &#8211; returns only the value 0 or 1.<\/p>\n<p>\/\/ ModbusSlaveRegisters[2] &#8211; Read the number of incoming messages &#8211; Communication diagnostic.<\/p>\n<p>\/\/ ModbusSlaveRegisters[3] &#8211; Read the number of outcoming messages &#8211; Communication diagnostic.<\/p>\n<p>\/\/ ModbusSlaveRegisters[4] &#8211; Sets the Relay output CONTROLLINO_R0 &#8211; only the value 0 or 1 is accepted.<\/p>\n<p>\/\/ ModbusSlaveRegisters[5] &#8211; Sets the Relay output CONTROLLINO_R1 &#8211; only the value 0 or 1 is accepted.<\/p>\n<p>\/\/ ModbusSlaveRegisters[6] &#8211; Sets the Relay output CONTROLLINO_R2 &#8211; only the value 0 or 1 is accepted.<\/p>\n<p>\/\/ ModbusSlaveRegisters[7] &#8211; Sets the Relay output CONTROLLINO_R3 &#8211; only the value 0 or 1 is accepted.<\/p>\n<p>uint16_t ModbusSlaveRegisters[8];<\/p>\n<p>\/\/ The setup function runs once when you press reset (CONTROLLINO RST button) or connect the CONTROLLINO to the PC<\/p>\n<p>\/\/ In the setup function is carried out port setting and initialization of communication of the Modbus slave protocol.<\/p>\n<p>void setup()<\/p>\n<p>{<\/p>\n<p>pinMode(CONTROLLINO_R0, OUTPUT); \/\/ Set the pin CONTROLLINO_R0 as output.<\/p>\n<p>pinMode(CONTROLLINO_R1, OUTPUT); \/\/ Set the pin CONTROLLINO_R1 as output.<\/p>\n<p>pinMode(CONTROLLINO_R2, OUTPUT); \/\/ Set the pin CONTROLLINO_R2 as output.<\/p>\n<p>pinMode(CONTROLLINO_R3, OUTPUT); \/\/ Set the pin CONTROLLINO_R3 as output.<\/p>\n<p>pinMode(CONTROLLINO_D0, INPUT); \/\/ Set the pin CONTROLLINO_D0 as input &#8211; Read digital value at the pin D0.<\/p>\n<p>pinMode(CONTROLLINO_A0, INPUT); \/\/ Set the pin CONTROLLINO_A0 as input &#8211; Read analog value at the pin A0<\/p>\n<p>ControllinoModbusSlave.begin( 19200 ); \/\/ Start the communication over the ModbusRTU protocol. Baud rate is set at 19200<\/p>\n<p>}<\/p>\n<p>\/\/ The loop function runs over and over again forever<\/p>\n<p>void loop()<\/p>\n<p>{<\/p>\n<p>\/\/ This instance of the class Modbus checks if there is any incoming data.<\/p>\n<p>\/\/ If any frame was received. This instance checks if a received frame is Ok.<\/p>\n<p>\/\/ If the received frame is Ok the instance poll writes or reads corresponding values to the internal registers<\/p>\n<p>\/\/ (ModbusSlaveRegisters).<\/p>\n<p>\/\/ Main parameters of the instance poll are address of the internal registers and number of internal registers.<\/p>\n<p>ControllinoModbusSlave.poll(ModbusSlaveRegisters, 8);<\/p>\n<p>\/\/ While are not received or sent any data, the Modbus slave device periodically reads the values of analog and<\/p>\n<p>\/\/ digital outputs.<\/p>\n<p>\/\/ Also it updates the other values of registers.<\/p>\n<p>ModbusSlaveRegisters[0] = analogRead(CONTROLLINO_A0); \/\/ Read the analog input CONTROLLINO_A0.<\/p>\n<p>ModbusSlaveRegisters[1] = digitalRead(CONTROLLINO_D0); \/\/ Read the digital input CONTROLLINO_A0.<\/p>\n<p>ModbusSlaveRegisters[2] = ControllinoModbusSlave.getInCnt(); \/\/ Read the number of incoming messages.<\/p>\n<p>ModbusSlaveRegisters[3] = ControllinoModbusSlave.getOutCnt(); \/\/ Read the number of outcoming messages<\/p>\n<p>digitalWrite(CONTROLLINO_R0, ModbusSlaveRegisters[4]); \/\/ Update the relay output CONTROLLINO_R0 &#8211; ON\/OFF<\/p>\n<p>digitalWrite(CONTROLLINO_R1, ModbusSlaveRegisters[5]); \/\/ Update the relay output CONTROLLINO_R1 &#8211; ON\/OFF<\/p>\n<p>digitalWrite(CONTROLLINO_R2, ModbusSlaveRegisters[6]); \/\/ Update the relay output CONTROLLINO_R2 &#8211; ON\/OFF<\/p>\n<p>digitalWrite(CONTROLLINO_R3, ModbusSlaveRegisters[7]); \/\/ Update the relay output CONTROLLINO_R3 &#8211; ON\/OFF<\/p>\n<p>}<\/p>\n<p>Por \u00faltimo para poder compilar los c\u00f3digos es necesario a\u00f1adir el archivo <a href=\"https:\/\/www.controllino.com\/wp-content\/uploads\/2017\/07\/ModbusRtu.zip\">\u201cModbusRtu.h\u201d<\/a> usando la direcci\u00f3n Sketck -&gt;Add File\u2026, el mismo tambi\u00e9n lo puede obtener de la librer\u00eda de Controllino.<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><strong>En Logicbus contamos con informaci\u00f3n amplia para lograr expandir las aplicaciones en las que puede usar sus PLCs de Controllino. Esperamos con mucho gusto sus dudas y agradecemos su atenci\u00f3n.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: center;\">Cont\u00e1ctanos<\/h3>\n<h3 style=\"text-align: center;\"><a href=\"https:\/\/tienda.logicbus.com.mx\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"card-review alignnone\" title=\"Tienda en linea\" src=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2022\/11\/tienda.png \" alt=\"\" width=\"102\" height=\"102\" \/><\/a><a href=\"https:\/\/www.logicbus.com.mx\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"card-review alignnone\" title=\"Logicbus\" src=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2022\/11\/www.png \" alt=\"\" width=\"104\" height=\"104\" \/><\/a><a href=\"https:\/\/www.logicbus.com.mx\/soporte\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"card-review alignnone\" title=\"Soporte\" src=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2022\/11\/soporte.png \" alt=\"\" width=\"106\" height=\"106\" \/><\/a><a href=\"https:\/\/api.whatsapp.com\/send?phone=525554316718&amp;text=Hola%20Logicbus,me%20gustar%C3%ADa%20solicitar%20informaci%C3%B3n\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"card-review alignnone\" title=\"Whatsapp\" src=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2022\/11\/wa.png \" alt=\"\" width=\"103\" height=\"103\" \/><\/a><a href=\"https:\/\/www.logicbus.com.mx\/contacto\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"card-review alignnone\" title=\"Contacto\" src=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2022\/11\/contacto.png \" alt=\"\" width=\"115\" height=\"115\" \/><\/a><a href=\"https:\/\/www.logicbus.com.mx\/soluciones-en-la-industria-logicbus.php\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"card-review alignnone\" title=\"Soluciones\" src=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2022\/11\/soluciones.png \" alt=\"\" width=\"106\" height=\"106\" \/><\/a><\/h3>\n<p style=\"text-align: center;\"><a href=\"mailto:ventas@logicbus.com\">ventas@logicbus.com<\/a>\u00a0 \u00a0 \u00a0 |\u00a0 \u00a0 \u00a0\u00a0<a href=\"mailto:soporte@logicbus.com\">soporte@logicbus.com<\/a>\u00a0 \u00a0 \u00a0 |\u00a0 \u00a0 \u00a0\u00a0<a href=\"https:\/\/api.whatsapp.com\/send?phone=525554316718&amp;text=Hola%20Logicbus,me%20gustar%C3%ADa%20solicitar%20informaci%C3%B3n\">55-5431-67-18<\/a>\u00a0 \u00a0 |\u00a0 \u00a0 \u00a0\u00a0 <a href=\"https:\/\/tawk.to\/chat\/5ca674ff1de11b6e3b06f73d\/default\">Iniciar conversaci\u00f3n<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nuestros PLCs de Controllino en sus modelos MAXI y MEGA tiene la caracter\u00edstica de poder comunicarse usando el protocolo ModbusRTU a trav\u00e9s del puerto RS485 (interfaz SN65HVD08) integrado en ellos, la cual cuenta con distintos seriales para la transmisi\u00f3n de datos como digital, conexi\u00f3n en l\u00ednea o diferencial. Al conectarse a las terminales atornillables las [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":43920,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71,5848],"tags":[],"class_list":["post-43915","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articulos","category-automatizacion-y-control-de-procesos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Uso de protocolo de comunicaci\u00f3n ModbusRTU mediante puerto RS485 con PLC Controllino<\/title>\n<meta name=\"description\" content=\"Nuestros PLCs de Controllino en sus modelos MAXI y MEGA tiene la caracter\u00edstica de poder comunicarse usando el protocolo ModbusRTU a trav\u00e9s del...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Uso de protocolo de comunicaci\u00f3n ModbusRTU mediante puerto RS485 con PLC Controllino\" \/>\n<meta property=\"og:description\" content=\"Nuestros PLCs de Controllino en sus modelos MAXI y MEGA tiene la caracter\u00edstica de poder comunicarse usando el protocolo ModbusRTU a trav\u00e9s del...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Logicbus\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/logicbus\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-27T23:34:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-03T17:13:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/Uso-de-protocolo-de-comunicacion-ModbusRTU-mediante-puerto-RS485-con-PLC-Controllino-1024x512.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Logicbus\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Logicbus\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutos\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Uso de protocolo de comunicaci\u00f3n ModbusRTU mediante puerto RS485 con PLC Controllino","description":"Nuestros PLCs de Controllino en sus modelos MAXI y MEGA tiene la caracter\u00edstica de poder comunicarse usando el protocolo ModbusRTU a trav\u00e9s del...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/","og_locale":"es_MX","og_type":"article","og_title":"Uso de protocolo de comunicaci\u00f3n ModbusRTU mediante puerto RS485 con PLC Controllino","og_description":"Nuestros PLCs de Controllino en sus modelos MAXI y MEGA tiene la caracter\u00edstica de poder comunicarse usando el protocolo ModbusRTU a trav\u00e9s del...","og_url":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/","og_site_name":"Blog Logicbus","article_publisher":"https:\/\/www.facebook.com\/logicbus\/","article_published_time":"2024-08-27T23:34:56+00:00","article_modified_time":"2026-02-03T17:13:10+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/Uso-de-protocolo-de-comunicacion-ModbusRTU-mediante-puerto-RS485-con-PLC-Controllino-1024x512.png","type":"image\/png"}],"author":"Logicbus","twitter_misc":{"Escrito por":"Logicbus","Tiempo de lectura":"14 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/#article","isPartOf":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/"},"author":{"name":"Logicbus","@id":"https:\/\/www.logicbus.com.mx\/blog\/#\/schema\/person\/42451dd47a6fc9e56bb0386ab20bffd5"},"headline":"Uso de protocolo de comunicaci\u00f3n ModbusRTU mediante puerto RS485 con PLC Controllino","datePublished":"2024-08-27T23:34:56+00:00","dateModified":"2026-02-03T17:13:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/"},"wordCount":2435,"publisher":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/#organization"},"image":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/Uso-de-protocolo-de-comunicacion-ModbusRTU-mediante-puerto-RS485-con-PLC-Controllino.png","articleSection":["Articulos","Automatizaci\u00f3n y control de procesos"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/","url":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/","name":"Uso de protocolo de comunicaci\u00f3n ModbusRTU mediante puerto RS485 con PLC Controllino","isPartOf":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/#primaryimage"},"image":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/Uso-de-protocolo-de-comunicacion-ModbusRTU-mediante-puerto-RS485-con-PLC-Controllino.png","datePublished":"2024-08-27T23:34:56+00:00","dateModified":"2026-02-03T17:13:10+00:00","description":"Nuestros PLCs de Controllino en sus modelos MAXI y MEGA tiene la caracter\u00edstica de poder comunicarse usando el protocolo ModbusRTU a trav\u00e9s del...","breadcrumb":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/#primaryimage","url":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/Uso-de-protocolo-de-comunicacion-ModbusRTU-mediante-puerto-RS485-con-PLC-Controllino.png","contentUrl":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2024\/08\/Uso-de-protocolo-de-comunicacion-ModbusRTU-mediante-puerto-RS485-con-PLC-Controllino.png","width":3024,"height":1512},{"@type":"BreadcrumbList","@id":"https:\/\/www.logicbus.com.mx\/blog\/uso-de-protocolo-de-comunicacion-modbusrtu-mediante-puerto-rs485-con-plc-controllino\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https:\/\/www.logicbus.com.mx\/blog\/"},{"@type":"ListItem","position":2,"name":"Uso de protocolo de comunicaci\u00f3n ModbusRTU mediante puerto RS485 con PLC Controllino"}]},{"@type":"WebSite","@id":"https:\/\/www.logicbus.com.mx\/blog\/#website","url":"https:\/\/www.logicbus.com.mx\/blog\/","name":"Blog Logicbus","description":"Logicbus Blog ofrece informaci\u00f3n detallada sobre el control de procesos, sus tipos, elementos e importancia.","publisher":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.logicbus.com.mx\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.logicbus.com.mx\/blog\/#organization","name":"Logicbus Blog","url":"https:\/\/www.logicbus.com.mx\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.logicbus.com.mx\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2021\/03\/logo-logicbus-blog.png","contentUrl":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2021\/03\/logo-logicbus-blog.png","width":1761,"height":546,"caption":"Logicbus Blog"},"image":{"@id":"https:\/\/www.logicbus.com.mx\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/logicbus\/","https:\/\/x.com\/Logicbus"]},{"@type":"Person","@id":"https:\/\/www.logicbus.com.mx\/blog\/#\/schema\/person\/42451dd47a6fc9e56bb0386ab20bffd5","name":"Logicbus","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2021\/03\/JosueCetina-96x96.png","url":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2021\/03\/JosueCetina-96x96.png","contentUrl":"https:\/\/www.logicbus.com.mx\/blog\/wp-content\/uploads\/2021\/03\/JosueCetina-96x96.png","caption":"Logicbus"},"sameAs":["https:\/\/www.logicbus.com.mx\/blog","it@logicbus.com"],"url":"https:\/\/www.logicbus.com.mx\/blog\/author\/itlogicbus-com\/"}]}},"_links":{"self":[{"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/posts\/43915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=43915"}],"version-history":[{"count":0,"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/posts\/43915\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/media\/43920"}],"wp:attachment":[{"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=43915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=43915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.logicbus.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=43915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}