将MATLAB对象转换为struct?

时间:2016-03-02 01:42:45

标签: matlab object struct

我们的软件,我们称之为我的,依赖于另一个模拟软件,我们称之为 Sim 。不幸的是, Sim 中存在一个错误。

为了帮助 Sim 的调试过程,我需要提供模拟文件及其输入。

这意味着传递我的 MATLAB对象及其类。不幸的是,这些课程是机密材料。那么有没有办法,我可以向下转换(?)或将对象转换回结构?这将提供 Sim 的输入值,但不会向 Sim 的所有者显示这些值的派生方式。

感谢。

2 个答案:

答案 0 :(得分:2)

struct函数可以将对象转换为struct。

 struct(obj)

答案 1 :(得分:1)

我不确定我是否了解您的用例,但我需要做类似的事情。我通过Matlab控制实验。每个设备都通过一个对象(一些自定义类的实例)来控制。每个设备的状态存储在其对象的公共属性中。我偶尔会想保存我的设备状态,这意味着我必须递归遍历所有公共属性,并将所有数据放入结构中。

也许代码最能说明问题。

function output_struct = obj2struct(obj)
% Converts obj into a struct by examining the public properties of obj. If
% a property contains another object, this function recursively calls
% itself on that object. Else, it copies the property and its value to 
% output_struct. This function treats structs the same as objects.
%
% Note: This function skips over serial, visa and tcpip objects, which
% contain lots of information that is unnecessary (for us).

properties = fieldnames(obj); % works on structs & classes (public properties)
for i = 1:length(properties)
    val = obj.(properties{i});
    if ~isstruct(val) && ~isobject(val)
        output_struct.(properties{i}) = val; 
    else
        if isa(val, 'serial') || isa(val, 'visa') || isa(val, 'tcpip')
            % don't convert communication objects
            continue
        end
        temp = obj2struct(val);
        if ~isempty(temp)
            output_struct.(properties{i}) = temp;
        end
    end
end