Filter löschen
Filter löschen

Matlab Simulink: while loop with subtraction

5 Ansichten (letzte 30 Tage)
Efim Sturov
Efim Sturov am 1 Nov. 2017
Kommentiert: Efim Sturov am 11 Nov. 2017
Hi there,
I am hoping somebody here will be able to help me out with my small issue with one of the Simulink/Matlab code. It is quite similar to the problem that I’ve discussed earlier, but a little bit more complicated and now it is more a Simulink issue, rather than a Matlab one. So I have a turbine which speed is controlled by the gate’s opening, hence the control voltage. By controlling the gate opening I am accelerating the turbine and at some point in time, I need to introduce a saturation effect (since I am testing the code now, it will be done an external signal). This effect won’t change the control voltage, but it affects other components of the system, hence at the same control voltage, the turbine’s speed will go up. But at the same time, I need to keep the speed at the same value as it was before the saturation effect (let’s say it was 320 rpm). To do so I need to decrease the control voltage and should keep doing it until I reach the speed as it was before. There is no need to do it instantly (this approach will be later introduced in hardware), but it will be a nice thing to check the algorithm in these synthetic tests.
In terms of the model, I was planning to use a while loop with the speed requirement “if speed > 320” again, now just to simplify things. To decrease the control voltage I was planning to subtract from the original 50 (% opening) - 0.25 (u2) at first and after that increasing this value by 0.25 until I decrease the speed below 320. I can’t know the exact opening when this requirement will be satisfied, hence I need some kind of algorithm to “track” this voltage.
satisfied, hence I need some kind of algorithm to “track” this voltage. So it should be something like this:
U2 = 0;
While speed > 320
U2 = u2+0.25
End
U2 is initially zero since we have a predefined initial control voltage. And obviously, when we reach the motor’s speed below 320, I need to keep the latest value of the u2 (and control voltage). Overall, it is a small code and should be done in Simulink (don’t want to introduce any other Fcn function into the model). I’ve never used while and if blocks in Simulink, but so far I came up with this system. It’s a simplified version of my model, but the control principle is the same.
We are getting the motor speed of 350, compared with 320 (the speed before “saturation), and if our speed after saturation is higher, we need to reduce the control voltage. To trigger the while loop block I’ve decided to use a simple switch. The while block meanwhile is:
Definitely not the best implementation but I was trying a lot of different combinations and without any real success. I am always getting the same error:
Was trying to use a step signal instead of the constant “7” – to model acceleration of the motor, and was getting the same error at the moment of acceleration above 320 threshold. So looks like the approach is almost right but mathematically it fails to find the most suitable solution. I’ve tried to implement a transport delay in the memory part of the while subsystem but was getting errors during compilation all the time.
Are there any obvious (and not so) mistakes? Or maybe from the beginning, I should have chosen another approach… I really hope that somebody will be able to help. Thank you in advance and have a great day.

Akzeptierte Antwort

Birdman
Birdman am 1 Nov. 2017
Hello,
I somehow managed to break the algebraic loop by adding delay blocks to necessary places. Secondly, the while iterator subsystem fails to create an internal loop since the input which you defined as a constant always stays the same. It should be changing throughout simulation time. Before I did that, I could not create an internal loop and therefore the speed stayed the same. Anyway, now I managed to break the algebraic loop, created an internal loop. I changed 0.25 and made it dependent on the variable speed. By this form, you will see changes. Hope this helps. You can find the model attached.
  5 Kommentare
Birdman
Birdman am 3 Nov. 2017
I would suggest you to check your model since your feedback structure may include some problem.
Efim Sturov
Efim Sturov am 11 Nov. 2017
Thank you.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by