Programowanie Systemów Sterowania

Wielkość: px
Rozpocząć pokaz od strony:

Download "Programowanie Systemów Sterowania"

Transkrypt

1 Programowanie Systemów Sterowania Dr inż. Dariusz Bismor Gliwice, 2007

2 S-funkcje System-functions reprezentacja bloku Simulinka w języku programowania S-funkcje stanowią wygodny mechanizm poszerzający możliwości Simulinka Zastosowanie s-funkcji obejmuje: tworzenie nowych bloków funkcyjnych tworzenie bloków sterowników urządzeń wykorzystywanie istniejącego kodu w C, C++, Fortranie, Adzie opis systemu jako układu równań przyspieszanie czasu symulacji dodawanie animacji do symulacji

3 Jak działają S-funkcje? Blok w Simulinku: wejście u stany x wyjście y y = fo( t, x, u) x& = c fd ( t, x, u) xd k + 1 = fu ( t, x, x = x d + x c, u ) równanie wyjścia równanie różniczkowe równanie różnicowe

4 Jak działają S-funkcje? Fazy symulacji: Inicjalizacja Obliczenie czasu następnej próbki Pętla symulacji Obliczenie wyjść Aktualizacja stanów dyskretnych Obliczenie pochodnych Obliczenie wyjść Obliczenie pochodnych Lokalizacja przejść przez zero Całkowanie

5 Jak działają S-funkcje? Metody wywołania S-funkcji: Inicjalizacja: utworzenie struktury SimStruct ustawienie ilości i wymiarów wejść i wyjść ustawienie okresu próbkowania dla bloku przydzielenie pamięci dla stanów i tablicy sizes

6 Jak działają S-funkcje? Metody wywołania S-funkcji (c.d): Obliczenie następnego kroku próbkowania (dla bloków ze zmiennym próbkowaniem) Obliczenie wyjść Aktualizacja stanów dyskretnych Całkowanie równań ciągłych (z małym krokiem całkowania) Zakończenie symulacji

7 S-funkcja jako M-file Składnia i parametry funkcji: [sys, x0, str, ts] = funkcja(t, x, u, flaga, p1, p2,...) Zwracana Warunki Nieużywane, Wektor wartość początkowe czasów [] Nazwa próbkowania Bieżący funkcji Wektor Metoda czas stanu wejść Parametry wywołania wywołania Metody wywołania: flaga = 0 - inicjalizacja flaga = 1 - całkowanie równań ciągłych flaga = 2 - obliczanie równań dyskretnych flaga = 3 - obliczenie wyjść s-funkcji flaga = 4 - obliczenie czasu następnej próbki flaga = 9 - zakończenie symulacji

8 S-funkcja jako M-file Przykładowa s-funkcja wzmacniacz: function [sys, x0, str, ts] = pomnoz(t, x, u, flaga, p1) switch flaga, case 0 [sys, x0, str, ts] = inicjalizacja; case 3 sys = oblicz_wyjscie(t, x, u, p1 ); case {1, 2, 4, 9} sys = []; otherwise error([ Nieobsługiwana flaga, num2str(flaga)]); end

9 S-funkcja jako M-file Przykładowa s-funkcja wzmacniacz: function [sys, x0, str, ts] = inicjalizacja mysizes = simsizes; mysizes.numcontstates = 0; mysizes.numdiscstates = 0; mysizes.numinputs = 1; mysizes.numoutputs = 1; mysizes.dirfeedthrough = 1; mysizes.numsampletimes = 1; sys = simsizes(mysizes) x0 = []; str = []; ts = [-1, 0] %Dziedziczony czas próbkowania

10 S-funkcja jako M-file Przykładowa s-funkcja wzmacniacz: function sys = oblicz_wyjscie(t, x, u, mnoznik) sys = mnoznik.*u;

11 S-funkcja dla obiektów ciągłych function [sys,x0,str,ts] = csfunc(t,x,u,flag) % Macierze modelu układu ciągłego w postaci równań stanu: A=[ ; 1 0]; B=[ 1-7; 0-2]; C=[ 0 2; 1-5]; D=[-3 0; 1 0]; % Obsługa flagi. switch flag, case 0 % Initializacja [sys,x0,str,ts]=mdlinitializesizes(a,b,c,d); case 1 % Obliczenie pochodnych sys = mdlderivatives(t,x,u,a,b,c,d); case 3 % Obliczenie wyjść sys = mdloutputs(t,x,u,a,b,c,d); case { 2, 4, 9 } % Nieużywane flagi sys = []; otherwise % Obsługa błędów error(['unhandled flag = ',num2str(flag)]); end

12 S-funkcja dla obiektów ciągłych function [sys,x0,str,ts] = mdlinitializesizes(a,b,c,d) sizes = simsizes; sizes.numcontstates = 2; sizes.numdiscstates = 0; sizes.numoutputs = 2; sizes.numinputs = 2; sizes.dirfeedthrough = 1; % Ponieważ macierz D niezerowa sizes.numsampletimes = 1; sys = simsizes(sizes); % Zerowe warunki początkowe. x0 = zeros(2,1); str = []; % Inicjalizacja macierzy czasów próbkowania bloku [tp, off] % Dla układu ciągłego należy użyć wartości tp=0 i off=0 ts = [0 0];

13 S-funkcja dla obiektów ciągłych function sys = mdlderivatives(t,x,u,a,b,c,d) % sys = A*x + B*u; function sys = mdloutputs(t,x,u,a,b,c,d) % sys = C*x + D*u;

14 S-funkcja dla obiektów dyskretnych function [sys,x0,str,ts] = dsfunc(t,x,u,flag) % Macierze modelu układu dyskretnego w postaci równań stanu A=[ ; ]; B=[ ; ]; C=[ ; ]; D=[ ; ]; switch flag, case 0 % Initializacja sys = mdlinitializesizes(a,b,c,d); case 2 % Aktualizacja stanów dyskretnych sys = mdlupdate(t,x,u,a,b,c,d); case 3 % Obliczanie wyjść sys = mdloutputs(t,x,u,a,b,c,d); case {1, 4, 9} % Nieużywane flagi sys = []; otherwise % Obsługa błędów error(['unhandled flag = ',num2str(flag)]); end

15 S-funkcja dla obiektów dyskretnych function [sys,x0,str,ts] = mdlinitializesizes(a,b,c,d) sizes = simsizes; sizes.numcontstates = 0; sizes.numdiscstates = 2; sizes.numoutputs = 2; sizes.numinputs = 2; sizes.dirfeedthrough = 1; sizes.numsampletimes = 1; sys = simsizes(sizes); % Ponieważ macierz D niezerowa x0 = ones(2,1); str = []; ts = [1 0]; % Zerowe warunki macierzowe. % Okres próbkowania: [tp, off]

16 S-funkcja dla obiektów dyskretnych function sys = mdlupdates(t,x,u,a,b,c,d) % sys = A*x + B*u; function sys = mdloutputs(t,x,u,a,b,c,d) % sys = C*x + D*u;

17 S-funkcja dla obiektów mieszanych function [sys,x0,str,ts] = mixedm(t,x,u,flag) % Element całkujący (1/s) połączony szeregowo z opóźnieniem jednostkowym (1/z). % Okres próbkowania i offset dla części dyskretnej: dperiod = 1; doffset = 0; switch flag, case 0 % Initializacja [sys,x0,str,ts] = mdlinitializesizes(dperiod,doffset); case 1 % Obliczanie pochodnych sys = mdlderivatives(t,x,u); case 2 % Aktualizacja stanów dyskretnych sys = mdlupdate(t,x,u,dperiod,doffset); case 3 % Obliczanie wyjść sys = mdloutputs(t,x,u,doffset,dperiod); case {4, 9} % Nieużywane flagi sys = []; otherwise % Obsługa błędów error(['unhandled flag = ',num2str(flag)]); end

18 S-funkcja dla obiektów mieszanych function [sys,x0,str,ts] = mdlinitializesizes(dperiod,doffset) sizes = simsizes; sizes.numcontstates = 1; sizes.numdiscstates = 1; sizes.numoutputs = 1; sizes.numinputs = 1; sizes.dirfeedthrough = 0; sizes.numsampletimes = 2; sys = simsizes(sizes); x0 = ones(2,1); str = []; ts = [0, 0; dperiod, doffset]; % DWA czasy próbkowania

19 S-funkcja dla obiektów mieszanych function sys = mdlderivatives(t,x,u) sys = u; function sys = mdlupdate(t,x,u,dperiod,doffset) % Funkcja aktualizująca stany dyskretne. Poniższy kod sprawdza, czy czas % "t" jest wielokrotnością dyskretnego okresu próbkowania, z dokładnością 1e-8. % Jeżeli tak jest, bieżąca wartość stanu ciągłego (x(1)) jest zwracana jako nowa % wartość stanu dyskretnego if abs(round((t-doffset)/dperiod)-(t-doffset)/dperiod) < 1e-8 sys = x(1); % Wielokrotność dyskr. okresu próbkowania % Przepisanie stanu ciągłego x(1) do stanu dyskretnego else end sys = []; % Czas "t" nie jest wielokrotnością okresu próbkowania % Zwracana pusta macierz symbolizuje brak zmian % stanu dyskretnego

20 S-funkcja dla obiektów mieszanych function sys = mdloutputs(t,x,u,doffset,dperiod) % Funkcja aktualizująca wyjście. Poniższy kod sprawdza, czy czas % "t" jest wielokrotnością dyskretnego okresu próbkowania, z dokładnością 1e-8 % (mdloutputs jest także wywoływana w małym kroku symulacji) % Jeżeli tak jest, bieżąca wartość stanu dyskretnego (x(2)) jest przepisywana na % wyjście. W przeciwnym przypadku zwraca się pustą macierz symbolizującą % brak zmian na wyjściu. if abs(round((t-doffset)/dperiod)-(t-doffset)/dperiod) < 1e-8 sys = x(2); else sys = []; end

21 S-funkcja ze zmiennym okresem próbkowania function [sys,x0,str,ts] = vsfunc(t,x,u,flag) % Przykład s-funkcji ze zmiennym czasem próbkowania. Realizowana funkcja to zmienne % opóźnienie - opóźnienie sygnału na pierwszym wejściu zależy od wartości sygnału na % drugim wejściu: dt = u(2); y(t+dt) = u(t) % switch flag, case 0 [sys,x0,str,ts] = mdlinitializesizes; % Inicjalizacja case 2 sys = mdlupdate(t,x,u); % Aktualiz. stanów dyskretnych case 3 sys = mdloutputs(t,x,u); % Obliczanie wyjść case 4 sys = mdlgettimeofnextvarhit(t,x,u); % Obliczanie czasu nast. próbki case { 1, 9 } sys = []; % Pozostałe flagi otherwise error(['unhandled flag = ',num2str(flag)]); % Ewentualny błąd end

22 S-funkcja ze zmiennym okresem próbkowania function [sys,x0,str,ts] = mdlinitializesizes % sizes = simsizes; sizes.numcontstates = 0; sizes.numdiscstates = 1; sizes.numoutputs = 1; sizes.numinputs = 2; sizes.dirfeedthrough = 1; % flag=4 - wymaganie bezpośredniego sprzężenia sizes.numsampletimes = 1; % wejścia z wyjściem sys = simsizes(sizes); x0 = [0]; str = []; ts = [ 2 0]; % Zerowe warunki początkowe % Zwracana macierz pusta (niewykorzystywany parametr) % Kod dla zmiennego czasu próbkowania

23 S-funkcja ze zmiennym okresem próbkowania function sys = mdlupdate(t,x,u) % Funkcja do aktualizacji stanów dyskretnych sys = u(1); function sys = mdloutputs(t,x,u) % Funkcja do aktualizacji wyjść sys = x(1); function sys = mdlgettimeofnextvarhit(t,x,u) % Funkcja obliczająca czas następnego próbkowania bloku % Uwaga! Jest to czas bezwzględny, a nie przyrost czasu sys = t + u(2);

24 Wersja 2 interfejsu s-funkcji Obecnie istnieje druga wersja interfejsu dla s-funkcji pisanych w języku Matlaba Wersja ta nie posiada ograniczeń wersji pierwszej, jak jedno wejście i jedno wyjście bloku Zapis kodu s-funkcji w wersji 2 interfejsu jest bardzo podobny do kodu w języku C Kod s-funkcji w wersji 2 interfejsu traci podstawową zaletę s-funkcji w wersji pierwszej - prostotę

25 S-funkcje w języku C Najprostszym sposobem zapisania kodu s-funkcji w języku C jest wykorzystanie dostarczanego z Simulinkiem "kreatora" s- funkcji S-funkcję można także zapisać samodzielnie i skompilować przy użyciu dostarczonego skryptu "mex" Trzecim sposobem jest wykorzystanie narzędzi do dziedziczenia kodu Każdy ze sposobów wymaga posiadania zewnętrznych kompilatorów

26 S-funkcje w języku C Interakcja "silnika" Simulinka z s-funkcją napisaną w języku C polega na wywoływaniu odpowiednich funkcji na każdym z etapów symulacji Funkcje te nazywa się metodami odpowiadają one funkcjom pomocniczym dla poszczególnych faz symulacji Liczba metod, za pomocą których można sterować przebiegiem wykonania bloku, jest znacznie większa od faz symulacji s-funkcji w języku Matlaba Każda s-funkcja musi co najmniej implementować metody dla fazy inicjalizacji rozmiarów, inicjalizacji czasów próbkowania, obliczania wyjść i zakończenia symulacji

27 Wywołania metod dla języka C mdlinitializesizes mdlcheckparameters Silnik Simulinka mdlsetinputportframedata mdlsetinputportwidth/mdlsetoutputportwidth mdlsetinputportdimensioninfo/mdlsetoutputportdimensioninfo mdlsetinputportsampletime/mdlsetoutputportsampletime mdlinitializesampletime

28 Wywołania metod dla języka C mdlsetinputportdatatype/mdlsetoutputportdatatype mdlsetdefaultportdatatypes Silnik Simulinka mdlsetinputportcomplexsignal/mdlsetoutputportcomplexsignal mdlsetdefaultportcomplexsignal mdlsetworkwidths mdlstart mdlinitializeconditions mdlcheckparameters mdlprocessparameters mdloutputs

29 Wywołania metod dla języka C Duży krok symulacji mdlprocessparameters mdlgettimeofnextvarhit mdlinitializeconditions mdloutputs mdlupdate

30 Wywołania metod dla języka C mdlderivatives Całkowanie mdlcheckparameters Mały krok symulacji mdloutputs mdlderivatives mdloutputs Detekcja przejść przez 0 mdlzerocrossings mdlterminate

31 Struktura SimStruct Wszystkie metody przyjmują jako parametr wskaźnik do struktury typu SimStruct Struktura ta przechowuje informacje konfiguracyjne bloku Struktura SimStruct jest zdefiniowana w pliku nagłówkowym "simstruct.h" znajdującym się w podkatalogu simulink/include głównego katalogu Matlaba Plik "simstruct.h" zawiera także szereg makr do manipulacji strukturą SimStruct makra te należy traktować jako interfejs struktury Obecnie struktura zawiera 17 składowych takich, jak nazwa bloku, ścieżka do pliku bloku, stan błędu bloku czy wskaźniki do podsystemów bloku

32 S-funkcje w języku C #define S_FUNCTION_NAME nazwa_funkcji #define S_FUNCTION_LEVEL 2 #include simstruc.h static void mdlinitializesizes(simstruct *S){} static void mdlinitializesampletime(simstruct *S){} static void mdloutputs(simstruct *S, int_t tid){} static void mdlterminate(simstruct *S){} /* Kod dodatkowych funkcji */ #ifdef MATLAB_MEX_FILE #include "simulink.c" /* interfejs dla plików MEX */ #else #include "cg_sfun.h" /* Funkcje dla generacji kodu */ #endif

