Modelica:如果在较新的库版本中更改或删除了值,是否有可能在模型中保留旧的默认值?

时间:2019-06-11 10:01:14

标签: modelica dymola

在modelica中开发模型库,我们决定更改和删除一些默认值。目前,我正在编写转换脚本,以确保在其他模型中使用库时更新库没有问题。

在较新的库版本中,是否有可能保留旧的默认值以防被删除,更改和重命名的值

我知道可以使用带有convertElement / convertModifiers的库来保留模型中给出的模型值。

示例:

exampleLib库中模型的旧版本:

<m-new-product-request #createNewProductRequestModal [data]="newProductRequest"></m-new-product-request>

exampleLib库中模型的新版本:

private products = [];

@Input('data')
set data(data: any) {
  if (data !== undefined || data !== "") {
    this.products = data;
    this.setProducts();
  }
  //this.ref.detectChanges();
}

constructor(private ref: ChangeDetectorRef) { }

ngOnInit() {
  this.onModalHiddenEvent(this);
  this.setTableDataSource();
}

private setProducts() {
  this.onModalHiddenEvent(this);
  this.orders = [];
  for (let key in this.products) {
    this.orders.push(this.products[key]);
  }
  this.setTableDataSource();
}

private setTableDataSource() {
  this.dataSourceOrders = new MatTableDataSource(this.orders);
  this.dataSourceOrders.paginator = this.ordersPaginator;
}

private onModalHiddenEvent(self) {
  $('#createNewProductRequestModal').on('hidden.bs.modal', function () {
    $(this).data('bs.modal', null);
  });
}

如果该值将在'exampleModel'中给出

model modelLib  
  parameter Real exampleVal = 2;  
end modelLib;

一个转换脚本,例如

model modelLib  
  parameter Real exampleValNew;  
end modelLib;

将确保保留exampleModel中的参数。

如果'exampleModel'中没有给出值,是否有可能保留默认值?
在这种情况下,使用该库的模型代码将为:

model exampleModel
 exampleLib.modelLib exampleLibTest(exampleVal = 4)
end exampleModel;

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

在某些情况下,也可以选择以下选项。

这是一个完全不同的解决方案,因为它在库中保留了默认值-但方式不同。这可以通过在新库中添加以下内容来完成:

model modelLib  
  parameter Real exampleValNew(start=2);  
end modelLib;

您未指定值的旧模型将运行,但会生成警告。

答案 1 :(得分:1)

要重命名参数或变量而不使用任何修饰符,请使用

convertElement("exampleLib.modelLib", "exampleVal", "exampleValNew");

答案 2 :(得分:1)

我用以下方法解决了这个问题:

convertModifiers("exampleLib.modelLib", fill("",0), {"exampleValNew=2"});