Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software...

58
Sterowniki Programowalne (SP) – Wykład 12 Ze środowiska szybkiego prototypowania do implementacji na sterowniku: przykłady w oparciu o Simulink PLC Coder WYDZIAŁ ELEKTROTECHNIKI I AUTOMATYKI – KATEDRA INŻYNIERII SYSTEMÓW STEROWANIA Tomasz Karla Październik 2016 1

Transcript of Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software...

Page 1: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Sterowniki Programowalne (SP) – Wykład 12Ze środowiska szybkiego prototypowania do implementacji na

sterowniku: przykłady w oparciu o Simulink PLC Coder

WYDZIAŁ ELEKTROTECHNIKI I AUTOMATYKI – KATEDRA INŻYNIERII SYSTEMÓW STEROWANIA

Tomasz Karla

Październik 2016 1

Page 2: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Plan prezentacji

• Środowisko szybkiego prototypowania a implementacja

• Simulink PLC Coder – szybka implementacja na sterowniku PLC

• Opis podstawowych funkcjonalności Simulink PLC Coder• Kompatybilność IDE• Wykorzystywane bloki• Ograniczenia• Procedura generowania kodu dla PLC w języku ST

• Struktura generowanego kodu źródłowego

• Przykładowe zastosowania Simulink PLC Coder• Procedura wdrażania kodu z Simulink PLC Coder na sterownikach

GeFanuc oraz Siemens• Przykładowe wygenerowane kody i ogólne wskazówki

2

Page 3: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Środowisko szybkiego prototypowania a implementacja

• Środowiska szybkiego prototypowania nastawione są napodstawowe badania i testy samych algorytmów i struktur

• Implementacja często wymaga dostosowywania konkretnychalgorytmów do wymagań konkretnych rozwiązań sprzętowo-programowych

• Istnieją narzędzia, które pozwalają na zautomatyzowaneprzechodzenie od projektów ze środowisk szybkiegoprototypowania do implementacji, jednak są one częstoobarczone wieloma obostrzeniami

3

Page 4: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Simulink PLC Coder – szybka implementacja na sterowniku PLC

• Simulink PLC Coder jest narzędziem pakietu oprogramowaniaMATLAB, który pozwala na „targetowanie” (generowanie koduźródłowego kompatybilnego z konkretnym urządzeniem)bloków z modeli Simulink do sterowników PLC

• Generowany kod źródłowy aplikacji może być w postaci kodudrabinkowego (tylko i wyłącznie operacje binarne nastycznikach i przekaźnikach) oraz w języku ST (Structural Text)

• Simulink PLC Coder wspiera szereg IDE (ang. IntegratedDevelopment Environment) dla sterowników PLC różnychproducentów, jednak nie wszystkie są wspierane wjednakowym stopniu.

• Występują duże ograniczenia w ilości wykorzystywanychbloków z przyborników Simulink czy też możliwych opcjisolverów. 4

Page 5: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderKompatybilność IDE

• Kompatybilność ze sterownikami PLC dla języka ST:• 3S-Smart Software Solutions CODESYS Version 2.3 or 3.3 or 3.5 (SP4 or later)• B&R Automation Studio® 3.0 or 4• Beckhoff® TwinCAT® 2.11 or 3• KW-Software MULTIPROG® 5.0 or 5.5• OMRON Sysmac Studio Version 1.04, 1.05, 1.09 or 1.12• Phoenix Contact® PC WORX™ 6.0• Rexroth IndraWorks version 13V12 IDE• Rockwell Automation RSLogix 5000 Series Version 17, 18, 19 or 20 and

Rockwell Studio 5000 Logix Designer Version 21 or 24• Siemens SIMATIC® STEP® 7 Version 5.3, 5.4 or 5.5• Siemens TIA Portal V13• Generic• PLCopen XML

• Kompatybilność ze sterownikami PLC dla języka drabinkowego:• 3S-Smart Software Solutions CODESYS Version 3.5 SP6• Rockwell Automation RSLogix 5000 Series Version 20 and Rockwell Studio

5000 Logix Designer Version 24• PLCopen XML

5

Page 6: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki

