Einführung
KELLER stellt hochpräzise Sensoren mit digitalem Ausgang her, die mit einer proprietären Software zur Anzeige und Akkumulation von Messwerten verbunden sind. Oft muss der Benutzer Sensoren in seine eigenen Überwachungs- und Steuerungssysteme integrieren. In dieser Arbeit zeigen wir am Beispiel des hochpräzisen Drucksensors PR-33X die Verbindung von KELLER-Sensoren mit der integrierten MATLAB-Umgebung, die ursprünglich für die Analyse und Synthese von Steuerungssystemen entwickelt wurde und über leistungsstarke Tools zur Verarbeitung und Anzeige von Signaldaten verfügt.
Kurze Spezifikation des Druckmessumformers KELLER PR 33X
Standarddruckbereich (VPI), bar 30
Genauigkeit der Druckmessung, insgesamt (10 ... 40 ° C) 0,025% des VPI
RS 485 Ausgang
Baudrate 9600 oder 115200 Baud
Versorgungsspannung (U) 8 ... 28 V.
Lebensdauer 10 Millionen Zyklen 0 ... 100% VPI
Der Druckmessumformer enthält auch einen integrierten Temperatursensor.
Schnittstelle
Alle KELLER-Produkte mit Index X verfügen über eine digitale Schnittstelle (RS485-Halbduplex), die die Protokolle MODBUS RTU und Keller Bus unterstützt.
Der Anschluss an einen PC erfolgt über einen RS485-USB-Konverter. Für eine optimale Kompatibilität empfiehlt das Unternehmen die Verwendung des Keller-Konverters K-114.
Software
Zum Konfigurieren und Aufzeichnen von Sensorwerten wird die kostenlose CCS30-Software verwendet, deren Schnittstelle in Abbildung 1 dargestellt ist.
Abbildung 1. Die Erfassung und Anzeige von grafischen und tabellarischen Daten durch das CCS30-Programm [3].PC-Verbindung
Der PR-33X-Drucksensor wurde mit einem USB-zu-RS-232/422/485-MOXA-USB-Seriell-Port-Konverter an einen PC angeschlossen (siehe Abbildung 2).
Abbildung 2. Anschlussdiagramm des Druckmessumformers PR-33X an einen PC und eine 12-V-Stromversorgung. Bei einer Stromversorgung unter 5,69 V (bis zu 4,95 V) erhöhen sich die Sensorwerte. Bei einer Stromversorgung unter 4,95 V werden keine Daten übertragen (der Sensor funktioniert nicht).
Nach der Installation des Treibers und dem Anschließen des MOXA-Konverters an den PC wird der COM-Anschluss in der Liste der Geräte-Manager angezeigt

und Adapter

. Auf der Registerkarte (Abbildung 3) des letzten Geräts unserer Version wird die RS-485-Schnittstelle mit einem Zweidraht-Verbindungsschema ausgewählt.
Abbildung 3. Konfigurieren des MOXA-Konverters für die RS-485 2W-Schnittstelle.Übertragungsformate
Der Datenaustausch zwischen dem Computer (Steuergerät) und dem Sensor (Slave-Gerät) erfolgt gemäß den Modbus-Protokollnachrichten, die die folgenden Felder enthalten [2].

Zuerst sendet der Computer eine Anforderungsnachricht an den Sensor, dann sendet der Sensor als Antwort eine eigene Nachricht mit einer eigenen Prüfsumme, wenn die angeforderte Aktion erfolgreich ist, oder sendet eine Funktion mit Code 1, wenn ein Fehler auftritt (ungültige Funktion oder Datenadresse usw.).
Die Antwort (Antwort) des Sensors wird erst ausgegeben, nachdem eine Anforderung vom Steuergerät empfangen wurde.
Die an den Sensor gesendete Nachricht enthält einen der folgenden Funktionscodes.

Abbildung 4. Format der gesendeten und empfangenen Nachrichten gemäß dem Modbus RTU-Standard [1].Adressen der verwendeten Sensorregister PR-33X

Beispiele für Modbus-Meldungen (Lesen des integrierten Druck- und Temperatursensors) [2]

Konvertieren Sie die Sensorwerte in das Gleitkommaformat IEEE754
Das empfohlene Verfahren zum Konvertieren der vier empfangenen Bytes der Sensorablesungen in eine Gleitkommazahl ist in Abbildung 5 dargestellt. Das Beispiel verwendet die in der obigen Tabelle gezeigten Daten [2].
Abbildung 5. Regeln zum Konvertieren von Vier-Byte-Sensorwerten in eine Gleitkommazahl.MATLAB-Programm zum Lesen und Anzeigen von Druck- und Temperatursensoren PR-33X
Das Lese- und Anzeigeprogramm für den PR-33X-Sensor umfasst ein Hauptmodul und drei Unterprogramme. Der Konverter arbeitet mit 115200 Baud. Druck- und Temperaturdaten werden auf Anfrage ausgelesen.
Die Programmeingabedaten sind die COM-Port-Adresse Ihres Geräts (Com_Port = Variable) und die Adresse Ihres Konverters. Wenn nur ein Konverter angeschlossen ist, ist in der Regel Device_Addr = 1.
Die Anzahl der Messwerte wird durch die Schleifenkonstante festgelegt (im Beispiel Schleife = 1000;).
Das Hauptmodul:
clear all;
Routine zur Erzeugung von Modbus RTU-Anforderungen
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
Berechnungsroutine für die Modbus RTU-Sequenzprüfsumme
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
Unterprogramm zum Konvertieren von vier Bytes der Sensorwerte in eine Gleitkommazahl
Beispiele für Druck- und Temperaturdiagramme des PR-33X, die vom obigen Programm gelesen wurden, sind in Abbildung 6 dargestellt.
Abbildung 6. Die Ausgabe des PR-33X-Konverters, die von dem in MATLAB entwickelten Programm empfangen wurde. Das Programm liest in 9 Sekunden 1000 Druckwerte bei 115200 Baud. Das Programm liest in 17 Sekunden 1000 Druckwerte und 1000 Temperaturwerte (separat) bei 115200 Baud.MATLAB Programmumschaltung Datenübertragungsgeschwindigkeit des Konverters
Um auf eine neue Frequenz umzuschalten, müssen Sie im Programm die COM-Port-Adresse Ihres Geräts (Com_Port = Variable) und die erforderliche Frequenz des Konverters (BR_Rate = 9600; oder BR_Rate = 115200;) einstellen.
ACHTUNG Um nach dem Setzen des Nullbits des Registers des UART-Wandlers auf eine neue Datenübertragungsfrequenz umzuschalten, muss der Wandler ausgeschaltet (stromlos) und dann wieder eingeschaltet werden.
Bibliografische Liste
- Dr. Bob Davidov. Kommunikation mit industriellen Netzwerkgeräten. portalnp.ru/wp-content/uploads/2013/08/12.02_Discrete-IO-unit_-MK110-_RS-485-ModBus-RTU-_-ASCII-DCON-OVEN__Ed3.pdf
- Beschreibung der Kommunikationsprotokolle. Für Druckmessumformer der Serien KELLER 30 und 40. Class.Group = 5.20 Class.Group = 5.21. Version 3.2 (auf Russisch). www.izmerkon.ru .
- Control Center Series 30. Benutzerhandbuch. Für CCS30 Version 1.1. www.izmerkon.ru
- Dr. Bob Davidov. Computersteuerungstechnologien in technischen Systemen portalnp.ru/author/bobdavidov