33 S-funkcja w języku C - przykład #define S_FUNCTION_NAME cpomnoz #define S_FUNCTION_LEVEL 2 #include "simstruc.h" /* Definicja dla łatwiejszego dostępu do parametru s-funkcji */ #define PARAM1(S) ssgetsfcnparam(s,0) /* Poniższe umożliwia wyłączenie kontroli poprawności zakresu parametru - w tym celu należy zmienić na #undef */ #define MDL_CHECK_PARAMETERS

34 S-funkcja w języku C - przykład #if defined(mdl_check_parameters) && defined(matlab_mex_file) static void mdlcheckparameters( SimStruct *S ){ /* Sprawdzenie, czy parametr jest skalarny (wzmocnienie) */ if (mxgetnumberofelements(param1(s))!= 1) { ssseterrorstatus(s,"parametr tej S-funkcji ma być skalarem!"); return; } /* Wymuszenie dodatniego wzmocnienia */ if (mxgetpr(param1(s))[0] < 0) { ssseterrorstatus(s, "Parametr tej S-funkcji ma być nieujemny!"); return; } } #endif /* MDL_CHECK_PARAMETERS */

35 S-funkcja w języku C - przykład static void mdlinitializesizes( SimStruct *S ){ sssetnumsfcnparams(s, 1); if (ssgetnumsfcnparams(s) == ssgetsfcnparamscount(s)) { mdlcheckparameters(s); if( ssgeterrorstatus(s)!= NULL ){ return; /* Simulink ostrzeże o problemie z parametrami */ } } else { return; } if (!sssetnuminputports(s, 1) ) return; sssetinputportwidth( S, 0, DYNAMICALLY_SIZED ); sssetinputportdirectfeedthrough( S, 0, 1 );

36 S-funkcja w języku C - przykład if (!sssetnumoutputports(s,1)) return; sssetoutputportwidth( S, 0, DYNAMICALLY_SIZED ); sssetnumsampletimes( S, 1); /* Poniższą opcję włącza się po upewnieniu się, że kod nie generuje sytuacji wyjątkowych w rozumieniu Matlaba */ /* sssetoptions(s, SS_OPTION_EXCEPTION_FREE_CODE); */ } static void mdlinitializesampletimes( SimStruct *S ){ } sssetsampletime( S, 0, INHERITED_SAMPLE_TIME ); sssetoffsettime( S, 0, 0.0 );

37 S-funkcja w języku C - przykład static void mdloutputs(simstruct *S, int_t tid){ int_t i; real_t *mnoznik = mxgetpr( PARAM1(S) ); InputRealPtrsType uptrs = ssgetinputportrealsignalptrs(s,0); real_t *y = ssgetoutputportrealsignal(s,0); int_t width = ssgetoutputportwidth(s,0); } for (i=0; i<width; i++) { *y++ = (*mnoznik) *(*uptrs[i]); } static void mdlterminate(simstruct *S){}

38 S-funkcja w języku C - przykład #ifdef MATLAB_MEX_FILE #include simulink.c #else #include cg_sfun.h #endif

39 Zmienne bloku Simulinka Wejścia zewnętrzne (porty) Blok wejściowowyjściowy Wyjścia zewnętrzne (porty) Jednym z zadań metody mdlinitializesizes jest ustawienie rozmiarów Blok funkcyjny Masa wszystkich zmiennych wykorzystywanych przed dany w Simulinku blok Simulinka Stany Parametry Dodatkowe zmienne wektorowe

40 Tworzenie wejść bloku Składnia: boolean_t sssetnuminputports( SimStruct *S, int_t ile); gdzie: S -wskaźnik do struktury SimSizes, ile - żądana liczba wejść bloku. Zazwyczaj: if(!sssetnuminputports(s, ile) ) return;

41 Wejścia bloku Po zdefiniowaniu liczby wejść dla każdego wejścia należy określić: wymiar wejścia lub dynamiczny dobór wymiaru, właściwość rozciągania wielkości skalarnych (sssetoption), czy port uczestniczy bezpośrednio w obliczaniu wyjścia lub następnego okresu próbkowania za pomocą makra sssetinputportdirectfeedthrough typ danych portu, jeśli jest to inny typ niż domyślny (double) typ numeryki portu, jeśli port ma przyjmować dane zespolone

42 Wejścia bloku - rozmiar Dla portu jednowymiarowego o długości Dlugosc: void sssetinputportvectordimension( SimStruct *S, int_t NumPortu, int_t Dlugosc); (lub sssetinputportwidth()) Dla portu, którego sygnałem jest macierz o rozm. M x N: void sssetinputportmatrixdimensions( SimStruct *S, int_t NumPortu, int_t M, int_t N ); W innym przypadku: void sssetinputportdimensioninfo( SimStruct *S, int_t NumPortu, DimsInfo_T *dimsi );

43 Wejścia bloku - rozmiar dynamiczny Używany w przypadku, gdy rozmiar portu ma zależeć od rozmiaru sygnału podłączonego do portu Można wyróżnić trzy przypadki: jeśli port ma akceptować sygnały dowolnych rozmiarów, należy użyć funkcji: sssetinputportdimensioninfo( S, NumPortu, DYNAMIC_DIMENSION); jeśli port ma akceptować jedynie wektory, lecz o dowolnym rozmiarze, należy użyć funkcji: sssetinputportwidth( S, NumPortu, DYNAMICALLY_SIZED); jeśli port ma akceptować macierz, lecz ilość jej wierszy lub kolumn ma być dowolna, należy użyć funkcji sssetinputportmatrixdimensions( S, NumPortu, M, N ); gdzie M i/lub N może być zapisane jako DYNAMICALLY_SIZED

44 Wejścia bloku - rozmiar dynamiczny Należy zapewnić obsługę metody mdlsetinputportdimensioninfo(), która dostosowuje rozmiar portu do sygnału do niego dołączonego Można także zapewnić obsługę metody mdlsetdefaultportdimensioninfo(), która dobiera rozmiar portu, gdy nie można określić rozmiaru dołączonego do niego sygnału (np. niepodłączony port)

45 Wejścia bloku właściwość "rozszerzania" Przykład: blok sumatora z jednym sygnałem wektorowym a drugim skalarnym Ułatwienie: ustawienie, w mdlinitializesizes(), opcji SS_OPTION_ALLOW_INPUT_SCALAR_EXPANSION S-funkcja musi definiować wejścia jako DYNAMICALLY_SIZED S-funkcja nie może implementować żadnej z metod mdlsetinputportwidth(), mdlsetoutputportwidth(), mdlsetinputportdimesioninfo(), mdlsetoutputportdimensioninfo(), mdlsetdefaultportdimensioninfo()

46 Wejścia bloku - bezpośredni wpływ na wyjście Funkcja: sssetinputportdirectfeedthrough( SimStruct *S, int_t NumPortu, int_t Flaga); umożliwia powiadomienie Simulinka, że sygnał z danego portu jest wykorzystywany w metodach mdloutput lub mdlgettimeofnextvarhit (wartość Flaga = 1)

47 Wejścia bloku - typ danych Funkcja: sssetinputportdatatype( SimStruct S, int_t NumPortu, DTypeID Id ); umożliwia określenie innego niż domyślny typu danych akceptowanych przez port Określenie typu jako DYNAMICALLY_TYPED umożliwia dobór typu na podstawie typu sygnału podłączonego do portu Wówczas powinno się zdefiniować metody mdlsetinputportdatatype() i mdlsetdefaultportdatatypes()

48 Wejścia bloku - dane zespolone Funkcja: sssetinputportcomplexsignal( SimStruct S, int_t NumPortu, CSignal_T sig ); umożliwia dobór numeryki portu (rzeczywista lub zespolona) Zmienna sig może przyjmować wartości: COMPLEX_NO dla danych rzeczywistych, COMPLEX_YES dla danych zespolonych i COMPLEX_INHERITED dla typu danych zależnego od typu sygnału podłączonego do portu