6

Page 7: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki – Additional Math & Discrete

7

Page 8: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki – Commonly Used Blocks

8

Page 9: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Discontinuities

9

Page 10: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Discrete

10

Page 11: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Logic and Bit Operations

11

Page 12: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Lookup Tables

12

Page 13: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Math Operations

13

Page 14: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Model Verification

14

Page 15: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Model-Wide Utilities

15

Page 16: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Ports & Subsystems

16

Page 17: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Signal Attributes

17

Page 18: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Signal Routing

18

Page 19: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Sinks

19

Page 20: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Sources

20

Page 21: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - User-Defined Functions

21

Page 22: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderWykorzystywane bloki - Supported Stateflow Blocks

Stateflow Blocks• Chart• State Transition Table• Truth Table

22

Page 23: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderOgraniczenia

Najważniejsze ograniczenia Simulink PLC Coder:• brak obsługi złożonych typów danych• ograniczone wsparcie dla zaawanasowanych funkcji

matematycznych (przykład: funkcja rand nie jest wspierana),• brak obsługi sygnałów o różnej zmiennej wielkości (wszystkie

dane/macierze muszą mieć z góry ustalone wymiary)• brak obsługi bloków MATLAB System,• brak obsługi danych typu cell,• blok MATLAB Function obsługuje tylko standardowe funkcje

MATLABa, funkcje z dodatkowych toolboxów nie są obsługiwane,• brak bezpośredniej obsługi bloków w trybie multirate• brak obsługi bloków typu continuous,• import subsystemów, nie można przetworzyć bezpośrednio

całego modelu z powiązaniami

23

Page 24: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderProcedura generowania kodu dla PLC w języku ST

Procedura:1. Zdefiniować model Simulink.2. Zidentyfikować elementy, dla których należy

wygenerować kod źródłowy.3. Umieścić wybrane elementy w subsystemie.4. Wybrać „target” IDE (np. Tia Portal).5. Wybrać solver i ustawić parametry modelu.6. Skonfigurować subsystem aby był traktowany jako

„atomic block”.7. Sprawdzić kompatybilność subsytemu z Simulink PLC

Coderem.8. Wygenerować kod ST.9. Sprawdzić otrzymany kod źródłowy.10.Zaimportować kod do sterownika PLC.

24

Page 25: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderProcedura generowania kodu dla PLC

1. Zdefiniować model Simulink.

25

Page 26: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderProcedura generowania kodu dla PLC

2. Zidentyfikować elementy, dla których należywygenerować kod źródłowy.

3. Umieścić wybrane elementy w subsystemie.

26

Page 27: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderProcedura generowania kodu dla PLC

4. Wybrać „target” IDE (np. Tia Portal).Należy pamiętać by także zadeklarować odpowiednią ścieżkę dostępudo IDE. W systemach 64 bitowych Windows, biblioteki często sąinstalowane w folderze Program Files (x86). Domyślna ścieżka nie musiwięc być poprawna.

27

Page 28: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderProcedura generowania kodu dla PLC

5. Wybrać solver.Parametry modelu do ustawienia:

Solver:

Model Ustawienia

Variable-step Wybrać solver typu continuous. Skonfigurowaćstały „sample time” subsystemów.

Fixed-step Wybrać solver „discrete”.

Tasking mode:W parametrach modelu należy przestawić generowanie

kodu na tryb „Single-tasking”. Dodatkowo zaznaczyć opcję„Treat each discrete rate as a separate task”.

28

Page 29: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderProcedura generowania kodu dla PLC

6. Skonfigurować subsystem aby był traktowany jako „atomicblock”.

29

Page 30: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderProcedura generowania kodu dla PLC

7. Sprawdzić kompatybilność subsytemu z Simulink PLCCoderem.

30

Page 31: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Opis podstawowych funkcjonalności Simulink PLC CoderProcedura generowania kodu dla PLC

8. Wygenerować kod ST.

Wygenerowany kod pojawi się w aktywnym folderzeustawionym w Workspace MATLABA w podfolderzezadeklarowanym przy wybieraniu IDE. Można go otworzyć zapomocą Notatnika Windows.

