Модель «Система нелинейных уравнений» (СНУ) поддерживает использование параметров. Параметры, заданные для ее родительской метамодели, возможно использовать в уравнениях моделей, входящих в СНУ.
В данном примере описано использования параметра метамодели (родительской по отношению СНУ) в уравнении модели, входящей в СНУ.
В репозитории предполагается наличие контейнера моделирования с идентификатором «CONT_MODEL». Данный контейнер содержит СНУ, метамодель для ее расчета с идентификатором «META_MODEL» и модель с идентификатором «MODEL», входящую в СНУ. Модель должна рассчитываться как детерминированное уравнение.
Для выполнения примера необходимо добавить ссылки на системные сборки «Metabase», «Ms», «Db».
Sub UserProc;
Var
Mb: IMetabase;
pMSDescr: IMetabaseObjectDescriptor;
pMetaModel: IMsMetaModel;
pParams: IMsModelParams;
pParam: IMsModelParam;
pModel: IMsModel;
pTransf: IMsFormulaTransform;
Varable: IMsFormulaTransformVariable;
Slice: IMsFormulaTransformSlice;
Term: IMsFormulaTerm;
pFormula: IMsFormula;
pDeterm: IMsDeterministicTransform;
Begin
Mb := MetabaseClass.Active;
pMSDescr := mb.ItemById("CONT_MODEL");
pMetaModel := Mb.ItemByIdNamespace("META_MODEL", pMSDescr.Key).Edit As IMsMetaModel;
// Добавление параметра в метамодель
pParams := pMetaModel.Params;
pParam := pParams.Add;
pParam.Id := "COEF_VAL";
pParam.Name := "COEF_VAL";
pParam.DataType := DbDataType.Float;
pParam.DefaultValue := 0.99;
(pMetaModel As IMetabaseObject).Save;
// Получение параметров расчета модели, входящей в СНУ
pModel := Mb.ItemByIdNamespace("MODEL", pMSDescr.Key).Edit As IMsModel;
pTransf := pModel.Transform;
pFormula := pTransf.FormulaItem(0);
pDeterm := pFormula.Method As IMsDeterministicTransform;
// Добавление параметра в формулу расчета модели
Varable := pTransf.Inputs.AddParamVariable(pParam.Id);
Slice := Varable.Slices.Add(Null);
Term := pDeterm.Operands.Add(Slice);
pDeterm.Expression.AsString := "(" + pDeterm.Expression.AsString + ") + " + Term.TermToInnerText;
// Сохранение модели
If pDeterm.Expression.Valid
Then (pModel As IMetabaseObject).Save;
Else Debug.WriteLine("Сохранение модели невозможно: ошибка в формуле!");
End If;
End Sub UserProc;
После выполнения примера в уравнение расчета модели «MODEL» будет добавлен параметр «COEF_VAL», задавать значение которого будет возможно из СНУ, содержащей данную модель.
См. также: