Я пытаюсь прочитать несколько файлов (csv, 2 столбца) с соответствующими именами (String) и методами интерполяции smoothness (String). Используя запись, я получаю красивый графический интерфейс в Dymola:
Чтобы объяснить мою проблему, вот упрощенная модель:
model Test_Strings
parameter String x[:];
parameter Integer k = size(x,1);
Integer i;
initial algorithm
i := 0;
Modelica.Utilities.Streams.print(String(i));
Modelica.Utilities.Streams.print(String(k));
equation
algorithm
when sample(1,1) then
i :=pre(i) + 1;
Modelica.Utilities.Streams.print(String(i));
for j in 1:k loop
Modelica.Utilities.Streams.print(x[j]);
end for;
end when;
end Test_Strings;
Графический интерфейс для этого выглядит следующим образом:
Код для его запуска:
model Test_Strings_System
Test_Strings test_Strings(x={"a","b","c","d"});
end Test_Strings_System;
Это даст следующий результат в консоли:
Теперь, если я попытаюсь использовать запись:
record MyRecord2
parameter String name = "NoName";
end MyRecord2;
И адаптируем модель (изменилась только первая строка параметра MyRecord2 x [:] и внутри цикла for x [j] .name):
model Test_Strings2
parameter MyRecord2 x[:];
parameter Integer k = size(x,1);
Integer i;
initial algorithm
i := 0;
Modelica.Utilities.Streams.print(String(i));
Modelica.Utilities.Streams.print(String(k));
equation
algorithm
when sample(1,1) then
i :=pre(i) + 1;
Modelica.Utilities.Streams.print(String(i));
for j in 1:k loop // k must be fixed number if equation
Modelica.Utilities.Streams.print(x[j].name); // j must be fixed number if algorithm
end for;
end when;
end Test_Strings2;
Затем я получаю сообщение об ошибке перевода: Внутренняя ошибка: не удалось развернуть строку.
Если я исправлю k или j в цикле for на заданное число (скажем, 3), тогда он будет работать, но в зависимости от того, находится ли он в разделе алгоритма или уравнения (см. Комментарии в коде).
У меня были похожие проблемы с гибкими размерами массивов, и я до сих пор не понимаю, как их решить. Обязательно ли использовать функции? Как я могу использовать гибкие размеры массивов, которые определяются в зависимости от внешних данных, выбранных в качестве параметров до моделирования (например, длины таблицы)? Или проблема в этом случае где-то еще?
Спасибо.