31

9. Sprawdzić otrzymany kod źródłowy.10. Zaimportować kod do sterownika PLC.

Procedura zależna od typu IDE.

Page 32: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Struktura generowanego kodu źródłowego Kod ogólny

32

(*

*

* File: plcdemo_simple_subsystem.st

*

* IEC 61131-3 Structured Text (ST) code generated for

subsystem

"plcdemo_simple_subsystem/SimpleSubsystem"

*

* Model name : plcdemo_simple_subsystem

* Model version : 1.61

* Model creator : The MathWorks, Inc.

* Model last modified by : The MathWorks, Inc.

* Model last modified on : Sat Jul 23 05:44:03 2016

* Model sample time : 0.1s

* Subsystem name :

plcdemo_simple_subsystem/SimpleSubsystem

* Subsystem sample time : 0.1s

* Simulink PLC Coder version : 2.2 (R2016b) 25-Aug-

2016

* ST code generated on : Fri Oct 28 12:30:55 2016

*

* Target IDE selection : Generic

* Test Bench included : No

*

*)

FUNCTION_BLOCK SimpleSubsystem

VAR_INPUT

ssMethodType: SINT;

U: LREAL;

END_VAR

VAR_OUTPUT

Y: LREAL;

END_VAR

VAR

UnitDelay_DSTATE: LREAL;

END_VAR

VAR_TEMP

rtb_Gain: LREAL;

END_VAR

CASE ssMethodType OF

0:

(* InitializeConditions for UnitDelay: '<S1>/Unit Delay' *)

UnitDelay_DSTATE := 0.0;

1:

(* Gain: '<S1>/Gain' incorporates:

* Inport: '<Root>/U'

* Sum: '<S1>/Sum'

* UnitDelay: '<S1>/Unit Delay' *)

rtb_Gain := (U - UnitDelay_DSTATE) * 1.1;

(* Outport: '<Root>/Y' *)

Y := rtb_Gain;

(* Update for UnitDelay: '<S1>/Unit Delay' *)

UnitDelay_DSTATE := rtb_Gain;

END_CASE;

END_FUNCTION_BLOCK

Page 33: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Struktura generowanego kodu źródłowego Kod ogólny

33

(*

*

* File: plcdemo_simple_subsystem.st

*

* IEC 61131-3 Structured Text (ST) code generated for

subsystem

"plcdemo_simple_subsystem/SimpleSubsystem"

*

* Model name : plcdemo_simple_subsystem

* Model version : 1.61

* Model creator : The MathWorks, Inc.

* Model last modified by : The MathWorks, Inc.

* Model last modified on : Sat Jul 23 05:44:03 2016

* Model sample time : 0.1s

* Subsystem name :

plcdemo_simple_subsystem/SimpleSubsystem

* Subsystem sample time : 0.1s

* Simulink PLC Coder version : 2.2 (R2016b) 25-Aug-

2016

* ST code generated on : Fri Oct 28 12:30:55 2016

*

* Target IDE selection : Generic

* Test Bench included : No

*

*)

FUNCTION_BLOCK SimpleSubsystem

VAR_INPUT

ssMethodType: SINT;

U: LREAL;

END_VAR

VAR_OUTPUT

Y: LREAL;

END_VAR

Struktura kodu:1. Komentarze z informacjami.2. Rozpoczęcie bloku funkcji.3. Deklaracja zmiennych

1.

2.

3.

Page 34: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Struktura generowanego kodu źródłowego Kod ogólny

34

VAR

UnitDelay_DSTATE: LREAL;

END_VAR

VAR_TEMP

rtb_Gain: LREAL;

END_VAR

CASE ssMethodType OF

0:

(* InitializeConditions for UnitDelay: '<S1>/Unit Delay' *)

UnitDelay_DSTATE := 0.0;

1:

(* Gain: '<S1>/Gain' incorporates:

* Inport: '<Root>/U'

* Sum: '<S1>/Sum'

* UnitDelay: '<S1>/Unit Delay' *)

rtb_Gain := (U - UnitDelay_DSTATE) * 1.1;

(* Outport: '<Root>/Y' *)

Y := rtb_Gain;

(* Update for UnitDelay: '<S1>/Unit Delay' *)

UnitDelay_DSTATE := rtb_Gain;

END_CASE;

END_FUNCTION_BLOCK

Struktura kodu:3. cd. Deklaracja zmiennych4. Funkcja CASE:

pozwala na podział na kilka etapów, takich jak:• sekcja warunków

początkowych (4a),• główny kod programu (4b)Kontrola trybu następuje poprzez zmianę wartości zmiennej użytej w funkcji CASE (tutaj ssMethodType)5. Zakończenie bloku funkcji

4a..

4.

3.cd.

4b.

Page 35: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na PLC Siemens

Uwagi wstępne:w laboratorium używane jest oprogramowanie TIA 11,

Simulink PLC Coder w MATLAB 2016a wskazujekompatybilność z TIA 13 jednak generowany kod podrobnym przystosowaniu działa bez zarzutu.

Zmienna TRYB (typu INT) to zmienna odpowiedzialna zaprzełączanie trybów w głównej funkcji CASEwygenerowanego kodu ST.

35

Page 36: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na PLC Siemens

1. Zaimportować kod źródłowy z Simulink PLC Coder.Zakładka External source files.

36

Page 37: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na PLC Siemens

2. Wygenerować bloki funkcyjne z kodu źródłowego.Zostaną wygenerowane nowe bloki funkcyjne, któremożna wykorzystać w kodzie sterownika.

37

Page 38: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na PLC Siemens

3. Dodać blok „Cyclic interrupt” w „Program blocks” w celuzapewnienia pracy z określonym okresem wcześniejzadeklarowanym w modelu Simulink.

4. Umieszczenie wybranych funkcji w drabince programu.5. Zadeklarowanie wymaganych zmiennych i przypisanie

im pamięci.6. Zmienne macierzowe dodaje się w blokach typu „Data

block” w zakładce „Program blocks”

38

Page 39: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na PLC Siemens

39

Page 40: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na PLC Siemens

Dla macierzy deklarujemy nazwę zmiennej, następnie jej typ wpisując wg wzoru:Array [0 .. X-1] of TYPEGdzie X-1 to liczba elementów macierzy minus 1, TYPE zaś typ danych np. LREALZmienne zostaną utworzone automatycznie. Dopuszczalne są tylko jednowymiarowe. Jeśli kodkorzysta z tablicy dwuwymiarowej, należy zadeklarować tablicę o długości wszystkich pól macierzydwuwymiarowej np. macierz 3x2 to będzie Array [0 .. 5] of LREAL

W wypadku korzystania z macierzy jako danych wejściowych/wyjściowych z bloków funkcyjnych,należy podać tylko nazwę bloku pamięci Data block oraz nazwę zmiennej bez uzupełniana indeksu(nawiasy „[]” należy skasować jeśli zostaną podpowiedziane w czasie wpisywania nazwy zmiennej)

40

Page 41: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na PLC Siemens

7. Dodać blok „Startup”.Blok ten wykorzystany zostanie do wprowadzenia warunków

początkowych. Można to zrobić na dwa sposoby:• dodać blok funkcyjny z przygotowanym kodem do bloku „Startup”,

wykonać go przy zmiennej procesowej nazwanej TRYB o wartości 0 (wykonasię wtedy część kodu dla warunków początkowych wygenerowanego kodu), anastępnie przestawić TRYB na 1 aby kolejne iteracje wykonywane były już wnormalnym trybie pracy,

• za pomocą bloków MOVE (dla zmiennych) oraz FIELDWRITE (dlazmiennych macierzowych) przypisać wartości początkowe wszystkichwymaganych zmiennych w bloku „Startup”, a następnie przestawić TRYB na 1aby kolejne iteracje wykonywane były już w normalnym trybie pracy,

W niektórych wypadkach (w zależności od kopatybilności wybranego IDE) przyblokach funkcyjnych nie pojawia się wejście związane ze zmienną TRYB (jest onaustawiana automatycznie), wtedy nie ma potrzeby deklarować warunkówpoczątkowych dla samej funkcji wewnątrz bloku „Startup”.W bloku FIELDWRITE na wyjściu zawsze wskazujemy element początkowymacierzy, zaś w polu INDEX wskazujemy, które pole macierzy ma zostać zapisane.

41

Page 42: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na PLC Siemens

8. Sprawdzić przepływ danych przez wszystkie bloki iuruchomić program.

Zmienne można podglądać za pomocą tablic „Watch table” lubw oknie kodu wykonywanego przez sterownik.

42

Page 43: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na PLC Siemens

43

Page 44: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na GeFanuc

Uwagi wstępne:IDE GeFanuc nie jest bezpośrednio wspierane przez

Simulink PLC Coder, jednak możliwe jest wygenerowaniekodu źródłowego w języku ST, które następnie po drobnychmodyfikacjach można wykorzystać w sterownikach typuGeFanuc PAC.

Zmienna TRYB (typu INT) to zmienna odpowiedzialna zaprzełączanie trybów w głównej funkcji CASEwygenerowanego kodu ST.

44

Page 45: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na GeFanuc

1. Dodać w projekcie w Proficy Machine w sekcji blokówprogramu blok typu ST.

2. Skopiować wygenerowany kod programu do nowegobloku metodą kopiuj-wklej (wygenerowany kod jest wpostaci tekstowej, który może być otwarty np.Notatnikiem Windows)

3. W oparciu o sekcję deklaracji zmiennych języka ST należyw projekcie w zakładce „Variables” utworzyć ręczniewszystkie wymagane zmienne.

4. Po deklaracji zmiennych należy z kodu usunąć wszystkiedeklaracje zmiennych oraz początkowy i kończący tagFUNCTION_BLOCK.

45

Page 46: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na GeFanuc

5. Aby wykorzystać dodany kod, w bloku programu _MAIN,blokiem funkcyjnym CALL należy wywołać kod ST.

6. Przed uruchomieniem, podobnie jak w wypadkusterowników Siemiens, należy zadeklarować wartościpoczątkowe wymaganych zmiennych.

W tym celu można skorzystać ze zmiennej systemowej %S1, która jest

uruchamiana w pierwszym cyklu sterownika. Procedura jest podobna jak wsterownikach Siemens, należy dokonać zapisania wartości odpowiednichzmiennych (np. blokami MOVE) lub wywołać dodany kod ze zmienną TRYB owartości 0. Po deklaracji wszystkich wymaganych zmiennych należyprzestawić zmienną TRYB na wartość 1.

7. Sprawdzić przepływ danych przez wszystkie bloki iuruchomić program.

46

Page 47: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderProcedura wdrażania kodu z Simulink PLC Coder na GeFanuc

47

Page 48: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderPrzykładowe wygenerowane kody i ogólne wskazówki

Proste mnożenie macierzowe przez stałe wartości

48

FUNCTION_BLOCK Subsystem

VAR_INPUT

In1: ARRAY [0..2] OF LREAL;

END_VAR

VAR_OUTPUT

Out1: ARRAY [0..2] OF LREAL;

END_VAR

VAR_IN_OUT

END_VAR

VAR

END_VAR

(* Outport: '<Root>/Out1' incorporates:

* Gain: '<S1>/Gain'

* Inport: '<Root>/In1' *)

Out1[0] := 3.0 * In1[0];

Out1[1] := 4.0 * In1[1];

Out1[2] := 5.0 * In1[2];

END_FUNCTION_BLOCK

Page 49: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderPrzykładowe wygenerowane kody i ogólne wskazówki

Mnożenie dwóch macierzy o stałych 2x4 i 4x2 oraz macierz odwrotna wyniku

49

FUNCTION_BLOCK Subsystem2

VAR_INPUT

A: ARRAY [0..7] OF LREAL;

B: ARRAY [0..7] OF LREAL;

END_VAR

VAR_OUTPUT

Out1: ARRAY [0..3] OF LREAL;

END_VAR

VAR_IN_OUT

END_VAR

VAR

y: ARRAY [0..3] OF LREAL;

b_r: LREAL;

