Implementación de Modbus RTU en un dispositivo UART

Tengo un contador de partículas HPMA115S0 que tiene una interfaz de comunicación UART. Compré un módulo convertidor TTL UART a RS485 para que funcione con un PLC sobre el protocolo Modbus RTU.

Normalmente trabajo con dispositivos que tienen el estándar de comunicación serial RS485 pero esos dispositivos tienen toda la información que necesito para que funcionen sobre un protocolo de comunicación serial Modbus (PLC como maestro) como la identificación y la velocidad de transmisión y las direcciones de los registros que contener los datos a solicitar.

Sin embargo, con HPMA115S0 no sé cuál sería la ID, cuál es la dirección de registro del valor de medición, etc. Entonces, ¿puedo hacer que este dispositivo con comunicación UART funcione con el protocolo serial Modbus usando el convertidor UART a RS485?

Eliminado mi voto negativo. Gracias por limpiar las cosas :) He mirado las especificaciones de su módulo de ventilador. Aquí hay una aplicación divertida y una hoja de especificaciones para MODBUS. Tendrá que alternar entre las especificaciones UART y las especificaciones MODBUS.
KingDuken Gracias por su respuesta, ¿cómo puedo obtener la respuesta de las especificaciones de Modbus?
Por lo que puedo decir de las especificaciones de su dispositivo, utiliza un protocolo punto a punto UART personalizado. Por lo tanto, no podrá procesar solicitudes de Modbus (los marcos de Modbus tienen una estructura fija: ID de esclavo, FC, AddrHigh, AddrLow, etc.), independientemente del hardware que utilice. Por lo tanto, si realmente necesita conectar este dispositivo con Modbus maestro, deberá crear una puerta de enlace Custom-UART/RS485-ModbusRTU que manejará ambos protocolos.

Respuestas (1)

Su sensor no necesita Modbus en absoluto, en la hoja de datos puede ver que utiliza un protocolo simple que envía 32 bytes por cuadro.

Si tiene un PLC, debería poder recibir estos marcos con bastante facilidad. La mayoría de los PLC (al menos los que he visto) con un puerto RS485 pueden funcionar con Modbus o lo que se llama "modo de caracteres", lo que significa que el puerto del PLC funciona como un UART sin procesar, por así decirlo, y usted tiene que defina su propio protocolo en su software. Cuando use este protocolo sin formato, no necesitará ninguna dirección de dispositivo o número de registro ni nada por el estilo, simplemente abra su puerto con la configuración correcta y comience a escuchar y procesar cuadros y registrar valores.

Si no necesita un PLC, siempre puede usar cualquier tipo de computadora con un puerto serie o un adaptador serie USB (RS232 o RS485 si el sensor está lejos en el campo). Lo más fácil y económico que se me ocurre es una Raspberry Pi Zero junto al sensor con un script de Python para registrar valores cada 10 segundos o más y escribirlos en una base de datos. De esta forma, no necesitará el enlace RS485 y podrá conectarse al Pi para leer o descargar valores de muchas maneras diferentes. Incluso puede instalar algo como Domoticz ( http://www.domoticz.com/ ) para tener gráficos con tendencias o activar alarmas por correo electrónico o sms (tenga en cuenta que no creo que su sensor sea compatible con Domoticz fuera del box, pero con un protocolo tan simple, la interfaz debería ser pan comido).

¡Muchas posibilidades de verdad!

Gracias por su respuesta, la razón por la que quiero usar el rs485 es la distancia entre el sensor y el PLC y la cantidad de sensores, el protocolo UART no funcionará en una gran distancia y es un protocolo ptp. Compré un TTL para rs485 módulo convertidor, saqué RE y DE bajo y logré enviar solicitudes al sensor y responde, pero cuando cambio los pines RE y DE ALTO y el sensor está en modo de envío automático, no puedo recibir nada del sensor
de nada. Veo que ahora te enfrentas a otro problema. ¿Cómo estás haciendo tu conversión de TTL a RS485? Si tiene su propio chip (MAX485 o similar), tendrá que manejar la señal DE/~RE usted mismo de alguna manera. Si tiene un dispositivo listo para usar, debería poder conducir automáticamente esta señal por sí mismo. Si no, tal vez puedas hacerlo con un temporizador 555 como sugerí aquí stackoverflow.com/questions/45957314/…
Al leer su comentario nuevamente, tiendo a pensar que está cambiando la señal RE/~DE manualmente; si ese es el caso fíjate bien en la solución 555, es bastante fácil
Estoy usando este módulo rs485 hobbycomponents.com/wired-wireless/… sí, lo cambié manualmente para recibir del sensor porque el sensor está en modo de envío automático, envía datos automáticamente sin una solicitud, así que creo que debería hacerlo. ser capaz de recibir algo sin conducir los pines DE y RE?
¡Yo también tengo un par de esos! No veo en la especificación qué tan rápido intentará responder su sensor después de recibir una consulta, pero en general, esta vez es del orden de milisegundos, por lo que no creo que pueda cambiar el DE/ ~RE baja lo suficientemente rápido y, además, eso estaría bien solo para realizar pruebas, pero una vez que implemente su sensor en algún lugar, querrá que maneje el intercambio de datos automáticamente. Tal como lo veo, no importa que el sensor esté en envío automático, usted mismo debe cambiar la señal DE/~RE de alguna manera. Eche un vistazo al circuito 555.
O si eso es demasiado crudo para usted, tal vez eche un vistazo a estos: amazon.com/… electronicdesign.com/embedded-revolution/…
Y esta es de DSD, no tengo esta placa en particular pero la marca está bastante bien y la MAX13487 solucionaría tu problema: amazon.com/DSD-TECH-SH-U12-MAX13487-Raspberry/dp/B07B667STP/… maximintegrated .com/en/products/interface/transceivers/…
Ahora veo que entendí mal lo que querías decir. El envío automático significa que desea mantener el bus simplex en lugar del medio dúplex. Tus sensores estarán enviando continuamente y solo leerás desde el PLC o la computadora. Eso debería funcionar si mantienes DE y ~RE siempre altos; el sensor verá ecos de sus propios marcos de datos, pero eso no debería ser un problema. Me quedo con los comentarios de arriba por si quieres echarle un vistazo. Tenga en cuenta que con el medio dúplex podrá cambiar la configuración del sensor si lo necesita.
Gracias de nuevo, lo que no entiendo es por qué no recibo nada cuando el sensor está en modo de envío automático y DE y RE del módulo están en nivel alto, porque en la aplicación real solo quiero recibir del sensor, eso es todo. y el sensor está enviando datos continuamente, probé el sensor con max232 y logré obtener los datos en mi pc sin enviar ninguna solicitud porque el sensor está enviando continuamente,
Leyendo el manual veo que solo tienes que enviar HEX 68 01 40 57, te responderá con un ACK positivo o negativo y empezará a enviar datos inmediatamente. Si funciona en el lado TTL, también debería funcionar en el lado RS485 siempre que tenga alto en DE y ~RE (en realidad, ni siquiera creo que ~RE importe y lo que escribí anteriormente sobre los ecos está mal si sigue ~RE alto)
¿Tiene un alcance para verificar si la señal llega al lado RS485? O tal vez otro conversor para comprobar que el que estás usando no está mal
Ah, ahora veo algo más: tu sensor UART da 3.3V pero el transceptor que tienes es para señales de 5V, ahí podrías tener un problema. A veces logras tomar estas decisiones de 5V con 3.3V pero no es nada seguro y no es muy confiable. Vea aquí un truco rápido: electronics.stackexchange.com/questions/81580/…
Probé otro módulo y el problema sem, en la hoja de datos max485 min VIH = 2.0v, por lo que 3.3v debería funcionar bien. lo que no probé aún es un convertidor de nivel lógico, hice transistores npn de uno en dos pero no funcionó
Tienes razón sobre el VIH pero este 2V solo es válido si tu alimentación es de 5V. De todos modos, si intentaste con el cambio de nivel y aún no funciona, debe haber algo más. Aparte de comprobar con un alcance no puedo pensar en nada más. Te aviso si se me ocurre algo mas