توصيل أجهزة استشعار KELLER بـ MATLAB

مقدمة


تقوم KELLER بتصنيع أجهزة استشعار عالية الدقة بإخراج رقمي ، وهي متصلة ببرنامج خاص لعرض وتراكم القراءات. في كثير من الأحيان ، يحتاج المستخدم إلى دمج أجهزة الاستشعار في أنظمة المراقبة والتحكم الخاصة بهم. في هذا العمل ، باستخدام جهاز استشعار الضغط العالي الدقة PR-33X كمثال ، نظهر توصيل أجهزة استشعار KELLER ببيئة MATLAB المتكاملة ، التي تم تطويرها في الأصل لتحليل وتوليف أنظمة التحكم ، التي لديها أدوات قوية لمعالجة وعرض بيانات الإشارة.

مواصفات وجيزة من الارسال الضغط KELLER PR 33X


نطاق الضغط القياسي (VPI) ، شريط 30
دقة قياس الضغط ، المجموع (10 ... 40 درجة مئوية) 0.025 ٪ من VPI
RS 485 الإخراج
معدل باود 9600 أو 115200 باود
امدادات التيار الكهربائي (U) 8 ... 28 V
خدمة الحياة 10 مليون دورة 0 ... 100 ٪ VPI

يتضمن جهاز إرسال الضغط أيضًا مستشعرًا متكاملًا لدرجة الحرارة.

واجهة


جميع منتجات KELLER ذات الفهرس X لها واجهة رقمية (RS485 نصف مزدوجة) تدعم بروتوكولات MODBUS RTU و Keller Bus.

يتم الاتصال بجهاز الكمبيوتر باستخدام محول RS485-USB. للحصول على أفضل توافق ، توصي الشركة باستخدام محول Keller K-114.

البرمجيات


لتكوين قراءات المستشعر وتسجيلها ، يتم استخدام برنامج CCS30 المجاني ، حيث تظهر الواجهة في الشكل 1.

الصورة
الشكل 1. تراكم وعرض البيانات الرسومية والجداول بواسطة برنامج CCS30 [3].

اتصال الكمبيوتر


يتم توصيل مستشعر الضغط PR-33X بجهاز كمبيوتر باستخدام منفذ USB لتحويل RS-232/422/485 MOXA USB التسلسلي وفقًا للرسم البياني في الشكل 2.

الصورة
الشكل 2. مخطط اتصال جهاز إرسال الضغط PR-33X بجهاز كمبيوتر ومزود طاقة 12 فولت.عندما يتم تشغيله أقل من 5.69 فولت (حتى 4.95 فولت) ، تزداد قراءات المستشعر. عند تشغيله دون 4.95 فولت ، لا يتم نقل البيانات (لا يعمل المستشعر).

بعد تثبيت برنامج التشغيل وإرفاق محول MOXA بجهاز الكمبيوتر ، يظهر منفذ COM في قائمة مدير الجهاز الصورة ومحول الصورة . في علامة التبويب (الشكل 3) من الجهاز الأخير لإصدارنا ، يتم تحديد واجهة RS-485 مع نظام اتصال من سلكين.

الصورة
الشكل 3. تكوين محول MOXA لواجهة RS-485 2W.

تنسيقات الإرسال


يتم تبادل البيانات بين جهاز الكمبيوتر (جهاز التحكم) والمستشعر (جهاز الرقيق) وفقًا لرسائل بروتوكول Modbus التي تحتوي على الحقول التالية [2].

الصورة

أولاً ، يرسل الكمبيوتر رسالة طلب إلى المستشعر ، ثم يرسل المستشعر استجابةً رسالته الخاصة مع الاختباري الخاص به عندما ينجح الإجراء المطلوب ، أو يرسل وظيفة برمز 1 في حالة حدوث خطأ (وظيفة غير صالحة أو عنوان بيانات ، وما إلى ذلك).

لا تصدر استجابة (استجابة) المستشعر إلا بعد تلقي طلب من جهاز التحكم.

تحتوي الرسالة المرسلة إلى المستشعر على أحد رموز الوظائف التالية.

الصورة

الصورة
الشكل 4. تنسيق الرسائل المرسلة والمستلمة وفقًا لمعيار Modbus RTU [1].