t: LREAL;

tmp: ARRAY [0..7] OF LREAL;

tmp_0: ARRAY [0..7] OF LREAL;

b_i: DINT;

i_0: DINT;

rtb_y_idx_0: LREAL;

rtb_y_idx_1: LREAL;

rtb_y_idx_2: LREAL;

END_VAR

(* MATLAB Function: '<S1>/MATLAB Function' incorporates:

* Inport: '<Root>/A'

* Inport: '<Root>/B' *)

(* MATLAB Function 'Subsystem2/MATLAB Function': '<S2>:1' *)

(* '<S2>:1:3' A = [a b c d; e f g h]; *)

(* '<S2>:1:4' B = [i j ; k l; m n; o p]; *)

(* '<S2>:1:5' y= [1 1; 1 1]; *)

(* '<S2>:1:6' y = inv(A * B); *)

tmp[0] := A[0];

tmp[2] := A[1];

tmp[4] := A[2];

tmp[6] := A[3];

tmp[1] := A[4];

tmp[3] := A[5];

tmp[5] := A[6];

tmp[7] := A[7];

tmp_0[0] := B[0];

tmp_0[4] := B[1];

tmp_0[1] := B[2];

tmp_0[5] := B[3];

tmp_0[2] := B[4];

tmp_0[6] := B[5];

tmp_0[3] := B[6];

tmp_0[7] := B[7];

(* MATLAB Function: '<S1>/MATLAB Function' *)

FOR i_0 := 0 TO 1 DO

FOR b_i := 0 TO 1 DO

y[b_i + (i_0 * 2)] := 0.0;

y[b_i + (i_0 * 2)] := y[(i_0 * 2) + b_i] + (tmp_0[i_0 * 4] * tmp[b_i]);

y[b_i + (i_0 * 2)] := (tmp_0[(i_0 * 4) + 1] * tmp[b_i + 2]) + y[(i_0 * 2) + b_i];

y[b_i + (i_0 * 2)] := (tmp_0[(i_0 * 4) + 2] * tmp[b_i + 4]) + y[(i_0 * 2) + b_i];

y[b_i + (i_0 * 2)] := (tmp_0[(i_0 * 4) + 3] * tmp[b_i + 6]) + y[(i_0 * 2) + b_i];

END_FOR;

END_FOR;

IF ABS(y[1]) > ABS(y[0]) THEN

b_r := y[0] / y[1];

t := 1.0 / ((b_r * y[3]) - y[2]);

rtb_y_idx_0 := (y[3] / y[1]) * t;

rtb_y_idx_1 := -t;

rtb_y_idx_2 := (( -y[2]) / y[1]) * t;

t := b_r * t;

ELSE

b_r := y[1] / y[0];

t := 1.0 / (y[3] - (b_r * y[2]));

rtb_y_idx_0 := (y[3] / y[0]) * t;

rtb_y_idx_1 := ( -b_r) * t;

rtb_y_idx_2 := (( -y[2]) / y[0]) * t;

END_IF;

(* Outport: '<Root>/Out1' *)

Out1[0] := rtb_y_idx_0;

Out1[1] := rtb_y_idx_1;

Out1[2] := rtb_y_idx_2;

Out1[3] := t;

END_FUNCTION_BLOCK

function y = fcn(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p)

%#codegen

A = [a b c d; e f g h];

B = [i j ; k l; m n; o p];

y= [1 1; 1 1];

y = inv(A * B);

Page 50: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderPrzykładowe wygenerowane kody i ogólne wskazówki

Układ wykorzystujący RLS do estymacji parametrów inercji pierwszego rzędu oraz inercjapierwszego rzędu jako obiekt z sygnałem quasi-sinusoidalnym na wejściu obiektu

50

Page 51: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderPrzykładowe wygenerowane kody i ogólne wskazówki

51

FUNCTION rt_floord: LREAL

VAR_INPUT

u: LREAL;

END_VAR

VAR_TEMP

END_VAR

rt_floord := DINT_TO_LREAL(TRUNC(u));

IF u = rt_floord THEN

rt_floord := u;

ELSIF u < 0.0 THEN

rt_floord := rt_floord - 1.0;

END_IF;

END_FUNCTION

FUNCTION_BLOCK Sygnal

VAR_INPUT

ssMethodType: INT;

END_VAR

VAR_OUTPUT

Out1: LREAL;

END_VAR

VAR_IN_OUT

END_VAR

VAR

Output_DSTATE: DINT;

y: LREAL;

END_VAR

CASE ssMethodType OF

0:

(* InitializeConditions for UnitDelay: '<S2>/Output' *)

Output_DSTATE := 0;

1:

(* MATLAB Function: '<S1>/MATLAB Function' incorporates:

* UnitDelay: '<S2>/Output' *)

(* MATLAB Function 'Sygnal U/MATLAB Function': '<S3>:1' *)

(* '<S3>:1:6' y=sin(mod(double(t)/100,100)); *)

y := DINT_TO_LREAL(Output_DSTATE) / 100.0;

(* Outport: '<Root>/Out1' incorporates:

* MATLAB Function: '<S1>/MATLAB Function' *)

Out1 := SIN(y - (rt_floord(u := y / 100.0) * 100.0));

(* Update for UnitDelay: '<S2>/Output' incorporates:

* Constant: '<S4>/FixPt Constant'

* Sum: '<S4>/FixPt Sum1'

* Switch: '<S5>/FixPt Switch'

* UnitDelay: '<S2>/Output' *)

Output_DSTATE := Output_DSTATE + 1;

END_CASE;

END_FUNCTION_BLOCK

Sygnał quasi-sinusoidalny generowany w oparciu o modulo 10 wartości licznika

Page 52: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderPrzykładowe wygenerowane kody i ogólne wskazówki

52

FUNCTION_BLOCK Inercja

VAR_INPUT

u: LREAL;

A: LREAL;

B: LREAL;

yp: LREAL;

END_VAR

VAR_OUTPUT

y: LREAL;

END_VAR

VAR_IN_OUT

END_VAR

VAR

END_VAR

(* MATLAB Function 'Inercja/MATLAB Function': '<S2>:1' *)

(* '<S2>:1:6' y=yp*A + u*B; *)

(* Outport: '<Root>/y' incorporates:

* Inport: '<Root>/A'

* Inport: '<Root>/B'

* Inport: '<Root>/u'

* Inport: '<Root>/yp'

* MATLAB Function: '<S1>/MATLAB Function' *)

y := (yp * A) + (u * B);

END_FUNCTION_BLOCK

Inercja pierwszego rzędu o zadawanych parametrach A i B

Page 53: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderPrzykładowe wygenerowane kody i ogólne wskazówki

53

FUNCTION_BLOCK RLS0

VAR_INPUT

y: LREAL;

u: LREAL;

bp: ARRAY [0..1] OF LREAL;

Pp: ARRAY [0..3] OF LREAL;

lambda: LREAL;

yk1: LREAL;

END_VAR

VAR_OUTPUT

b: ARRAY [0..1] OF LREAL;

Pn: ARRAY [0..3] OF LREAL;

END_VAR

VAR_IN_OUT

END_VAR

VAR

fi: ARRAY [0..1] OF LREAL;

e: LREAL;

b_B: LREAL;

rtb_Pn: ARRAY [0..3] OF LREAL;

tmp: ARRAY [0..3] OF LREAL;

b_i: DINT;

temp1: LREAL;

fi_idx_0: LREAL;

fi_idx_2: LREAL;

fi_idx_1: LREAL;

fi_idx_3: LREAL;

END_VAR

(* MATLAB Function: '<S1>/MATLAB Function' incorporates:

* Inport: '<Root>/Pp'

* Inport: '<Root>/bp'

* Inport: '<Root>/lambda '

* Inport: '<Root>/u '

* Inport: '<Root>/yk1 '

* Inport: '<Root>/yn' *)

(* MATLAB Function 'RLS/MATLAB Function': '<S2>:1' *)

(* '<S2>:1:3' b= [ 1;1]; *)

(* '<S2>:1:4' fi = [yk1; u]; *)

Implementacja RLS do estymacji parametrów A i B

