Allen Bradley PLC

Fuzzy logic

Fuzzy logic เกิดขึ้นอาศัยทฤษฎีของ Lotfi Zadeh ศาสตราจารย์แห่งมหาวิทยาลัยแคลิฟอเนีย เบิร์กเลย์ ประเทศสหรัฐอเมริกา ในปี คศ 1965 โดยเป็นลอจิกที่มีหลายระดับ (Multi level) เลียนแบบธรรมชาติความคิดของมนุษย์ที่ไม่ใช่มีแค่ 0 กับ 1, จริง กับ เท็จ, เร็ว กับ ช้า หรือ ดำ กับ ขาว เท่านั้น แต่ยังแบ่งเป็นระดับอื่นๆอีก ที่เรียกว่า “Fuzzy set” ยกตัวอย่าง ฟัซซี่เซ็ตของอุณหภูมิในห้องได้แก่ เย็น อุ่น และร้อน เป็นต้น ส่วนอุณหภูมิเท่าไหร่จะถือว่าเย็น,อุ่น หรือ ร้อนนั้น เราจะใช้ กราฟความสัมพันธ์ (membership function) ซึ่งมีค่าระหว่าง 0 ถึง1 (degree of membership:DOM หรือ DOF) เป็นตัวกำหนด

กราฟ membership function ทั่วไปมีอยู่ 3 ชนิดได้แก่

-Trapezoidal

-S-shaped

-Singleton

จากรูปข้างล่าง เราจะเห็นว่าที่อุณหภูมิต่ำจะจัดอยู่ในช่วงเย็น(Cool) ถัดมาอุณหภูมิปานกลางจะจัดอยู่ในช่วงอุ่น (Warm) และอุณหภูมิสูงจะจัดอยู่ในช่วงร้อน (Hot) อย่างไรก็ตามอุณหภูมิ 22 องศานั้นเราควรจัดอยู่ในช่วงใด ?     คำตอบคืออยู่ทั้งในช่วงอุ่น และ ร้อน แต่เราให้น้ำหนักไม่เท่ากัน โดยใช้ กราฟความสัมพันธ์นั่นแหละเป็นตัวกำหนด ดังนั้น อุณหภูมิ 22 องศาจึงอยู่ในช่วงอุ่น 70% (0.70) และ เย็น 26% (0.26)

ตัวอย่าง Input membership function แบบ Trapezoidal

ถ้าเอา Fuzzy มาใช้ควบคุมอุณหภูมิห้องกับความเร็วพัดลม ตามความคิดของมนุษย์เราจะได้ว่า

“ถ้าอุณหภูมิร้อน แล้วให้ปรับความเร็วพัดลมแรง”

“ถ้าอุณหภูมิเย็น แล้วให้ปรับความเร็วพัดลมค่อย”

“ถ้าอุณหภูมิอุ่น แล้วให้ปรับความเร็วพัดลมปานกลาง”

ซึ่งความคิดเหล่านี้ก็คือกฎการทำงานของระบบ  (Fuzzy rule) ตามหลัก ”ถ้า-แล้ว” (IF-THEN)

กฎการทำงานประกอบด้วย 2 ส่วนคือส่วนของอินพุต อยู่หลังคำว่า “ถ้า”(IF) และส่วนของเอาท์พุตอยู่หลังคำว่า “แล้ว” (THEN) ส่วนของอินพุตไม่จำเป็นต้องมีแค่ 1 อินพุตเสมอไป สามารถมีได้หลายอินพุตโดยเชื่อมด้วยคำว่า “และ” (AND)  เช่น “ถ้าอุณหภูมิร้อน และความชื้นสูง แล้วให้ปรับความเร็วพัดลมแรง”

ตัวอย่าง Fuzzy rule

สังเกตว่าส่วนเอาท์พุตตามกฎก็อยู่ในรูปของ Fuzzy Set เหมือนกันคือบอกเพียงว่าพัดลมเร็ว แรง,ปานกลาง หรือ ค่อย เท่านั้น คำถามแล้วจะรู้ได้ยังไงว่าต้องสั่งให้พัดลมหมุนด้วยความเร็วกี่รอบต่อนาที (rpm) ?   คำตอบคือ ทางด้านเอาท์พุตก็ต้องมี กราฟความสัมพันธ์ (membership function) เพื่อแปลงจาก Fuzzy set เป็นค่าความเร็วจริงออกมา (Crisp value) กระบวนการนี้เรียกว่า Defuzzification

ตัวอย่าง Output membership function แบบ Singleton

Defuzzification ทั่วไปมีอยู่ 5 วิธีได้แก่

-Centroid Average

-Maximum Center Average

-Mean of Maximum

-Smallest of Maximum

-Largest of Maximum

แนวทางการออกแบบ Fuzzy system ทั่วไป

1. กำหนดจุดประสงค์ของระบบ และความสัมพันธ์ระหว่าง input และ output

2. กำหนด Range ของ input และ output

3. กำหนด Fuzzy set ของ input ตลอด Range

-เลือกจำนวน Fuzzy set ของ input เป็น 2, 3, 5 หรือ 7 ตัว โดยทั่วไปให้   เริ่มต้นด้วย 3 ตัว

-เลือก Membership function ส่วนมากใช้แบบ Trapezoids แต่ก็สามารถใช้ S- shaped functions ได้ถ้าต้องการให้ input-output ค่อยๆเปลี่ยนแปลง

