m-file Function mit S-FunctionBuilder als S-Function nutzen
Henne24
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 23.11.2011, 10:36
Titel: m-file Function mit S-FunctionBuilder als S-Function nutzen
Hallo, ich habe eine Funktion die aus einer Dezimalzahl die 8-Bits aufschlüsselt. So jetzt möchte ich diesen Code über den S-FunctionBuilder in eine S-Function umsetzten. Leider komme ich mit Builder nicht hin. Ich weiß das im Reiter Outputs der Code der Function rein muss. Beim Build bekomme ich immer Fehler aus denen ich nicht schlau werde. Hier mal die Function aus dem m-file:
Wie muss ich den Code anpassen, das ich ihn unter Outputs eingesetzt werden kann? Welche anderen Einstellungen sollte ich außerdem noch vornehmen.
Vielen Dank im Voraus.
Stefan
Henne24
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 23.11.2011, 12:48
Titel:
So die S-Function funktioniert jetzt in Simulink.
Code:
function sfun_de2bi(block)
%MSFUNTMPL_BASIC A Template for a Level-2 MATLAB S-Function % The MATLAB S-function is written as a MATLAB function with the % same name as the S-function. Replace 'msfuntmpl_basic' with the % name of your S-function.
%
% It should be noted that the MATLAB S-function is very similar % to Level-2 C-Mex S-functions. You should be able to get more % information for each of the block methods by referring to the % documentation for C-Mex S-functions.
%
% Copyright 2003-2010 The MathWorks, Inc.
%%
%% The setup method is used to set up the basic attributes of the
%% S-function such as ports, parameters, etc. Do not add any other
%% calls to the main body of the function.
%%
setup(block);
%endfunction
%% Function: setup ===================================================
%% Abstract:
%% Set up the basic characteristics of the S-function block such as:
%% - Input ports
%% - Output ports
%% - Dialog parameters
%% - Options
%%
%% Required : Yes
%% C-Mex counterpart: mdlInitializeSizes
%%
function setup(block)
% Register number of ports
block.NumInputPorts = 1;
block.NumOutputPorts = 1;
% Setup port properties to be inherited or dynamic
block.SetPreCompInpPortInfoToDynamic;
block.SetPreCompOutPortInfoToDynamic;
% Register sample times % [0 offset] : Continuous sample time % [positive_num offset] : Discrete sample time
%
% [-1, 0] : Inherited sample time % [-2, 0] : Variable sample time
block.SampleTimes = [00];
% Specify the block simStateCompliance. The allowed values are: % 'UnknownSimState', < The default setting; warn and assume DefaultSimState % 'DefaultSimState', < Same sim state as a built-in block % 'HasNoSimState', < No sim state % 'CustomSimState', < Has GetSimState and SetSimState methods % 'DisallowSimState' < Error out when saving or restoring the model sim state
block.SimStateCompliance = 'DefaultSimState';
%% -----------------------------------------------------------------
%% The MATLAB S-function uses an internal registry for all
%% block methods. You should register all relevant methods
%% (optional and required) as illustrated below. You may choose
%% any suitable name for the methods and implement these methods
%% as local functions within the same file. See comments
%% provided for each function for more information.
%% -----------------------------------------------------------------
%%
%% PostPropagationSetup:
%% Functionality : Setup work areas and state variables. Can
%% also register run-time methods here
%% Required : No
%% C-Mex counterpart: mdlSetWorkWidths
%%
function DoPostPropSetup(block) % block.NumDworks = 1; % % block.Dwork(1).Name = 'x1'; % block.Dwork(1).Dimensions = 1; % block.Dwork(1).DatatypeID = 0; % double % block.Dwork(1).Complexity = 'Real'; % real % block.Dwork(1).UsedAsDiscState = true;
%%
%% InitializeConditions:
%% Functionality : Called at the start of simulation and if it is
%% present in an enabled subsystem configured to reset
%% states, it will be called when the enabled subsystem
%% restarts execution to reset the states.
%% Required : No
%% C-MEX counterpart: mdlInitializeConditions
%%
function InitializeConditions(block)
%%
%% Start:
%% Functionality : Called once at start of model execution. If you
%% have states that should be initialized once, this
%% is the place to do it.
%% Required : No
%% C-MEX counterpart: mdlStart
%%
function Start(block)
% block.Dwork(1).Data = 0;
%endfunction
%%
%% Outputs:
%% Functionality : Called to generate block outputs in
%% simulation step
%% Required : Yes
%% C-MEX counterpart: mdlOutputs
%%
function Outputs(block)
dec = block.InputPort(1).Data;
i=0;
p=1;
%calculate
if(dec==0);
bin=[00000000];
else while i == 0 if dec/2 > 0 if dec/2 ~= round(dec/2)
bin(p) = 1;
end if dec/2 == round(dec/2)
bin(p) = 0;
end end if dec/2 < 1
bin(p) = 1;
i = 1;
else
p=p+1;
dec = floor(dec/2);
end end
%Buffer to 8bits
iflength(bin) < 8
bin = [zeros(1,8-length(bin)),newbin];
else
bin=newbin;
end end
block.OutputPort(1).Data = bin;
%end Outputs
%%
%% Update:
%% Functionality : Called to update discrete states
%% during simulation step
%% Required : No
%% C-MEX counterpart: mdlUpdate
%%
function Update(block)
%end Update
%%
%% Derivatives:
%% Functionality : Called to update derivatives of
%% continuous states during simulation step
%% Required : No
%% C-MEX counterpart: mdlDerivatives
%%
function Derivatives(block)
%%
%% Terminate:
%% Functionality : Called at the end of simulation for cleanup
%% Required : Yes
%% C-MEX counterpart: mdlTerminate
%%
function Terminate(block)
Jetzt möchte ich das ganze Modell inklusive der neuen S-Function mit Incremental Build kompilieren und bekomme eine Fehlermeldung, dass sich keine 'sfun_de2bi.tlc' im Pfad befindet. Wo bekomme ich diese denn her?
Stefan
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.