Save and Load System Object - MATLAB & Simulink (original) (raw)

Main Content

This example shows how to load and save a System objectâ„¢.

Save System Object and Child Object

Define a saveObjectImpl method to specify that more than just public properties should be saved when the user saves a System object. Within this method, use the defaultsaveObjectImpl@matlab.System to save public properties to the struct,s. Use the saveObject method to save child objects. Save protected and dependent properties, and finally, if the object has been called and not released, save the object state.

methods (Access = protected) function s = saveObjectImpl(obj) s = saveObjectImpl@matlab.System(obj); s.child = matlab.System.saveObject(obj.child); s.protectedprop = obj.protectedprop; s.pdependentprop = obj.pdependentprop; if isLocked(obj) s.state = obj.state; end end end

Load System Object and Child Object

Define a loadObjectImpl method to load a previously saved System object. Within this method, use the loadObject to load the child System object, load protected and private properties, load the state if the object was called and not released, and use loadObjectImpl from the base class to load public properties.

methods (Access = protected) function loadObjectImpl(obj,s,isInUse) obj.child = matlab.System.loadObject(s.child);

obj.protectedprop = s.protectedprop;
obj.pdependentprop = s.pdependentprop;

if isInUse
  obj.state = s.state;
end

loadObjectImpl@matlab.System(obj,s,isInUse);

end
end

Complete Class Definition Files with Save and Load

The Counter class definition file sets up an object with a count property. This counter is used in the MySaveLoader class definition file to count the number of child objects.

classdef Counter < matlab.System properties(DiscreteState) Count end methods (Access=protected) function setupImpl(obj, ~) obj.Count = 0; end function y = stepImpl(obj, u) if u > 0 obj.Count = obj.Count + 1; end y = obj.Count; end end end

classdef MySaveLoader < matlab.System

properties (Access = private) child pdependentprop = 1 end

properties (Access = protected) protectedprop = rand; end

properties (DiscreteState = true) state end

properties (Dependent) dependentprop end

methods function obj = MySaveLoader(varargin) obj@matlab.System(); setProperties(obj,nargin,varargin{:}); end

function set.dependentprop(obj, value)
  obj.pdependentprop = min(value, 5);
end

function value = get.dependentprop(obj)
  value = obj.pdependentprop;
end

end

methods (Access = protected) function setupImpl(obj) obj.state = 42; obj.child = Counter; end function out = stepImpl(obj,in) obj.state = in + obj.state + obj.protectedprop + ... obj.pdependentprop; out = obj.child(obj.state); end end

% Serialization methods (Access = protected) function s = saveObjectImpl(obj)
% Call the base class method s = saveObjectImpl@matlab.System(obj);

  % Save the child System objects
  s.child = matlab.System.saveObject(obj.child);
  
  % Save the protected & private properties
  s.protectedprop = obj.protectedprop;
  s.pdependentprop = obj.pdependentprop;
  
  % Save the state only if object called and not released
  if isLocked(obj)
    s.state = obj.state;
  end
end

function loadObjectImpl(obj,s,isInUse)
  % Load child System objects
  obj.child = matlab.System.loadObject(s.child);

  % Load protected and private properties
  obj.protectedprop = s.protectedprop;
  obj.pdependentprop = s.pdependentprop;
  
  % Load the state only if object is in use
  if isInUse
    obj.state = s.state;
  end

  % Call base class method to load public properties
  loadObjectImpl@matlab.System(obj,s,isInUse);
end    

end end

See Also

saveObjectImpl | loadObjectImpl