Introduccion
KELLER fabrica sensores de alta precisión con salida digital, que están conectados a software patentado para visualización y acumulación de lecturas. A menudo, el usuario necesita integrar sensores en sus propios sistemas de monitoreo y control. En este trabajo, utilizando el sensor de presión de alta precisión PR-33X como ejemplo, mostramos la conexión de los sensores KELLER al entorno integrado MATLAB, desarrollado originalmente para el análisis y síntesis de sistemas de control, que tiene herramientas poderosas para procesar y mostrar datos de señales.
Breve especificación del transmisor de presión KELLER PR 33X
Rango de presión estándar (VPI), bar 30
Precisión de medición de presión, total (10 ... 40 ° C) 0.025% de VPI
Salida RS 485
Velocidad de baudios 9600 o 115200 baudios
Tensión de alimentación (U) 8 ... 28 V
Vida útil 10 millones de ciclos 0 ... 100% VPI
El transmisor de presión también incluye un sensor de temperatura integrado.
Interfaz
Todos los productos KELLER con índice X tienen una interfaz digital (RS485 half duplex) que admite los protocolos MODBUS RTU y Keller Bus.
La conexión a una PC se realiza mediante un convertidor RS485-USB. Para una mejor compatibilidad, la compañía recomienda usar el convertidor Keller K-114.
Software
Para configurar y registrar las lecturas del sensor, se utiliza el software CCS30 gratuito, cuya interfaz se muestra en la Figura 1.
Figura 1. La acumulación y visualización de datos gráficos y tabulares por el programa CCS30 [3].Conexión a PC
El sensor de presión PR-33X se conecta a una PC mediante un convertidor de puerto serie USB a puerto RS-232/422/485 MOXA USB de acuerdo con el diagrama de la Figura 2.
Figura 2. Diagrama de conexión del transmisor de presión PR-33X a una PC y una fuente de alimentación de 12 V. Cuando se alimenta por debajo de 5,69 V (hasta 4,95 V), las lecturas del sensor aumentan. Cuando se alimenta por debajo de 4,95 V, los datos no se transmiten (el sensor no funciona).
Después de instalar el controlador y conectar el convertidor MOXA a la PC, el puerto COM aparece en la lista de administrador de dispositivos

y adaptador

. En la pestaña (Figura 3) del último dispositivo para nuestra versión, se selecciona la interfaz RS-485 con un esquema de conexión de dos hilos.
Figura 3. Configuración del convertidor MOXA a la interfaz RS-485 2W.Formatos de transmisión
El intercambio de datos entre la computadora (dispositivo de control) y el sensor (dispositivo esclavo) se lleva a cabo de acuerdo con los mensajes del protocolo Modbus que contienen los siguientes campos [2].

Primero, la computadora envía un mensaje de solicitud al sensor, luego el sensor en respuesta envía su propio mensaje con su propia suma de verificación cuando la acción solicitada es exitosa, o envía una función con el código 1 cuando ocurre un error (función no válida o dirección de datos, etc.).
La respuesta (respuesta) del sensor se emite solo después de recibir una solicitud del dispositivo de control.
El mensaje enviado al sensor contiene uno de los siguientes códigos de función.

Figura 4. Formato de los mensajes transmitidos y recibidos de acuerdo con el estándar Modbus RTU [1].Direcciones de registros de sensores usados PR-33X

Ejemplos de mensajes Modbus (lectura del sensor integrado de presión y temperatura) [2]

