Electoday 4.0

MCU VS PLC ทางเดียวกัน แต่คนละเลน

 :D :D
ขอขอบคุณทุก ๆ ท่านที่รวมกันแสดงความคิดเห็นครับ
ขอบคุณ คุณ Fixpointer ครับให้นิยามจากหัวข้อกระทู้เราได้ดีมากครับ "ทางเดียวกัน แต่คนละเลน"  << PLC เป็น Subset ของ MCU  เยี่ยมไปเลยครับ
 ;) ;)
ขอบคุณ คุณ boe ครับ กลับมาร่วมกันตอบหลาย ๆ ครั้งนะครับ ยินดีครับผมเองก็แอบมาเก็บเกี่ยวความรู้จาก Webboard แห่งนี้มานานเหมือนกันครับ ขอบคุณเจ้าของ Board ด้วยครับ ส่วน LD Micro น่าสนใจมากครับ ผมยังไม่เคยใช้ครับ เป็น Freeware ด้วยเหลอครับ ดีจัง  ผมแอบไปดู ใน Link มาด้วยครับเยี่ยมไปเลยครับ ใช้งานได้ด้วยครับ ส่วนถ้า Board ลองดู Board นี้ครับเป็น Compatible PLC ครับ ใช้ STM32  ครับสามารถใช้ร่วมกับโปรแกรม GX Developer ของ PLC Mitsubishi ได้เป็นอย่างดีครับ Minitor ได้ Upload Download ได้ ครับราคาถูกกว่า PLC ครับ ติดต่อ HMI หรือ Touch Screen ได้โดยตรงครับ



 ;) ;)
ขอบคุณ คุณ kritsada ด้วยครับที่นำเสนอมุมมองของความเหมาะสมในการเลือกใช้ และ  Board ที่หลาย ๆ บริษัททำออกมาให้เราได้ศึกษาทดลองกันง่ายขึ้น แต่ถ้าจะทำเพื่อการค้า เราเองก็ต้องละลาย Board เพื่อสร้างใหม่เป็นสินค้าของเราเองครับ
;D ;D
 ขอบคุณ คุณ nont_peet ด้วยครับ เข้ามาช่วยกัน ดันกระทู้นี้ต่อครับ
 ;D ;D
                    แนะนำ Web  www.kickstarter.com   ครับหลาย ๆ ท่านน่าจะเคยผ่านเข้าไปบ้างแล้วครับ เป็น Web ที่น่าสนใจนะครับ  มีนักพัฒนาและสร้างนวตกรรมกัน หลาย ๆ โปรเจค จากทั่วโลก ได้นำเสนอผลงานของตัวเองเพื่อของสนับสนุนในการสร้างสิ่งประดิษฐ์ที่ตัวเองนำเสนอ อยากให้เรามีวัตถุประสงค์หรือค้นหาวัตถุประสงค์ไปควบคู่กับการศึกษาหาความรู้ไปด้วยครับ

“จินตนาการ สำคัญกว่า ความรู้”  อัลเบิร์ต ไอสไตน์

กลับมาช่วยกันแสดงความคิดเห็นกันต่อนะครับ

