Please take a minute to review and accept our Terms of Use.
Welcome to the PLECS User Forum, where you can ask questions and receive answers from other members of the community.

Many technical questions regarding PLECS are answered on the Technical Solutions page of our website. Tutorial videos, specific application examples, and pre-recorded webinars are available on our YouTube page. Please follow us on LinkedIn for the latest Plexim news.

Problem with scripting discrete estimator

0 votes

Greeting to all Plecs users,

I'm an electrical engineering student and I'm new to PLECS simulations.

I have some trouble with implementing some discrete equations in a C-script. I have a set of continuous equations:

and instead of modeling them with existing block (transfer functions, gains, summation points etc.) I would like to implement them into a C-script as a set of discrete equations with a non fixed sampling time (I would use the non fixed step from PLECS simulation):

Unfortunaly, when starting the simulation I always get an error that says a derivative is infinite or NaN and is pointing to the C-script in PLECS' model of a synchronous machine that I'm using.

Could someone of You guys be so kind and check my C-script which is attached and see where is the problem, I suppose I wrote something wrong in C or defined some DiscState variables wrong.

Thank You very much for Your answers and precious time,



asked May 13, 2020 by Nardi (16 points)

1 Answer

0 votes

If you connect your C-Script with a Display block, you will find that the second output is indeed NaN. NaN and Inf values typically arise due to divisions by 0: 0/0 yields NaN, any non-zero number divided by 0 yields +/-Inf.

The culprit in your C code is this line:

current_value_delta = atan(current_value_psi_mq/current_value_psi_md);

You need to check whether "current_value_psi_md" is zero and in this case calculate "current_value_delta" in a different way.

answered May 14, 2020 by Wolfgang Hammer (397 points)
Dear Wolfgang,

Thank You very much for Your answer.

I'm not really sure if division by zero is the problem here. I tested the discrete esimator (in this C-script) outside my original control structure. In fact, I used my continuos estimator in the control structure and I just took the signals to the discrete estimator and looked a his outputs with displays. I didn't give me any error, and I got the same values as I would get with the continuos estimator.

But when I delete the continuos one, a implement the discrete one in my control structure it gives me an error. :/


Now I did all these calculations in major steps by adding if (IsMajorStep) before these calulations, and it work everything without an error but the signals are not very precise. :/