عناوين سجلات أجهزة الاستشعار المستخدمة PR-33X


الصورة

أمثلة على رسائل Modbus (قراءة مستشعر الضغط ودرجة الحرارة المدمج) [2]


الصورة

تحويل قراءات المستشعر إلى تنسيق النقطة العائمة IEEE754


يوضح الشكل 5. الإجراء الموصى به لتحويل وحدات البايت الأربعة المستقبلة لقراءات المستشعر إلى رقم الفاصلة العائمة. يستخدم المثال البيانات [2] الموضحة في الجدول أعلاه.

الصورة
الشكل 5. قواعد لتحويل قراءات الاستشعار أربعة بايت إلى رقم الفاصلة العائمة.

برنامج MATLAB لقراءة وعرض مجسات الضغط ودرجة الحرارة PR-33X


يتضمن برنامج قراءة وعرض المستشعر PR-33X وحدة رئيسية وثلاثة برامج فرعية. يعمل المحول في 115200 باود. تتم قراءة بيانات الضغط ودرجة الحرارة عند الطلب.

بيانات إدخال البرنامج هي عنوان منفذ COM الخاص بجهازك (Com_Port = variable) وعنوان محولك. إذا كان محول واحد فقط متصلاً ، كقاعدة عامة ، Device_Addr = 1.

يتم تعيين عدد القراءات بواسطة ثابت حلقة (في المثال ، حلقة = 1000 ؛).

الوحدة الرئيسية:

clear all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Input data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Com_Port = 'COM9'; Device_Addr = 1; % Address of Sensor, 8 bit: 1..255 Function = 3; % 3 or 4 is read; Pr_Rg_Addr = 2; % First address of two pressure data registers (4 bytes) Temp_Rg_Addr = 8; % First address of two temperature data registers Address_Range = 2; % Range of data address %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % End of Input data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Make COM port connection s=serial(Com_Port,'Baudrate',115200); % 9600 115200 fopen (s); pause(0.1); Loop = 1000; pr(1:Loop) = 0; temp(1:Loop) = 0; for i = 1:Loop %%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Read pressure %%%%%%%%%%%%%%%%%%%%%%%%%%%%% RTU_request = RTU_code(Device_Addr,Function,Pr_Rg_Addr,Address_Range); fwrite(s, RTU_request); %pause(0.01); % >=0.001s for PR-33X, for 115200 Baudrate while ~(get(s,'BytesAvailable')>8) end BytesAvailable = get(s,'BytesAvailable'); Rx = fread(s,BytesAvailable)'; pr(i) = sensorOUT_to_float(Rx); % in bar %%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Read temperature %%%%%%%%%%%%%%%%%%%%%%%%%%%%% RTU_request = RTU_code(Device_Addr,Function,Temp_Rg_Addr,Address_Range); fwrite(s, RTU_request); while ~(get(s,'BytesAvailable')>8) end BytesAvailable = get(s,'BytesAvailable'); % if BytesAvailable > 0 Rx = fread(s,BytesAvailable)'; temp(i) = sensorOUT_to_float(Rx); % in bar end % Close COM port fclose (s); delete (s); figure (3) clf('reset'); % Clear current figure window [AX,H1,H2] = plotyy (1:length(pr),pr,1:length(temp),temp); hold(AX(1)); hold(AX(2)); set(H1,'LineWidth',2); grid(AX(2),'on'); xlabel('Sampling, num'); % Y1_max = max(get(AX(1),'ytick')); % set(AX(1),'ytick',[0:Y1_max/10:Y1_max]); % set(AX(2),'ytick',[0:0.2:2]); set(get(AX(1),'Ylabel'),'String',', '); set(get(AX(2),'Ylabel'),'String',', . '); title(sprintf('   ')); % End of m file 

طلب 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 

مودبوس 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 

