¿Buscas alguna otra cosa?
Table of Contents
Detalles del escenario
Los router Titan disponen de todas las funcionalidades típicas de un router 2G/3G/4G pero además cuentan con una serie de prestaciones adicionales que lo convierten en uno de los routers con más prestaciones del mercado.
Una de las prestaciones adicionales es la capacidad de interrogar de forma autónoma a dispositivos Modbus RTU o TCP, con el posterior envío de los datos a un servidor WEB, FTP o MQTT.
Como siempre, se ilustrará esta capacidad con un ejemplo sencillo.
Descripción del ejemplo
En este ejemplo se va a configurar un router Titan para recoger, almacenar y enviar por MQTT los registros Modbus de dos PLCs. Dichas lecturas se realizarán cada 10 minutos.
Del PLC1 deben leerse los registros Modbus:
1;10;11;12;55;56;69;70;72;73;74;75;76;77;78;79;80;100;101;102;103;104;105;106;107;108;109;120;121;122;123;124;130;131;132;133;152;153;154;160;161;162;163;164;165;166;170
Del PLC2 deben leerse los registros:
10;11;12;13;14
Es decir, del PLC1 se necesitan obtener un mapa de registros variado, no siempre registros consecutivos. El PLC2 es más sencillo y únicamente necesitamos 5 registros consecutivos
Los PLCs son dispositivos RS485, por lo que se utilizará Modbus RTU, pero el escenario podría ser perféctamente válido para equipos Modbus TCP (con Ethernet) o una mezcla de ambos (modbus TCP y Modbus RTU).
Configuración del puerto donde se conectan los modbus
Imaginemos que los PLCs, que disponen de puerto RS485, tienen una configuración de puerto serie: 9600,8,N,1 Pues la primera tarea a realizar es configurar el puerto serie COM1 del router TITAN, pues este puerto puede configurarse como puerto RS232 o puerto RS485. Configuraremos el puerto COM1 tal y como se muestra en la siguiente figura.
No debemos olvidar que para activar el BUS RS485 del MTX-Router-Titan-3G-mini deben activarse los microswitches que se indican en el manual de usuario. (nº 3 y 4 a “on” para RS485).
Configuración del Titan para la lectura de dispositivos modbus
Hacemos click en el link: “External Devices > Modbus Devices” y lo configuramos la pantalla como se muestra a continuación:
Es decir, del PLC 2 queremos leer los registros 10,11,12,13,14. Pues simplemente es necesario indicar en el campo “Start” el registro 10 y en el “Number Words” 5 (pues queremos leer 5 registros, del 10 al 14). El PLC1 es más complejo, ya que disponemos de un mapa de registro no consecutivo. Por ello, los diferentes bloques de registros a leer los pondemos separados por “;” (punto y coma). Es decir, si queremos leer los registros:
1;10;11;12;55;56;69;70;72;73;74;75;76;77;78;79;80;100;101;102;103;104;105;106;107;108;109;120;121;122;123;124;130;131;132;133;152;153;154;160;161;162;163;164;165;166;170
Tendremos que poner en el campo Start (el registro inicial de cada bloque)
1;10;55;69;72;100;120;130;152;160;170
Y en el campo “Number Words” (el nº de registros a leer de cada bloque)
1;3;2;2;9;10;5;4;3;7;1
Configuración del logger (comunicación con servidor MQTT)
El siguiente paso es configurar el Logger, esto es, el sistema de almacenamiento y envío de datos realizado por el propio router Titan.
En este ejemplo vamos a configurar el router para enviar los datos a un broker MQTT. Como broker MQTT utilizaremos el broker de test Mosquitto ubicado en test.mosquito.org Ahí se enviarán los datos en formato JSON de cada lectura realizada (timestamp, ID equipo, …). Para hacerlo totalmente seguro, utilizaremos comunicaciones SSL, con necesidad de utilizar certificado de Servidor y certificado de Cliente.
Tal y como se ve en la siguiente figura, accederemos a través del menú “External Devices > Logger Configuration” y configuraremos dicha sección como se muestra a continuación:
En esta pantalla hemos activado el modo MQTT. Todos los datos recogidos por el router Titan serán publicados en el topic [IMEI]/logger. Nótese que el router substituirá el tag [IMEI] por su IMEI real. Es decir, si el IMEI del router es 357299070082380 (el IMEI puede verse en el menú WAN > Status) el topic usado por el router Titan para publicar los datos modbus recogidos será: 357299070082380/logger.
Por otro lado, si activamos el modo del logger, deberemos configurar el cliente MQTT en la sección Other > Mqtt.
Activaremos el campo Enabled. En el campo MQTT Broker pondremos: ssl://test.mosquitto.org:8884 , indicando la url del broker MQTTS al que queremos conectarnos. En MQTT ID pondremos un identificador único para nuestro dispositivo (si conectamos 2 equipos con el mismo ID, se irán desconectando continuamente, ya que un broker no puede tener 2 dispositivos con el mismo ID. Si queremos poder enviar comandos AT al router Titan (por ejemplo para configurarlo o ver el estado desde un teléfono móvil que también esté conectado al broker MQTT) complementaremos los campos MQTT AT Topic y MQTT AT Response Topic.
Todos los comandos AT enviados al broker al topic MQTT AT Topic serán ejecutados por el router Titan. Una vez ejecutado, el resultado del comando AT será publicado por el router Titan en el topic MQTT AT Response Topic.
Seguidamente configuraremos la sección de certificados. Para ello es útil seguir las instrucciones indicadas en: http://test.mosquitto.org/
Lo primero que haremos es bajarnos el certificado mosquitto.org.crt (PEM format) que puede encontrarse en la página anterior.
Lo segundo es ejecutar las sentencias que se encuentran en este enlace: http://test.mosquitto.org/ssl/ para lo cual deberemos tener instalado openssl en nuestro PC. Es decir, ejecutaremos:
openssl genrsa -out client.key
openssl req -out client.csr -key client.key –new
Tras lo cual tenemos los ficheros client.key y client.csr
Una vez tenemos ambos archivos, ponemos el contenido del fichero client.csr en la caja de texto y pulsamos el botón submit. De esa forma obtendremos el fichero con el certificado necesario client.crt
Ya con los 3 ficheros, mosquitto.org.crt, client.key y client.crt los insertamos en el router Titan
Consideraciones
Tras la configuración del router Titan es necesario realizar un reset para coger la nueva configuración y empiecen las lecturas y envíos
Cada vez que el router Titan envía una medida al broker MQTT lo hace mediante un objeto JSON del siguiente tipo
Ejemplo JSON PLC2:
{TYPE:MODB,ID:2,TS:17/06/2017 17:01:05,IMEI:357044060009633, P:12345678,A:2,ST:10,N:5,V:[10,11,12,0,0]}
Ejemplo JSON PLC1:
{TYPE:MODB,ID:1,TS:17/06/2017 17:01:04,IMEI:357044060009633,P:12345678,A:1,STX: [1,10,55,69,72,100,120,130,152,160,170],NX:[1,3,2,2,9,10,5,4,3,7,1], PX:[0,1,4,6,8,1 7,27,32,36,39,46], V:[1,10,11,12,55,56,69,70,72,73,74,75,76,77,78,79,80,100,101,10 2,103,104,105,106,107,108,109,120,121,122,123,124,130,131,132,133,152,153,154, 160,161,162,163,164,165,166,170]}
Donde:
TYPE: indica el tipo de dato (MODB = lectura modbus)
TS: indica que Timestamp (es decir, la hora de lectura de la medida)
IMEI: indica un identificador único para el módem,
P: en caso de HTTP indicaría el campo ID configurado
ST: indica la dirección del primero registro modbus leído
STX: array que indica la dirección de los primeros registros modbus en caso de leer grupos de registros
N: indica el número de words leídos
NX: array que indica el número de words leídos en caso de leer grupos de registros
PX: array que indica la posición del registro inicial de cada bloque dentro de V.
V: array con los datos leídos
Nótese que hay una diferencia significativa entre los datos enviados por PLC1 y PLC2. PLC1 dispone de grupos, por tanto el campo ST y N se substityen en el JSON por STX y NX , arrays donde están almacenados los registros iniciales y número de registtos de cada bloque. También aparece el registro PX que indica la posición inicial del grupo dentro del array V (realmente PX no es necesario, puesto que se puede calcular, pero se incluye para facilitar la operación de decodificación en el servidor.
Comunicación con el router via comandos AT enviados por MQTT
Como se comentó anteriormente, es posible enviar al router Titan comandos AT vía MQTT. Con ello podemos cambiar una configuración del router, comprobar estados como la cobertura, resetearlo, conmutar un relé, etc.
Por ejemplo, si queremos consultar la cobertura, podemos usar el programa myMQTT de Android, enviando el comando AT+CSQ al topic [IMEI]/AT, que en el caso de este ejemplo es 357299070082380/AT.
Una vez pulsado el botón “Publish”, el comando será recibido por el router Titan y ejecutado. La respuesta será publicada por el router Titan en el topic 357299070082380/ATR, tal y como configuramos anteriormente.