.................................................
http://www.108engineering.com
Engineering Knowledge Sharing.

  ;)         กลับมาดูในเรื่องของ PLC กับ MCU กันต่อนะครับ คราวก่อนผมค้างไว้ตรงที่ ความอัศจรรย์ ของ รีเลย์ (Relay) ครับ มาดู โครงสร้างของ รีเลย์ กันก่อนครับ



  ;)        จากรูปจะเห็นได้ว่า มี Coil คอด์ย กับ Contact หน้าสัมผัส เมื่อเราจ่ายไฟให้กับ คอด์ย ก็จะทำให้ หน้าสัมผัสนั้นเปลี่ยนสถาณะ ครับ ในที่นี้ เราจะมีขาของหน้าสัมผัส เป็น NO ปรกติเปิด NC ปรกติปิด และ COM หรือ ขาร่วม Common  ครับก่อนการจ่ายไฟให้กับคอด์ย ขา NO จะติดกับขา COM ส่วนขา NC จะไม่ติดกับขา Com นะครับ แต่เมื่อเราจ่ายไฟให้กับคอด์ย สถาณะก็จะเปลี่ยนไป ขา NO จะไม่ติดกับขา COM ส่วนขา NC ก็จะติดกับขา COM แทนครับ โดยเราจะจ่ายไฟผ่าน สวิตซ์ และ นำหน้าสัมผัสไปขับ หลอดไฟ จะเห็นได้ว่า เมื่อกดสวิตซ์  หลอดไฟก็จะติด เพราะ รีเลย์ ทำงาน และเมื่อปล่อยสวิตซ์ ก็จะดับ เพราะวงจรต่อไว้ในรูปแบบของ Contact NO กับ COM ครับ
จากรูปลองมาเขียนในลักษณะ วงจรไฟฟ้า หรือ ก็จะได้เป็นลักษณะอย่างนี้ครับ

   PB      _|_
|--------        ------------------( Coil)----|
|       NO   COM                                  |
|-------| |---------------------(LAMP)----|


Wiring Diagram เมื่อต่อเข้า PLC
      PB   _|_                                            PLC
|--------        ----------------| X0                                   Y0|----------------------------(LAMP)-----|

LADDER ใน PLC 
         X0
|------| |-------------------(M0)-----|
|        M0                                     |
|------| |-------------------(Y0)-----|

 :)          จากรูป เราทำการเปลี่ยนจาก Relay ที่เราใช้มาเป็น PLC เปลี่ยนการต่อปุ่มกด และ หลอดไฟ ด้วยวงจรรีเลย์ มาเป็น การต่อเข้ากับ PLC โดยต่อปุ่ม เป็น X0  และ ต่อหลอดไฟ เป็น Y0 ครับ หลังจากนั้น เราก็จะทำการเขียน Ladder Diagram ครับ โดยใช้ M0 ซึ่ง เป็น รีเลย์ช่วย ที่อยู่ใน PLC (axillary relay)  ก็ทำให้เรา เปลี่ยนจาก วงจรรีเลย์ มาเป็น PLC ได้แล้วครับ คราวนี้  เราจะทำอย่างไรให้ รีเลย์ สามารถที่จะ Hold ค่า หรือค้าค่าเอาไว้ได้ ใน MCU เรา Set ค่าให้ bit ใด  ๆ เป็น 1 ก็จะค้างค้าไว้จนกว่าจะมีการ set ค่าใหม่  ยกตัวอย่างมีปุ่ม 2 ปุ่ม และ มี หลอดไฟ 1 ดวง ต่อเข้าที่ MCU และ PLC X0 และ X1 เป็นปุ่มกด (Input)  M เป็น Register แบบบิต ภายใน
Wiring Diagram เมื่อต่อเข้า PLC

     PB1   _|_                                            PLC
|--------        ----------------| X0                                   Y0|----------------------------(LAMP)-----|
     PB2   _|_                     |                                             |
|--------        ----------------| X1                                       |

การเขียนโปรแกรมใน MCU
bit  M;
while(1)
{
        if(X0==0)   M =1;   //Set
        if(X1==0)   M =0;   //Reset
        LAMP = M;              // Update Output
}

ใน Ladder เราเรียกวงจรนี้ว่า Self Hold ครับ
          X0              X1
|------| |----------- |/|---------(M0)----|
|        M0    |                                    |
|------| |----                                     |
|        M0                    |
|------| |------------------------(Y0)----|

  8)              ใน Ladder ด้านซ้ายเราก็สมมุติให้เป็นไฟ +  ด้านขวา เป็น –  เมื่อ X0 ถูกกด หน้าสัมผัส NO ก็จะติดกัน ไฟก็จะวิ่งได้ ทำให้ ไฟวิ่งผ่าน X1 ซึ่งเป็น NC อยู่ ก็ทำให้ M0 On  และเมื่อ M0 On  หน้าสัมผัส M0 ใน บรรทัดด้านล้างก็จะ On ด้วยทำให้ ไฟ + วิ่งได้ 2 ทางคือ ผ่าน X0 ที่ถูกกดอยู่ และผ่าน NO ของ M0 ด้วย ทำให้ M0 On และเมื่อ X0 ไม่ถูกกด ทำให้ไฟไม่สามารถผ่าน X0 ได้ แต่ยังคงผ่าน M0 อยู่ จึงทำให้ M0 นั้น On ค้างได้นั่นเอง จนกว่าจะมีการกด X1 เมื่อ X1 โดนกด ทำให้หน้าสัมผัส NC จากออกจากกันไฟก็ไม่มีไปเลี้ยง Coil จึงทำให้ M0 ดับ หรือถูก Reset นั่นเองครับ
 ;D   ใน PLC โดยทั่วไป จะมีหน้าสัมผัสแบบ พิเศษ (Special Relay) เช่น M8013 เป็นหน้าสัมผัส ที่ On/Off ทุก 1 Sec ครับ ดังนั้นใน PLC สามารถเขียน ให้หลอดไฟกระพริบแบบง่าย ๆ ครับ ยกตัวอย่างเช่น  จากวงจรเดิมนะครับ ถ้ากด X0 ก็ให้ M0 ติดกระพริบ 1 Sec.
ใน MCU ถ้าเราเขียนแบบง่าย ๆ ในตัวอย่างด้านล่าง สิ่งที่เกิดขึ้นคือ เมื่อเรา กดแล้วปล่อย ถ้าเงื่อนไข if เป็นจริงไปแล้วก็จะเข้า  Delay On/Off 1 ครั้ง ถึงแม้จะปล่อย X0 ออกก่อนแล้วก็ตาม

while (1)
{
   if (X0 == 0)
   {
      M0 =1;       //Set On
      LAMP = M0;   //Update Output
      msDelay(1000);// Delay 1 Sec
      M0=0;       //Reset Off
      LAMP = M0;   //Update Output
      msDelay(1000); // Delay 1 Sec
   }
   M0=0;    //Reset Off
}

แต่ใน PLC ถ้าปล่อย X0  แล้ว Output จะดับทันทีครับ ด้วยคุณสมบัติการประมวลผลของ PLC นั้น ใช้วิธีการเดียวกันกับวงจรรีเลย์ ที่ต่อด้วยไฟฟ้านั้นเองครับ

          X0             M8013  [][][] (Pulse 1 Sec)
|------| |----------- | |---------------------------(M0)----|
|        M0                              |
|------| |---------------------------------------(LAMP)----|

             ดังนั้นในการเขียน MCU เพื่อน ๆ ต้องใช้เทคนิค และวิธีการจัดการโปรแกรมที่มากกว่าเดิมครับ ลองดูครับท่านใดใช้เทคนิคอะไรกันบ้างนะครับลองมาช่วยกันแชร์วิธีการกันครับ คิดว่าน้อง ๆ หรือเพื่อน สมาชิกเริ่มศึกษา MCU นั้นจะเป็นประโยชน์อย่างมากครับในการจัดการโปรแกรม และการวางโครงสร้างโปรแกรมนะครับ ช่วยกันครับ
  ;D ;D

            สรุปในตอนนี้ ก็น่าจะเห็นภาพถึงวงจรไฟฟ้าที่ใช้รีเลย์ เป็นตัวควบคุมแล้ว และได้ลองเปลี่ยน รีเลย์ ออกไปแล้วใช้ PLC แทนกันแล้วครับ และวิธีการประมวลผลของ PLC ที่ดึงเอาคุณสมบัติ เดียวกันกับวงจร รีเลย์ นะครับทำให้ การเขียนโปรแกรมเหมือนกับการต่อ วงจรรีเลย์กันเลยนะครับ แล้วตอนต่อไปลองไปดูชุดคำสั่ง และรูปแบบเปรียบเทียบกันระหว่าง MCU และ PLC กันต่อนะครับ  เปิดขึ้นไปดู เขียนซะเยอะเลย  ขอขอบคุณเจ้าของ Board ด้วยครับ

