<

Question: MapleSim 2016 and sampled call to external function

Hello,

I'm writting a Modelica External component which use a C function, like this :

model SAMS.BlockUdpReceiver
    parameter Integer relativeSockId = 0 "Relative socket id (0..10)";
    parameter Integer stateUdp = 2 "state of receiver 1=receive data from udp ; 2=state from recorder config file";
    parameter Real step_time = 0.05 "sample time in second";
    parameter Integer nbDouble = 3 "number of double value to send";

    function udpReceiveDataMapleSim
        input Integer relativeSockId;
        input Integer stateUdp;
        input Real step_time;
        input Real currentTime;
        input Integer nbDouble;
        output Real dataToReceived[nbDouble];
    external "C"udpReceiveDataMapleSim(SAMS.BlockUdpReceiver.udpReceiveDataMapleSim.relativeSockId, SAMS.BlockUdpReceiver.udpReceiveDataMapleSim.stateUdp, SAMS.BlockUdpReceiver.udpReceiveDataMapleSim.step_time, SAMS.BlockUdpReceiver.udpReceiveDataMapleSim.currentTime, SAMS.BlockUdpReceiver.udpReceiveDataMapleSim.nbDouble, SAMS.BlockUdpReceiver.udpReceiveDataMapleSim.dataToReceived)
            annotation (
                Library = "F:/SAMSSVN/workspaceMaple/SamsLibrary/x64/Debug/SamsDll.dll",
                __Maplesoft_callconv = "stdcall");
    end udpReceiveDataMapleSim;

    Modelica.Blocks.Interfaces.RealOutput dataReceived[nbDouble] annotation (Placement(
        visible = true,
        transformation(
            origin = {120, 50},
            extent = {
                {-20, -20},
                {20, 20}},
            rotation = 0),
        iconTransformation(
            origin = {110, 50},
            extent = {
                {-10, -10},
                {10, 10}},
            rotation = 0)));
equation
    when {initial(), sample(0, step_time)} then
        dataReceived = udpReceiveDataMapleSim(relativeSockId, stateUdp, step_time, time, nbDouble);
    end when;

    annotation (
        Diagram(coordinateSystem(extent = {
            {-100, -100},
            {100, 100}})),
        Icon,
        experiment(__Maplesoft_engine = 2),
        __Maplesoft_none);
end SAMS.BlockUdpReceiver;

I want MapleSim to call C function at initial() time and with a sampled period of step_time.

But, the function is called at each simulation step (here at 0.4 ms)

for demonstrate it, I print a log file each time the function is called.
this is a part of the result :

id Receiver =11 ; CurrentTime = 0.151200 while t_step=0.002000
id Receiver =11 ; CurrentTime = 0.151200 while t_step=0.002000
id Receiver =11 ; CurrentTime = 0.151200 while t_step=0.002000

id Receiver =11 ; CurrentTime = 0.151600 while t_step=0.002000
id Receiver =11 ; CurrentTime = 0.151600 while t_step=0.002000
id Receiver =11 ; CurrentTime = 0.151600 while t_step=0.002000

id Receiver =11 ; CurrentTime = 0.152000 while t_step=0.002000
id Receiver =11 ; CurrentTime = 0.152000 while t_step=0.002000
id Receiver =11 ; CurrentTime = 0.152000 while t_step=0.002000

Why C function is called so many time (3 times in a step), and why is called for each simulation step (0.4ms) instead of each 2 ms ?

Maybe I make a bug in my Modelica code ? or not ?

thanks for any reply.

 

Please Wait...