#arrays #matlab #simulink
#массивы #matlab #simulink
Вопрос:
Я пытаюсь создать функцию, которая может создавать таблицу блоков, содержащую их дескриптор, полное имя, тип блока, родительский элемент, используя struct . Однако каждый раз, когда я вводил имя модели, в нем говорилось
Error using struct
Field names must be non-empty character vectors or a string scalars.
Error in createBlockTable (line 10)
tableStruct = struct(get(i), 'Name');
Вот мой код
function blockTable = createBlockTable(modelName)
load_system(modelName);
getBlock = find_system(modelName, 'FindAll', 'on', 'FollowLinks', 'on', 'LookUnderMasks', 'all', 'Type', 'Block');
blockCell = cell(1,length(getBlock));
for n = 1:length(getBlock)
for i = getBlock(n, 1)
tableStruct = struct(get(i), 'Name');
end
end
blockTable = assign(tableStruct, blockCell);
end
Я действительно запутался в i = getBLock(n,1). Я думаю, что я просто что-то напутал в этой строке. Но я не знаю, как решить эту проблему. Пожалуйста, помогите, спасибо
ОБНОВЛЕНИЕ # 1
Через день мне удается решить эту проблему, но я не знаю, как поместить всю структуру в цикл for в пустую ячейку
function blockTable = createBlockTable(modelName)
load_system(modelName);
getBlock = find_system(modelName, 'FindAll', 'on', 'FollowLinks', 'on', 'LookUnderMasks', 'all', 'Type', 'Block');
blockCell = cell(1, length(getBlock));
for n = 1:length(getBlock)
structTable = struct('Handle', get(getBlock(n), 'Handle'), 'Name', get(getBlock(n), 'Name') );
end
end
Комментарии:
1. Вы пробовали ставить точку останова в этой строке, чтобы увидеть, что
get(i)
выводится? Согласно ошибке, я подозреваю, что это пустая строка, которую нельзя использовать в качестве имени поля структуры.2. Я уже знаю, что get(i) не может работать, но я также использую get_param, но ничего не меняется
3. используйте
get(i, 'Name')
, илиget_param(i, 'Name')
. Назначение struct не будет работать, поскольку вам также необходимо присвоить значение structfield . Но вы можете собрать имена блоков в массив ячеек.4. Я понимаю, но как добавить все имя в таблицу в blockCell
5. кроме того, ошибка при использовании преобразования структуры в struct из char невозможна.
Ответ №1:
через день я решил этот вопрос:
copyModel = 'sldemo_fuelsys_copy';
blockTable = makeTable(copyModel);
save('blockTable.mat','blockTable');
function blockTable = makeTable(modelName)
load_system(modelName);
getBlock = find_system(modelName, 'FindAll', 'on', 'FollowLinks', 'on', 'LookUnderMasks', 'all', 'Type', 'Block');
blockCell = cell(1, length(getBlock));
for n = 1:length(getBlock)
structTable = struct('Handle', get(getBlock(n), 'Handle'), 'Name', ...
get(getBlock(n), 'Name'), ...
'Block_Type', get(getBlock(n), 'BlockType'), ...
'Parent', get(getBlock(n), 'Parent') );
blockCell{1, n} = structTable;
end
blockTable = blockCell;
end
что касается моей проблемы, в основном я застрял в том, как создать strike для всех блоков в модели, так что я исправляю и использую для этого цикл for, а также присваиваю свою структуру ячейке, которая создается в начале этого кода.