...............................................
http://www.108engineering.com
Enginering Knowledge Sharing

Offline RoLRoR

  • *****
  • 323
    • View Profile
PLC ก็คือ MCU ที่เขียนโปรแกรมผ่าน Library รูปแบบ LADDER
และงานที่เปรียบเทียบเป็นวงจรตู้คอนโทรล เอียงไปในทางถนัดของ PLC ที่ออกแบบมาเพื่อสิ่งนี้
จะได้เปรียบการเขียนโค้ด MCU แบบ ตรงๆ ไปหน่อยครับ. ถ้า MCU เขียนผ่าน Library ผมว่าสูสีกัน

คงไม่เทียบเรื่องความคุ้มค่า/ราคา แต่ถ้าความเหมาะสมกับงานโรงงาน
เพื่อให้การทำงานอุปกรณ์วงจรทนสภาวะการใช้งานในโรงงาน และต่อเชื่อมระบบโดยมาตรฐานที่เข้ากันได้
ช่างซ่อมบำรุงดูแลได้ในวิธีแบบเดียวกัน ใช้ PLC ก็เหมาะสมครับ

MCU Flexible กว่า. การเขียนแบบโค้ด. สามารถทำงานเลียนแบบ ที่ PLC ทำงานได้
แต่ PLC ถ้าเขียนแบบ LADDER อย่างเดียวอาจจะทำงานเลียนแบบ MCU ได้เช่นกันแต่มึนหลายบรรทัดแน่
จึงต้องมีส่วนเสริมเขียน C ได้ด้วย แต่อาจจะไม่เหมาะกันเพราะเหมาะสมกันคนละอย่างครับ

เช่นใช้ PLC ออกแบบเป็นผลิตภัณฑ์ไม่เหมาะสมเป็นแน่ เพราะ PLC เป็นผลิตภัณฑ์อยู่แล้ว
แต่ใช้ MCU ในงานคอนโทรลในโรงงาน ออกแบบวงจรต่างๆ ให้ดีเทียบเท่าได้
แต่ช่างที่เขียนเดี้ยงไป งานก็คงหยุดยาวเป็นแน่.

ขอบคุณครับ. เป็นการแนะนำ PLC ที่น่าสนใจมากครับ มีโค้ดการทำงานเปรียบเทียบให้ด้วย
แอบสนใจ PLC BOARD (STM32) ในเวบท่านไม่มีราคาลงไว้  ;D
ติดตามชมครับ  ;)

Offline JENG

  • *****
  • 802
  • รู้ทุกเรื่องเว้นเรื่องจริง
    • View Profile
จริงๆ จขกท มีจุดประสงค์อะไรน่าจะทราบกันดีจาก link ท้าย rip จขกท เองนะคับ จิตวิทยาคัับ ผมพอจะเดาออก ;D ;D ;D
สามารถติดตาม electoday ได้อีกสองทางครับ ยินดีต้อนรับทุกท่านครับ

กลุ่มใน Facebook
www.facebook.com/groups/coopmicro

