Створення коду для програмованих логічних контролерів у 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.