Convierta las lecturas del sensor al formato de coma flotante IEEE754
El procedimiento recomendado para convertir los cuatro bytes recibidos de las lecturas del sensor en un número de coma flotante se muestra en la Figura 5. El ejemplo utiliza los datos [2] que se muestran en la tabla anterior.
Figura 5. Reglas para convertir las lecturas del sensor de cuatro bytes en un número de coma flotante.Programa MATLAB para leer y visualizar sensores de presión y temperatura PR-33X
El programa de lectura y visualización del sensor PR-33X incluye un módulo principal y tres subrutinas. El convertidor funciona a 115200 baudios. Los datos de presión y temperatura se leen a pedido.
Los datos de entrada del programa son la dirección del puerto COM de su dispositivo (Com_Port = variable) y la dirección de su convertidor. Si solo hay un convertidor conectado, entonces, como regla, Device_Addr = 1.
La constante de bucle establece el número de lecturas (en el ejemplo, bucle = 1000;).
El módulo principal:
clear all;
Rutina de generación de solicitudes Modbus RTU
function RTU_request = RTU_code(Device_Addr,Function,Data_First_Address,Address_Range) % Device_Addr == Device Address 8 bit: 1..255 % Function == % 3 or 4 is read; 6 is write in one register; 16 - write in two registers, % Data_First_Address == Address of first register data (2 bytes) % Addrress_Range == Range of Addreses; % Data_First_Address_Bytes = [floor(Data_First_Address/256) rem(Data_First_Address,256)]; Address_Range_Bytes = [floor(Address_Range/256) rem(Address_Range,256)]; % Master's Tx data without Check sum Code = [Device_Addr Function Data_First_Address_Bytes Address_Range_Bytes]; Code_Char = dec2hex(Code); if size(Code_Char,2)==1 Code_Char(:,2)=Code_Char(:,1); Code_Char(:,1)='0'; end Code_Char_line = []; for I = 1:length(Code) Code_Char_line = [Code_Char_line Code_Char(I,1:2)]; end % Check sum calculation Check_Sum = crc_calculator(Code_Char_line); % Master's Tx data with Check sum RTU_request = [Code hex2dec(Check_Sum(1:2)) hex2dec(Check_Sum(3:4))]; % End of m file
Modbus RTU secuencia rutina de cálculo de suma de comprobación
function output_hex_string = crc_calculator (Input_hex); %Input_hex = 'F70302640008'; % <= 2 * 16 Char F = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; xor_constant = [1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1]; for i = 1 : length (Input_hex) / 2; A = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; if ~(i > length (Input_hex)/2) A_hex = Input_hex ((i-1)*2+1:i*2); % Two HEX bytes A_bin = dec2bin (hex2dec (A_hex)); length_A_bin = length (A_bin); for j = 0 : length_A_bin - 1 A (16 - j) = str2num(A_bin (length_A_bin - j)); end end F = xor (F,A); for ii = 1 : 8 if F(16) ==1 if xor_constant (1) == 0 F_shift (1) = 0; else F_shift (1) = 1; end for j = 2 : 16; if xor_constant (j) == F (j-1); F_shift (j) = 0; else F_shift (j) = 1; end end else F_shift = circshift(F',1)'; end F = F_shift; end end h = num2str(F); h = h(1:3:length(h)); output_hex_string = num2str([dec2hex(bin2dec(h(9:12))) dec2hex(bin2dec(h(13:16))) dec2hex(bin2dec(h(1:4))) dec2hex(bin2dec(h(5:8)))]); % End of m file
Subrutina para convertir cuatro bytes de las lecturas del sensor a un número de coma flotante
En la Figura 6 se muestran ejemplos de gráficos de presión y temperatura PR-33X leídos por el programa anterior.
Figura 6. La salida del convertidor PR-33X recibido por el programa desarrollado en MATLAB. El programa lee 1000 lecturas de presión a 115200 baudios en 9 segundos. El programa lee 1000 lecturas de presión y 1000 lecturas de temperatura (por separado) a 115200 baudios en 17 segundos.Programa MATLAB que cambia la velocidad de transferencia de datos del convertidor
Para cambiar a una nueva frecuencia, es necesario en el programa configurar la dirección del puerto COM de su dispositivo (Com_Port = variable) y la frecuencia requerida del convertidor (BR_Rate = 9600; o BR_Rate = 115200;)
ATENCION Para cambiar a una nueva frecuencia de transmisión de datos después de configurar el bit cero del registro del convertidor UART, es necesario APAGAR (desenergizar) y luego encender el convertidor nuevamente.
Lista bibliográfica
- Dr. Bob Davidov. Comunicación con dispositivos de red industrial. portalnp.ru/wp-content/uploads/2013/08/12.02_Discrete-IO-unit_-MK110-_RS-485-ModBus-RTU-_-ASCII-DCON-OVEN__Ed3.pdf
- Descripción de los protocolos de comunicación. Para transmisores de presión KELLER de las series 30 y 40. Class.Group = 5.20 Class.Group = 5.21. Versión 3.2 (en ruso). www.izmerkon.ru .
- Control Center Series 30. Guía del usuario. Para CCS30 Versión 1.1. www.izmerkon.ru
- Dr. Bob Davidov. Tecnologías de control informático en sistemas técnicos portalnp.ru/author/bobdavidov