กลุ่มใน Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

 :) :)
        สวัสดีอีกครั้งครับ และขอบคุณ คุณ RoLRoR ด้วยครับที่ให้ความคิดเห็น ในส่วนของการซ่อมบำรุงที่ PLC นั้นสามารถทำได้ง่าย กว่า MCU แต่ก็อย่างที่บอกนะครับ อาจจะคนละงานกันครับเพราะงานที่ใช้ MCU ส่วนใหญ่ไม่ต้องการซ่อมแซมนะครับ ซื้อใหม่คุ้มกว่า ส่วน Board ผมใช้งานเท่าที่จำเป็นนิดหน่อยครับ ถ้าสนใจเดี๊ยวผมผมของลองเทสให้ก่อนครับ ถ้าได้ยังไงแจ้งข่าวกันอีกทีครับ ลองดูว่าเต็มที่มันจะยังไงบ้าง  ;)

        และขอบคุณ คุณ [jeng] ด้วยครับ มาเสนอในมุมมองของ วัตถุประสงค์ และ จิตวิทยา ครับ ส่วนตัวผม หวังว่าบทความนี้คงพอเป็นประโยชน์กับเพื่อนสมาชิก บ้างในแง่ ที่เพื่อนสมาชิกได้ศึกษา MCU กันมาแล้ว และวันดีคืนดี ต้องใช้ PLC ขึ้นมา เพื่อน ๆ เชื่อหรือไม่ว่า ถ้าท่านไปเล่น PLC ท่านจะเป็นคนเขียน PLC ที่เก่งมาก ๆ ครับเพราะท่านเข้าใจมันลึกซึง รู้ว่ามันประมวลผลอย่างไร มีหลักการอย่างไร อย่างที่เพื่อนสมาชิกให้ความเห็นด้านบนครับ PLC คือ Subset ของ MCU ครับ และผมก็มั่นใจเหลือเกินครับ ถ้าเพื่อนสมาชิกเดินทางต่อไปในสายงานอุตสาหกรรมแล้วท่านจะได้เจอมันอย่างแน่นอนครับ ถ้าอ่านแล้วได้ความรู้ก็ยินดีด้วยครับ แต่ถ้าอ่านแล้วรู้สึกเสียเวลาก็ต้อง ขอโทษด้วยครับ  :-[

 :)        ในวงการอุตสาหกรรมมีส่วนประกอบอยู่ 2 ส่วนหลัก ๆ ครับ(อันนี้คิดเองนะ  ;D ) คือ ตัวผลิตภัณฑ์   และ เทคโนโลยีการผลิต ผมจะขอนำเสนอให้พอเห็นภาพกว้าง ๆ นะครับ

 :D        ในตัวผลิตภัณฑ์ ตรงส่วนนี้เป็นส่วนที่ว่ากันด้วยการออกแบบ ให้ตอบสนองกับความต้องการของผู้บริโภค ในราคาที่เหมาะสม หรือต้นทุนที่สามารถขายให้่ผู้บริโภคซื้อได้ บางครั้งการออกแบบ ก็ต้องคิดถึงจำนวน เพราะถ้าออกแบบด้วยต้นทุนที่สูงขึ้น แต่ขายได้จำนวนเยอะ ๆ ก็สามารถทำต้นทุนแบบ Rate  เช่น แม่ค้าขายสินค้า โลละ 30  4 โล 100 ในการออกแบบผลิตภัณฑ์ แต่ละประเภท ก็จะมีเงื่อนไขแตกต่างกันออกไป ครับ ยกตัวอย่างที่แปลก ๆ นะครับเป็น case ของ เฟอนิเจอร์ ครับ ความยากของการออกแบบนอกจากจะต้อง ดูแล้วหรูหรา น่าใช้งาน ทนทาน แล้ว สิ่งที่จำเป็นมาก ๆ คือ บรรจุภัณฑ์ ครับ ต้องสามารถถอด แล้วลงกล่อง สะดวกต่อคนซื้อนี่สำคัญมากครับ ด้วยเงื่อนไขที่ต้องคำนึงถึงหลาย ๆ ส่วนมากครับ ทีม พัฒนาผลิตภัณฑ์ ของหลาย ๆ ที่ก็เกิดขึ้นครับ ในส่วนของ MCU ส่วนใหญ่แล้วจะไปอยู่ตรงจุดนี้ ครับ ผมเห็นในบ้านเราก็จะมี 2 ส่วนครับ คือส่วนที่ไปอยู่ในทีม R&D ของบริษัทใหญ่ที่ทำผลิตภัณฑ์ ทั่ว ๆ ไป แอร์ บ้าง ECU ของ รถยนต์บ้าง  แต่ส่วนใหญ่จะเป็นส่วนที่เข้าไปเสริมทีมให้บริษัทแม่อีกทีเนื่องด้วยเป็นหัวใจสำคัญของสินค้าเลยก็ว่าได้ครับ  อีกส่วนคือ ผลิตภัณฑ์ ที่ทำออกมาเฉพาะกลุ่ม ซึ่งส่วนนี้ น่าจะเป็นส่วนที่ เราสู่กับต่างประเทศได้  เพราะถ้าเราไปดูในส่วนของ สินค้าที่ขายกันในจำนวนเยอะ ๆ ขายได้ทั่วไป จะเป็นกลุ่มที่มีการแข่งขันผลิตกันสูง ราคาต่ำมาก ยกตัวอย่างสินค้าจากเมืองจีน ครับ เครื่องเสียงรถยนต์ ขายบ้านเรา 1800 ต้นทุนถึง 1000 หรือเปล่าผมไม่ทราบครับ แต่เก่งมากที่ทำได้ในราคาขนาดนั้น  กลับมาส่วน ผลิตภัณฑ์เฉพาะกลุ่ม ในบ้านเราก็มีอยู่กลุ่ม ๆ หนึ่งครับ  ทำให้กับภาครัฐ บ้าง ทำอุปกรณ์ต่อพ่วงให้กับภาคอุตสาหกรรมบ้าง ทำชุดเซตให้กับภาคอุตสาหกรรมบ้าง ในส่วนของผลิตภัณฑ์ นี้ แน่นอนครับ MCU อย่างเดียว เพียว ๆ ชนิดที่สุดขึดจำกัด เพราะต้องตอบสนองของ Idea ต่าง ๆ ที่คนคิด ออกแบบมาให้ตอบสนองกับความต้องการของกลุ่มที่ต้องการสร้างผลิตภัณฑ์ของตัวเอง เช่น iPhone ผลิตภัณฑ์ ที่พลิกโลกของ โทรศัพท์ไปเลยก็ว่าได้  ด้วยความคิดที่ไม่จำกัดว่า มันจะเป็นไปได้จริงขนาดไหน ผมคิดเล่น ๆ การที่เราศึกษาอะไรลึก ๆ จนรู้ขีดจำกัดมันก็จะเป็นอะไรที่ดีนะ แต่บางที มันกลับมาเป็นขีดจำกัดในความคิดของเราว่าไม่สามารถทำได้เกิดกว่านั้นซะงั้น  :-\

            มาดูอีกส่วนครับ คือ เทคโนโลยีการผลิต ครับที่ผมคิดว่า ส่วนนี้แหละครับที่เราจะได้ใช้ PLC เต็ม ๆ ครับ  และส่วนนี้เป็นส่วนที่ส่งถ่าย ผลิตภัณฑ์ จากข้างต้นครับ ผลิตออกมาให้กับผู้บริโภค แน่นอนครับ ผลิตภัณฑ์ ไม่ได้เกิดขึ้นมาแค่ บริษัทเดียว เช่น รถยนต์ ยังมีค่าย Honda  Toyota  Isusu  Ford Mazda ไม่เชื่อก็ต้องเชื่อครับ เทคโนโลยี่ในการผลิต สามารถผลิต รถยนต์  1 คัน ภายในเวลาไม่ถึง 2 นาทีครับ และที่สำคัญ ประเทศเราเป็นประเทศที่เราเรียกว่า เป็น ฐานผลิตขนาดใหญ่ของโลก ในหลายผลิตภัณฑ์  ครับ เราคนไทยเราเก่งเรื่องงาน ฝีมือครับ แต่เครื่องจักรกลอัตโนมัติ ที่ตอนนี้ นำเข้ามาบ้าง สร้างเองบ้าง ยังต้องการบุคลากรอย่างพวกเรา เข้ามาช่วยดูแล ปรับปรุง พัฒนา กันอีกมากมายครับ ยิ่งเจอค่าแรง  300 เข้าไป แทบทุกโรงงาน เร่งหาเครื่องจักรกลอัตโนมัติเข้ามาช่วยทั้งนั้นครับ เพราะนอกจากการแข่งขันกันด้วยตัวผลิตภัณฑ์แล้วนั้น การผลิตก็เป็นส่วนสำคัญ ที่มีการแข่งขันกันสูง เพราะบางบริษัท รับจ้างผลิตอย่างเดียวก็มีเยอะมากครับ  ;)
 
 ;D           เพื่อน ๆ ลองให้ความคิดเห็นกันดูต่อนะครับ ว่าเจออะไรอยู่ตรงส่วนไหนกันบ้างครับตอนนี้  แชร์ประสบการณ์ ความรู้ ความคิดเห็นกันได้ครับ ผมคิดว่าการแชร์ความรู้ หรือ ความคิดเห็น จะทำให้ได้ความรู้กับเพื่อนสมาชิกที่ติดตาม และตัวผมเองด้วยครับ  ส่วนตัวผมจะขอนำเสอน PLC VS MCU ทางเดียวกัน แต่คนละเลน  กันต่อนะครับ ช่วยกันครับ

