1. Introdução
A KELLER fabrica sensores de alta precisão com saída digital, conectados a software proprietário para exibição e acúmulo de leituras. Freqüentemente, o usuário precisa integrar sensores em seus próprios sistemas de monitoramento e controle. Neste trabalho, usando o sensor de pressão de alta precisão PR-33X como exemplo, mostramos a conexão dos sensores KELLER ao ambiente integrado MATLAB, desenvolvido originalmente para a análise e síntese de sistemas de controle, que possui ferramentas poderosas para processar e exibir dados de sinais.
Breve especificação do transmissor de pressão KELLER PR 33X
Faixa de pressão padrão (VPI), bar 30
Precisão da medição da pressão, total (10 ... 40 ° C) 0,025% do VPI
Saída RS 485
Taxa de transmissão 9600 ou 115200
Tensão de alimentação (U) 8 ... 28 V
Vida útil 10 milhões de ciclos 0 ... 100% VPI
O transmissor de pressão também inclui um sensor de temperatura integrado.
Interface
Todos os produtos KELLER com um índice X possuem uma interface digital (RS485 half duplex) que suporta os protocolos MODBUS RTU e Keller Bus.
A conexão a um PC é realizada usando um conversor RS485-USB. Para melhor compatibilidade, a empresa recomenda o uso do conversor Keller K-114.
De software
Para configurar e registrar as leituras dos sensores, é usado o software CCS30 gratuito, cuja interface é mostrada na Figura 1.
Figura 1. Acúmulo e exibição de dados gráficos e tabulares pelo programa CCS30 [3].Conexão com o PC
O sensor de pressão PR-33X foi conectado a um PC usando um conversor de porta USB USB para RS-232/422/485 MOXA USB, como mostra a Figura 2.
Figura 2. Diagrama de conexão do transmissor de pressão PR-33X a um PC e a uma fonte de alimentação de 12 V. Quando alimentado abaixo de 5,69 V (até 4,95 V), as leituras do sensor aumentam. Quando alimentado abaixo de 4,95V, os dados não são transmitidos (o sensor não funciona).
Após instalar o driver e conectar o conversor MOXA ao PC, a porta COM aparece na lista de gerenciadores de dispositivos

e adaptador

. Na guia (Figura 3) do último dispositivo da nossa versão, a interface RS-485 com um esquema de conexão de dois fios é selecionada.
Figura 3. Configurando o conversor MOXA na interface RS-485 2W.Formatos de transmissão
A troca de dados entre o computador (dispositivo de controle) e o sensor (dispositivo escravo) é realizada de acordo com as mensagens do protocolo Modbus contendo os seguintes campos [2].

Primeiro, o computador envia uma mensagem de solicitação ao sensor, em seguida, o sensor em resposta envia sua própria mensagem com sua própria soma de verificação quando a ação solicitada é bem-sucedida ou envia uma função com o código 1 se ocorrer um erro (função inválida ou endereço de dados, etc.).
A resposta (resposta) do sensor é emitida somente após o recebimento de uma solicitação do dispositivo de controle.
A mensagem enviada ao sensor contém um dos seguintes códigos de função.

Figura 4. Formato das mensagens transmitidas e recebidas de acordo com o padrão Modbus RTU [1].Endereços dos registros de sensores usados PR-33X

Exemplos de mensagens Modbus (leitura do sensor integrado de pressão e temperatura) [2]

Converter leituras do sensor para o formato de ponto flutuante IEEE754
O procedimento recomendado para converter os quatro bytes recebidos das leituras do sensor em um número de ponto flutuante é mostrado na Figura 5. O exemplo usa os dados [2] mostrados na tabela acima.
Figura 5. Regras para converter leituras de sensor de quatro bytes em um número de ponto flutuante.Programa MATLAB para leitura e exibição de sensores de pressão e temperatura PR-33X
O programa de leitura e exibição do sensor PR-33X inclui um módulo principal e três sub-rotinas. O conversor opera em 115200 baud. Os dados de pressão e temperatura são lidos mediante solicitação.
Os dados de entrada do programa são o endereço da porta COM do seu dispositivo (Com_Port = variável) e o endereço do seu conversor. Se apenas um conversor estiver conectado, como regra geral, Device_Addr = 1.
O número de leituras é definido pela constante Loop (no exemplo, Loop = 1000;).
O módulo principal:
clear all;
Rotina de geração de solicitação 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
Rotina de cálculo da soma de verificação da sequência Modbus RTU
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
Sub-rotina para converter quatro bytes das leituras do sensor em um número de ponto flutuante
Exemplos de gráficos de pressão e temperatura PR-33X lidos pelo programa acima são mostrados na Figura 6.
Figura 6. A saída do conversor PR-33X recebida pelo programa desenvolvido no MATLAB. O programa lê 1000 leituras de pressão a 115200 baud em 9 segundos. O programa lê 1000 leituras de pressão e 1000 leituras de temperatura (separadamente) a 115200 baud em 17 segundos.Programa MATLAB comutação da velocidade de transferência de dados do conversor
Para mudar para uma nova frequência, é necessário no programa definir o endereço da porta COM do seu dispositivo (Com_Port = variável) e a frequência necessária do conversor (BR_Rate = 9600; ou BR_Rate = 115200;)
ATENÇÃO Para mudar para uma nova frequência de transmissão de dados após definir o bit zero do registro do conversor UART, é necessário DESLIGAR (desenergizar) e depois LIGAR novamente o conversor.
Lista bibliográfica
- Dr. Bob Davidov. Comunicação com dispositivos de rede industrial. portalnp.ru/wp-content/uploads/2013/08/12.02_Discrete-IO-unit_-MK110-_RS-485-ModBus-RTU-_-ASCII-DCON-OVEN__Ed3.pdf
- Descrição dos protocolos de comunicação. Para transmissores de pressão KELLER das séries 30 e 40. Class.Group = 5.20 Class.Group = 5.21. Versão 3.2 (em russo). www.izmerkon.ru .
- Control Center Series 30. Guia do Usuário. Para o CCS30 Versão 1.1. www.izmerkon.ru
- Dr. Bob Davidov. Tecnologias de controle de computador em sistemas técnicos portalnp.ru/author/bobdavidov