Fuzzy5

Fuzzy6-เลือก ตำแหน่ง และ ช่วงของ Membership function

Fuzzy7

4. กำหนด Fuzzy set ของ output

-เลือกจำนวนสมาชิกให้ครอบคลุมตามกฎที่เรากำหนด

-เลือก Membership function แนะนำให้ใช้แบบ Singletons

5. เลือกชนิด defuzzification ของ output

-สำหรับงานที่มี output แบบต่อเนื่อง ให้ใช้ defuzzification แบบ CA

-สำหรับงานที่ใช้เลือกค่าจากหลายๆตัวเลือก ให้ใช้ defuzzification แบบ MOM, SOM และ LOM

6. กำหนดค่า Default ของ output เมื่อไม่มีกฎไหนสัมพันธ์กับ input ที่เข้ามา

7. ป้อน Fuzzy rule

8. กำหนดชนิด T-norm ใช้กับ Fuzzy rule

9. วิเคราะห์และปรับจูนระบบจาก Software

10. ทดสอบและปรับจูค่าพารามิเตอร์ของ membership function กับระบบจริง

ตัวอย่าง

ควบคุมตำแหน่งของลูกบอลบนคานตามต้องการโดยการปรับองศาของคาน เราสามารถนำ Fuzzy Logic มาใช้แก้ปัญหานี้ได้อย่างมีประสิทธิภาพดังนี้

Fuzzy8

กำหนด Input ที่ป้อนให้กับตัวควบคุม Fuzzy ในที่นี้มีอยู่ 2 อินพุต คือ

  1. ค่าผิดพลาดระหว่างตำแหน่งลูกบอลกับตำแหน่งเป้าหมาย (pos_error) ถ้าลูกบอลอยู่ทางซ้ายจากตำแหน่งเป้าหมาย ค่า pos_error จะมีค่าเป็น ( – ) แต่ถ้าลูกบอลอยู่ทางขวาจากตำแหน่งเป้าหมาย ค่า pos_error จะมีค่าเป็น(+ )
  2. ความเร็วของลูกบอล (velocity) มีค่าเป็น ( 0 ) เมื่อลูกบอลหยุดนิ่ง, มีค่าเป็น ( – ) เมื่อลูกบอลเคลื่อนที่ไปทางซ้าย และ ค่าเป็น ( + ) เมื่อลูกบอลเคลื่อนที่ไปทางขวา

กำหนด Output ที่ส่งออกจากตัวควบคุม Fuzzy ในที่นี้มีอยู่ 1 เอาต์พุต คือ

  1. องศาของคาน (angle) ถ้ายกขึ้นให้ส่งค่าเป็น ( + ) แต่ถ้ายกลงให้ส่งค่าเป็น ( – )

ทุกสัญญาณถูก normalize ให้อยู่ในช่วง (Range)-1 ถึง 1 เพื่อความสะดวกในการเขียนโปรแกรม

กฎที่ใช้ควบคุมของ Fuzzy ได้มาจากประสบการณ์หรือความรู้พื้นฐานทั่วไปดังนี้

กฎใช้ควบคุมสมดุลเมื่อลูกบอลอยู่ในตำแหน่งที่ต้องการแล้ว

******1. ถ้า position_error = 0 และ velocity = 0 แล้ว angle = 0

กฎใช้เมื่อลูกบอลกำลังเคลื่อนไปทางซ้ายจากตำแหน่งเป้าหมาย

******2. ถ้า position_error เป็นลบ แล้ว angle เป็นลบ

******3. ถ้า velocity เป็นลบ แล้ว angle เป็นลบ

กฎใช้เมื่อลูกบอลกำลังเคลื่อนไปทางขวาจากตำแหน่งเป้าหมาย

******4. ถ้า position_error เป็นบวก แล้ว angle เป็นบวก

******5. ถ้า velocity เป็นบวก แล้ว angle เป็นบวก

Fuzzy9

สำหรับขั้นตอนเขียนโปรแกรมนั้น เริ่มต้นจากการสร้าง User define type (UDT) เพื่อ

MF_In เก็บค่าพิกัด (a,b,c,d) และชนิดของ membership function (Trapezoids หรือ S-shaped )

InLingVar1 เก็บพารามิเตอร์ต่างๆที่เกี่ยวข้องกับ Input ตัวที่ 1

Fuzzy10Fuzzy11Fuzzy12Fuzzy13Fuzzy14Fuzzy15Fuzzy16Fuzzy17Fuzzy18Fuzzy19Fuzzy20Fuzzy21Fuzzy22Fuzzy23

 

สำหรับใครที่ไม่ต้องการเขียน logic ให้วุ่นวายทาง Rockwell ได้เตรียม software ชื่อ Fuzzy Designer เพื่อช่วยในการออกแบบ Fuzzy logic controller  แล้ว Import เข้าสู่ RSLogix5000 ในรูปแบบคำสั่ง AOI จากนั้นเราเพียงกำหนดค่าอินพุตและเอาค่าเอาท์พุตไปควบคุมอุปกรณ์เท่านั้นเอง

Fuzzy4

หากมีข้อสงสัย อีเมลล์มาถามได้ที่ thaicontrol01@gmail.com หรือ Fan Page https://www.facebook.com/thaicontrol01 ครับ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s