fi[0] := yk1;

fi[1] := u;

(* '<S2>:1:5' Pn = [1 1; 1 1]; *)

(* '<S2>:1:7' Pn = (Pp - ((Pp*(fi*fi')*Pp)/(lambda + (fi'*Pp*fi))))/lambda; *)

b_B := ((((yk1 * Pp[0]) + (u * Pp[1])) * yk1) + (((yk1 * Pp[2]) + (u * Pp[3])) * u)) + lambda;

fi_idx_0 := yk1 * yk1;

fi_idx_2 := yk1 * u;

fi_idx_1 := u * yk1;

fi_idx_3 := u * u;

(* '<S2>:1:8' K = Pn*fi; *)

(* '<S2>:1:9' e= yn - bp'*fi; *)

temp1 := 0.0;

FOR b_i := 0 TO 1 DO

tmp[b_i] := 0.0;

tmp[b_i] := (Pp[b_i] * fi_idx_0) + tmp[b_i];

tmp[b_i] := (Pp[b_i + 2] * fi_idx_1) + tmp[b_i];

tmp[b_i + 2] := 0.0;

tmp[b_i + 2] := tmp[b_i + 2] + (Pp[b_i] * fi_idx_2);

tmp[b_i + 2] := (Pp[b_i + 2] * fi_idx_3) + tmp[b_i + 2];

rtb_Pn[b_i] := (Pp[b_i] - (((tmp[b_i + 2] * Pp[1]) + (tmp[b_i] * Pp[0])) / b_B)) / lambda;

rtb_Pn[b_i + 2] := (Pp[b_i + 2] - (((tmp[b_i + 2] * Pp[3]) + (tmp[b_i] * Pp[2])) / b_B)) / lambda;

temp1 := (bp[b_i] * fi[b_i]) + temp1;

END_FOR;

e := y - temp1;

(* '<S2>:1:10' b= bp + K * e; *)

(* Outport: '<Root>/b' incorporates:

* Inport: '<Root>/bp'

* Inport: '<Root>/u '

* Inport: '<Root>/yk1 '

* MATLAB Function: '<S1>/MATLAB Function' *)

b[0] := (((rtb_Pn[0] * yk1) + (rtb_Pn[2] * u)) * e) + bp[0];

b[1] := (((rtb_Pn[1] * yk1) + (rtb_Pn[3] * u)) * e) + bp[1];

(* Outport: '<Root>/Pn' *)

Pn[0] := rtb_Pn[0];

Pn[1] := rtb_Pn[1];

Pn[2] := rtb_Pn[2];

Pn[3] := rtb_Pn[3];

END_FUNCTION_BLOCK

Page 54: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderPrzykładowe wygenerowane kody i ogólne wskazówki

54

Page 55: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Przykładowe zastosowania Simulink PLC CoderWskazówki

55

Blok MATLAB Function jest wspierany, przez co ciągi operacji na macierzach można wbardzo prosty sposób przenosić na sterownik PLC.

W wypadku, gdy kompilator ma problem z ustaleniem wielkości macierzy, możnaposiłkować się przypisaniem jako warunek początkowy tablicy z przykładowymiwartościami.

Każdy subsystem generuje plik z językiem ST o nazwie modelu Simulink. Przez togenerowanie kolejnych subsystemów nadpisuje kody pozostałych subsystemów. Należy otym pamiętać i np. po generacji kodu zmieniać nazwę pliku wynikowego.

Etykiety używane w Simulinku dla subsystemów będą domyślnymi nazwamigenerowanych bloków funkcyjnych w TIA Portal.

Page 56: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Bibliografia

Materiał przygotowany w oparciu o dokumentacje• Simulink PLC Coder MATLAB 2016a• Proficy Machine Edition• TIA Portal 11

56

Page 57: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

Dziękuję za uwagę

57

Page 58: Sterowniki Programowalne (SP) –Wykład í î · • Beckhoff®TwinCAT®2.11 or 3 • KW-Software MULTIPROG®5.0 or 5.5 ... FUNCTION_BLOCK. 45. Przykładowe zastosowania Simulink

58