¿Buscas alguna otra cosa?

Tunnel – Escribiendo en Dispositivos Modbus RTU en función de las entradas digitales y analógicas del módem.

Detalles del escenario:

  • Se necesita monitorizar 2 sensores. Un sensor analógico de 0-10V y otro digital de contacto seco
  • El módem dispone de 2 PLCs con soporte Modbus RTU conectados su puerto RS485. Uno cuenta con la dirección Modbus RTU @1 y otro con la dirección Modbus RTU @2
  • Cuando cambie el estado del sensor de contacto seco, el cual está conectado a una entrada digital del módem, el módem debe escribir un valor “1” en el registro 10 del PLC@1 y del PLC@2 en caso de que se active la entrada y un “0” en caso de que se desactive la entrada
  • Cuando el sensor analógico tenga un valor >= 5000mV, el módem escribirá en el registro 20 del PLC@1 y del PLC@2 un valor “2”. En caso de que la entrada analógica sea <= 1000mV escribirá un “0” en ambos registros y en caso contrario (entre 1000mV y 5000mV) escribirá un “1” en los registros Modbus de ambos PLCs
  • En cada evento digital debe enviarse al bróker MQTT el valor de la entrada digital y analógica

Solución: MTX-Tunnel firmware + MTX-IoT-S [4-N]

Archivo de configuración config.txt:

Configuración Observaciones
GPRS_apn: movistar.es
GPRS_login: MOVISTAR
GPRS_password: MOVISTAR
GPRS_timeout: 0
MTX_pin: 0000
MTX_model: 199802407
MTX_ping: 30
MTX_pingIP: 8.8.8.8
MTX_numGSMErrors: 180
MTX_TPProtocol: ntp
MTX_TPServer: ntp.roa.es
MTX_TPServer2: es.pool.ntp.org
MTX_TPFormat: unix
SMS_allPhones: on
SMS_sendIP: on
SMS_ATEnabled: on
SMS_allPhones: on
MQTT_enabled: on
MQTT_server: tcp://broker.mqttdashboard.com:1883
MQTT_id: [IMEI]
MQTT_login:
MQTT_password:
MQTT_attopic1: [IMEI]/AT
MQTT_atrtopic: [IMEI]/ATR
MQTT_qos: 1
MQTT_keepalive: 60
GPIO_mode0: input
GPIO_config0: at;AT^MTXTUNNEL=EXECUTE,digitalon.txt;AT^MTXTUNNEL=EXECUTE, digitaloff.txt
ADC_mode0: voltage
ADC_config0: at;1000;5000;100;AT^ MTXTUNNEL=EXECUTE,analoglow.txt; AT^MTXTUNNEL=EXECUTE,analoghigh.txt;AT^MTXTUNNEL=EXECUTE, analognormal.txt 
GPRS APN provided by GSM operator
GPRS Login
GPRS Password
Modem is permanently connected to GPRS
PIN if it has one
Device model
Every 30 minutes PING check
Google IP (f.e.) to ping
Reset if no registry on GSM network in 1800 secs.
Time synch protocol
Time server
Time server backup
Unix time format
IP by SMS authorized
IP by SMS authorized
AT by SMS allowed
SMS AT responses activated
MQTT service
MQTT broker, format protocol://url:port
Device ID in broker
Username
Password
MTX topic to recieve AT commands
Topic where MTX sends responses to AT commands
QoS established
Keepalive
GPIO0 configured as an input
GPIO0 AT configuration
ADC0 as voltage input

Detalles

  • La configuración de la digital GPIO0 (donde está conectado en sensor de contador seco) como “at;AT^MTXTUNNEL=EXECUTE,digitalon.txt;AT^MTXTUNNEL=EXECUTE, digitaloff.txt” indica lo siguiente. Recuerde que todos los parámetros van separados entre ellos por punto y coma ;
    “at” > La entrada se configura para ejecutar un comando AT cada vez que cambia de estado
    “AT^MTXTUNNEL=EXECUTE,digitalon.txt” > El segundo parámetro indica el comando AT que se ejecutará cuando la entrada digital se active. En este caso se ejecuta el fichero script de comandos AT que se encuentra en /atscripts/digitalon.txt
    “AT^MTXTUNNEL=EXECUTE,digitaloff.txt” > El tercer parámetro indica el comando AT que se ejecutará cuando la entrada digital se desactive. En este caso se ejecuta el fichero script de comandos AT que se encuentra en /atscripts/digitaloff.txt
    El fichero “digitalon.txt” tendrá el siguiente contenido

    El fichero “digitaloff.txt” tendrá el siguiente contenido

    Las dos primeras líneas de este fichero escriben en el registro 10 de los PLCs con dirección @1 y dirección @2 un valor “1” en el primer caso (cuando la entrada se activa) y un “0” en el segundo caso (cuando la entrada se desactiva).
    La tercera línean en ambos ficheros ejecuta un comando AT que permite enviar un mensaje MQTT al bróker. NÓTESE que MTX-Tunnel substituye EN CUALQUIER COMANDO AT los tags [GPIOx], [ADCx] y [COUNTERx] por sus valores correspondientes. En este caso se envía un JSON con el valor de GPIO0 y ADC0 actual al bróker MQTT.
  • La configuración de la analógica ADC0(donde está conectado en sensor analógico 0-10V) como
    “at;1000;5000;100;AT^MTXTUNNEL=EXECUTE,analoglow.txt;AT^MTXTUNNEL=EXECUTE, analoghigh.txt;AT^MTXTUNNEL=EXECUTE,analognormal.txt” indica lo siguiente. Recuerde que todos los parámetros van separados entre ellos por punto y coma ; “at” > La entrada se configura para ejecutar un comando AT cuando se produzca una determinada condición
    “1000” > Valor mínimo a partir del cual se ejecutará el comando AT de valor mínimo alcanzado. En este caso 1000mV
    “5000” > Valor máximo a partir del cual se ejecutará el comando AT de valor máximo alcanzado. En este caso 5000mV
    “100” > Histéresis. 100mV
    “AT^MTXTUNNEL=EXECUTE,analoglow.txt” > comando AT que se ejecutará cuando la entrada analógica sea menor o igual a 1000mV. En este caso se ejecuta el fichero script de comandos AT que se encuentra en /atscripts/analoglow.txt
    “AT^MTXTUNNEL=EXECUTE,analoghigh.txt” > comando AT que se ejecutará cuando la entrada analógica sea superior o igual a 5000mV. En este caso se ejecuta el fichero script de comandos AT que se encuentra en /atscripts/analoghigh.txt
    “AT^MTXTUNNEL=EXECUTE,analognormal.txt” > comando AT que se ejecutará cuando la entrada analógica vuelva a un estado normal entre 1000V y 5000mV. En este caso se ejecuta el fichero script de comandos AT que se encuentra en /atscripts/analognormal.txt
    El fichero “analoglow.txt” tendrá el siguiente contenido

    El fichero “analoghigh.txt” tendrá el siguiente contenido

    El fichero “analognormal.txt” tendrá el siguiente contenido

    Estos ficheros escriben en el registro 20 de los PLCs con dirección @1 y dirección @2 un valor “2”, “0” ó “1” según el enunciado de este ejemplo.
  • NÓTESE que MTX-Tunnel substituye EN CUALQUIER COMANDO AT los tags [GPIOx], [ADCx] y [COUNTERx] por sus valores correspondientes. Por ejemplo, podría escribirse en los PLC @1 y @2 el valor actual del sensor conectado al ADC0. Para ello bastartía con substituir el valor a escribir con el tag [ADC0], como se muestra en el siguiente fichero: