Opened 15 years ago

Last modified 7 years ago

#1163 closed defect (fixed)

parameter(fixed = true) should be treated as a constant during runtime — at Initial Version

Reported by: Henning Kiel Owned by: Henning Kiel
Priority: high Milestone:
Component: *unknown* Version:
Keywords: Cc: Henning Kiel, Martin Sjölund

Description

I would like to have a parameter which I can pass to a constructor for an ExternalObject.
I use the below code, but only get a NULL pointer passed to the constructor.
{{{package demo

model test

class MyData

extends ExternalObject ;

function constructor

input String fileName ;
output MyData table ;

external "C" table = constructor(fileName) annotation(Library = "test.o", Include = "#include \"test.h\"");
end constructor ;

function destructor

input MyData table ;

external "C" destructor(table) annotation(Library = "test.o", Include = "#include \"test.h\"");
end destructor ;

end MyData ;
parameter String DataFile = "sampledata.xml";

MyData table = MyData(DataFile ) ;

...

algorithm

if HallSignal <> pre(HallSignal) then

sig = func(omega, HallPos, table);

end if;

end test ;

end demo;}}}
!!Comment from Martin Sjoelund:

The simulation generates the following result:
{{{$ ./test -v
construct: (null)
read start = 0 from init file.
read stop = 1 from init file.
read stepSize = 0.002 from init file.
read tolerance = 1e-06 from init file.
read method = dassl from init file.
read $dummy = 0 from init file.
read der($dummy) = 0 from init file.
read DataFile = "sampledata.xml" from init file.}}}

The way OpenModelica does this is it first initializes the whole structure. Then calls the external object constructors. Then reads the input.

I think this is wrong. It should move calling external objects to a new function in the simulation code. And do that after the input has been read. Obviosuly your code should work since it's a parameter(fixed = true), which [should be] treated as a constant during runtime.

Change History (0)

Note: See TracTickets for help on using tickets.