יחידה 5 / 9

אלגוריתמי בקרה: כוונון נתמך ב-PID ובינה מלאכותית

רווחים:

  • יכולת להסביר וליישם את המונחים וההשפעות P, I, D של בקר PID על ה-AI בהקשר הנכון
  • יכולת לבצע Ziegler-Nichols ושיטות כוונון ניסיוניות צעד אחר צעד בעזרת AI
  • יכולת לזהות ולחסל מלכודות PID כגון Windup אינטגרלי, רעש נגזר בהמלצות AI

שמירה על טמפרטורה קבועה של תנור, הנעת מהירות מנוע בערך רצוי, איזון זווית מזל"ט; בלב כולם עומד אלגוריתם בקרה. הנפוץ שבהם הוא בקר PID, שהוא עמוד השדרה של התעשייה. PID; זה פשוט, חזק ועובד על מגוון רחב של בעיות. אבל "פשוט" אין פירושו "קל לכוונון": PID שהוגדר בצורה שגויה יתנדנד, יחרוג, ישב מאוחר או יהפוך לא יציב לחלוטין. בינה מלאכותית היא עוזרת חשובה כאן: היא מסבירה מונחי PID, מדריכה בשיטות כוונון, מאבחנת מלכודות אופייניות וכותבת את קוד הכוונון. עם זאת, ההתאמה הסופית מתבצעת על ידי התבוננות בהתנהגות הפיזית של המערכת שלך והחלטת היציבות שייכת למהנדס. ביחידה זו אנו מכסים כיצד להתקין, לכוונן ולאמת מלכודות PID עם AI.

שלושה תנאים של PID

ה-PID מגיב לאות השגיאה (e = יעד - נמדד) בשלוש דרכים:

מונח

על מה הוא מסתכל?

אפקט

באופן קיצוני

P (פרופורציונלי)

שגיאה נוכחית

תגובה מהירה

תנודה, שגיאה קבועה

אני (אינטגרלי)

שגיאת עבר מצטברת

מאפס שגיאה קבועה

נגיחה, תנודה, תנודה

D (נגזרת)

שיעור השינוי של השגיאה

שיכוך מפחית חריגה

הגבירו את הרעש

סיכום מילולי: פ' עונה לשאלות "כמה רחוק אני עכשיו", אני "כמה זמן נעדרתי", ד "כמה מהר אני מתקרב". בקר טוב מאזן את שלושתם.

class PID: def __init__(self, Kp, Ki, Kd, output_min=-100, output_max=100): self.Kp, self.Ki, self.Kd = Kp, Ki, Kd self.out_min, self.out_max = output_min, output_max self.integral = 0.0 self.previous. dt): error = target - measured # P p = self.Kp * error # I -- self.integral with windup protection += error * dt i = self.Ki * self.integral # D -- נגזרת רעש רגיש d = self.Kd * (שגיאה - self.previous_error) / dt self.previous_error i = פלט + d out wind = p + + self.output_max: output = self.out_max self.integral -= שגיאה * dt # anti-windup: לבטל את הפלט האינטגרלי elif < self.output_min: output = self.output_min self.integral -= error * dt return output

קוד זה אינו "אימון PID", אלא שלד קרוב להיגיון הייצור: הוא כולל רווית פלט ואנטי-windup. PIDs פשוטים רבים שניתנו על ידי AI עוקפים את שתי ההגנות הללו; בלעדיהם, כאשר המפעיל יגיע לגבול שלו, האינטגרל יתנפח והמערכת תעקוף באופן בלתי צפוי.

טיפ: כאשר מבקשים מה-AI את ה-PID אמור "הוסף רווית פלט ואנטי-windup, החל נגזרת על מדידה על מונח נגזרת". שלוש תוספות אלו ממירות את ספר הלימוד PID לשדה PID.

אינטגרלי Windup ו-Drivative Noise

שתי מלכודות קלאסיות הן הגורמים הנפוצים ביותר לכשל PID:

