This a RU-vid channel to learn several electronic and electrical engineering areas such as (Analog electronics, circuitos, automatic control, digital electronics, programming), among others. Currently, I'm enginnering professor and this channel is a apece to share with you knoledge and experiences that I have acquired. Of course, your questions and suggestions are welcome.
buen video hermano justo tengo que hacer ese mismo con algunas modificaciones,podrias darnos el esquema de la conexión del motor ,contactores y los leds o las luces piloto porfa es urgente.
Hola, el enlace de las conexiones está aquí: drive.google.com/file/d/1ol7_t3aekTRyIvk7RofQV3fu2oBeJlMC/view?usp=sharing Puede ser que se necesite un guardamotor si el motor tiene una poencia superior a unos 3 HP. Pero se puede probar así. Saludos.
Buenos días como hacerle para leer 2 registros holding registers que no sean consecutivos, en el ejemplo el ESP32 esta en modo Cliente y el PLC en modo servidor, como se le puede hacer para leer 2 registros por ejemplo el registro 832 y el registro 858 estando el ESP32 como cliente y otro dispositivo como server.
Buenas noches, cambie el valor de la variable REG a 832. Declare otra variable REG1 por ejemplo en el valor de 858. Haga la lectura con mb.readHreg(remote, REG, &res), mb.readHReg(remote, REG1, &res1). PD: No olvide declarar res1. Saludos.
@@rubenolivaramos657 tocaría leer todo el bloque completo dese la dirección final a la inicial, tal vez cambiando la variable res por un vector del tamaño del bloque completo. Entonces el bloque del PLC también habría que cambiarlo para leer todos estos registros de una vez. En la página de la librería Modbus del esp está la definición del método readHreg, ud puede leer varios registros al tiempo
@@taloselectronico Eso que me comenta en donde lo puedo ver lo referente a cambiar el bloque en la lectura desde la dirección inicial a la final, en donde puedo ver la defición del método de la función readHreg
Puede ubircarlo en el canal analogo de Arduino con relación a Tierra, para saber que va en esta parte. Revise el voltaje en ese punto antes de conectar a Arduino para saber que varie y que este en el rango (0-5V). También puede validar a la salida del amplificador de instrumentación.
Ingeniero: Tiene un email donde pueda escribirle, deseo una asesoria (Paga) personalizada, sobre MODBUS / RS485 y temas relacionados.... si es posible , un Saludo desde New York
Ingeniero: Tiene un email donde pueda escribirle, deseo una asesoria (Paga) personalizada, sobre MODBUS / RS485 y temas relacionados.... si es posible , un Saludo desde New York
Hola, disculpas por no responder antes. Podría conectar el modulo al ESP32 y desde allí hacer la letura. Luego esa lectura la coloca en el "holding register" que comparte con el PLC.
Buenos días. No, todo debe estar dentro de la misma red WiFi. Le tocaría subir la página web a un servidor y que su dispositivo WiFi tuviera una IP pública para acceder. Saludos.
Me refería a esas fotocélulas que llevan un espejo catadrioptico que se usan en las puertas automáticas de las naves de construcción en los polígonos para activarse al sentir un obstáculo y para el motor que suba o baje la puerta. Q llevan un cable azul y uno negro
ModuleNotFoundError: No module named 'modbus_protocol'. EasyModbus no ha sido tan "easy" para mi. He instalado la librería con "pip install EasyModbus" pero el error persiste, ya sea en el PC o en la Raspberry PI. Estoy haciendo ensayos con otra librería, pymodbus, con mejores resultados.
Buenas tardes, para hacer la inversión de giro de un motor reductora monofásica tengo un contactor tripolar y dos monopolares para las inversiones de giro, no pone relé térmico en el contactor principal en la parte de fuerza, para la seguridad como en los motores trifásicos? ¿por qué usted solo usa un par de contactores y no usa uno principal y dos secundarios que son los que giran? muchísimas gracias.
Hola buenas tardes. Si se puede hacer con un contactor principal y dos secundarios. Lo hice así porque el motor que tengo no es de un amperaje considerable y pude hacerlo de este modo. Entre mayor sea la corriente del motor y el tipo NEMA, se necesita este contactor principal (como en el caso que describe de la caja reductora). Los bracker que use con temomágneticos (sobre temperatura, sobre corriente) por eso no uso un relé térmico, ya está incorporado. Saludos.
@@taloselectronico usted se refierre con los bracker al magnetotérmico que protege de ambas cosas, no? y si le quisiera colocar al arduino además un sensor de proximidad (fotocélula o sensor fotoelectrico) que cuando detecte algo cerca haga parar el motor como medida de seguridad. para ello necesaria otro relé para la fotocelula de 12 v para conectarla a arduino o directa a protoboard? gracias.
@@user-yi5jh6kj5k Son dos partes diferentes, una es de control con el Arduino, otra de potencia con el motor. Para hacer la interfaz del Arduino con la parte de potencia se necesita el Relé necesariamente. Otra parte son los brakers que van a la parte de potencia que son los termomagneticos que van a la parte del motor como protección. En cuanto a la foto celda, puedes alimentarla a los 5v del Arduino con un divisor de tensión. El punto donde está la foto celda, se puede luego conectar a un canal análogo del Arduino para hacer la comparación, cuando esté oscuro o con luz.
@@taloselectronico un divisor de tensión es colocar unicamente dos resistencias en serie o es un aparato que se pone entre los dos voltajes' ? disculpa mi ignorancia pero no he entendido qué es y cómo colocarlo en la protoboard con la fotocelula de proximidad. Gracias por todo lo que se aprende en tu canal. un saludo.
@@user-yi5jh6kj5k colocas dos resistencias en serie, una de ellas es la fotocelda. Lo idea sería que midieras las resistencia de la fotocelda sin luz y con luz y a partir de estos valores colocaras la otra resistencia. La fotocelda es para detectar cambios en la luz ambiente (oscuro, claro) pero no es para proximidad. Si quieres usar un sensor de proximidad, puedes usar un PIR, ultrasonido u otro conectado al Arduino.
muchas gracias por el video, tengo una duda ya que en el minuto 33 cuando ya estamos configurando el modbus poll, me aparece un error, me dice que revise el puerto 502
@@ramirezmirosjoseantonio1819 Yo creo que el puerto puede estar ocupado por otra aplicación o tiene una restricción de firewall o similar. Yo creo que es más por esto. Lo otro es ue el Arduino debe inicar primero antes de que se haga la conexión con el software ModBus poll.
Hola, esta librería no es totalmente compatible con Raspberry Pi. Sin embargo, hay que instalar PySerial o revisar alguna restricción en la red donde esta las RPi y el PLC.
Hola Talos, algo que al principio no entendía y ahora creo entender, es que a diferencias del Modbus serial, acá no se asigna un Id de esclavo, es decir queda abierto a consultas desde cualquier RTU. ¿Habría forma de asignarlo como esclavo y que solo transmita cuando le pregunten específicamente a él?. Ah y gracias por el vídeo.
Hola, muchas gracias. Si, el ESP32 funciona como servidor, no como esclavo. En la página de la librería que usé en el video hay varios ejemplos que le pueden guiar cuando quiere que sea esclavo. Saludos desde Colombia.
cuando me regustro para instalarlo me aparece la siguiengte leyenda: alguna sugerencia? We cannot fulfill your request as your account has failed export compliance verification. If this verification is in error, please review the Export Compliance Information page
Hola, hay que validar la cuenta y la dirección que se esta usando. Si los problemas continuan hay que escribir un correo a soporte Xilinx, ellos reinician la cuenta. A mi me sucedió lo mismo.
Me funciona conectar el ESP 32 a el modbus poll pero no se conecta con mi plc, es un PLC LOGO! , pero la configuración de parámetros no se como es, o no se si mi código de Arduino este mal pero no lo creo por que se conecta a modbus poll, sabe algo sobre esto?
Hola Excelente vídeo, soy también de Colombia, me gustaría contactarte para una asesoría de un proyecto y saber que costo tiene la asesoría o el desarrollo del proyecto, quedo atento.
Bueno y como loe haces si lo que tu tienes es otro dispositivo modbus slave y lo que quieres es leer un holding register? tienes que confirar el arduino como master? o se puede asi como esta?
buenas noches, me gustó un montón su video, pero en mi caso quiero conectar un motor monofasico con una motoreductora para levantar un mastil de una barrera de garaje de casa, mi duda es la conexion de contactos del circuito de mando de arduino mega con el de fuerza, sabiendo que las salidas de arduino son de 5 v y el motor la entrada es 220, con lo cual la fuente de alimentacion a que voltaje seria ? gracias.
Buenas tardes, lo que esta haciendo el puente entre el Arduino y el motor es el relé. Hay que verificar que el relé soporte 220V y que la bobina del contactor (donde está el motor) funcione a este voltaje. En el video usé uno de 110V de activación con su bobina, hay que cambiarlo a uno de 220V.
Buenos días, pero el relé que uso en su video es el mismo que tengo en casa pero no estoy segura de que las especificaciones ponga que soporte 220V. En el mío pone voltios y amperios pero no 220. Puede hacer una foto para que pueda ver cómo lo pone en sus especificaciones de su relé. Gracias y un saludo.
@@yvankacaamano9263 en la parte de arriba del relé esta el voltaje, al lado del amperaje "10A"(cdnx.jumpseller.com/zamux-electronica/image/17636031/resize/540/600?1651668417). Normalmente la mayoría de relés trabajan hasta 250V en sus contactos (NO, NC), porque el accionamiento lo hace el arduino a 5V.
hola amigo, de casualidad sabe por que cuando envio el dato de arranque y parada o cargo el valor de la frecuencia se demora mas de 10 segundos en recibir la orden o cargar la frecuencia gracias
Buenos días, tal vez aumentando la velocidad de transferencia de datos del Modbus, podría ser una opción. Creo que en el vídeo está 9600 baudios, puede probar incrementandola.
Si el router me dice que esta conectado pero no me aparece la dirección ip en el monitor en serie , pero la MAC del dispositivo aparece vinculado, estoy conectando el ESP 32 con un WLAN 1100 (PHOENIX CONTAC) en el administrador web (del wlan) me dice que en los dispositivos conectados esta el ESP 32 y de da la MAC, pero en el Monitor en serie se queda mostrando solo puntos es decir que se queda en el while y no me muestra la ip address, que podría hacer ?, Lo conecto a el router de mi casa y pasa exactamente lo mismo.
Parece que el ESP32 no se conecta Alejandra. Hay que verificar la IP del router o si tal vez el router tiene un proxy que rechaza la conexión. También habría que reiniciar el ESP32 una vez se carga el código, habría que probar estas opciones.
@@taloselectronico Muchas gracias , para conectar el WLAN con un tablet o telefono debo de configurar la ip u que sea estática le pongo los datos y conecta, como puedo hacerlo en el ESP 32? Seria ponerle los datos de direccion ip propia, ip del wlan, "longitud de prefijo" dns 1 , dns 2, como puedo yo asignarle (programar) al esp 32 estos valores ?
@@AAlejandra_Saav te toca mirar los parametros de Wifi. Mira este ejemplo de Arduino para configurar el DNS (Debe funcionar para ESP32): www.arduino.cc/reference/en/libraries/wifi/wifi.setdns/
Buenas, llevo horas y días intentando hacer la comunicación y es imposible. Tengo la v17, he mirado todos los tutoriales de internet, he adaptado mi bloque, he probado de mil maneras y no consigo hacer la comunicación.
Puede ser la versión del TIA portal. La configuración del bloque TCP/IP cambia entre versiones. Yo hice todo con TIA portal V15. Lo otro es que el bloque del servidor requiere un tiempo de espera al inicio de todo el ciclo. Algunas veces esta inicialización puede fallar si el PLC inicia de una vez. También habria que comprobar que error lanza el bloque de comunicación.
Buenas noches. Cordial saludo. Gracias por compartir sus conocimientos. Le hago una colsulta. Que software recomienda para realizar diagramas P&ID, y si es posible que sea gratuito. Muchas gracias. Saludos.
Hola, muy buenos videos con el manejo de TCP/IP, Arduino y Python. Estuve viendo tus ejemplos y están geniales. Tengo una pregunta, en tus ejemplos conectas el cliente TCP/IP y el servidor al mismo router. Hay alguna forma de acceder a un servidor desde una conexión externa a través de internet? O los dispositivos cliente y servidor siempre tienen que estar conectados al mismo router? Gracias y saludos.
Disculpas Victor por responder tarde. Si la conexión de red es LAN. Ahí lo único sería tener una IP publica para el ESP32 (si lo va a usar) para hacer estas conexiones o si lo va ha hacer con un servidor tener Apache, NGinx, etc.
Hello, I want to assign the value of the holding register to the servo motor. For example, if I write the holding register data 90 and the servo motor rotates to 90 degrees, what should I do?😀
Hi, I think you need to modificate in the code the address of the holding register. You can use this example: github.com/emelianov/modbus-esp8266/blob/master/examples/TCP-ESP/client/client.ino Also, this is the library's documentation in the video: github.com/emelianov/modbus-esp8266/tree/master/examples/TCP-ESP#API Here, use writeHreg to write the angle value of your motor. Best regards.
@@taloselectronico Hello, thank you for your reply. My ESP32 serves as a modbus TCP server and I use modbus poll as the client. Now I can write holding register data normally. The problem is that no matter what value is written, the servo will not rotate. What if I want the initial value of the servo to be 90 degrees, the initial value of the register to be 90 degrees, and the servo to rotate to as many degrees as the register data is? Here is my ESP32 program, I'm not sure where the problem lies. #ifdef ESP8266 #include <ESP8266WiFi.h> #else //ESP32 #include <WiFi.h> #endif #include "ModbusIP_ESP8266.h" #include <ESP32Servo.h> // Modbus Registers Offsets const int TEST_HREG = 0; unsigned int sever0_data; Servo myservo; //ModbusIP object ModbusIP mb; void setup() { Serial.begin(115200); WiFi.begin("HOU", "1372610017"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); myservo.attach(2); mb.server(); mb.addHreg(TEST_HREG,0x00); } void loop() { //Call once inside loop() - all magic here mb.task(); sever0_data=mb.addHreg(TEST_HREG); myservo.write(sever0_data); delay(10); }
@@sillydog3647 Are you writing the angle value from the client to server? 1. If so, may you need to change sever0_data=mb.addHreg(TEST_HREG); to sever0_data=mb.readHreg(TEST_HREG); Also print the value that you are receiving, here: sever0_data=mb.readHreg(TEST_HREG); Serial.print(sever0_data); myservo.write(sever0_data); The addHreg only adds or allocates a holding register in the address (0x00) to your ESP32 memory but not read the value storaged in this register. To read the value Instead use readHreg. 2. Another problem could be due to the type of variable that you are using. Change sever0_data to int and print the value that you are receiving: sever0_data=mb.Hreg(TEST_HREG); Serial.print(sever0_data); myservo.write(sever0_data); I changed addHreg to Hreg. This is another option to read the register. Finally, for debugging purposes (print), change the delay, for example, to 100 ms.
@@taloselectronico Hello,I write the angle value from the client to server,I change my code to this,but it shows some error:no matching function for call to 'ModbusIP::readHreg(const int&)' sever0_data=mb.readHreg(TEST_HREG); And here is my code: #ifdef ESP8266 #include <ESP8266WiFi.h> #else //ESP32 #include <WiFi.h> #endif #include "ModbusIP_ESP8266.h" #include <ESP32Servo.h> const int TEST_HREG = 0; int sever0_data; Servo myservo; ModbusIP mb; void setup() { Serial.begin(115200); WiFi.begin("HOU", "1372610017"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); myservo.attach(15); mb.server(); mb.addHreg(TEST_HREG,0x00); } void loop() { mb.task(); sever0_data=mb.readHreg(TEST_HREG); Serial.println(sever0_data); myservo.write(sever0_data); delay(100); }