49 Wejścia bloku - dane zespolone W przypadku użycia typu COMPLEX_INHERITED należy zdefiniować metody mdlsetinputportcomplexsignal() i ewentualnie mdlsetdefaultportcomplexsignal()

50 Dostęp do wejść przez wskaźniki W ogólnym przypadku przestrzeń wejściowo-wyjściowa bloku nie jest ciągła:

51 Dostęp do wejść przez wskaźniki Składnia: InputRealPtrsType uptrs = ssgetinputportrealsignalptrs( S, portindex); gdzie: portindex - numer wejścia układu, począwszy od 0, S -wskaźnik do struktury SimSizes, uptrs - tablica wskaźników do sygnałów wejściowych. Odwołanie do konkretnego elementu: u1 = *uptrs[ NrElementu ]; uptrs to wskaźnik do tablicy!

52 Dostęp do wejść przez wskaźniki - przykład Wejście1 Wejście2 Blok funkcyjny Dostęp do elementów Wejścia1: InputRealPtrsType wskwe1 = ssgetinputportrealsignalptrs( S, 0 ); Dostęp do elementów Wejścia2: InputRealPtrsType wskwe2 = ssgetinputportrealsignalptrs( S, 1 ); Rozmiar tablicy Wejścia1: int_t rozmwe1 = ssgetinputportwidth( S, 0 );

53 Testowanie poprawności obsługi wejść Wiele błędów programowych dotyczących obsługi wejść nie ujawnia się, gdy do wejścia podłączony jest sygnał skalarny Dlatego zaleca się testowanie poprawności obsługi wejść według następującego schematu:

54 Dostęp do wejść przestrzeni ciągłej Wymuszenie ciągłości przestrzeni wejściowej w metodzie mdlinitializesizes(): gdzie: void sssetinputportrequiredcontiguous( S, portindex, flaga ) portindex - numer wejścia układu, począwszy od 0, S -wskaźnik do struktury SimSizes, flaga - równa TRUE gdy wymagamy ciągłości. Odwołanie do wejścia: const real_t *u = ssgetinputportrealsignal( S, portindex); Odwołanie do konkretnego elementu: u1 = u[0]; Wymuszenie ciągłości wpływa na efektywność!

55 Tworzenie wyjść bloku Składnia: boolean_t sssetnumoutputports( SimStruct *S, int_t ile); gdzie: S -wskaźnik do struktury SimSizes, ile - żądana liczba wyjść bloku. Zazwyczaj: if(!sssetnumoutputports(s, ile) ) return;

56 Wyjścia bloku Po określeniu liczby wyjść dla każdego portu wyjściowego należy określić: wymiar wyjścia lub dynamiczny dobór wymiaru za pomocą funkcji sssetoutputportdimensioninfo(), sssetoutputportmatrixdimensions(), sssetoutputportvectordimensions(), sssetoutputportwidth(); w przypadku wyjść z dynamicznym rozmiarem należy zdefiniować metody mdlsetoutputportdimensioninfo() i ewentualnie mdlsetdefaultportdimensioninfo()

57 Wyjścia bloku typ danych portu za pomocą funkcji sssetoutputportdatatype(); jeśli typ jest zależny od połączeń bloku (DYNAMICALLY_TYPED), powinno się zdefiniować metodę mdlsetoutputportdatatype() i ewentualnie mdlsetdefaultportdatatypes() typ numeryki portu za pomocą funkcji sssetoutputportcomplexsignal(); jeśli typ jest zależny od połączeń bloku (COMPLEX_INHERITED), to należy zdefiniować metodę mdlsetoutputportcomplexsignal() i ewentualnie mdlsetdefaultportcomplexsignal()

58 Dostęp do wyjść przez wskaźniki Składnia: gdzie: real_t *y = ssgetoutputportrealsignal( S, portindex); portindex - numer wyjścia układu, począwszy od 0, S -wskaźnik do struktury SimSizes, y -wskaźnik do sygnałów wyjściowych. Odwołanie do konkretnego elementu: y[0] = 0; Zazwyczaj rozmiar portu wyjściowego jest powiązany z rozmiarem portu wejściowego Istnieją także makra ssgetoutputportnumdimensions() i ssgetoutputportdimensions() umożliwiające odczyt rozmiaru wyjścia

59 Przykład kodu Poniższy kod przepisuje dane z portu wejściowego o numerze NrPortuWe do portu wyjściowego o numerze NrPortuWy int_t PozWektora; int_t RozmiarWe = ssgetinputportwidth( S, NrPortuWe ); InputRealPtrsType WskWe = ssgetinputportrealsignalptrs( S, NrPortuWe ); real_t *y = ssgetoutputportsignal( S, NrPortuWy ); for ( PozWektora=0; PozWektora < RozmiarWe; PozWektora++ ) { y[ PozWektora ] = *WskWe[ PozWektora ]; }

60 Tworzenie stanów bloku Składnia: gdzie: sssetnumcontstates( SimStruct *S, int_t ile); sssetnumdiscstates( SimStruct *S, int_t ile); S ile -wskaźnik do struktury SimSizes, - żądana liczba stanów bloku (lub DYNAMICALLY_SIZED) Jeżeli w metodzie mdlinitializesizes() użyto DYNAMICALLY_SIZED, makra należy jeszcze raz wywołać w metodzie mdlsetworkwidths()!

61 Inicjalizacja stanów bloku W metodzie mdlinitializeconditions() lub mdlstart(): real_t *x0 = ssgetcontstates(s); int_t lx = ssgetnumcontstates(s); for(; lx > 0; lx--){ *x0++ = 0.0; } Jest to jedyne miejsce, gdzie stany zmienia się "ręcznie"!

62 Uaktualnianie stanów bloku Stany ciągłe uaktualnia się w metodzie mdlderivatives() Programista powinien obliczyć wektor pochodnych (na podstawie prawej strony równania stanu) i zapisać w miejscu wskazywanym przez wynik wywołania: real_t *dx = ssgetdx(s); Stany dyskretne uaktualnia się w metodzie mdlupdate() Dostęp do bieżącego wektora stanów dyskretnym można uzyskać dzięki wywołaniu: real_t *x = ssgetdiscstates(s); Zazwyczaj aktualizacja stanów wymaga alokacji dodatkowego wektora buforowego

63 Parametry okna dialogowego Należy zdecydować, w jakim porządku parametry będą wpisywane W metodzie mdlinitializesizes() należy wywołać makro sssetnumsfcnparams() w celu ustawienia ilości obsługiwanych parametrów Ustawioną liczbę parametrów zwraca makro: int_t ssgetnumsfcnparams(simstruct* S); Aktualną liczbę parametrów zwraca makro: int_t ssgetnumsfcnparamscount(simstruct *S); Jeżeli programuje się metodę mdlcheckparams(), należy ją wywołać z metody mdlinitializesizes() Dostęp do parametrów następuje przez makro const mxarray *ssgetsfcnparams( S, index )

64 Parametry okna dialogowego Tablica Matlaba mxarray może przechowywać dana różnych typów W celu sprawdzenia typu danych w tablicy należy wywołać: DTypeID ssgetdtypeidfrommxarray(const mxarray *m); Inne funkcje przydatne do sprawdzania typu to mxiscomplex(), mxischar(), mxisstruct()

65 Parametry okna dialogowego Wartość Typ danych Matlaba Typ danych C SS_DOUBLE mxdouble_class real_t SS_SINGLE mxsingle_class real32_t SS_INT8 mxint8_class int8_t SS_UINT8 mxuint8_class uint8_t SS_INT16 mxint16_class int16_t SS_UINT16 mxuint16_class uint16_t SS_INT32 mxint32_class int32_t SS_UINT32 mxuint32_class uint32_t SS_BOOLEAN mxuint8_class boolean_t INVALID_DTYPE_ID

