ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ синтСза дискрСтного ΠŸΠ˜Π” рСгулятора Π½Π° Π­Π’Πœ

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Для схСмы Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΠΎΠΉ систСмы с Π΄ΠΈΡΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ рСгулятором (Π ), ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹ΠΌ элСмСнтом, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² (Ρ„ΠΈ) ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ управлСния (см. Ρ€ΠΈΡ. 1) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ коэффициСнтов дискрСтного рСгулятора с Π·Π°ΠΊΠΎΠ½ΠΎΠΌ ΠŸΠ˜Π” ΠΏΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ критСрия I =. ДискрСтный рСгулятор Π²Ρ‹Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ воздСйствиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ mT Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΡ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ синтСза дискрСтного ΠŸΠ˜Π” рСгулятора Π½Π° Π­Π’Πœ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π°

" ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ синтСза дискрСтного ΠŸΠ˜Π” рСгулятора Π½Π° Π­Π’Πœ"

Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ рСгулятор

Π—Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΡƒΡ€ΡΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ:

1. Для схСмы Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΠΎΠΉ систСмы с Π΄ΠΈΡΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ рСгулятором (Π ), ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹ΠΌ элСмСнтом, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² (Ρ„ΠΈ) ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ управлСния (см. Ρ€ΠΈΡ. 1) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ коэффициСнтов дискрСтного рСгулятора с Π·Π°ΠΊΠΎΠ½ΠΎΠΌ ΠŸΠ˜Π” ΠΏΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ критСрия I =.

2. Алгоритм Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ:

— ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° интСгрирования Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹Ρ… Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° управлСния. УравнСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Коши ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠžΠ£.

— ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ дискрСтных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² управлСния рСгулятора.

— ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΠΌ расчСта формироватСля ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ порядка.

— ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»Π° I ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ коэффициСнтов дискрСтного рСгулятора q0, q1, q2.

3. Π‘ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ расчёта ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² рСгулятора Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ описанных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

4. ΠŸΡ€ΠΎΠ²Π΅ΡΡ‚ΠΈ расчСты. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ запискС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½Ρ‹Π΅ процСссы Π² Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΠΎΠΉ систСмС, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ для ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² рСгулятора, ΠΏΡ€ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΌ скачкообразном ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ воздСйствия. НСобходимо ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‹Π΅ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² рСгулятора Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½Ρ‹Ρ… процСссов.

Рис. 1

На ΡΡ…Π΅ΠΌΠ΅ (рис. 1) Π²Π²Π΅Π΄Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ обозначСния:

Π  Ρ€Π΅Π³ΡƒΠ»ΡΡ‚ΠΎΡ€, ЀИ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ², ОУ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ управлСния, ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ½Ρ‹ΠΉ элСмСнт (ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ),

g (t) Π·Π°Π΄Π°ΡŽΡ‰Π΅Π΅ воздСйствиС,

?(t) ошибка систСмы,

T Ρ‚Π°ΠΊΡ‚ квантования,

UT (t) ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ сигнал Π² Π²ΠΈΠ΄Π΅ Ρ€Π΅ΡˆΠ΅Ρ‚Ρ‡Π°Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ,

UT*(t) ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ сигнал Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ²,

f (t) Π²ΠΎΠ·ΠΌΡƒΡ‰Π°ΡŽΡ‰Π΅Π΅ воздСйствиС,

y (t)рСгулируСмая Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΎΡ‡Π½Π°Ρ функция дискрСтного рСгулятора, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠŸΠ˜Π” Π·Π°ΠΊΠΎΠ½ управлСния:

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΎΡ‡Π½Π°Ρ функция ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° управлСния:

Π³Π΄Π΅

k0 — коэффициСнт усилСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° управлСния (k0 =1), Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄Π°Π½Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ № 1. НомСр Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° выбираСтся ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Ρ†ΠΈΡ„Ρ€Π΅ ΡˆΠΈΡ„Ρ€Π°. Π£ ΠΌΠ΅Π½Ρ Π½ΠΎΠΌΠ΅Ρ€ ΡˆΠΈΡ„Ρ€Π° 2 222, соотвСтствСнно Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ 2-ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

