
Створення коду для програмованих логічних контролерів у Matlab
Компанія MathWorks оголосила про випуск нового продукту - Simulink PLC Coder. Цей продукт дозволяє автоматично генерувати згідно зі стандартом IEC 61131 код для програмованих логічних контролерів (ПЛК) і програмованих контролерів автоматизації. Це нововведення дозволяє використовувати модельно-орієнтоване проектування для промислового і силового обладнання, керованого ПЛК.
За допомогою Simulink PLC Coder інженери можуть автоматично генерувати код для промислових систем управління, включаючи замкнуті системи і системи контролю зі зворотним зв'язком. Автоматична генерація коду, невід'ємна частина Модельно-орієнтованого проектування, допомагає усунути помилки, пов'язані з традиційним ручним написанням коду і зменшує час розробки та валідації.
Simulink PLC Coder генерує вихідний код в структурованому текстовому форматі з моделей Simulink, діаграм Stateflow, і коду Embedded MATLAB, а потім використовує інтегроване середовище розробки (IDE) від постачальника засобів промислової автоматизації, для компіляції коду і запуску його на контролерах ПЛК.
Для генерації коду необхідна програма Matlab починаючи з версії 2010a. Розробляти будемо програму для ПЛК Siemens SIMATIC STEP 7.
Створюємо файл моделі, в якому будемо створювати математичну модель. Для цього нам знадобиться бібліотека plclib, тому з командного рядка Matlab запускаємо її.
Створюємо математичну модель системи управління з дискретним ПІД регулятором (малюнок 1). На малюнку 2 наведено внутрішню структуру блоку pid_feedforward.
Малюнок 1 - Математична модель системи управління
Малюнок 2 - Внутрішня структура блоку pid_feedforward
Малюнок 3 - Перехідний процес системи
Вибираємо блок pid_feedforward, натискаємо праву клавішу миші і вибираємо Subsystem Parametrs. У цьому вікні відзначаємо «Treat as atomic unit» і натискаємо кнопку Ок.
На функціональному блоці натискаємо праву клавішу миші і вибираємо PLC Coder/Options.
Вибираємо в який тип ПЛК буде створений код (Target IDE) і натискаємо клавішу Generate code.
Створений код для SIMATIC STEP 7
(*
*
* File: plc.scl
*
* IEC 61131-3 Structured Text (ST) code generated for Simulink model «plc.mdl»
*
* Model version: 1.1
* Simulink PLC Coder version: 1.1 (R2010b) 03-Aug-2010
* ST code generated on: Fri Jun 03 18:52:23 2011
*
* Target IDE selection: Siemens SIMATIC Step 7 5.4
* Test Bench included: No
*
*)
FUNCTION_BLOCK FB1
VAR_INPUT
ssMethodType: INT;
In3: REAL;
In2: REAL;
In3_c: REAL;
END_VAR
VAR_OUTPUT
Out1: REAL;
END_VAR
VAR
Integrator_DSTATE: REAL;
Filter_DSTATE: REAL;
rtb_et: REAL;
rtb_Sum: REAL;
c_rtb_FilterCoeffi: REAL;
END_VAR
CASE ssMethodType OF
2:
(* InitializeConditions for DiscreteIntegrator: '/Integrator' *)
Integrator_DSTATE := 0;
(* InitializeConditions for DiscreteIntegrator: '/Filter' *)
Filter_DSTATE := 0;
3:
(* Sum: '/Sum' incorporates:
* Inport: '/In1'
* Inport: '/In2'
*)
rtb_et := In3 — In2;
(* Gain: '/Filter Coefficient' incorporates:
* DiscreteIntegrator: '/Filter'
* Gain: '/Derivative Gain'
* Sum: '/SumD'
*)
c_rtb_FilterCoeffi := ((-1.26102994076046 * rtb_et) — Filter_DSTATE) * 0.178109803713032;
(* Sum: '/Sum' incorporates:
* DiscreteIntegrator: '/Integrator'
* Gain: '/Proportional Gain'
*)
rtb_Sum := ((1.7018012505578 * rtb_et) + Integrator_DSTATE) + c_rtb_FilterCoeffi;
(* Outport: '/Out1' incorporates:
* Inport: '/In1'
* Sum: '/Sum1'
*)
Out1 := In3 + rtb_Sum;
(* Update for DiscreteIntegrator: '/Integrator' incorporates:
* Gain: '/Integral Gain'
* Sum: '/Sum2'
* Sum: '/SumI1'
* Sum: '/SumI3'
* Update for Inport: '/In1'
* Update for Inport: '/In3'
*)
Integrator_DSTATE := (((In3_c — In3) — rtb_Sum) + (0.208461637073455 * rtb_et)) + Integrator_DSTATE;
(* Update for DiscreteIntegrator: '/Filter' *)
Filter_DSTATE := Filter_DSTATE + c_rtb_FilterCoeffi;
END_CASE;
END_FUNCTION_BLOCK
Наступним етапом є створення проекту в Siemens SIMATIC Step 7 і вставки в редактор SCL згенерованого коду.
Результатом компіляції коду є створення функціонального блоку.
Малюнок 4 - Функціональний блок FB1
За допомогою OPC сервера здійснимо обмін між ПЛК і Matlab. При використанні реального заліза використовуємо Simatic Net OPC Server, при використанні симулятора ПЛК (PLC-Sim) необхідно використовувати SCADA-систему WinCC і WinCC OPC Server.
Малюнок 5 - обмін даними між ПЛК і Matlab
Малюнок 6 - Порівняння роботи ПІД регуляторів
Більш детально з Simulink PLC Coder можна ознайомитися в документації Matlab, або на сайті www.mathworks.com/products/sl-plc-coder.