66 Parametry dostrajalne......to parametry, które można zmieniać podczas symulacji Dla każdego z parametrów dostrajalnych należy wywołać makro void sssetfcnparamtunable( SimStruct *S, int_t Param, int_t Mode ) gdzie: S Param Mode -wskaźnik do struktury SimSizes, - numer parametru, - SS_PRM_TUNABLE (dostrajalny), SS_PRM_NOT_TUNABLE (nie dostrajalny), SS_PRM_SIM_ONLY_TUNABLE (dostrajalny w symul.) Uwaga! Po wykryciu zmiany parametru Simulink wywoła metodę mdlcheckparameters() Metoda mdlprocessparameters() pozwoli przeprowadzić konieczne po dostrojeniu parametru zmiany

67 Parametry wykonania (run-time) Stanowią wewnętrzną reprezentację parametrów dialogowych Każdy parametr wykonania może odpowiadać jednemu lub większej liczbie parametrów dialogowych Parametry wykonania mogą się różnić od parametrów dialogowych nie tylko wartością, ale i typem Typowe zastosowania: przeliczania, potencjalnie wielu, parametrów dialogowych na jeden parametr konfiguracyjny konwersji skali bądź typu w połączeniu z RTW

68 Parametry wykonania (run-time) Aby zarejestrować parametr wykonania dla każdego parametru dialogowego, należy w metodzie mdlsetworkwidths wykonać: void ssregalltunableparamsasruntimeparams( S, names) gdzie: S names -wskaźnik do struktury SimSizes, - wskaźnik do tablicy nazw parametrów dla RTW (const char_t *names[]) Simulink rozróżnia jedynie pierwsze cztery znaki każdej nazwy (muszą być niepowtarzalne)!

69 Parametry wykonania (run-time) Aby zarejestrować pojedynczy parametr wykonania lub kilka takich parametrów należy, w metodzie mdlsetworkwidths() wykonać: sssetnumruntimeparams( SimStruct *S, int_t num) gdzie: S -wskaźnik do struktury SimSizes, num - liczba parametrów wykonania Dalsze czynności zależą od typu relacji pomiędzy parametrem wykonania a parametrem dialogowym

70 Parametry wykonania (run-time) Aby powiązać parametr wykonania z jednym i tylko jednym parametrem dialogowym, należy wykonać: void ssregdlgparamasruntimeparam(simstruct *S, int_t nrd, int_t nrw, const char_t *nazwa, DTypeId nazwat); gdzie: S nrd nrw nazwa wskaźnik do struktury SimStruct bloku, numer parametru dialogowego numer parametru wykonania symboliczna nazwa parametru wykonania nazwat nazwa typu parametru wykonania Parametry mogą różnić się typem!

71 Parametry wykonania (run-time) Aby powiązać parametr wykonania z kilkoma parametrami dialogowymi, należy wykonać: void sssetruntimeparaminfo(simstruct *S, int_t nrw, ssparamrec *info); gdzie: S nrw info Parametry mogą różnić się typem! wskaźnik do struktury SimStruct bloku, numer parametru wykonania struktura określająca powiązania pomiędzy parametrami

72 Parametry wykonania (run-time) Aby uaktualnić parametry wykonania należy, w metodzie mdlprocessparametres(), wywołać jedną z funkcji: ssupdatealltunableparamsasruntimeparams(simstruct *S) dla uaktualnienia wszystkich parametrów, ssupdateruntimeparamdata( SimStruct *S, int_t nrw, void *dana); dla uaktualnienia pojedynczego parametru, utworzonego przez wywołanie ssregdlgparamasruntimeparam() ("dana" to wskaźnik do nowej wartości parametru), ssupdatedlgparamasruntimeparam(simstruct *S, int_t nrw) dla uaktualnienia parametru utworzonego przez wywołanie sssetruntimeparaminfo().