..............................................
http://www.108engineering.com
Engineering Knowledge Sharing

 :) :) :) :) :)
              มาต่อกันครับ จากโจทย์เราครั้งก่อนนะครับ การเขียนโปรแกมใน MCU จะต้องมีการเขียนโปรแกรมที่ต้องใช้งานจัดการมากขึ้นครับ ผมลองดูมีเพื่อนสมาชิก คุณ AppleIIe ได้เขียนไว้เรื่อง Co-operative State Multitasking ด้วย State Machine ครับเขียนไว้ได้ดีมากครับ ขอชมเชยด้วยคนครับ ลองไปดูใน Link http://www.electoday.com/index.php/topic,10229.0.html   โปรแกรมใช้เทคนิค การจัดการที่ดีครับ  สามารถทำให้เราจัดการอย่างโจทย์ของเราได้แบบไม่ยากเลย และก็เป็นวิธีการ ที่ให้เรานำไปใช้งานกันในการแก้ปัญหาการจัดการโปรแกรมได้ดีด้วยครับ  ใน กระทู้เดียวกัน ท่าน firmware.c ก็ได้เขียนเกริ่นไว้ ถึง RTOS อีกตัว ROUND ROBIN ก็เป็น  RTOS ที่ท่านที่ศึกษา MCU ต้องเข้าถึงให้ได้นะครับ สู้  ๆ
   อีกกระทู้ที่น่าสนใจของ ท่าน crywolf  http://www.electoday.com/index.php/topic,243.msg1680.html#msg1680 ตอบคำถามเพื่อนสมาชิก เป็นเทคนิคการใช้ Timer Interrupt  ให้ได้เป็นฐานเวลาให้โปรแกรมได้เยี่ยมไปเลยครับ นับถือ ๆ  ลองติดตามกันครับ
               ในตอนนี้ผมจะเขียนโปรแกรม ตัวอย่าง State Machine แบบง่าย ๆ นำทั้ง 2 กระทู้มายำ ๆ มั่ว ๆ ไป ครับ พอจะแก้โจทย์ เมื่อเราต้องเขียนในลักษณะแบบนี้ ลองเอาวิธีนี้ไปลองเล่นกันดูครับ อาจจะไม่ถึงระดับสูง แต่เขียน IO Sequence ได้ดีพอสมควรครับ หลายท่านอาจจะเป็น พื้นฐานกันไปแล้ว ใครมีวิธีไหน แนะนำเชิญร่วมแบ่งปันได้ครับ
 