סגירה אינטגרלית: כאשר המפעיל רווי (למשל המנוע כבר בעוצמה מלאה) השגיאה נמשכת והמונח האינטגרלי ממשיך לגדול. אינטגרל מנופח זה מוביל לחריגה גדולה כאשר המערכת מגיעה למטרה. פתרון: עצירה או החזרה לאחור של האינטגרל כאשר הפלט רווי (אנטי-windup, מודגם בקוד למעלה).

רעש נגזרת: המונח D לוקח את הנגזרת של השגיאה; הנגזרת של מדידה רועשת הרבה יותר רועשת ותרעיד את המפעיל. פתרונות: לקיחת הנגזרת מהמדידה (נגזרת של המדידה במקום השגיאה), הוספת מסנן Low pass למונח הנגזרת.

# הפחתת רעש נגזרת: נגזרת מדידה + filterd_raw = -(נמדד - self.previous_measured) / dt במקום שגיאה

בינה מלאכותית טובה בזיהוי המלכודות הללו; אם אתה אומר "ה-PID שלי חורג בהרבה כשהוא מגיע ליעד", הוא ממליץ על ביטול. אבל אתה מוודא על ידי מדידה אם התיקון עובד על המערכת שלך.

תפאורה עם זיגלר-ניקולס

שיטה קלאסית למציאת רווחים (Kp, Ki, Kd) מאפס היא Ziegler-Nichols. המהות שלו: מתחיל רק עם P והגדלת Kp עד שהמערכת נכנסת לתנודה מתמשכת; חשב את Kp, Ki, Kd מהטבלה עם הרווח הקריטי Ku ותקופת התנודה טו בנקודה זו.

בקר

קפ

טי

Td

פ.

0.5·קו

P.I.

0.45·קו

טו/1.2

PID

0.6·קו

טו/2

טו/8

צעדים של זיגלר-ניקולס (תוכנית שתבוצע על ידי AI):1. קח Ki=0, Kd=0. פשוט הפעל את P.2. הגדל לאט את Kp עד שמתחיל תנודה יציבה ומתמשכת.3. Kp זה = Ku (רווח קריטי), תקופת תנודה = Tu.4. חשב Kp, Ti, Td מהטבלה; Ki = Kp/Ti, Kd = Kp*Td.5. התחל עם הערכים האלה, ואז בצע שינויים ניסיוניים.

זהירות: זיגלר-ניקולס מביא את המערכת בכוונה לגבול היציבות שלה (תנודה מתמשכת). קיים סיכון של עומס מכני, זרם יתר וסכנה כאשר עושים זאת על חומרה אמיתית; אם אפשר, עשה זאת תחילה בסימולציה, ולאחר מכן עבד עם מגבלת הספק נמוך ו-E-stop בחומרה. ה-Ku המוצע על ידי ה-AI הוא נקודת התחלה, הוא נמדד ומאומת במערכת שלך.

אבחון בסיוע בינה מלאכותית

אתה יכול לאבחן התנהגות PID על ידי תיאורה ל-AI. סימפטום ← מיפוי סיבה אפשרית:

סימפטום

סיבה אפשרית

הכיוון ש-AI תציע

ישיבה איטית

Kp/Ki נמוך

להגדיל kp

שגיאה קבועה

אני נעדר או נמוך מאוד

כדי להוסיף/להגדיל

Overshoot + תנודה

Kp/Ki גבוה, ללא D

הוסף Kd, הקטן Ki

המפעיל רועד

רעש נגזר

סינון/הקטנה D

כשאתה מגיע לחרוג הגדול

Windup אינטגרלי

הוסף אנטי-ווינדאפ

הנחיה חלשה / הנחיה חזקה

