function [sys,x0,str,Tarray] = sfundiskret(t,x,u,flagg) %Switch-struktur for å velge relevant funksjon i S-funksjonen ut fra verdien av flagg-argumentet: switch flagg, case 0, %Initialisering [sys,x0,str,Tarray]=mdlInitializeSizes; case 2, %Beregner oppdatering av tilstand, dvs. x ved tidsskritt k+1: sys=mdlUpdate(t,x,u); case 3, %Beregner utganger sys=mdlOutputs(t,x,u); case {2,4}, %For ubrukte eller ubehandlede flaggverdier sys = []; case 9, %Aktiviteter ved simuleringens avslutning mdlTerminate otherwise %Uventede flaggverdier error(['Unhandled flag = ',num2str(flag)]); end % end sfundiskret %----------------------------------------------------------- %S-funksjonens funksjoner er som følger: %---------------------------------------------------------- function [sys,x0,str,Tarray]=mdlInitializeSizes global xinit K1 K2 K3 Ts %%%Definerer karakteristika for systemet: sizes = simsizes; %Lager en struktur-variabel med navn sizes. %Gir verdier til feltene i strukturen sizes: %Begin sizes.NumContStates = 0; %Antall tidskontinuerlige tilstandsvariable i systemet sizes.NumDiscStates = 1; %Antall tidsdiskrete tilstandsvariable i systemet sizes.NumOutputs = 1; %Antall utgangsvariable sizes.NumInputs = 1; %Antall inngangsvariable sizes.DirFeedthrough = 1; %1 (ja) eller 0 (nei). Angir om det er direktekopling fra %inngang til utgang i systemet. Viktig å sette riktig! I dette eksempelet %er svaret ja (= 1). sizes.NumSampleTimes = 1; %Antall samplingsintervaller. Sett verdi 1 for %rent tidskontinuerlige systemer og for rent tidsdiskrete systemer. %End %%%Angir retur-argumenter for S-funksjonen: sys = simsizes(sizes); x0 = xinit; str = []; T = Ts; T_offset = 0; Tarray = [T T_offset]; % end mdlInitializeSizes %---------------------------------------------------------- function sys=mdlUpdate(t,x,u) global xinit K1 K2 K3 Ts sys = x(1) + Ts*(K1*x(1) + K2*(u(1))^2); %sys angir verdien av tilstanden x for neste tidsskritt (nr. k+1). % end mdlDerivatives %---------------------------------------------------------- function sys=mdlOutputs(t,x,u) global xinit K1 K2 K3 Ts sys = x(1) + K3*u(1); %sys angir verdien av systemets utgangsvariable. % end mdlOutputs %---------------------------------------------------------- function mdlTerminate disp('Simuleringen er avsluttet!') %end mdlTerminate