Présentation
KELLER fabrique des capteurs de haute précision à sortie numérique, qui sont connectés à un logiciel propriétaire pour l'affichage et l'accumulation des lectures. Souvent, l'utilisateur doit intégrer des capteurs dans ses propres systèmes de surveillance et de contrôle. Dans ce travail, en utilisant le capteur de pression de haute précision PR-33X comme exemple, nous montrons la connexion des capteurs KELLER à l'environnement intégré MATLAB, développé à l'origine pour l'analyse et la synthèse des systèmes de contrôle, qui dispose d'outils puissants pour le traitement et l'affichage des données de signal.
Brève description du transmetteur de pression KELLER PR 33X
Plage de pression standard (VPI), bar 30
Précision de la mesure de pression, totale (10 ... 40 ° C) 0,025% de VPI
Sortie RS 485
Débit en bauds 9600 ou 115200 bauds
Tension d'alimentation (U) 8 ... 28 V
Durée de vie 10 millions de cycles 0 ... 100% VPI
Le transmetteur de pression comprend également un capteur de température intégré.
Interface
Tous les produits KELLER avec index X ont une interface numérique (RS485 half duplex) qui prend en charge les protocoles MODBUS RTU et Keller Bus.
La connexion à un PC s'effectue à l'aide d'un convertisseur RS485-USB. Pour une meilleure compatibilité, l'entreprise recommande d'utiliser le convertisseur Keller K-114.
Logiciels
Pour configurer et enregistrer les lectures des capteurs, un logiciel CCS30 gratuit est utilisé, dont l'interface est illustrée à la figure 1.
Figure 1. Accumulation et affichage de données graphiques et tabulaires par le programme CCS30 [3].Connexion PC
Le capteur de pression PR-33X est connecté à un PC à l'aide d'un convertisseur de port série USB vers RS-232/422/485 MOXA conformément au schéma de la figure 2.
Figure 2. Schéma de connexion du transmetteur de pression PR-33X à un PC et à une alimentation 12 V. Lorsqu'ils sont alimentés en dessous de 5,69 V (jusqu'à 4,95 V), les lectures du capteur augmentent. Lorsqu'il est alimenté en dessous de 4,95 V, les données ne sont pas transmises (le capteur ne fonctionne pas).
Après avoir installé le pilote et connecté le convertisseur MOXA au PC, le port COM apparaît dans la liste du gestionnaire de périphériques

et adaptateur

. Dans l'onglet (Figure 3) du dernier appareil de notre version, l'interface RS-485 avec un schéma de connexion à deux fils est sélectionnée.
Figure 3. Configuration du convertisseur MOXA vers l'interface RS-485 2W.Formats de transmission
L'échange de données entre l'ordinateur (appareil de contrôle) et le capteur (appareil esclave) s'effectue selon les messages du protocole Modbus contenant les champs suivants [2].

Tout d'abord, l'ordinateur envoie un message de demande au capteur, puis le capteur en réponse envoie son propre message avec sa propre somme de contrôle lorsque l'action demandée réussit, ou envoie une fonction avec le code 1 en cas d'erreur (fonction ou adresse de données non valide, etc.).
La réponse (réponse) du capteur n'est émise qu'après réception d'une demande du dispositif de commande.
Le message envoyé au capteur contient l'un des codes de fonction suivants.

Figure 4. Format des messages transmis et reçus selon la norme Modbus RTU [1].Adresses des registres de capteurs utilisés PR-33X

Exemples de messages Modbus (lecture du capteur de pression et de température intégré) [2]

Convertir les lectures des capteurs au format à virgule flottante IEEE754
La procédure recommandée pour convertir les quatre octets reçus des lectures du capteur en un nombre à virgule flottante est illustrée à la figure 5. L'exemple utilise les données [2] indiquées dans le tableau ci-dessus.
Figure 5. Règles de conversion des relevés de capteur à quatre octets en nombre à virgule flottante.Programme MATLAB pour lire et afficher les capteurs de pression et de température PR-33X
Le programme de lecture et d'affichage du capteur PR-33X comprend un module principal et trois sous-programmes. Le convertisseur fonctionne à 115200 bauds. Les données de pression et de température sont lues sur demande.
Les données d'entrée du programme sont l'adresse du port COM de votre appareil (Com_Port = variable) et l'adresse de votre convertisseur. Si un seul convertisseur est connecté, alors, en règle générale, Device_Addr = 1.
Le nombre de lectures est défini par la constante Loop (dans l'exemple, Loop = 1000;).
Le module principal:
clear all;
Routine de génération de requête 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
Routine de calcul de la somme de contrôle de séquence 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
Sous-programme pour convertir quatre octets des lectures du capteur en nombre à virgule flottante
Des exemples de graphiques de pression et de température du PR-33X lus par le programme ci-dessus sont illustrés à la figure 6.
Figure 6. Sortie du convertisseur PR-33X reçue par le programme développé dans MATLAB. Le programme lit 1000 lectures de pression à 115200 bauds en 9 secondes. Le programme lit 1000 lectures de pression et 1000 lectures de température (séparément) à 115200 bauds en 17 secondes.Vitesse de transfert des données de commutation du programme MATLAB du convertisseur
Pour passer à une nouvelle fréquence, il est nécessaire dans le programme de définir l'adresse du port COM de votre appareil (Com_Port = variable) et la fréquence requise du convertisseur (BR_Rate = 9600; ou BR_Rate = 115200;)
ATTENTION Pour passer à une nouvelle fréquence de transmission de données après avoir réglé le bit zéro du registre du convertisseur UART, il est nécessaire de TURN OFF (hors tension) puis de rallumer le convertisseur.
Liste bibliographique
- Dr. Bob Davidov. Communication avec les périphériques réseau industriels. portalnp.ru/wp-content/uploads/2013/08/12.02_Discrete-IO-unit_-MK110-_RS-485-ModBus-RTU-_-ASCII-DCON-OVEN__Ed3.pdf
- Description des protocoles de communication. Pour les transmetteurs de pression des séries KELLER 30 et 40. Class.Group = 5.20 Class.Group = 5.21. Version 3.2 (en russe). www.izmerkon.ru .
- Control Center Series 30. Guide de l'utilisateur. Pour CCS30 version 1.1. www.izmerkon.ru
- Dr. Bob Davidov. Technologies de contrôle informatique dans les systèmes techniques portalnp.ru/author/bobdavidov