int varDelayX0;
int State;
void  isr_timer (void)  interrupt 1    // Interval 10mS.
{   
   // Reload
   // To Do
   switch(State)
   {
                              case 0:      if (X0 == 0)       // PB  Press            
                                               {
                                                         varDelayX0 =0;   // Initial Counter Time
                                                         M = 1;       // Set On
                                                         State = 1;   // Change State to 1
                                                }
                                                break;
                                case 1:       if (X0 == 0)       // PB  Press            
                                               {
                                                         varDelayX0 = varDelayX0 + 1;
                                                         if (verDelayX0 == 100) // 10mS x 1000 = 10000mS. 1 Sec.
                                                         {
                                                                      M = 0;      // Reset Off
                                                                      State = 2;      // Change State to 2
                                                                      varDelayX0 = 0;   // Reset Set Counter Time
                                                          }
                                                }
                                                else         //PB Release
                                                {
                                                           M=0;       // Reset
                                                           State = 0;   // Change  State to 0
                                                           varDelayX0 = 0;    //Reset Counter Time
                                                 }
                                                 break;

                                case 2:       if (X0 == 0)
                                                 {
                                                            varDelayX0 = varDelayX0 + 1;
                                                            if (verDelayX0 == 100) // 10mS x 1000 = 10000mS. 1 Sec.
                                                            {
                                                                     M = 1;
                                                                     State = 1;
                                                                     varDelayX0 = 0;
                                                              }

                                                 }
                                                 else         //PB Release
                                                 {
                                                             M=0;       // Reset  Off
                                                             State = 0;   // Change  State to 0
                                                             varDelayX0 = 0;    //Reset Counter Time
                                                  }
                                                  break;

                }

}

 >:(   ;D

               ในส่วนโปรแกรมนี้ จะอาศัย Interrupt เมื่อเกิด Interrupt ขึ้น ก็จะเข้ามาทำใน Function นี้ 1 ครั้ง และได้ออกแบบให้โปรแกรมนั้น ไม่ได้เขียนให้ติด Loop ใด ๆ โดยการ Delay เราจะใช้การนับรอบการเข้ามาของ Interrupt ที่เกิดขึ้น และที่สามารถทำตั้งเวลาได้ ก็เพราะการ เซต Interrupt ครับ เราเซต Interrupt Timer ให้เกิดขึ้น ทุก ๆ 10 mS. ซึ่งเพียงพอให้โปรแกรมทำงานใน 1 รอบ  และได้ความรู้สึกที่เป็นเวลาจริง  เพราะการ Update แต่ละครั้งใช้เวลา 10 mS. ครับ   ผมหมายถึงเมื่อเราปล่อยปุ่มแล้วทำให้ โปรแกรม Reset Off M = 0 นั้น เกิดขึ้นหลังจากปล่อยปุ่มช้าสุดประมาณ 10mS. ซึ่งทำให้เราเห็นว่ามันดับทันทีครับ  การจัดการโปรแกรมแบบนี้อาจเขียนเยอะหน่อย แต่คิดว่าท่านที่เริ่มศึกษา น่าจะดูตามกันได้ทัน ไม่ซับซ้อนครับ เยอะแต่ถ้าเข้าใจก็จะช่วยให้การเขียนโปรแกรมนั้นง่าย ขึ้นครับ ในคำสั่งต่อไป ผมจะทำการเขียน Timer  / Counter ใน PLC เทียบกับ MCU กันต่อนะครับ  ขอบคุณทุกท่านที่ติดตาม และช่วยเป็นกำลังใจให้กันครับ

 8) 8) 8)
.............................................
http://www.108engineering.com
Engineering Knowledge Sharing

Offline prakit340

  • **
  • 75
  • https://www.facebook.com/prakit340
    • View Profile
    • 12Com
มาปูเสื่อ ครับ ความรู้เพียบ

Offline RoLRoR

  • *****
  • 323
    • View Profile
รบกวนครับ อยากทราบวิธี PLC (LADDER) แก้ไขโจทย์การทำงานนี้ดูบ้างครับ
http://www.electoday.com/index.php/topic,10724
เพราะเป็น เงื่อนไขการทำงานของสวิตช์ และเงื่อนไขคาบเวลา เพื่อแสดงค่าออกเอาท์พุต งานด้าน PLC

ขอบคุณครับ.  :D