W książce opisano: • podstawy języka C, stosowanego najczęściej do oprogramowania urządzeń fizycznych; • podstawy i zaawansowane techniki programowania orientowanego obiektowo w języku C++, wykorzystywanego między innymi do tworzenia interfejsu użytkownika; • podstawy programowania symulacji w środowisku Matlaba/Simulinka, nieodzowne na etapie projektowania nowych urządzeń; • zjawiska zachodzące w dyskretnym układzie regulacji; • modelowanie obiektów dyskretnych; • algorytmy PID, predykcyjny i identyfikacji parametrycznej
Zamieszczono też wiele przykładów i ćwiczeń programistycznych, które umożliwiają praktyczne opanowanie materiału oraz zastosowanie poznanych metod i narzędzi do zaprogramowania kompletnego systemu do symulacji układów dyskretnych.
Książka jest polecana studentom automatyki i robotyki wyższych uczelni technicznych, a także inżynierom automatykom zainteresowanym programowaniem systemów sterowania.
Spis treści:
Część I Programowanie niskiego poziomu w języku C Wprowadzenie 1 Typy 1.1 Fundamentalne typy danych 1.2 Typy pochodne 1.3 Typy niekompletne 2 Stałe 2.1 Stałe całkowitoliczbowe 2.2 Stałe zmiennopozycyjne 2.3 Stale znakowe 2.4 Znaki przestankowe 2.5 Stałe łańcuchowe 2.6 Stałe wyliczeniowe 3 Zmienne i ich nazwy 3.1 Kwalifikatory typu 3.2 Kwalifikatory miejsca 3.3 Kombinacje kwalifikatorów 3.4 Zakres ważności nazw zmiennych 4 Operatory i wyrażenia 4.1 Wyrażenia 4.2 Podstawowe operatory arytmetyczne 4.3 Operatory inkrementacji i dekrementacji 4.4 Operatory relacyjne 4.5 Operatory logiczne 4.6 Operator przecinka 4.7 Operatory bitowe 4.8 Operatory przypisania 4.9 Konwersje typów i operatory konwersji (rzutowania) 4.10 Wyrażenie warunkowe 4.11 Operator sizeof 4.12 Priorytety operatorów 4.13 Punkt sekwencji 5 Instrukcje sterujące przebiegiem programu 5.1 Instrukcje i bloki 5.2 Instrukcja warunkowa 5.3 Instrukcja wyboru 5.4 Pętle 5.5 Sterowanie pętlami --- break i continua 5.6 Instrukcja skoku 6 Funkcje 6.1 Zwracanie wartości przez funkcję 6.2 Przesyłanie argumentów do funkcji przez wartość 6.3 Deklaracja zapowiadająca funkcji i pliki nagłówkowe 6.4 Rekurencja wywołań funkcji 6.5 Stary styl definicji funkcji 6.6 Funkcja o zmiennej liczbie argumentów wywołania 7 Wskaźniki i tablice 7.1 Definiowanie wskaźników 7.2 Wskaźniki jako argumenty funkcji 7.3 Tablice 7.4 Wskaźniki a tablice 7.5 Działania arytmetyczne na wskaźnikach 7.6 Wskaźniki nieokreślonego typu (void) 7.7 Wskaźniki do wskaźników 7.8 Wskaźniki do funkcji 7.9 Wskaźniki a kwalifikator const 8 Struktury i unie 8.1 Deklarowanie i definiowanie struktur 8.2 Praca ze strukturami 8.3 Przesyłanie struktur do i z funkcji 8.4 Tablice struktur 8.5 Struktury alokowane dynamicznie 8.6 Deklaracje typu 8.7 Unie 8.8 Pola bitowe 9 Preprocesor 9.1 Załączanie plików 9.2 Kompilacja warunkowa 9.3 Definiowanie symboli 9.4 Definiowanie makr 9.5 Makra predefiniowane 9.6 Inne dyrektywy
Część II Programowanie obiektowe w języku C ++ Wprowadzenie 10 Język C++ a język C 10.1 Stałe 10.2 Nowe typy danych 10.3 Referencje 10.4 Nazwy zastępcze 10.5 Priorytety operatorów języka C ++ 11 Funkcje w języku C++ 11.1 Deklarowanie nazw funkcji 11.2 Funkcje typu „inline" 11.3 Argumenty domniemane funkcji 11.4 Nienazwany argument funkcji 11.5 Przekazywanie argumentów funkcji przez referencję 11.6 Przeładowanie nazw funkcji 11.7 Typy rozróżniane przy przeładowaniu 11.8 Etapy dopasowania przeładowanycłi funkcji 12 Klasy 12.1 Deklarowanie i definiowanie klas 12.2 Elementy składowe klasy 12.3 Enkapsulacja składników klasy 12.4 Deklaracja przyjaźni 12.5 Funkcje składowe 12.6 Funkcje składowe typu „inline" 12.7 Wskaźnik „this" 12.8 Przesłanianie nazw 12.9 Statyczny składnik klasy 12.10 Statyczna funkcja składowa klasy 12.11 Stały składnik klasy 12.12 Funkcja składowa typu const 12.13 Składnik dostrajamy (mutable) 12.14 Funkcja składowa typu volatile 12.15 Wskaźniki do składników klasy 12.16 Struktury i unie jako klasy 13. Konstruktory i destruktory 13.1 Deklarowanie i definiowanie konstruktora 13.2 Deklarowanie i definiowanie destruktora 13.3 Automatyczne wywołania konstruktora i destruktora 13.4 Przeładowanie konstruktora 13.5 Argumenty domniemane i konstruktor domniemany 13.6 Lista inicjalizacyjna konstruktora 13.7 Konstruktor kopiujący 13.8 Niepubliczny konstruktor 13.9 Singletony 14 Konwersja typów 14.1 Potrzeba konwersji 14.2 Konwersje automatyczne 14.3 Konstruktor jako konwerter 14.4 Jawne wywołanie konwersji 14.5 Rezygnacja z konwersji automatycznych 14.6 Operator konwersji 14.7 Jawne konwersje typów w języku C++ 14.8 Konwersje a przeładowanie funkcji 15 Przeładowanie operatorów 15.1 Zasady przeładowania operatorów 15.2 Funkcja operatorowa jako składnik klasy 15.3 Globalna funkcja operatorowa 15.4 Operator przypisania 15.5 Operator przypisania a pseudoprzypisania 15.6 Operator pobrania adresu 15.7 Operator przecinka 15.8 Operatory new i delete 15.9 Operator tablicowy [ ] 15.10 Operator funkcyjny ( ) 15.11 Operator odniesienia przez wskaźnik - > 15.12 Operator odniesienia przez wskaźnik do składnika - >* 15.13 Operatory inkrementacji i dekrementacji 16 Obsługa sytuacji wyjątkowych 16.1 Zgłaszanie wyjątków 16.2 Obsługa wyjątków 16.3 Rozróżnianie wyjątków 16.4 Wyjątki nigdzie nieobsłużone 16.5 Specyfikacje wyjątków 16.6 Różnice między wywołaniem funkcji a obsługą wyjątków 16.7 Wyjątki w konstruktorze 16.8 Wyjątki w destruktorze 16.9 Blok try na poziomie funkcji 16.10 Wyjątkowe bezpieczeństwo 16.11 Standardowe klasy wyjątków 17 Dziedziczenie i zawieranie klas 17.1 Zawieranie klas 17.2 Dziedziczenie 17.3 Reguła przesłaniania 17.4 Konstruktory klas podstawowych i składowych 17.5 Zagnieżdżona deklaracja klasy 17.6 Kolejność konstrukcji i destrukcji obiektów składowych 17.7 Sposoby dziedziczenia 17.8 Czego się nie dziedziczy? 17.9 Konwersje standardowe przy dziedziczeniu 17.10 Dziedziczenie wielokrotne 17.11 Wieloznaczność przy dziedziczeniu wielokrotnym 17.12 Dziedziczenie wirtualne 18 Funkcje wirtualne 18.1 Podstawy 18.2 Technikalia 18.3 Kiedy wystąpi polimorfizm? 18.4 Kiedy nie wystąpi polimorfizm? 18.5 Nietypowe funkcje wirtualne 18.6 Identyfikacja typu (RTTI) 18.7 Funkcje czysto wirtualne 18.8 Klasy abstrakcyjne 18.9 Wirtualne konstruktory i funkcje globalne 19 Szablony 19.1 Szablony funkcji 19.2 Szablony klas 19.3 Sposoby ukonkretnienia szablonu 19.4 Specjalizacja szablonu 19.5 Szablony z wieloma parametrami 19.6 Statyczny składnik w szablonie klasy 19.7 Szablony a przyjaźń 19.8 Inne uwagi dotyczące szablonów 20 Przestrzenie nazw 20.1 Deklarowanie przestrzeni nazw 20.2 Używanie przestrzeni nazw 20.3 Dyrektywa Rusing 20.4 Instrukcja Rusing 20.5 Anonimowe przestrzenie nazw 21 Elementy biblioteki standardowej 21.1 Iteratory 21.2 Klasy-pojemniki (kontenery) 21.3 Obiekty funkcyjne 21.4 Standardowe algorytmy 21.5 Klasa string 21.6 Standardowe wejście i wyjście
Część III Programowanie symulacji Simulinka Wprowadzenie 22 Podstawy działania s-funkcji 22.1 Matematyczny opis bloku 22.2 Fazy symulacji 22.3 Bezpośrednie przejście sygnału przez blok 22.4 Dynamiczny rozmiar wejść i wyjść 22.5 Czas próbkowania dla bloku 23 S-funkcje w języku Matlaba 23.1 Format s-funkcji w języku Matlaba 23.2 Cechy s-funkcji 23.3 Przykład s-funkcji — wzmacniacz 23.4 Przykład s-funkcji — dynamika ciągła 23.5 Przykład s-funkcji dynamika dyskretna 23.6 Przykład s-funkcji — układ hybrydowy 23.7 Wersja 2 interfejsu s-fmkcji w języku Matlaba 24 S-funkcje w języku C 24.1 Kolejność wywoływania metod 24.2 Struktura SimStruct 24.3 Metody 24.4 Szablon s-funkcji w języku C 24.5 Kompilacja s-funkcji i osadzenie w modelu 24.6 Kreator s-funkcji 25 Definiowanie właściwości bloku s-funkcji 25.1 Zmienne s-funkcji 25.2 Sygnały wejściowe bloku 25.3 Sygnały wyjściowe bloku 25.4 Stany bloku 25.5 Parametry bloku s-funkcji 25.6 Zmienne robocze bloku 25.7 Definiowanie czasów próbkowania 25.8 Detekcja przejść przez zero 25.9 Definiowanie własnych typów danych 25.10 Obsługa błędów 25.11 Opcje symulacji 26 S-funkcje w języku C++ 26.1 Szablon s-funkcji w języku C++ 26.2 Przechowywanie obiektów w pamięci 26.3 Kompilacja s-funkcji w języku C+
Część IV Symulowanie układów regulacji Wprowadzenie 27 Dokumentacja w projektach programistycznych 27.1 Doxygen - wstęp 27.2 Dokumentowanie kodu 27.3 Formatowanie dokumentacji 28 Dyskretny obiekt symulacji 28.1 Model matematyczny 28.2 Programowanie symulacji modelu ARMAX 28.3 Sprawdzanie poprawności implementacji 29 Dyskretna pętla regulacji i interfejs dla klas regulatorów 29.1 Dyskretna pętla regulacji 29.2 Interfejs klasy regulatora 29.3 Prosty regulator 29.4 Programowanie dyskretnej pętli regulacji 29.5 Sprawdzanie poprawności implementacji 30 Regulacja PID 30.1 Ciągły regulator PID 30.2 Dyskretna postać regulatora PID 30.3 Implementacja regulatora PID 30.4 Regulator PID samonastrajalny 31 Regulacja predykcyjna 31.1 Pojęcia związane z regulacją predykcyjna 31.2 Algorytm regulacji predykcyjnej uogólnionej 31.3 Implementacja algorytmu GPC 31.4 Sprawdzanie poprawności działania 32 Identyfikacja parametryczna 32.1 Rekurencyjna ważona metoda najmniejszych kwadratów 32.2 Modyfikacje RMNK 32.3 Rozszerzona RMNK 32.4 Szybki algorytm RMNK 32.5 Implementacja algorytmu identyfikacji 33 Graficzny interfejs użytkownika 33.1 Trójstopniowa struktura programów w środowisku KDE 33.2 Sygnały i gniazda 33.3 Sygnały i gniazda w akcji 33.4 Grafika w KDE — tworzenie wykresu 33.5 Wykres w aplikacji
|