روتين فرعي لتحويل أربع بايتات من قراءات المستشعر إلى نقطة عائمة


 % Transmission Sensor's output bytes to float value function val = sensorOUT_to_float(Rx) B(1) = Rx(4); B(2) = Rx(5); B(3) = Rx(6); B(4) = Rx(7); %1 bit of sign + 8 bits of exponent + 23 bits of mantis ( = 32 bits or 4x8 bytes) v_res = []; for i = 1:4 v_bit = dec2bin(B(i)); if length(v_bit)<8 % add zeros to get 8 bits for j = 1:(8-length(v_bit)) v_bit = ['0' v_bit]; end end v_res = [v_res v_bit]; end % Checking % v_res = ['0' '10000010' '01010010000001011011110'] == 10.5631999969482421875  s_mnt = bin2dec(v_res(1)); %sign of mantis E = bin2dec(v_res(2:9)); %exponent M = bin2dec(v_res(10:32)); % mantis if s_mnt==0 val = (1+M/8388608)*2^(E-127); % 8388608 = 2^23 else val = -(1+M/8388608)*2^(E-127); end % End of m file 

يوضح الشكل 6 أمثلة لرسومات الضغط ودرجة الحرارة PR-33X التي قرأها البرنامج أعلاه.

الصورة
الشكل 6. ناتج محول PR-33X الذي تلقاه البرنامج المطور في MATLAB. يقرأ البرنامج 1000 قراءات ضغط في 115200 باود في 9 ثوان. يقرأ البرنامج 1000 قراءات الضغط و 1000 قراءات درجة الحرارة (بشكل منفصل) في 115200 باود في 17 ثانية.

برنامج MATLAB تبديل سرعة نقل البيانات للمحول


للتبديل إلى تردد جديد ، من الضروري في البرنامج تعيين عنوان منفذ COM الخاص بجهازك (Com_Port = variable) والتردد المطلوب للمحول (BR_Rate = 9600 ؛ أو BR_Rate = 115200 ؛)

الاهتمام للتبديل إلى تردد جديد لنقل البيانات بعد تعيين صفر بت من سجل محول UART ، من الضروري إيقاف تشغيل (إلغاء تنشيط) ، ثم تشغيل محول مرة أخرى.

 %      (9600  115200 )    UART   -  clear all; % Input data Com_Port = 'COM9'; BR_Rate = 115200; % 9600 or 115200 % End of Input data % Device_Addr = 1; % Address of Sensor, 8 bit: 1..255 % Function = 6; % Write; % UART_Rg_Addr = 512; % First address of UART Rg (2 bytes) % Data = 0 0; % Rate 9600 bod % Data = 0 1; % Rate 115200 bod % RTU_request = [Device_Addr Function UART_Rg_Addr Data Check_sum] % RTU_request = [ 1 6 2 0 0 0 136 114]; % 9600 bod request in hex % RTU_request = [ 1 6 2 0 0 1 73 178]; % 115200 bod request in hex if BR_Rate == 9600 % 115200 s=serial(Com_Port,'Baudrate',115200); fopen (s); pause(0.1); RTU_request =[ 1 6 2 0 0 0 136 114]; else s=serial(Com_Port,'Baudrate',9600); fopen (s); pause(0.1); RTU_request = [ 1 6 2 0 0 1 73 178]; end fwrite(s, RTU_request); pause(0.004); % >=0.001s for PR-33X, for 115200 Baudrate BytesAvailable = get(s,'BytesAvailable'); if BytesAvailable > 0 Rx = fread(s,BytesAvailable)' end % close COM port fclose (s); delete (s); % End of m file 

قائمة المراجع


  1. دكتور بوب دافيدوف. التواصل مع أجهزة الشبكات الصناعية. portalnp.ru/wp-content/uploads/2013/08/12.02_Discrete-IO-unit_-MK110-_RS-485-ModBus-RTU-_-ASCII-DCON-OVEN__Ed3.pdf
  2. وصف بروتوكولات الاتصال. لأجهزة إرسال سلسلة الضغط من KELLER 30 و 40. Class.Group = 5.20 Class.Group = 5.21. الإصدار 3.2 (باللغة الروسية). www.izmerkon.ru .
  3. سلسلة مركز التحكم 30. دليل المستخدم. FUR CCS30 الإصدار 1.1. www.izmerkon.ru
  4. دكتور بوب دافيدوف. تقنيات التحكم في الكمبيوتر في النظم التقنية portalnp.ru/author/bobdavidov

Source: https://habr.com/ru/post/ar440966/


All Articles