ΠœΠ΅Ρ‚ΠΎΠ΄ интСгрирования Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹Ρ… Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ (Π”Π£) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° управлСния

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (ПЀ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π°Π·ΠΎΠ±ΡŒΠ΅ΠΌ Π½Π° 3 Π·Π²Π΅Π½Π° 1-Π³ΠΎ порядка:

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠŸΠ€ Π”Π£: Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Коши:

Аналогично для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… звСньСв:

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ Π½ΡƒΠ»ΡŽ. Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ сигнал ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚ Ρ€Π΅Π³ΡƒΠ»ΡΡ‚ΠΎΡ€Π°, Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ значСния считаСм ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ-Π·Π²Π΅Π½Ρƒ. Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ значСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π²Π΅Π½Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ считаСм, зная Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π­ΠΉΠ»Π΅Ρ€Π°. Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° состоит Π² Ρ‚ΠΎΠΌ, Π·Π° Π²Ρ€Π΅ΠΌΡ производная измСняСтся Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ ΡΡ‡ΠΈΡ‚ая Π΅Ρ‘ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

ΠŸΠΎΡ‚ΠΎΠΌ ΠΏΠΎ Π”Π£ Π² Ρ„ΠΎΡ€Π΅ Коши вычисляСм Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΠΏΠΎΠ²Ρ‚оряСм ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ число Ρ€Π°Π· для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ описаниС дискрСтных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² управлСния рСгулятора

ДискрСтный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ управлСния рСгулятора ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠΎ Π΅Π³ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡƒ — Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ-ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎ-Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ (ΠŸΠ˜Π”) рСгулятору. Π£Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ рСгулятора Π² Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅:

Π­Ρ‚ΠΎ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ идСального рСгулятора. Π£ Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Π² Π»Π΅Π²ΠΎΠΉ части (ΠΎΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹) Π·Π½Π°Ρ‡ΠΈΡ‚, Π½Π΅Ρ‚ собствСнной инСрционности. Аналоговых Π±Π΅Π·Ρ‹Π½Π΅Ρ€Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… рСгуляторов Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ ΠΈΠ½Π΅Ρ€Ρ†ΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒΡŽ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ числСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ расчСта ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΠΎΠ² (Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ — ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²) ΠΈ Π°ΠΏΠΏΡ€ΠΎΠΊΡΠΈΠΌΠΈΡ€ΡƒΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡƒΡŽ (Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ разностным Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π½Π°Π·Π°Π΄) ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ это ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ для любого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ t=mT:

(1)

ВычислСниС суммы для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ‚Π°ΠΊΡ‚Π΅ квантования слишком затратная опСрация ΠΈ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ пСрСвСсти ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ. Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ (1) для ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ m-1:

Π’Ρ‹Ρ‡Ρ‚Π΅ΠΌ ΠΈΠ· ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡ (1) ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ (2):

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ:

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΡΡ‚Π½ΠΎΠΌΡƒ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ Π”ΠŸΠ€ рСгулятора:

Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ ΠΏΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ стСпСням z:

Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² (интСрполятор) Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ порядка

ДискрСтный рСгулятор Π²Ρ‹Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ воздСйствиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ mT Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΡ ΠΊΠ»ΡŽΡ‡Π°. Для Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° управлСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ воздСйствиС. Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ‚ΠΎΡ€ 0-Π³ΠΎ порядка Π½Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ замыканиями ΠΊΠ»ΡŽΡ‡Π° Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ UT (t).

Алгоритм ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»Π° I

Π—Π°Π΄Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния коэффициСнтов рСгулятора q0, q1, q2. Π’ Ρ…ΠΎΠ΄Π΅ модСлирования ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½ΠΎ считаСм ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π» критСрия ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ I, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ². ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Ρ€Π°ΠΏΠ΅Ρ†ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Ρ‚Ρ€Π°ΠΏΠ΅Ρ†ΠΈΠΉ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ значСния бСрСтся ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠ°. ΠŸΡ€ΠΈ большом числС Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΉ потСря точности Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ.. ПослС окончания модСлирования (Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ врСмя модСлирования постоянноС) ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ критСрия ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ I, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зависит ΠΎΡ‚ ΠΊΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ΠΎΠ² q0-q2.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ. Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ I ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π₯ΡƒΠΊΠ°-ДТивса (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° взят Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΈΠ· ΠΊΡƒΡ€ΡΠ° «Π§ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹»).

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° расчёта ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² рСгулятора

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ всС уравнСния ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для числСнной парамСтричСской ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы управлСния с Π΄ΠΈΡΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ рСгулятором. На ΠΎΡΠ½ΠΎΠ²Π΅ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² составлСна ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° OptimizeD. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана Π² ΡΡ€Π΅Π΄Π΅ Borland C++ Builder 5. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ расчСтов

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½Ρ‹ΠΉ процСсса с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями коэффициСнтов рСгулятора:

Рис.

Рис.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½Ρ‹ΠΉ процСсс ΠΏΡ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… значСниях коэффициСнтов рСгулятора:

q0=2,01 q0=1,82

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ MatLab для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы управлСния с дискрСтным рСгулятором

Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы управлСния ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Simulink Response Optimization. (оптимизация Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ систСмы). Боставим модСль систСмы Π² Simulink:

Рис.

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ посчитаСм Π² Simulink ΠΈ ΠΏΠΎΠ΄Π°Π΄ΠΈΠΌ Π½Π° Π±Π»ΠΎΠΊ Signal Constraint. Π‘Π»ΠΎΠΊ Signal Constraint ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ систСмы с Ρ‚Π°ΠΊΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ (Goals), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΠΈΠ±ΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ (Enforce) ΡƒΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π½Π° Π±Π»ΠΎΠΊ сигнал Π² Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ (Enforce signal bounds), Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒ (ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ — Tracks) Π΅Π³ΠΎ ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΎΠΉ (Tracks reference signal).

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ рСгулятора, Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… q0, q1,q2. Π£ΠΊΠ°ΠΆΠ΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΠΈ Π·Π°ΠΎΠ΄Π½ΠΎ объявим сами ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅) Π² ΠΎΠΊΠ½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄:

>> q0=0.5;

>> q1=-1;

>> q2=2;

Π”Π°Π»Π΅Π΅ Π½Π°Π΄ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ Signal Constraint. Optimization->Tuned Parameters. Π£ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· Workspace ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния.

Рис.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Ρ†Π΅Π»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Tracks reference signal. Π—Π°Π΄Π°Π΄ΠΈΠΌ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ критСрия ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Ρ…ΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ. Goals->Desired Response (ТСлаСмая рСакция).

Рис.

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. ΠŸΡƒΠ½ΠΊΡ‚ΠΈΡ€Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠ΅ΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π§Π΅Ρ€Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠ΅ΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ нарастаниС ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»Π° I, Π² Ρ…ΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса. Π₯ΠΎΡ€ΠΎΡˆΠΎ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π» стрСмится ΠΊ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Ρ‚. Π΅. сущСствуСт.

Рис Π₯ΠΎΠ΄ процСсса ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

max Directional First-order

Iter S-count f (x) constraint Step-size derivative optimality Procedure

0 1 182.61 0

1 15 149.619 0 0.333 685 350

2 24 98.4927 0 0.25 330 128

3 33 50.8143 0 0.172 66.2 43.8

4 40 42.7297 0 0.646 21 11.8

5 47 36.0404 0 1 -0.876 9.52

6 54 35.0789 0 1 -0.434 5.87

7 61 34.8456 0 1 0.394 3.84

8 68 34.8076 0 1 0.0233 0.734

9 75 34.7892 0 1 -0.652 0.116

Optimization terminated due to slow progress in parameter or objective values.

To optimize further, go to Optimization Options and decrease the parameter and/or function tolerances.

q0 = 1.9207

q1 = -1.9958

q2 = 0.5454

Π’ΠΈΠ΄ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса:

>>plot (ScopeData.time, ScopeData.signals.values)

Рис.

Π‘Ρ€Π°Π²Π½ΠΈΠΌ значСния коэффициСнтов, с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ OptimizeD:

Π’Π°Π±Π»ΠΈΡ†Π°

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚

OptimizeD

MatLab

Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅, %

q0

1,918

1.920

1,0

q1

— 2,065

— 1.995

— 3,3

q2

0,614

0.545

— 11

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ OptimizeD

ΠœΠΎΠ΄ΡƒΠ»ΡŒ MainCode. cpp ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ компилятором автоматичСски ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ†Π΅Π»ΡΡ… сокращСния объСма.

//—————————————————————————————————————;

// ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° расчСта ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса для курсовой ΠΏΠΎ Π¦Π‘Π£

// Π’ Ρ†Π΅Π»ΡΡ… максимального упрощСния ΠΈ «ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΠΈ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹,

// ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ всС элСмСнты ООП, Π° Ρ‚Π°ΠΊΠΆΠ΅ расчСт выполняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π­ΠΉΠ»Π΅Ρ€Π°

//—————————————————————————————————————;

// Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ считаСтся ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ лишнСго, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ

// пСрСсчСт Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, поэтому Ρ€Π°Π±ΠΎΡ‚Π° Π΅Ρ‘

// ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Ρ‡Π΅ΠΌ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² 100 Ρ€Π°Π·. ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ

// Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ процСсс ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ΅Π½Π΅Π΅ 1 сСк Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ 1000 шагов.

//—————————————————————————————————————;

#include

#include

#include

#include

#pragma hdrstop

#include «MainCode.h»

//—————————————————————————————————————;

#pragma package (smart_init)

#pragma resource «*.dfm»

TMainForm *MainForm; //ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ

//ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ расчСта. Для упрощСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

//ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ интСгрирования

float dt; //шаг интСгрирования

float t; //врСмя интСгрирования

//ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

float tau1; //постоянная Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ 1

float tau2; //постоянная Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ 2

float tau3; //постоянная Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ 3

//ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ рСгулятора

float T; //Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΡ‚Π° квантования Π² ΡΠ΅ΠΊ.

float q0; //коэффициСнт ΠΏΡ€ΠΈ z0

float q1; //коэффициСнт ΠΏΡ€ΠΈ z^-1

float q2; //коэффициСнт ΠΏΡ€ΠΈ z^-2

//ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ΠΎΠΆΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

float r; //коэффициСнт r

float I; //сам ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ

int NC; //число ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ

//—————————————————————————————————————;

//ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ «Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ» — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π₯ΡƒΠΊΠ°-ДТивса

void __fastcall TMainForm: Button1Click (TObject *Sender)

{

//Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² расчСта

LoadParam ();

//сброс Π³Ρ€Π°Ρ„ΠΈΠΊΠ° «Π₯ΠΎΠ΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ»

NC=0;

Chart1->Series[0]->Clear ();

Chart1->Title->Text->Strings[1]="ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ систСмы Π½Π°Ρ‡Π°Ρ‚Π°" ;

Button1->Enabled=false;

Button1->Caption="Π˜Π΄Π΅Ρ‚ процСсс" ;

//Π½Π°Ρ‡Π°Π»ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

TDateTime Time;

Time=Time.CurrentTime ();

/*———————CΠ°ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Взят Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ.—————————————*/

/*НСобходимо Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ шага H, ΠΎΠ±Ρ‰Π΅Π³ΠΎ для всСх ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Z[1] ΠΈ Z[2] Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ F.

Число ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ N. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ происходит лишь ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ FUNK. Минимально допустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π»ΡŒΡ‡Π΅Π½ΠΈΡ шага задаСтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if K<1E-15 …(см. ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΊΠΈ 7:) */

int i, J, PS, BS, N;

float K, H, FI, FB, Z1;

float Y[10], P[10], B[10], Z[10];

H=0.1; N=3; K=H; Z[1]=q0; Z[2]=q1;Z[3]=q2;

for (i=1;i<=N;i++)

{

Y[i]=Z[i]; P[i]=Z[i]; B[i]=Z[i];

}

FUNK (Z); Z1=I;

FI=Z1; PS=0; BS=1; J=1; FB=FI;

S4:

Z[J]=Y[J]+K; FUNK (Z); Z1=I;

if (Z1

Z[J]=Y[J]-K; FUNK (Z); Z1=I;

if (Z1

Z[J]=Y[J]; goto S2;

S1:

Y[J]=Z[J];

S2:

FUNK (Z); Z1=I; FI=Z1;

if (J==N) goto S3;

J=J+1; goto S4;

S3:

if (FI<(FB-1E-6)) goto S5;

if ((PS==1)&(BS==0)) goto S6;

goto S7;

S6:

for (i=1;i<=N;i++)

{

P[i]=B[i]; Y[i]=B[i]; Z[i]=B[i];

}

FUNK (Z); Z1=I; BS=1; PS=0; FI=Z1; FB=Z1; J=1; goto S4;

S7:

K=K/10;

if (K<1E-6) goto S8;

J=1; goto S4;

S5:

for (i=1;i<=N;i++)

{

P[i]=2*Y[i]-B[i]; B[i]=Y[i]; Z[i]=P[i]; Y[i]=Z[i];

}

FUNK (Z); Z1=I; FB=FI; PS=1; BS=0; FI=Z1; J=1; goto S4;

S8:

/*——————— Алгоритм закончился. ——————————————-*/

//ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Time=Time.CurrentTime ()-Time;

Chart1->Title->Text->Strings[1]=

" ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ систСмы ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° Π·Π° «+IntToStr (NC)+» шагов ΠΈ «+Time;

Button1->Enabled=true;

Button1->Caption="Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ" ;

}

//—————————————————————————————————————;

//функция-Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ FUNC. ЗапускаСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ расчСта ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса CompProcess,

//Π° Ρ‚Π°ΠΊΠΆΠ΅ обновляСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠΊΠ½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НаличиС Π΅Ρ‘ Π²Ρ‹Π·Π²Π°Π½ΠΎ присутвиСм

//Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΠ½ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅

//Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π₯ΡƒΠΊΠ°-ДТивса

void __fastcall TMainForm: FUNK (float *Z)

{

static int i;

q0=Z[1];

q1=Z[2];

q2=Z[3];

StringGrid2->Cells[1][7]=FloatToStrF (q0,ffGeneral, 4,5);

StringGrid2->Cells[1][8]=FloatToStrF (q1,ffGeneral, 4,5);

StringGrid2->Cells[1][9]=FloatToStrF (q2,ffGeneral, 4,5);

CompProcess ();

ShowOptimize ();

i++; if (!(i%10)) Application->ProcessMessages ();

}

//—————————————————————————————————————;

//расчСт ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅

void __fastcall TMainForm: CompProcess (void)

{

//ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ систСмы

float g; //Π·Π°Π΄Π°ΡŽΡ‰Π΅Π΅ воздСйствиС

float E; //ошибка систСмы Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ‚Π°ΠΊΡ‚ E (m)

float E1; //ошибка систСмы, задСрТанная Π½Π° 1 Ρ‚Π°ΠΊΡ‚ E (m-1)

float E2; //ошибка систСмы, задСрТанная Π½Π° 2 Ρ‚Π°ΠΊΡ‚Π° E (m-2)

float U; //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π€Π˜ рСгулятора

float x1; //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ 1-Π³ΠΎ Π·Π²Π΅Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

float x2; //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ 2-Π³ΠΎ Π·Π²Π΅Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

float y; //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ 3-Π³ΠΎ Π·Π²Π΅Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ систСмы

float DER1; //Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1-ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ для всСх Π·Π²Π΅Π½ΡŒΡΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°,

//Ρ‚.ΠΊ. Π΅Ρ‘ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вычисляСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π·Π°Π½ΠΎΠ²ΠΎ, Π½Π΅Ρ‚

//нСобходимости Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π²Π΅Π½Π°

//ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для опрСдСлСния дискрСтных ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ mT ΡΡ€Π°Π±Π°Ρ‚ывания рСгулятора

int NSkip, NS;

//слуТСбныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ расчСта

float rt; //Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя Π² ΡΠ΅ΠΊ.

float qt; //врСмя ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π² ΡΠ΅ΠΊ.

float yst; //ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ²ΡˆΠΈΠΉΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для

//расчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса, вводится Π·Π°Ρ€Π°Π½Π΅Π΅

float nmax;//максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ… сигнала, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для

//расчСта пСрСрСгулирования

DWORD i, m; //счСтчики

AnsiString str;

//Π·Π°Π΄Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС расчСта

rt=0;nmax=0;

//Π·Π°Π΄Π°Π΅ΠΌ Π·Π°Π΄Π°ΡŽΡ‰Π΅Π΅ воздСйствиС ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

g=1;yst=g;

//Π·Π°Π΄Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС рСгулятора

E=0;E1=0;U=0;

//Π·Π°Π΄Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

x1=0;x2=0;y=0;

//Π·Π°Π΄Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС критСрия ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

I=0;

//опрСдСляСм сколько шагов интСгрирования ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ

NSkip=T/dt;NS=0;

//записываСм скоррСктированоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Π°ΠΊΡ‚Π°

StringGrid2->Cells[1][6]=FloatToStrF (NSkip*dt, ffGeneral, 7,7);

//сбрасываСм Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ

for (i=0;i<5;i++) Chart->Series[i]->Clear ();

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1000 Ρ‚ΠΎΡ‡Π΅ΠΊ для скорости

m=t/(dt*1000); if (m==0) m=1;

//ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

while (rt

//опрСдСляСм дискрСтныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ mT — Π² ΡΡ‚ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ срабатываСт рСгулятор

if (!(NS%NSkip)){

//считаСм Ρ€Π°Π±ΠΎΡ‚Ρƒ рСгулятора

//считаСм ошибки систСмы — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ уст-Π²Π° сравнСния

E2=E1;

E1=E;

E=g-y;

//с Π²Ρ‹Ρ…ΠΎΠ΄Π° уст-Π²Π° сравнСния ΠΏΠΎΠ΄Π°Π΅ΠΌ сигнал Π½Π° Ρ€Π΅Π³ΡƒΠ»ΡΡ‚ΠΎΡ€

U=U+q0*E+q1*E1+q2*E2;

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгулятора Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊ

Chart->Series[4]->AddXY (rt, U," «, clBlue);

}

NS++;

//Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ U Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгулятора запоминаСтся Π΄ΠΎ

//ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π°ΠΊΡ‚Π° квантования. НСобходимости Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚Π΅Π»Π΅

//ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ² Π½Π΅Ρ‚.

//с Π²Ρ‹Ρ…ΠΎΠ΄Π° рСгулятора ΠΏΠΎΠ΄Π°Π΅ΠΌ сигнал Π½Π° Π·Π²Π΅Π½ΡŒΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

//ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ считаСм самым простым способом — ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π­ΠΉΠ»Π΅Ρ€Π°

//1-ΠΎΠ΅ Π·Π²Π΅Π½ΠΎ

DER1=(U-x1)/tau1;

x1=x1+DER1*dt;

//2-ΠΎΠ΅ Π·Π²Π΅Π½ΠΎ

DER1=(x1-x2)/tau2;

x2=x2+DER1*dt;

//Π²Ρ‹Ρ…ΠΎΠ΄ систСмы. 3-ΠΈΠ΅ Π·Π²Π΅Π½ΠΎ

DER1=(x2-y)/tau3;

y=y+DER1*dt;

//опрСдСляСм врСмя ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса

if ((y>yst*1.05)|(y

//опрСдСляСм максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

if (y>nmax) nmax=y;

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ систСмы Π² Π³Ρ€Π°Ρ„ΠΈΠΊ

i++; if (!(i%m)) Chart->Series[0]->AddXY (rt, y," «, clGreen);

//ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя Π½Π° ΡˆΠ°Π³ интСгрирования

rt=rt+dt;

//считаСм ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ I. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²,

//ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Ρ€Π°ΠΏΠ΅Ρ†ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Ρ‚Ρ€Π°ΠΏΠ΅Ρ†ΠΈΠΉ ΠΎΡ‚

//ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ значСния бСрСтся ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠ°. ΠŸΡ€ΠΈ большом числС

//Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΉ Ρ€Π°Π·Π½ΠΈΡ†Π° получаСтся нСбольшая.

I=I+E*E+r*(U-g)*(U-g);

}

I=I*dt;

//рисуСм Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π»ΠΈΠ½ΠΈΠΈ ymax, ymin ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ — врСмя

Chart->Series[1]->AddXY (0,yst*1.05," «, clRed);

Chart->Series[1]->AddXY (t, yst*1.05," «, clRed);

Chart->Series[2]->AddXY (0,yst*0.95," «, clRed);

Chart->Series[2]->AddXY (t, yst*0.95," «, clRed);

Chart->Series[3]->AddXY (qt, 0," «, clRed);

Chart->Series[3]->AddXY (qt, yst*1.05," «, clRed);

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ надпись ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса

if (fabs (t-qt)<=dt*10) str="ВрСмя ΠΏ/ΠΏ — процСсс Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΡΡ" ;

else str="ВрСмя ΠΏ/ΠΏ="+FloatToStrF (qt, ffFixed, 5,4)+" сСк" ;

Chart->Title->Text->Strings[1]=str;

//считаСм ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Chart->Title->Text->Strings[2]="ΠŸΠ΅Ρ€Π΅Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ «+

FloatToStrF ((nmax/g-1)*100,ffFixed, 5,4)+" %" ;

}

//—————————————————————————————————————;

//——————————-слуТСбныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹—————————————//

//конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° TMainForm. ВызываСтся автоматичСски ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

//TMainForm, Ρ‚. Π΅. ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

__fastcall TMainForm: TMainForm (TComponent* Owner)

: TForm (Owner)

{

//инициализация ΠΎΠΊΠ½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

StringGrid2->Cells[0][0]="Имя" ;

StringGrid2->Cells[1][0]="Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" ;

StringGrid2->Cells[0][1]="dt" ;

StringGrid2->Cells[0][2]="t" ;

StringGrid2->Cells[0][3]="tau1″ ;

StringGrid2->Cells[0][4]="tau2″ ;

StringGrid2->Cells[0][5]="tau3″ ;

StringGrid2->Cells[0][6]="T" ;

StringGrid2->Cells[0][7]="q0″ ;

StringGrid2->Cells[0][8]="q1″ ;

StringGrid2->Cells[0][9]="q2″ ;

StringGrid2->Cells[0][10]="r" ;

StringGrid2->Col=1;

StringGrid2->Row=7;

//Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

IniFile = new TIniFile (ChangeFileExt (Application->ExeName, «.ini»));

LoadParam ();

}

//—————————————————————————————————————;

//дСструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° TMainForm. ВызываСтся автоматичСски ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

//TMainForm, Ρ‚. Π΅. ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

void __fastcall TMainForm: FormDestroy (TObject *Sender)

{

SaveParam ();

delete IniFile;

}

//—————————————————————————————————————;

//Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ· ΠΎΠΊΠ½Π°, ΠΈΠ»ΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΈΡ… ΠΎΡ‚сутствии ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

void __fastcall TMainForm: LoadParam (void)

{

//Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ сначала Π² ΠΎΠΊΠ½ΠΎ

if (StringGrid2->Cells[1][1]=="")

StringGrid2->Cells[1][1]=IniFile->ReadString («Integration» ," dt", 0.01);

if (StringGrid2->Cells[1][2]=="")

StringGrid2->Cells[1][2]=IniFile->ReadString («Integration» ," t", 10);

if (StringGrid2->Cells[1][3]=="")

StringGrid2->Cells[1][3]=IniFile->ReadString («Plant» ," tau1″, 0.3);

if (StringGrid2->Cells[1][4]=="")

StringGrid2->Cells[1][4]=IniFile->ReadString («Plant» ," tau2″, 0.2);

if (StringGrid2->Cells[1][5]=="")

StringGrid2->Cells[1][5]=IniFile->ReadString («Plant» ," tau3″, 0.7);

if (StringGrid2->Cells[1][6]=="")

StringGrid2->Cells[1][6]=IniFile->ReadString («Controller» ," T", 0.4);

if (StringGrid2->Cells[1][7]=="")

StringGrid2->Cells[1][7]=IniFile->ReadString («Controller» ," q0″, 0.5);

if (StringGrid2->Cells[1][8]=="")

StringGrid2->Cells[1][8]=IniFile->ReadString («Controller» ," q1″ ,-1);

if (StringGrid2->Cells[1][9]=="")

StringGrid2->Cells[1][9]=IniFile->ReadString («Controller» ," q2″, 2);

if (StringGrid2->Cells[1][10]=="")

StringGrid2->Cells[1][10]=IniFile->ReadString («Optimize» ," r", 0.2);

//Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΠ· ΠΎΠΊΠ½Π° считываСм значСния Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

dt=StrToFloat (StringGrid2->Cells[1][1]);

t=StrToFloat (StringGrid2->Cells[1][2]);

tau1=StrToFloat (StringGrid2->Cells[1][3]);

tau2=StrToFloat (StringGrid2->Cells[1][4]);

tau3=StrToFloat (StringGrid2->Cells[1][5]);

T=StrToFloat (StringGrid2->Cells[1][6]);

q0=StrToFloat (StringGrid2->Cells[1][7]);

q1=StrToFloat (StringGrid2->Cells[1][8]);

q2=StrToFloat (StringGrid2->Cells[1][9]);

r=StrToFloat (StringGrid2->Cells[1][10]);

}

//—————————————————————————————————————;

//сохранСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Ρ„Π°ΠΉΠ»

void __fastcall TMainForm: SaveParam (void)

{

IniFile->WriteString («Integration» ," dt", FloatToStrF (dt, ffGeneral, 3,4));

IniFile->WriteString («Integration» ," t", FloatToStrF (t, ffGeneral, 3,4));

IniFile->WriteString («Plant» ," tau1″, FloatToStrF (tau1,ffGeneral, 3,4));

IniFile->WriteString («Plant» ," tau2″, FloatToStrF (tau2,ffGeneral, 3,4));

IniFile->WriteString («Plant» ," tau3″, FloatToStrF (tau3,ffGeneral, 3,4));

IniFile->WriteString («Controller» ," T", FloatToStrF (T, ffGeneral, 3,4));

IniFile->WriteString («Controller» ," q0″, FloatToStrF (q0,ffGeneral, 3,4));

IniFile->WriteString («Controller» ," q1″, FloatToStrF (q1,ffGeneral, 3,4));

IniFile->WriteString («Controller» ," q2″, FloatToStrF (q2,ffGeneral, 3,4));

IniFile->WriteString («Optimize» ," r", FloatToStrF (r, ffGeneral, 3,4));

}

//—————————————————————————————————————;

//Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ…ΠΎΠ΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊ

void __fastcall TMainForm: ShowOptimize (void)

{

NC++;

Chart1->Series[0]->AddXY (NC, I," «, clRed);

}

//—————————————————————————————————————;

//сброс Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Ρ…ΠΎΠ΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

void __fastcall TMainForm: Button2Click (TObject *Sender)

{

NC=0;

Chart1->Series[0]->Clear ();

}

//—————————————————————————————————————;

//Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π²Π²ΠΎΠ΄Π°

void __fastcall TMainForm: StringGrid2KeyPress (TObject *Sender, char &Key)

if (Key=='.') Key=',';

if (((Key<'0')

//—————————————————————————————————————;

//ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Π΅ΠΌ контСкстноС мСню ΠΏΠΎΠ΄ курсор ΠΌΡ‹ΡˆΠΈ

void __fastcall TMainForm: ChartContextPopup (TObject *Sender,

TPoint &MousePos, bool &Handled)

{

PopupMenu->Popup (MousePos.x+MainForm->Left, MousePos. y+MainForm->Top);

}

//—————————————————————————————————————;

//ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π° для удобства использования

void __fastcall TMainForm: N1Click (TObject *Sender)

{

Chart->CopyToClipboardBitmap ();

}

//—————————————————————————————————————;

//ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π°

void __fastcall TMainForm: N2Click (TObject *Sender)

{

Graphics:TBitmap *Bitmap = new Graphics: TBitmap ();

TRect FormRect;

FormRect = MainForm->ClientRect;

Bitmap->Height=FormRect.bottom;

Bitmap->Width=FormRect.right;

Bitmap->Canvas->BrushCopy (FormRect, Bitmap, FormRect, clWhite);

Bitmap->Canvas->CopyRect (FormRect, MainForm->Canvas, FormRect);

Clipboard ()->Assign (Bitmap);

delete Bitmap;

}

//—————————————————————————————————————;

//рСакция Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° «Ρ€ΡƒΡ‡Π½Π°Ρ ΠΏΠΎΠ΄Π³ΠΎΠ½ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²»

void __fastcall TMainForm: TrackBar1Change (TObject *Sender)

{

static float K;

static int Col, Row;

float V;

if (TrackFlag){

Col=StringGrid2->Col;

Row=StringGrid2->Row;

if (StringGrid2->Cells[Col][Row]=="") StringGrid2->Cells[Col][Row]="0,1″ ;

K=StrToFloat (StringGrid2->Cells[Col][Row]);

TrackFlag=false;}

V=TrackBar1->Position;V=V/40;V=K*exp (V);

StringGrid2->Cells[Col][Row]=FloatToStrF (V, 2,6,5);

LoadParam ();

CompProcess ();

ShowOptimize ();

}

//—————————————————————————————————————;

//ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΎΠΌ

void __fastcall TMainForm: StringGrid2Click (TObject *Sender)

{

TrackFlag=true;

TrackBar1->Position=0;

}

//рСакция Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ «ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ расчСт ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса»

//—————————————————————————————————————;

void __fastcall TMainForm: Button3Click (TObject *Sender)

{

LoadParam ();

CompProcess ();

}

//—————————————————————————————————————;

Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π½Π°

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