Introducción #
Vamos a realizar medidas eléctricas en corriente alterna con el dispositivo PZEM-004T, del que hablamos en esta entrada y las vamos a pasar por Modbus TCP/IP a un LOGO de Siemens.
Tras esto, vamos a ver cómo visualizar simultáneamente esos valores en internet, incluso el estado de ciertas salidas de LOGO, que dependerán a su vez de parámetros como el factor de potencia.
El esquema de conexión junto con el resto de detalles sobre el sensor, se pueden encontrar en el enlace al artículo antes mencionado.
Además, puedes revisar el artículo en el que explicamos cómo conectar LOGO con un Esp32 mediante Modbus TCP/IP:
- https://didactronica.microlsb.es/docs/mosbus-tcp-ip-desde-cero-con-logo-y-esp32
- https://didactronica.microlsb.es/docs/logo-de-siemens-con-esp32-por-modbus-y-wifi
Envío de magnitudes eléctricas a LOGO desde un Esp32 y el medidor Pzem-004T mediante Modbus TCP/IP #
Se va a enviar en este ejemplo, las medidas de tensión, intensidad y factor de potencia a LOGO, donde se activará una salida (Q1) en función del valor del fdp, y se mostrará en la pantalla dicho valor de fdp, junto con un texto informativo y el estado de activación de la salida mencionada.
Se va a almacenar de la siguiente forma:
- Tensión: VW0 y canal 1, es decir, dirección 40001, ya que es un Holding Register con función de lectura 03.
- Intensidad: VW2 y canal 2, es decir, dirección 40002, ya que es un Holding Register con función de lectura 03.
- Factor de potencia: VW4 y canal 3, es decir, dirección 40003, ya que es un Holding Register con función de lectura 03.
Programa en LOGO:
La tensión y la intensidad se van a llevar a dos variables analógicas (AM1 y AM2), solo como ejemplo. Sin embargo, el factor de potencia se va a pasar a través del bloque «Comparador analógico». De tal forma que si el valor analógico es de cero, se activa una salida, y si es superior a 7, se apaga dicha salida. Aquí hay que tener en cuenta dos cuestiones:
- Dado que por Modbus no podemos pasar valores con decimal (coma flotante), el valor del fdp viene dado en tanto por ciento.
- Es un ejemplo con poco uso real, solo para trabajar con valores analógicos de forma sencilla, pero se puede usar en el futuro para activar una compensación por reactiva.
- El bloque de gestión de datos en pantalla obliga a utilizar su salida, pese a que puede no ser necesaria. Es por esto que se ha puesto en serie con la del comparador para activar la Q1 cuando sea necesario, pero no tiene un uso real.
Configuración del comparador analógico:
Texto de aviso:
Programa en Esp32:
Como decíamos antes, no podemos enviar valores con decimales, por lo que multiplicamos la intensidad por 1000 y la enviamos en mA, y el fdp por 100 y lo enviamos en tanto por ciento:
Envío de magnitudes eléctricas a LOGO por Modbus y a Internet por Wifi, desde un Esp32 y el medidor Pzem-004T #
La configuración de canales añade un canal tipo Coil en la primera dirección de memoria libre, la 6.0:
Programa en LOGO:
Programa en Esp32:
Conexión Modbus y con el servidor MQTT. Dado que en la conexión Modbus se conecta al Wifi, no hace falta repetirla la conexión al wifi con el bloque general de conexión utilizado en MQTT habitualmente, basta con añadir la conexión al servidor MQTT, en este ejemplo, io.adafruit.com.
Envío de los datos leídos a LOGO por Modbus TCP/IP, con el offset 0, 1 y 2, es decir, los canales 40001, 40002 y 40003:
Y finalmente, enviamos de forma secuencial cada tres segundos, la intensidad y el fdp. Además, solo cuando el estado de la salida Q1 de LOGO cambie, enviamos este cambio al servidor. Este estado de Q1 que enviamos por internet lo leemos por Modbus a través del canal con offset 0 de la función 1, es decir, el canal 1:
Otra opción mas profesional cuando hay que usar una misma lectura de un sensor en distintos sitios, es la realizar la lectura una vez y almacenarla en una variable, y a partir de ahí, usar la variable todo el tiempo:
Creamos dos variables tipo float, es decir, que pueden almacenar decimales.
Ponemos la lectura cada 500 ms, por ejemplo, para no saturar el sensor:
Y ahora ya, en lugar de usar el sensor, utilizamos las variables, tanto en la parte de Modbus, como en la de MQTT: