es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo convertir una palabra de 1 palabra (2 bytes) a un número decimal en Node.js?

Estoy utilizando Node-RED para leer la entrada de un servidor Modbus, más específicamente el MOXA ioLogik E2262, y el manual del controlador dice que si se utiliza la “Función 4” de los comandos Modbus para leer una señal analógica, el tipo de datos devuelto será “1 palabra”.

Así que supongo que el nodo “Modbus Flex Getter” debería estar devolviendo “1 palabra” / “2 bytes”. Estoy tratando de leer un valor de temperatura, así que me gustaría que fuera un valor de tipo float. Sin embargo, al observar la respuesta de Modbus, obtengo “65535” y no puedo entender qué es esto.

¿Alguien puede ayudarme con esto?
Imagen de Modbus/TCP Address Mappings

Imagen de flujo de Node-RED

Imagen de descripción de la imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en el tipo de dato que se devuelve desde el servidor Modbus. Como menciona el manual, la Función 4 solo devuelve un tipo de dato “una palabra”, que generalmente es un valor entero de 16 bits. Para leer un valor flotante, es posible que deba usar una función Modbus diferente que pueda devolver un tipo de dato flotante.

    Alternativamente, puede intentar usar código JavaScript en Node-RED para convertir el valor entero de 16 bits recibido en un valor flotante. Puede hacer esto dividiendo el valor entero por 10 (suponiendo que la temperatura se devuelve como décimas de grado Celsius o Fahrenheit) y luego aplicando los factores de compensación o escala necesarios. Por ejemplo, si la lectura de temperatura está en grados Celsius con un factor de compensación de -40, puede usar el siguiente código JavaScript en un nodo de función:

    var temperatura = msg.payload / 10 - 40;
    msg.payload = temperatura;
    return msg;
    

    Este código dividirá el valor recibido por 10 y luego restará 40 para obtener el valor real de la temperatura en grados Celsius. Puede ajustar los factores de compensación y escala según sea necesario en función del sensor de temperatura específico que se esté utilizando.

Comments are closed.