¿Buscas alguna otra cosa?
Detalles del escenario:
- Disponemos de un PLC Modbus RTU. Este PLC dispone en su memoria interna de una serie de variables/registros (por ejemplo, una temperatura y 3 contadores, …) las cuales deben leerse y enviarse periódicamente a un servidor web
- Por ello el módem MTX debe interrogar periódicamente, cada minuto, por un puerto serie, al PLC para leer dichos registros. Los registros a leer son, para la temperatura el registro nº20, y los contadores están en los registros 21,22 y 23 respectivamente
- Por otro lado, el módem MTX debe conectarse a una plataforma MQTT y enviar los los registros modbus leídos
- El módem MTX también debe enviar a la plataforma MQTT información de su estado cada 15 minutos (información de su IP, cobertura, tecnología usada (2G/3G/4G), etc.)
- Por último, debe poderse enviar comandos AT al módem vía MQTT, para poder realizar operaciones de cambio de configuración, reset remoto, etc. Se desea también poder enviar los comandos AT desde un móvil vía MQTT
Solución: MTX-Tunnel firmware + MTX-Java-IoT/MTX-Java-T/MTX-Java-T2
Archivo de configuración config.txt:
Configuración | Observaciones |
COMM2_baudrate: 9600 COMM2_bitsperchar: 8 COMM2_autorts: off COMM2_autocts: off COMM2_stopbits: 1 COMM2_parity: none GPRS_apn: movistar.es GPRS_login: MOVISTAR GPRS_password: MOVISTAR GPRS_timeout: 0 MTX_PIN: 0000 MTX_mode: none MTX_model: 199801436 MTX_portAux: modbusmaster MTX_TPProtocol: ntp MTX_TPServer: ntp.roa.es MTX_TPServer2: es.pool.ntp.org MTX_ping: 35 MTX_pingIP: 8.8.8.8 MTX_rssiLevel: 10 SMS_allPhones: on SMS_sendIP: on SMS_ATEnabled: on SMS_ATResponse: on FIREWALL_enabled: off LOGGER_enabled: on LOGGER_registerSize: 300 LOGGER_numRegistersFlash: 1500 LOGGER_mode: mqtt LOGGER_mqttTopic: [IMEI]/logger MQTT_enabled: on MQTT_server: tcp://test.mosquitto.org:1883 MQTT_id: [IMEI] MQTT_login: MQTT_password: MQTT_attopic1: [IMEI]/AT MQTT_atrtopic: [IMEI]/ATR MQTT_qos: 1 MQTT_keepalive: 60 MQTT_persistent: off MODBUS_address: 1 MODBUS_start: 20 MODBUS_numwords: 4 MODBUS_readCommand: 3 MODBUS_period: 60 DNS_enabled: on DNS_mode: mqtt DNS_mqttTopic: [IMEI]/dns DNS_extended: on DNS_period: 30 |
Data rate of communication of serial port Number of bits CTS Hardware flow control deactivated RTS Hardware flow control deactivated 1 stop bit No parity APN GPRS provided by the GSM operator GPRS Login GPRS Password Modem is always GPRS connected SIM Card PIN No gateways Modem is configured as TCP server AUXILIAR COM port used as master modbus Time synch. protocol Time server (the MTX must sync the time) Backup time server Ping time to oversee connection Google IP (f.e.) to ping AWe activate the MTX-65i coverage led IP by SMS authorized SMS AT responses activated IP by SMS authorized AT by SMS allowed Firewall disabled Logger enabled Max. size of MTX internal registries Max. number of MTX internal registries MQTT sending mode Sending topic of internal datalogger data MQTT enabled Broker MQTT to be used Identification of the equipment in the broker No username No password MTX topic to receive AT commands Topic where MTX sends answers to commands QoS established 60 seconds keepalive No persistence Modbus address of the equipment to be read Address of the initial modbus registry to be read Number of registries to be read from the initial Reading command A reading is made every 60 seconds Status data sending activated MQTT sending mode Topic where status data will be sent to Sending extended data (I/O, ADCs, etc.) Every 30 seconds a sending will be made |
Detalles:
- El resumen de este ejemplo es el siguiente: el módem va leyendo periódicamente, cada 15 minutos una serie de registros ModBus del PLC y los va enviando mediante un objeto JSON a un bróker mqtt (utilizamos el gratuito test.mosquitto.org para esta prueba). El MTX enviará los datos del datalogger (donde almancena internamente los registros modbus leídos) al bróker MQTT, concretamente al topic [IMEI]/logger (El MTX substituirá el tag [IMEI] por su imei real). En caso de no poder enviar el registro (por no haber cobertura 2G/3G/4G en ese momento o estar el broker caído) almacena los datos en memoria para enviarlos posteriormente
- También es posible enviar comandos AT al módem vía MQTT desde un teléfono móvil. Para ello el módem MTX se subscribe al topic indicado en el parámetro MQTT_attopic1. Todos los comandos AT enviados desde un teléfono móvil u otro dispositivo a dicho topic, serán recibidos por el módem y ejecutados. La respuesta a dicho comando AT el módem la envía al bróker al topic configurado en el parámetro MQTT_atrtopic
- Recuerde que puede especificar 3 topics para recibir comandos AT: MQTT_attopic1, MQTT_attopic2, MQTT_attopic3. Por ejemplo, podría configurar MQTT_attopic1 para recibir comandos AT exclusivamente ese módem. MQTT_attopic2 para que lo reciban un grupo de módems. Y MQTT_attopic3 para que lo reciban de forma simultánea todos los módems de su instalación
- El objeto JSON enviado al topic LOGGER_mqttTopic está codificado de la siguiente manera, a modo de ejemplo:
{“IMEI”:353234028103206,”P”:””,”TYPE”:”MODB”,”A”:1,”TS”:”20/08/12 08:31:44”,”ST”:20,”V1”:23,”V2”:275,”V3”:274,”V4”:32765}
Es decir, el servidor web recibe un objeto JSON con el IMEI (IMEI) del módem, la dirección modbus del equipo (A), el time stamp (TS) de cuando se han leído los datos modbus, la dirección inicial leída (ST) y V1,V2… con cada una de las variables leídas - Para probar este ejemplo, vamos a usar la aplicación MyMQTT que puede encontrar en
Google Play de Android https://play.google.com/store/apps/details?id=at.tripwire.mqtt.client. Una vez instalada en su teléfono móvil, pulse en el botón “Settings”, como puede ven indicada en la siguiente pantalla.
En la sección settings introduzca la dirección del bróker MQTT a utilizar. Obviamente tenemos que utilizar el mismo bróker que tenemos configurado en el módem MTX, que en este caso es test.mosquitto.org en el puerto 1883. No indicamos ni user ni password, ya que como comentamos anteriormente, test.mosquitto.org no los admite. Lo hacemos como se indica en la siguiente figura, y pulsamos en el botón “Save”.
Nos subscribirnos a 3 topics. Tenemos puesto que envíe los datos al topic [IMEI]/logger, en la aplicación del móvil nos subscribiremos a dicho topic, aunque indicando en este caso el IMEI del módem de forma numérica. Puede encontrar el IMEI de su módem MTX en la etiqueda inferior de la caja. Exactamente los mismo para los datos de estado, que el módem enviará al topic [IMEI]/dns. El módem también envía las respuestas a comandos AT al topic [IMEI]/ATR, por lo que, como queremos ver las respuetas a los comandos AT que enviemos desde el teléfono móvil al módem, introduciremos dicho topic. Al final, tenemos 3 topicsl, como puede verse en la siguiente figura:
Una ver realizados estos pasos, si alimentamos el módem MTX, empezaremos a recibir los datos modbus y DNS enviados por el módem. El DNS cada 30 segundos, los modbus cada 2 minutos, tal y como tenemos configurado:
Ahora, por último, vamos a enviar un comando AT al módem vía MQTT desde el teléfono móvil. En este caso vamos a enviar un comando AT para conocer la cobertura GSM, pero podríamos enviar cualquier comando AT (para realizar un reset, para leer la configuración, para cambiarla, para activar un relé, etc). Para ello vamos al menú “Publish” e introducimos el comando tal y como se muestra en la siguiente figura:
Una vez pulsado el botón “publish”, el comando se ejecutará en el módem. Al habernos
subscrito a las respuestas del mismo, podemos ver la respuesta también: