Saturday, March 29, 2014

PID კონტროლი (გაგრძელება)


PID კონტროლი უფრო დეტალურად

მოდით უფრო დავხვეწოთ ჩვენი მოდელი რომ უფრო კარგად გავიგოთ PID მართვის მათემატიკური არსი.
აქამდე ჩვენ კონდიციონერს ვარეგულირებდით ჩვენი სხეულის შეგრძნებით, მაგრამ ეს ზუსტი არაა, უფრო ზუსტი იქნება თუ ოთახში დავდებთ ელექტრონულ თერმომეტრს, რომელიც იძლევა ტემპერატურის ჩვენებას ცელსიუს გრადუსებში.
ჩვენი მიზანია რომ ოთახში იყოს კონკრეტული ტემპერატურა, დავუშვათ 20 გრადუსი.
ამისათვის ვიყენებთ კონდიციონერს რომელსაც აქვს 1000 ვატი სიმძლავრის კომპრესორი და ამ კომპრესორის მართვა შეგვიძლია კომპიუტერით. კომპიუტერზე მიერთებულია ასევე ეს ციფრული თერმომეტრი. ჩვენი მიზანია დავწეროთ ისეთი პროგრამა რომ ოთახში იყოს სასურველი ტემპერატურა.
შემოვიღოთ განმარტებები:
სასურველი ტემპერატურა - g (20C);
რეალური ტემპერატურა (ციფრული თერმომეტრის ჩვენება) - y;
თერმომეტრის ჩვენება ცვალებადია და დროზე დამოკიდებულია, ამიტომ მათემატიკოსებისთვის გასაგებია რომ ეს დროის ფუნქციაა y(t), მაგრამ ვისთვისაც გაუგებარია, ნუ შეშინდებით, სხვანაერადაც ავხსნით.
სხვაობას სასურველსა და რეალურ ტემპერატურებს შორის ვუწოდოთ შეცდომა:
e = y - g (მათემატიკოსებისათვის e(t) = y(t) - g);

ესე იგი დროის ნებისმიერი მომენტისთვის გვაქვს შეცდომის მნიშვნელობა, მაგალითად თუ ოთახში 22 გრადუსია, მაშინ შეცდომა გვაქვს 2, თუ 15 გრადუსია, შეცდომის მნიშვნელობა არის -5.
გავიხსენოთ ეხლა ჩვენი ფორმულა

აქ u აღნიშნავს მართვის პარამეტრს ანუ ჩვენ შემთხვევაში კონდიციონერის სიმძლავრეს.
სიმძლავრის გამოსათვლელად 3 შესაკრების ჯამი უნდა დავთვალოთ.
პირველი არის: Kp•e. e უკვე აღვნიშნეთ რომ შეცდომაა, Kp კი განვიხილეთ წინა პოსტში. ანუ რაც მეტია შეცდომა (გადახრა სასურველი მნიშვნელბისგან) მით მეტი იქნება ეს შესაკრები. თუ მარტო ამ შესაკრებს დავტოვებთ (Ki = 0, Kd=0) მაშინ სისტემა შეიძლება შევიდეს რხევით რეჟიმში იმის გამო რომ კონტროლერი და გარემო შეიძლება ინერციული იყოს და ასევე უკუკავშირი (ოთახის თერმომეტრი) მუშაობდეს დაყოვნებით (როდესაც ჩაირთვება კონდიციონერი, საჭიროა დრო რომ ცივი ჰაერი მივიდეს თერმომეტრამდე).
სხვა მაგალითის მოყვანა შეილება კიდე - წარმოიდგინეთ ჟონგლიორი ცდილობს ხელისგულზე ვერტიკალურად გაიჩეროს ჯოხი. თუ ჟონგლიორი გამოუცდელია, ის მოქმედებს ასე - როდესაც ხედავს რომ ჯოხი ვარდება რომელიმე მხარეს, ის ამოძრავებს ხელს იმავე მხარეს რომ ჯოხი გასწორდეს, მაგრამ ჯოხიც და ხელიც არის ინერციული, ამიტომ ხშირად ჟონგლიორი ხელს გადაადგილებს უფრო მეტად ვიდრე საჭიროა, რის გამოც ჯოხი გადაიხრება მეორე მხარეს, ახლა უკვე უკუღმა ამოძრავებს ხელს და ისევ მეტი მოსდის, ასე იწყებს ჯოხი რხევას და შეიძლება დაუვარდეს კიდეც. გამოცდილი ჟონგლიორი კი ცდილობს წინასწარ გათვალოს რა ძალით უნდა გააქანოს ხელი რომ ჯოხი შეჩერდეს და თან ხელის ინერციულობაც გაითვალისწინოს. აქ შემოდის დიფერენციალის და ინტეგრალის ცნება.
მერე შესაკრები არის ინტეგრალი: Ki•∫edt.
Ki არის კოეფიციენტი რომელიც წინა პოსტში ვახსენეთ. ინტეგრალს რაც შეეხება, შევეცდები ავხსნა არამათემატიკოსისათვის გასაგებ ენაზე.
თუ დავუშვებთ რომ e არის ჩემი ყოველდღიური შემოსავალი ან ხარჯი, მაშინ ინტეგრალი e-დან არის ჩემი მიმდინარე ბალანსი.
ანუ დავუშვათ დავიწყე მუშაობა ტაქსისტად ორშაბათს და თავიდან ფული არ მქონდა საერთოდ.
ყოველდღე ვხარჯავ ფულს ბენზინზე და საჭმელზე და მაქვს რაღაც შემოსავალი, დღის ბოლოს ვითვლი სხვაობას შემოსავალსა და ხარჯებს შორის, ეს იქნება ამ დღის e (ანუ e(t) ფუნქცია ყოველი დღისთვის).
ჩამოვწეროთ ყოველდღე e-ს მნიშვნელობა რა გამოვიდა:
ორშაბათი: 20 ლარი;
სამშაბათი: 10;
ოთხშაბათი: -15 (ვიზარალე);
ხუთშაბათი: 5;
პარასკევი: 0;
შაბათი: -5;
კვირა:10;
ინტერგალი e-დან კვირის ბოლოსთვის არის უბრალოდ კვირის ყოველდღიური e-ს ჯამი ანუ ის თანხა რაც უნდა მქონდეს კვირის ბოლოსთვის.
∫edt = 20+10-15+5+0-5+10 = 25
ეს არის ინტეგრალის გამარტივებული წარმოდგენა იმიტომ რომ ჩვენ დავუშვით რომ ყოველი დღის ბოლოსთვის ვაკეთებთ ჩანაწერს, სინამდვილეში კი შეიძლება ჩანაწერი კეთდებოდეს სხვადასხვა დროის ინტერვალში, მაგრამ უმეტეს შემთხვევაში შესაძლებელია დროის თანაბარ ინტერვალში გაზომვა, ამიტომ ამჯერად არ გავართულებთ.
ეხლა უფრო გასაგები უნდა იყოს რას აკეთებს შესაკრები Ki∫edt - ის სულ უფრო და უფრო გაიზრდება თუ გარემო არაა სასურველ მდგომარეობაში, ჩვენ შემთხვევაში ეს ნიშნავს რომ ოთახში ცხელა, რაც უფრო დიდხანს ცხელა, მით უფრო დიდი გახდება ეს შესაკრები, ეს ნიშნავს რომ ვაკვირდებით ოთახში ტემპერატურას არა მყისიერად, არამედ დროში გაწელილად და თუ ვხედავთ რომ კონდიციონერი ვერ ერევა დროის გასვლის შემდეგაც, სიმძლავრეს ვუმატებთ, რაც უფრო დიდხანს ვერ ერევა, მით უფრო მეტად ვუმატებთ სიმძლავრეს. ეს ერთგვარი შენელებული რეაქციაა და უზრუნველყოფს გარემოს "რბილ" მართვას, მყისეული ბიძგების გარეშე. სორედ მართულ გარემოში ინტეგრალური შესაკრები ნულის გარშემო უნდა ირხეოდეს, თუ ის მუდმივად იზრდება ან მცირდება, ეს ნიშნავს რომ გარემო ვერ უახლოვდება სასურველ მდგომარეობას.
მესამე შესაკრები არის დიფერენციალი: Kd•de/dt. დიფერენციალი (წარმოებული) არის უბრალოდ სიჩქარე.
წარმოიდგინეთ რომ ყოველ საღამოს სეირნობთ და თან დაგაგვთ GPS ოდომეტრი. ყოველ 10 წუთში იწერთ სეირნობის დასაწყისიდან გავლილ გზას (e(t)), e-ს წარმოებული იქნება თქვენი სიჩქარე. მიახლოებით რომ დაითვალოთ სიჩქარე, ყოველ ჩანაწერს უნდა გამოაკლოთ წინა ჩანაწერი და გაყოთ ჩანაწერებს შორის გასულ დროზე (ჩვენ შემთხვევაში 10 წუთზე). ანუ თუ დავუშვათ 20-ე წუთზე მე გავლილი მქონდა 800 მეტრი, ხოლო 30-ე წუთზე 1100 მეტრი, მაშინ ჩემი სიჩქარე გამოდის (1100-800)მ/10წთ=30მ/წთ. ყურადღება მიაქციეთ რომ სიჩქარე შეიძლება არ იყოს მუდმივი და იცვლებოდეს გავლილი მანძილის ჩანიშვნების მომენტებს შორის. მაგრამ რაც უფრო ხშირად ჩავინიშნავთ მანძილებს, მით უფრო ზუსტი მონაცემები გვექნება სიჩქარეზე დროის ყოველ მომენტში.
ჩვენ ოთახის მაგალითზე, დიფერენციალი არის ტემპერატურის ცვლილების სისწრაფე. თუ ვხედავთ რომ ოთახში ტემპერატურა მცირდება სწრაფად, ეს ნიშნავს რომ კონდიციონერის სიმძლავრე საკმარისზე მეტია, აქდან გამომდინარე შეგვიძლია ის შევამციროთ, ანუ ეს შესაკრები ერთგვარი მუხრუჭია, ჯოხით ჟონგლირების მაგალითზე, თუ ვხედავთ რომ ჯოხი სწორდება სწრაფად, მაშინ შეგვიძლია ვივარაუდოთ წინასწარ რამდენად შევამციროთ ხელის მოძრაობა რომ ჯოხი მეორე მხარეს არ გადაქანდეს ან მინიმალურად გადაქანდეს ანუ თუ e შეცდომა მცირდება მაშინ მისი წარმოებული (სიჩქარე) არის უარყოფითი და შესაბამისად ეს ამცირებს კონტროლერის ზემოქმედებას გარემოზე.
PID მართვის მთელი არსი მდგომარეობს Kp, Ki და Kd კოეფიციენტების სწორ შერჩევაში. მიზანი არის ის რომ გარემოს მართვისას რხევები იყოს მინიმალური, თუმცა სხვადასხვა ამოცანების დროს სხვადასხვა მოთხოვნებია გარემოს მართვაზე, ზოგჯერ მთავარია გარემო იმართებოდეს რაც შეიძლება სწრაფად, ხოლო ზოგჯერ რაც შეიძლება რბილად (რხევების გარეშე), ამის შესაბამისად სხვადასხვანაერად არჩევენ ამ კოეფიციენტებს, ამიტომაც არ არსებობს უნივერსალური კოეფიციენტები. თუმცა გარკვეული დაშვების შემთხვევაში არის მეთოდები ამ კოეფიციენტების გამოსათვლელად მაგრამ ეს უკვე ცალკე თემაა და მას ეწოდება PID რეგულირება (PID Tuning).





Monday, March 17, 2014

PID კონტროლი (საწყისები)

რა არის PID კონტროლი?

ვისაც ოფისში ზაფხულში გიმუშავიათ, ალბათ მომსწრე გამხდარხართ გაუთავებელი კონდიციონერული ომის. აუწიე, ჩაუწიე, ცხელა, ცივა! თან უცნაური ისაა რომ შეიძლება ერთი და იგივე ადამინს ხან ციოდეს ხან ცხელოდეს. რატომ ხდება ასე თუ დაფიქრებულხართ? 
პრობლემა იმაშია რომ ადამიანი რომელსაც ხელში უჭირავს პულტი, არის დაშორებული კონდიციონერს, როდესაც ადამიანს დაცხება, იგი უმატებს კონდიციონერის სიმძლავრეს, მაგრამ გადის ცოტა დრო და მას მაინც ცხელა, იგი კიდე უფრო უმატებს სიმძლავრეს, კიდე ცხელა - კიდე უმატებს და ასე მაქსიმუმადე აყავს. მაგრამ კონდიციონერს სჭირდება დრო რომ ოთახის ჰაერი გააციოს, იმდენად რომ ეს იგრძნოს იქ მყოფმა ადამიანმა ვისაც ხელში პულტი უჭირავს. გადის დრო და მაქსიმუმზე მომუშავე კონდიციონერი იწყებს ოთახის გაციებას, ისე რომ მალე ძაან აცივდება ოთახში. ადამიანი ახლა იწყებს დაკლებას მარა მისი სულსწრაფობიდან გამომდინარე იგი ვერ ელოდება შედეგს და საერთოდ თიშავს კონდიციონერს. როცა გადის დრო, ოთახში კვლავ აუტანლად დაცხება და ყველაფერი იწყება თავიდან.

სურათი 1


სურათი 1 გამოსახავს ამ პროცესს (წითელი წირით აღნიშნულია კონდიციონერის სიმძლავრე, ხოლო ლურჯი წირით ადამიანის მიერ ტემპერატურის აღქმა.
ალბათ უკვე გასაგებია რომ საჭიროა გარკვეული დრო რათა კონდიციონერმა ოთახზე იმოქმედოს და ადამიანმა იგრძნოს ეს. ამ დროს კონდიციონერს მართავს ადამიანი, გამოდის რომ იგი მართავს დაგვიანებით. 
რა არის გამოსავალი?
ყველაზე მარტივი რაც შეიძლება გავიფიქროთ არის უბრალოდ მოთმინებით და დაკვირვებით მართვა. როცა ცხელა, მყისიერად არ უნდა მივცეთ მაქსიმალური სიმძლავრე. უნდა მოვუმატოთ ცოტა სიმძლავრე და დავაკვირდეთ რამდენად იმოქმედებს ეს ოთახის ტემპერატურაზე, თან უნდა დავაკვირდეთ არა მაშინვე არამედ ცოტა დროის გასვლის მერე. 

სურათი 2
სურათი 2 ასახავს ამ პროცესს. უხეშად რომ ვთქვათ, მართვის ასეთ მეთოდს უწოდებენ PID კონტროლს. 
სინამდვილეში PID კონტროლი გულისხმობს ბევრად უფრო რთულ სიტუაციას, ჩვენს მაგალითზე შეგვიძლია ვთქვათ რომ ოთახზე მოქმედებს არა მარტო კონდიციონერი, არამედ გარემოც, შუადღისას ამოდის მზე და ოთახში ცხება, საჭიროა კვლავ დარეგულირდეს კონდიციონერი. შემდეგ მზეს მოეფარება ღრუბლები და ისევ რეგულირებაა საჭირო, ყველა ამ სიტუაციაშია მიზანი არის რომ მაქსიმალურად ზუსტად და სწრაფად მოხდეს კონდიცინერის დახმარებით ოთახში კომფორტული ტემპერატურის შენარჩუნება.


რას ნიშნავს PID?
მოდით უფრო დეტალურად გავარჩიოთ მართვის ეს ალტერნატიული მეთოდი.
რა ინფორმაცია გვჭირდება რომ კონდიციონერი სწორედ ვმართოთ?
პირველი რაც უნდა ვიცოდეთ, ეს არის კონდიციონერის სიმძლავრე, ანუ რამდენად უნდა ავუწიოთ ან ჩავუწიოთ მის სიმძლავრეს რომ მან იმოქმედოს ოთახის ტემპერატურაზე საჭირო ძალით. ამ პარამეტრს უწოდებენ P-ს.
შემდეგ რაზეც უნდა ვიფიქროთ ეს არის კონდიციონერის ზემოქმედება ოთახზე ხანგრძლივ პერიოდში. როგორ გავზომოთ ეს? 
ჩვენ ვიცით ტემპერატურის შეგრძნება დროის ყოველ მომენტში, დავუშვათ შეგვიძლია ვიგრძნოთ რომ ცხელა, თბილა, კარგი ტემპერატურა, გრილა თუ ცივა. თითოეულ შეგრძნებას შევუსაბამოთ რიცხვი:
ცხელა  2;
თბილა  1;
კარგია  0;
გრილა -1;
ცივა -2;
ავიღოთ ფურცელი და ჩავიწეროთ ეს შეგრძნება პერიოდულად, მაგალითად ყოველ 5 წუთში. მაგალითად თუ ოთახში მუდმივად თბილა, გვექნება
1, 1, 1, ...
დავითავლოთ ამ ჩანაწერების ჯამი. რაც უფრო დიდიხანს თბილოდა ოთახში, მით უფრო დიდ ჯამს მივიღებთ და პირიქით, რაც უფრო ნაკლებად თბილოდა, მით უფრო ნაკლებ ჯამს მივიღებთ. 
ეს ჯამი ასახავს დროში გაწელილ მონაცემს რომელიც ნელა გროვდებოდა, რაც უფრო დავაგვიანებთ კონდიციონერის ჩართვას, მით უფრო გაიზრდება ეს ჯამი. ამიტომ ის უნდა გავითვალისწინოთ მართვისთვის. იმისდა მიხედვით რამდენად ვითვალისწინებთ, იმდენად დიდ კოეფიციენტზე ვამრავლებთ ამ ჯამს (თუ კოეფიციენტი ნულია, ეს ნიშნავს რომ იგნორირებას ვუკეთებთ ამ ჯამს). ამ პარამეტრს აღნიშნავენ I სიმბოლოთი. რატომ I? იმიტომ რომ სინამდვილეში ეს არის ინტეგრალი. მოდით ჯერ არ გავართულოთ და არ ჩავუღრმავდეთ.
ამის მერე შეიძლება ვიფიქროთ რომ უკვე ყველაფერი ვიცით რომ კონდიციონერი ვმართოთ, მაგრამ ჩვენ დაგვავიწყდა რომ სანამ აღვიქვამთ ტემპერატურას, გაკვეული დრო გადის. თუ გვინდა რომ კონდიციონერი ვმართოთ ზუსტად, უნდა შევეცადოთ ვიწინასწარმეტყველოთ ოთახის ტემპერატურა წინასწარ. როგორ გავაკეთოთ ეს? დავაკვირდეთ ჩვენ ჩანაწერებს. თუ გვიწერია რომ ჯერ ცხელოდა და მერე თბილოდა, ლოგიკურია ვივარაუდოთ რომ შემდეგი იქნება კოფროტრული ტემპერატურა. ანუ თუ ვიცით როგორი სიჩქარით იცვლება ტემპერატურა, მაშინ მიახლოებით ვივარაუდებთ როგორი იქნება მომდევნო ტემპერატურა. ამიტომ მოდით ეს კომპონენტიც ჩავრთოთ ფორმულაში და მას აღნიშნავენ D სიმბოლოთი (დიფერენციალი)
შევაჯამოთ, გვაქვს 3 კოეფიციენტი Kp, Ki, Kd.
ესეც ჩვენი PID კონტროლის ფორმულა .
ნაადრევად ნუ შეშინდებით, არც ისე რთულია როგორც შეიძლება მოგეჩვენოთ.
ამ ფორმულას მოგვიანებით დავუბრუნდებით, ეს უბრალოდ შესავალი იყო ჯერ.


მცირე შეჯამება

ამ ეტაპზე უბრალოდ შევაჯამოთ უფრო ტექნიკურ ენაზე.
გვაქვს ერთი სისტემა (ოთახი) რომელსაც შეიძლება ჰქონდეს სხვადასხვა მდგომარეობა (ტემპერატურა) და ჩვენი მიზანია ეს სისტემა იყოს ერთ კონკრეტულ მდგომარეობაში (20 გრადუსი ტემპერატურა). ამისათვის გვაქვს ამ სისტემაზე ზემოქმედების მეორე სისტემა (კონდიციონერი), რომელსაც ვმართავთ ჩვენ და რომელიც ზეგავლენას ახდენს პირველ სისტემაზე. მეორე სისტემის მართვისას ჩვენ ვიყენებთ მართვის პარამეტრს (კონდიციონერის სიმძლავრე). პირველ სისტემას ვუწოდოთ გარემო, ხოლო მეორე სისტემას კონტროლერი.
გარემოს კონტროლერით მართვის დროს უნდა გავითვალისწინოთ 3 პარამეტრი.
Kp - რა ძალა/სიმძლავრე გვჭირდება გარემოს სამართავად. რაც უფრო დიდია ოთახი, მით უფრო მეტი სიმძლავრე ჭირდება კონდიციონერს.
დანარჩენი ორი პარამაეტრი Ki და Kd განსაზღვრავს მართვის სტილს. Ki არის შენელებული რეაქციისთვის ხოლო Kd არის სწრაფი რეაქციისთვის, ეს ორი პარამეტრი ერთმანეთს აბალანსებს.