Мотивация
Modelica хранит единицы измерения (например, единицы СИ и не-СИ) в качестве атрибута относительно переменной. Вот пример для не-SI-единицы:
type Time_months = Real( quantity = "Time", unit = "mo", displayUnit = "months" )
Поскольку для моделей в экономике было бы довольно неудобно давать показатели в секундах, я хотел бы написать довольно общую функцию преобразования единиц, которая позволит преобразовывать единицы времени. Поэтому в идеале функция для преобразования в другую временную базу должна работать с тремя входами и одним выходом:
input Real timeValue "the value of time to be converted";
input String timeBaseA "the time base for timeValue, e.g. \"mo\" ";
input String timeBaseB "the time base to convert to, e.g. \"yr\" ";
output Real convertedTimeValue "the result of the conversion";
Вопросы
Если мы предположим, что переменная для некоторого временного значения уже имеет определенный атрибут единицы (например, "mo"), имеет смысл использовать эту метаинформацию в модели.
Вопрос 1: Как в модели можно получить доступ к метаинформации, такой как единица ?
В идеале было бы что-то вроде следующего:
String timeBaseA := timeValue.unit;
или
String timeBaseA := getUnit( timeValue ) "some function to read unit information";
Вопрос 2: Как мета-информация, такая как единица , может быть назначена внутри функции?
В этом примере мы, конечно, хотели бы вернуть значение output с правильной единицей времени. Поэтому в идеале мы хотели бы иметь:
output Real convertedTime( quantity = "Time", unit = strTimeBaseB )
К сожалению, использование input
приведет к ошибке, поскольку изменчивость отличается: атрибут unit должен иметь постоянную переменную , но входная переменная имеет параметр изменчивость . (Использование функции - что было бы неплохо - также не работает по той же причине.)