WEAK:"תן את הרווחים של PID."(איזו מערכת? איך ההתנהגות? האם יש מדידות? מגיעים מספרים אקראיים.)STRONG:"אני מכוון את ה-PID עבור בקרת מהירות מנוע DC. כרגע, Kp=2, Ki=0.5, Kd=0. זה חורג מ-35% בכניסת הצעד וכאשר הוא מגיע ליעד השני, יש זמן רב להגדיר את ה-Sam; 100 הרץ ציין את הסיבות האפשריות מהתסמינים הללו, המרוויחים "הצע לאיזה כיוון עלי לשנות אותו ותגיד לי איך לבדוק אם החריגות הן אינטגרליות".

קייס מיני

מהנדס הבקרה כרם מכוון את בקרת הטמפרטורה של אקסטרודר. עם הרווחים שהציע ה-AI, המערכת מגיעה ליעד במהירות, אבל בכל שינוי סט היא מבצעת חריגה גדולה ולאט לאט מתייצבת. כרם מסביר את הסימפטום ל-AI; AI חושד ב-windup אינטגרלי מכיוון שהמחמם נשאר בעוצמה מלאה (רווי) למשך זמן מה. כרם מוסיף אנטי-ווינדאפ לקוד ה-PID והחריגה פוחתת משמעותית. אבל עכשיו יש הבהוב קל בשקע התנור; הוא מייחס זאת למונח D המגביר את רעש חיישן הטמפרטורה ומוסיף לנגזרת מסנן מעבר נמוך. לבסוף, הוא מאמת באופן גס את הרווחים עם Ziegler-Nichols ומבצע כוונון עדין ניסיוני. ל-AI יש אבחון מהיר; אבל כרם אישר כל תיקון על ידי מדידת תגובת הצעד בפועל - בין אם ה-windup תוקן או שההבהוב נעלם, ניתן היה לראות אותו רק בצורה גרפית.

טעויות נפוצות

  • נכשל בהוספת רווית פלט ואנטי-windup ל-PID וחווית חריגה גדולה בגבול המפעיל.
  • לקיחת הנגזרת מהנגזרת של המדידה הרועשת והרטטת המפעיל.
  • בהנחה ש- dt הוא קבוע, בעוד שתקופת הדגימה משתנה.
  • ביצוע מבחן התנודה של Ziegler-Nichols על חומרה ללא אמצעי זהירות.
  • קבלת רווחים שנוצרו בינה מלאכותית כ"סופית" ללא אימות ספציפי למערכת.
  • שינוי רווח בודד בצעדים גדולים מאוד ודחיפת המערכת לחוסר יציבות.

לסיכום

  • PID; הוא מגיב עם P (שגיאה נוכחית), I (שגיאה מצטברת), D (שיעור שינוי השגיאה).
  • PID של שדה צריך לכלול רווית פלט, אנטי-windup ומסנן נגזרות.
  • רעש נגזר גורם לרטט של המפעיל.
  • זיגלר-ניקולס נותן התחלה להרוויח; זה מיושם עם אמצעי אבטחה בחומרה.
  • AI מהיר באבחון מסימפטום לגורם; התיקון מאומת על ידי מדידה.
  • dt נמדד בפועל; שינויים ברווחים נעשים בצעדים קטנים ותצפית.

משימת יישום

בחר מערכת (מנוע/מחמם אמיתי או דגם פשוט מסדר ראשון/שני ב-Python) ובקש מה-AI ליצור מחלקה PID עם רוויה + אנטי-windup. לאחר מכן: (1) התבונן בהתנהגות התנודה על ידי התחלת עם P בלבד והגדלת Kp, (2) הוסף Ki כדי לבטל את השגיאה הקבועה ולראות כיצד החריגה גדלה, (3) השוו את ההשפעה על החריגה הגדולה על ידי הפעלה וכיבוי של אנטי-windup. ציירו את תגובת הצעד בכל שלב ושימו לב איזה רווח משנה איזו התנהגות. השווה את הרווחים מ- Ziegler-Nichols עם הרווחים שמצאת בעצמך.