73 Parametry wykonania (run-time) Aby posłużyć się wartością parametru wykonania należy wywołać makro: ssparamrec * ssgetruntimeparaminfo(simstruct *S, int_t nrw); którego drugim argumentem jest numer żądanego parametru wykonania. Zwrócona przez makro struktura posiada pole "data", którego jest wskaźnikiem do żądanej wartości parametru wykonania. Wskaźnik ten należy wcześniej skonwertować do żądanego typu, np.: real_t par1 = *( (real_t *)((ssgetruntimeparaminfo(s,0)->data));

74 Czasy próbkowania Czas próbkowania ustalany jest zazwyczaj w metodzie mdlinitializesizes, najczęściej jako jeden dla całego bloku funkcyjnego (tzw. block-based sample times) W takim rozwiązaniu należy wywołać funkcję void sssetnumsampletimes( SimStruct *S, int_t Num); gdzie: S - wskaźnik do struktury SimStruct bloku Num - ilość czasów próbkowania, > 0 Simulink wywoła wtedy metodę mdlinitializesampletimes, w której czasy próbkowania powinny zostać ustawione

75 Czasy próbkowania Czasy próbkowania wpisuje się jako pary [czas_próbkowania, offset] za pomocą funkcji: sssetsampletime( SimStruct *S, st_index, time_t Czas ); sssetoffsettime( SimStruct *S, st_index, time_t Offset ); gdzie: S st_index - wskaźnik do struktury SimStruct bloku, - indeks pary, dla której dokonuje się zmian, począwszy od 0, Czas, Offset - czas i offset dla danej pary

76 Czasy próbkowania Możliwe są następujące kombinacje: [CONTINUOUS_SAMPLE_TIME, 0.0] - funkcja ciągła, która dokonuje zmian w małych krokach symulacji, [CONTINUOUS_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET] - funkcja ciągła, która nie dokonuje zmian wyjść w małym kroku symulacji, [Tp, To ] - funkcja dyskretna, z określonym okresem próbkowania, Tp > 0 oraz 0 To Tp, [VARIABLE_SAMPLE_TIME, 0.0] - funkcja, której czas próbkowania jest zmienny; funkcja taka powinna zdefiniować metodę mdlgettimeofnexvarhit(),

77 Czasy próbkowania [INHERITED_SAMPLE_TIME, 0.0] - funkcja, której czas próbkowania zależy od sygnału podłączonego do bloku [INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET] - funkcja, której czas próbkowania zależy od sygnału podłączonego do bloku, lecz funkcja nie zmienia swoich wartości wyjściowych podczas małego kroku symulacji Dla sprawdzenia, czy bieżąca chwila jest chwilą dyskretnego próbkowania, bądź chwilą pracy małej pętli symulacji, należy wykorzystać makra: ssissamplehit( SimStructure *S, st_index, tid ); ssiscontinuoustask( SimStructure *S, st_index, tid );

78 Czasy próbkowania Można także używać innych czasów próbkowania dla różnych portów - wówczas należy w metodzie mdlinitializesizes() wykonać funkcję sssetnumsampletimes(s, PORT_BASED_SAMPLE_TIMES), a następnie: sssetinputportsampletime( S, NumPortu, Czas1 ); sssetinputportoffsettime( S, NumPortu, Offset1 ); sssetoutputportsampletime( S, NumPortu, Czas2 ); sssetoutputportoffsettime( S, NumPortu, Offset2 ); S-funkcja wykorzystująca indywidualne czasy próbkowania nie powinna wywoływać makr sssetsampletime() i sssetoffsettime() Możliwe jest także dziedziczenie czasu próbkowania, bądź użycie "stałego" czasu próbkowania dla portu

79 Czasy próbkowania S-funkcja, która posiada choć jeden port, który dziedziczy czas próbkowania, powinna zdefiniować metody mdlsetinputportsampletime() jeżeli jest to port wejściowy, bądź mdlsetoutputportsampletime() jeżeli jest to port wyjściowy, bądź obydwie te metody Metody te mogą posłużyć się makrami: real_t ssgetinputportsampletime(simstruct *S, int_t nr) real_t ssgetinputportoffsettime (SimStruct *S, int_t nr) real_t ssgetoutputportsampletime(simstruct *S, int_t nr) real_t ssgetoutputportoffsettime(simstruct *S, int_t nr) w celu odczytania aktualnego czasu próbkowania

80 Czasy próbkowania Przez "stały" czas próbkowania (ang. constant sample time) dokumentacja Simulinka rozumie sytuację, gdy wartość wejścia lub wyjścia s-funkcji nie ulega zmianie w trakcie symulacji Aby zezwolić na wykorzystanie "stałego" czasu próbkowania, należy w metodzie mdlinitializesizes() ustawić opcję SS_OPTION_ALLOW_CONSTANT_PORT_SAMPLE_TIME "Stały" czas próbkowania uzyskuje się przez ustawienie czasu próbkowania portu równego nieskończoności, i offsetu równego zero, np.: sssetinputportsampletime(s, 0, mxgetinf() ); sssetinputportoffsettime(s, 0, 0);

81 Czasy próbkowania Jeżeli portem, dla którego ustala się "stały" czas próbkowania, jest port wyjściowy, należy w metodzie mdloutput() sprawdzać, czy drugi parametr jej wywołania jest równy symbolicznej wartości CONSTANT_TID Jeżeli tak jest, należy ustawić wartość portu o "stałym" czasie próbkowania

82 Czasy próbkowania Funkcja o zmiennym czasie próbkowania powinna implementować metodę mdlgettimeofnextvarhit() W metodzie tej należy wywołać makro: sssettnext(simstruct *S, time_t tnext); Drugim parametrem powyższego makra jest bezwzględny czas symulacji, w którym powinno nastąpić następne przetwarzanie metod bloku Bieżącą chwilę symulacji można określić za pomocą makra: time_t ssgett(simstruct *S) Jeżeli metoda mdlgettimeofnextvarhit() korzysta z wartości któregoś z wejść, należy dla tego wejścia ustawić cechę bezpośredniego przejścia sygnału przez blok

83 Wektory robocze Zmienne, których wartości mają być przechowywane pomiędzy kolejnymi wywołaniami, można zadeklarować jako statyczne zmienne języka C Wadą takiego rozwiązania jest nadpisywanie tych zmiennych przez kolejne instancje danego bloku Wektory robocze Simulinka są pozbawione tej wady - mogą one przechowywać zmienne typu integer, real, wskaźnik i typu ogólnego

84 Wektory robocze Do ustawiania rozmiarów wektorów roboczych służą następujące makra, wywoływane w mdlinitializesizes(): sssetnumcontstates - rozmiar wektorów stanów ciągłych sssetnumdiscstates - rozmiar wektorów stanów dyskretnych sssetnumdwork - rozmiar wektorów roboczych typu ogólnego sssetnumrwork - rozmiar wektorów roboczych typu real sssetnumiwork - rozmiar wektorów roboczych typu integer sssetnumpwork - rozmiar wektorów roboczych typu wskaźnikowego sssetnummodes - rozmiar wektora trybów sssetnumnonsampledzcs - ilość stanów, dla których wyznaczane są chwile przejść przez zero

85 Wektory robocze Makra te są dwuparametrowe drugim parametrem jest żądana liczba wektorów roboczych danego typu Drugi parametr może przyjmować następujące wielkości: zero (domyślna wielkość), wartość całkowita dodatnia, DYNAMICALLY_SIZED dla wielkości zależnej od wielkości wyjścia bloku (dobór automatyczny). Można zdefiniować metodę mdlsetworkwidths, w której dobiera się rozmiary wektorów roboczych, a w której znane są już rozmiary wejść i wyjść

86 Wektory robocze W przypadku wektorów typu ogólnego należy dookreślić typ i rodzaj każdego pola wektora przez wywołania: void sssetdworkdatatype(simstruct *S, int_t pos, DTypeID typ); void sssetdworkwidth(simstruct *S, int_t pos, int_t rozm) void sssetdworkcomplexsignal(simstruct *S, int_t pos, Csignal_T flaga); gdzie flata = COMPLEX_YES lub COMPLEX_NO

87 Wektory robocze W dowolnej z metod możliwe jest odczytanie rozmiaru każdego z wektorów roboczych przez wywołania makr: int_t ssgetnumdwork(simstruct *S); int_t ssgetnumiwork(simstruct *S); int_t ssgetnumpwork(simstruct *S); int_t ssgetnumrwork(simstruct *S); Dostęp do wektorów zmiennych roboczych uzyskuje się za pomocą wywołań: void* ssgetdwork(simstruct *S, int_t pozycja); int_t* ssgetiwork(simstruct *S); void** ssgetpwork(simstruct *S); real_t* ssgetrwork(simstruct *S);

88 Raportowanie błędów Do zgłaszania Simulinkowi błędów, np. błędnie wpisanych parametrów, używa się funkcji: void ssseterrorstatus( SimStruct *S, const char_t *msg ); gdzie: S - wskaźnik do struktury SimStruct, msg - wskaźnik do łańcucha z opisem błędu. Łańcuch z opisem błędu powinien być na stałe w pamięci (static), nie może to być zmienna lokalna! Do wyświetlenia okna dialogowego z ostrzeżeniem służy makro: void sswarning( SimStruct *S, const char_t *msg );

89 Raportowanie błędów Do wyświetlenia dowolnego komunikatu w głównym oknie Matlaba służy makro: int_t ssprintf(const char_t *msg,... ); Wartością zwracaną jest liczba poprawnie wyświetlonych bajtów, lub zero w przypadku błędu

90 Raportowanie błędów Wyjątki w dokumentacji Simulinka są rozumiane jako "długie skoki" (ang. long jumps) Wystąpienie tak rozumianych wyjątków jest możliwe przy wywołaniu wszystkich funkcji, których nazwy rozpoczynają się od "mex" Również funkcje o nazwach rozpoczynających się od "mx" nie dają gwarancji braku wyjątków Nigdy nie powodują wystąpienia wyjątku te z funkcji o nazwach rozpoczynających się od "mx", które zwracają wskaźnik lub rozmiar, np. mxgetpr(), mxgetdata(), msgetm(), mxgetnumberofelements() Obsługa wyjątków pociąga za sobą niebagatelny koszt czasowy

91 Raportowanie błędów W celu wyłączenia obsługi błędów można wykorzystać makro: sssetoptions( S, SS_OPTION_EXCEPTION_FREE_CODE ) W przypadku błędów funkcja z włączoną powyższą opcją może spowodować niezdefiniowane zachowanie Simulinka (zwykle zawieszenie) Opcja SS_OPTION_RUNTIME_EXCEPTION_FREE_CODE sygnalizuje, że wyjątków nie powoduje kod najczęściej wykonywanych metod mdlgettimeofnextvarhit(), mdlupdate(), mdlderivatives() i mdloutputs()

92 S-funkcje w C++ Mechanizm Simulinka zakłada sposób wywołań s-funkcji właściwy dla języka C W celu wykorzystania w Simulinku kodu z języka C++ należy wszystkie wywołania metod Simulinka objąć dyrektywą <extern C >: #ifdef cplusplus extern C { #endif... #ifdef cplusplus } #endif

93 S-funkcje w C++ Przechowywanie obiektów języka C++ pomiędzy wywołaniami metod Simulinka wymaga wykorzystania wskaźnikowych wektorów roboczych. Sposób postępowania jest następujący: 1. static void mdlinitializesizes( SimStruct *S ){... sssetnumpwork( S, 1 ); //Utworzenie wektora wsk. } 2. static void mdlstart( SimStruct *S, int_t tid ){ ssgetpwork(s)[ 0 ] = (void *) new Obiekt; }

94 S-funkcje w C++ 3. Aby odwołać się do obiektu, należy odczytać wskaźnik: void mdloutputs( SimStruc *S, int_t tid){ Obiekt *Ob1 = (Obiekt *) ssgetpwork(s)[ 0 ]; real_t *y = ssgetoutputportrealsignal( S, 0 ); y[ 0 ] = Obiekt->wyjscie(); } 4. Na koniec symulacji należy obiekt skasować: void mdlterminate( SimStruct *S ){ Obiekt *Ob1 = (Obiekt *) ssgetpwork(s)[ 0 ]; delete Ob1; }

95 S-funkcje w C++ Przykład: wzmacniacz w języku C++

Ćwiczenie 1: Model Hodgkina Huxleya

Ćwiczenie 1: Model Hodgkina Huxleya Ćwiczenie 1: Model Hodgkina Huxleya 1 Wstęp Równania Hodgkina-Huxleya we współczesnej notacji wyglądają tak: dv dn dm dh gdzie: = [ I inj ḡ Na m 3 h(v V Na ) ḡ K n 4 (V V K ) g L (V V L ) ] /C(1) = α n

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

O co chodzi z tym MATLAB'em?!

O co chodzi z tym MATLAB'em?! O co chodzi z tym MATLAB'em?! Część 1. SIMULINK W pliku data.mat jest zapisany przebieg. Gdzieś tam i kiedyś tam zarejestrowany. Widać go na fioletowo poniżej. Powstał on z obiektu, co ciekawe wiemy jak

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Zad. 3: Układ równań liniowych

Zad. 3: Układ równań liniowych 1 Cel ćwiczenia Zad. 3: Układ równań liniowych Wykształcenie umiejętności modelowania kluczowych dla danego problemu pojęć. Definiowanie właściwego interfejsu klasy. Zwrócenie uwagi na dobór odpowiednich

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Zadanie polega na napisaniu pierwszego programu w języku C, jego poprawnej kompilacji i wgraniu na mikrokontroler. W tym celu należy zapoznać

Bardziej szczegółowo

Ćwiczenie 1. Wprowadzenie do programu Octave

Ćwiczenie 1. Wprowadzenie do programu Octave Politechnika Wrocławska Wydział Elektroniki Mikrosystemów i Fotoniki Przetwarzanie sygnałów laboratorium ETD5067L Ćwiczenie 1. Wprowadzenie do programu Octave Mimo że program Octave został stworzony do

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Ćwiczenie 1. Wprowadzenie do programu Octave

Ćwiczenie 1. Wprowadzenie do programu Octave Politechnika Wrocławska Wydział Elektroniki Mikrosystemów i Fotoniki Przetwarzanie sygnałów laboratorium ETD5067L Ćwiczenie 1. Wprowadzenie do programu Octave Mimo że program Octave został stworzony do

Bardziej szczegółowo

do MATLABa programowanie WYKŁAD Piotr Ciskowski

do MATLABa programowanie WYKŁAD Piotr Ciskowski Wprowadzenie do MATLABa programowanie WYKŁAD Piotr Ciskowski instrukcje sterujące instrukcja warunkowa: if instrukcja wyboru: switch instrukcje iteracyjne: for, while instrukcje przerwania: continue, break,

Bardziej szczegółowo

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać MatLab część III 1 Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać komentarze poprzedzone znakiem % Skrypty

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka

Bardziej szczegółowo

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA PRZEDMIOT : : LABORATORIUM PODSTAW AUTOMATYKI 1. WSTĘP DO

Bardziej szczegółowo

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi.

Bardziej szczegółowo

Wykład 3 Składnia języka C# (cz. 2)

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Delphi Laboratorium 3

Delphi Laboratorium 3 Delphi Laboratorium 3 1. Procedury i funkcje Funkcja jest to wydzielony blok kodu, który wykonuje określoną czynność i zwraca wynik. Procedura jest to wydzielony blok kodu, który wykonuje określoną czynność,

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI Wprowadzenie do środowiska Matlab 1. Podstawowe informacje Przedstawione poniżej informacje maja wprowadzić i zapoznać ze środowiskiem

Bardziej szczegółowo

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

Bardziej szczegółowo

Regulator PID w sterownikach programowalnych GE Fanuc

Regulator PID w sterownikach programowalnych GE Fanuc Regulator PID w sterownikach programowalnych GE Fanuc Wykład w ramach przedmiotu: Sterowniki programowalne Opracował na podstawie dokumentacji GE Fanuc dr inż. Jarosław Tarnawski Cel wykładu Przypomnienie

Bardziej szczegółowo

Część I Programowanie niskiego poziomu w języku C 19

Część I Programowanie niskiego poziomu w języku C 19 Spis treści Przedmowa 13 Wstęp 15 Część I Programowanie niskiego poziomu w języku C 19 Wprowadzenie 21 1 Typy 23 1.1 Fundamentalne typy danych...................... 23 1.2 Typy pochodne.............................

Bardziej szczegółowo

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1 Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości

Bardziej szczegółowo

Algorytmy sztucznej inteligencji

Algorytmy sztucznej inteligencji Algorytmy sztucznej inteligencji Dynamiczne sieci neuronowe 1 Zapis macierzowy sieci neuronowych Poniżej omówione zostaną części składowe sieci neuronowych i metoda ich zapisu za pomocą macierzy. Obliczenia

Bardziej szczegółowo

Instrukcje sterujące

Instrukcje sterujące Podstawy programowania w C++ Bibliografia: Instrukcje sterujące Nauka programowania dla początkujących; A. Struzińska-Walczak / K. Walczak CPA: PROGRAMMING ESSENTIALS IN C++ https://www.netacad.com Opracował:

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą

Bardziej szczegółowo

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Ćwiczenie: JavaScript Cookies (3x45 minut)

Ćwiczenie: JavaScript Cookies (3x45 minut) Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. 1. Identyfikator funkcji,

Bardziej szczegółowo

Wstęp do wskaźników w języku ANSI C

Wstęp do wskaźników w języku ANSI C Wstęp do wskaźników w języku ANSI C / Materiał dydaktyczny pomocniczy do przedmiotu Informatyka sem.iii kier. Elektrotechnika/ 1. Wprowadzenie W języku ANSI C dla każdego typu X (wbudowanego, pochodnego,

Bardziej szczegółowo

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Elementy projektowania inzynierskiego Przypomnienie systemu Mathcad

Elementy projektowania inzynierskiego Przypomnienie systemu Mathcad Elementy projektowania inzynierskiego Definicja zmiennych skalarnych a : [S] - SPACE a [T] - TAB - CTRL b - SHIFT h h. : / Wyświetlenie wartości zmiennych a a = b h. h. = Przykładowe wyrażenia

Bardziej szczegółowo

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom). Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Symulacja działania sterownika dla robota dwuosiowego typu SCARA w środowisku Matlab/Simulink.

Symulacja działania sterownika dla robota dwuosiowego typu SCARA w środowisku Matlab/Simulink. Symulacja działania sterownika dla robota dwuosiowego typu SCARA w środowisku Matlab/Simulink. Celem ćwiczenia jest symulacja działania (w środowisku Matlab/Simulink) sterownika dla dwuosiowego robota

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager Tablet bezprzewodowy QIT30 Oprogramowanie Macro Key Manager Spis treści 1. Wprowadzenie... 3 2. Panel Sterowania - wprowadzenie... 4 3. Instalacja... 5 3.1 Jak stworzyć nowy profil... 5 3.2 Jak zmodyfikować

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Przetwarzanie sygnałów

Przetwarzanie sygnałów Spis treści Przetwarzanie sygnałów Ćwiczenie 1 Wprowadzenie do programu Octave 1 Operatory 1 1.1 Operatory arytmetyczne...................... 1 1.2 Operatory relacji.......................... 1 1.3 Operatory

Bardziej szczegółowo

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Spis treści 1 Wprowadzenie 1 2 Dane i kod 2 3 Wyrażenia 2 3.1 Operacje arytmetyczne i logiczne.................. 2 3.2 Podstawowe

Bardziej szczegółowo

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w obrębie skryptu. Wyrażenia include() i require() są niemal

Bardziej szczegółowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne

Bardziej szczegółowo

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania 1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca

Bardziej szczegółowo

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

// Liczy srednie w wierszach i kolumnach tablicy dwuwymiarowej // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib. Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy

Bardziej szczegółowo

Układ równań liniowych

Układ równań liniowych Układ równań liniowych 1 Cel zadania Wykształcenie umiejętności projektowania własnych klas modelujących pojęcia niezbędne do rozwiązania postawionego problemu. Rozwinięcie umiejętności przeciążania operatorów

Bardziej szczegółowo

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 9 WYRAŻENIA LOGICZNE, INSTRUKCJE WARUNKOWE I INSTRUKCJE ITERACYJNE W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR

Bardziej szczegółowo

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 > C++ wskaźniki Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 >??? Co to jest WSKAŹNIK? ++ wskaźniki 2 / 20 >??? Co to jest WSKAŹNIK? To po prostu ADRES

Bardziej szczegółowo

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia Język ANSI C część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia najbardziej podstawowe operacje na wskaźnikach int x = 1, y = 2, Tab[10]; int *ip; // czy

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

Komunikacja sterownika PLC Fatek jako master w protokole ModBus RTU

Komunikacja sterownika PLC Fatek jako master w protokole ModBus RTU Komunikacja sterownika PLC Fatek jako master w protokole ModBus RTU 1. Konfiguracja portu komunikacyjnego - dokonuje się tego w oprogramowaniu narzędziowym WinProladder, z menu PLC->Setting->Port Parameter:

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

W dowolnym momencie można zmienić typ wskaźnika.

W dowolnym momencie można zmienić typ wskaźnika. c++ Wskaźniki mają jeszcze jedną przydatną cechę. W dowolnym momencie można zmienić typ wskaźnika. Robi się to za pomocą operatora rzutowania. Najpierw zdefiniujemy sobie wsk_uniwersalny mogący pokazywać

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

Ada-95. Dariusz Wawrzyniak

Ada-95. Dariusz Wawrzyniak Część I Wskaźniki Plan Typy wskaźnikowe i obiekty wskazywane 1 Typy wskaźnikowe i obiekty wskazywane 2 3 4 Plan Typy wskaźnikowe i obiekty wskazywane 1 Typy wskaźnikowe i obiekty wskazywane 2 3 4 Wskaźniki

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego

Bardziej szczegółowo

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania I rok Automatyka i Robotyka Eka PWr Ćwiczenia Zestaw 4 Zakres materiału Analiza poprawności konstrukcji, wyliczanie wyrażeń z wskaźnikami i tablicami, ręczna symulacja, opracowywanie

Bardziej szczegółowo

Zad. 5: Układ równań liniowych liczb zespolonych

Zad. 5: Układ równań liniowych liczb zespolonych Zad. 5: Układ równań liniowych liczb zespolonych 1 Cel ćwiczenia Wykształcenie zdolności abstrahowania operacji arytmetycznych od konkretnych typów. Unaocznienie problemów związanych z programowaniem uogólnionym

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Mechatronika i inteligentne systemy produkcyjne. Modelowanie systemów mechatronicznych Platformy przetwarzania danych

Mechatronika i inteligentne systemy produkcyjne. Modelowanie systemów mechatronicznych Platformy przetwarzania danych Mechatronika i inteligentne systemy produkcyjne Modelowanie systemów mechatronicznych Platformy przetwarzania danych 1 Sterowanie procesem oparte na jego modelu u 1 (t) System rzeczywisty x(t) y(t) Tworzenie

Bardziej szczegółowo

Podstawy MATLABA, cd.

Podstawy MATLABA, cd. Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki Przetwarzanie Sygnałów Studia Podyplomowe, Automatyka i Robotyka Podstawy MATLABA, cd. 1. Wielomiany 1.1. Definiowanie

Bardziej szczegółowo

Układy VLSI Bramki 1.0

Układy VLSI Bramki 1.0 Spis treści: 1. Wstęp... 2 2. Opis edytora schematów... 2 2.1 Dodawanie bramek do schematu:... 3 2.2 Łączenie bramek... 3 2.3 Usuwanie bramek... 3 2.4 Usuwanie pojedynczych połączeń... 4 2.5 Dodawanie

Bardziej szczegółowo

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013 Funkcje i tablice Elwira Wachowicz elwira@ifd.uni.wroc.pl 23 maja 2013 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 1 / 22 Największy wspólny dzielnik: algorytm Euklidesa Problem:

Bardziej szczegółowo

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle. Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle. Sub Hasla1() Dim wzor_hasla As String Dim haslo As String Dim adres

Bardziej szczegółowo

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych, Korutyny Wykład13,str1 tak działa podprogram: PROGRAM GŁÓWNY wywołanie PODPROGRAM tak działają korutyny: KORUTYNA A resume B resume B KORUTYNA B resume A Korutyny Wykład13,str2 Korutyny mają zwykle więcej

Bardziej szczegółowo

GRM-10 - APLIKACJA PC

GRM-10 - APLIKACJA PC GRM-10 - APLIKACJA PC OPIS Aplikacja służy do aktualizacji oprogramowania urządzenia GRM-10 oraz jego konfiguracji z poziomu PC. W celu wykonania wskazanych czynności konieczne jest połączenie GRM-10 z

Bardziej szczegółowo

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz

Bardziej szczegółowo

Platforma.NET. Laboratorium nr 1 Podstawy języka C#

Platforma.NET. Laboratorium nr 1 Podstawy języka C# Platforma.NET Laboratorium nr 1 Podstawy języka C# Ćwiczenie 1 1. Utwórz nowy projekt a. Z menu File wybierz New/Project b. W oknie dialogowym New Project określ następujące właściwości: typu projektu:

Bardziej szczegółowo

Obliczenia iteracyjne

Obliczenia iteracyjne Lekcja Strona z Obliczenia iteracyjne Zmienne iteracyjne (wyliczeniowe) Obliczenia iteracyjne wymagają zdefiniowania specjalnej zmiennej nazywanej iteracyjną lub wyliczeniową. Zmienną iteracyjną od zwykłej

Bardziej szczegółowo

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Funkcje przetwarzające teksty (biblioteka ) - tworzenie własnych

Bardziej szczegółowo

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych. Złożone typy danych - TABLICE TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych. * Może przechowywać dowolny typ danych, typ

Bardziej szczegółowo

MATLAB tworzenie własnych funkcji

MATLAB tworzenie własnych funkcji MATLAB tworzenie własnych funkcji Definiowanie funkcji anonimowych Własne definicje funkcji możemy tworzyć bezpośrednio w Command Window, są to tzw. funkcje anonimowe; dla funkcji jednej zmiennej składnia

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

Smarty PHP. Leksykon kieszonkowy IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK

Bardziej szczegółowo

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje Opracował: Zbigniew Rudnicki Powtórka z poprzedniego wykładu 2 1 Dokument, regiony, klawisze: Dokument Mathcada realizuje

Bardziej szczegółowo

Komunikacja między sterownikami przez protokół ADS

Komunikacja między sterownikami przez protokół ADS Komunikacja między sterownikami przez protokół ADS Poziom trudności: łatwy Wersja dokumentacji: 1.0 Aktualizacja: 20.03.2015 Beckhoff Automation Sp. z o. o. Spis treści 1. Komunikacja ADS... 3 2. Konfiguracja

Bardziej szczegółowo

tablica: dane_liczbowe

tablica: dane_liczbowe TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Służą do łatwiejszej kontroli nad stałymi Ustawianie parametrów o ściśle określonym zbiorze wartości

Bardziej szczegółowo

Wykład z Technologii Informacyjnych. Piotr Mika

Wykład z Technologii Informacyjnych. Piotr Mika Wykład z Technologii Informacyjnych Piotr Mika Uniwersalna forma graficznego zapisu algorytmów Schemat blokowy zbiór bloków, powiązanych ze sobą liniami zorientowanymi. Jest to rodzaj grafu, którego węzły

Bardziej szczegółowo