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.