สวัสดีครับ เพื่อน ๆ ชาว Electoday :) :)
ผมเป็นคนหนึ่งที่ชื่นชอบ ไมโครคอนโทรลเลอร์ ซื้อบอร์ตมาลองเขียนเล่นถามใจว่าทำไม ก็บอกได้ยากนะครับ แต่ลึก ๆ แล้วคาดหวังว่าถ้ามีโปรเจค หรือยากทำโปรเจคอะไรสักอย่างเป็นของตัวเอง ถ้าสามารถเขียนไมโครคอนโทรลเลอร์ได้ก็จะง่าย และสามารถประเมินได้ว่า โปรเจคที่กำลังคิด หรือไอเดียร์ที่มีจะเป็นไปได้มากน้อยแค่ไหน
แต่ผมทำงานด้าน เครื่องจักรกลอัตโนมัติ ที่ใช้ตัวควบคุมประมวลผลเป็น PLC ครับ แนวผมมองเห็นแนวทางที่สวนทางกัน ไมโครคอนโทรลเลอร์ ทำได้ทุกอย่าง เช่นเดียวกัน PLC ก็สามารถทำได้ทุกอย่าง ถ้าเราเข้าใจอย่างนี้แล้วสิ่งต่อไปคือ เราจะสร้างอะไร นี่คือประเด็น ในด้านไมโครคอนโทรลเลอร์ ผมติดตาม และคิดว่ามีความรู้ใหม่ ที่เมื่อก่อนมันดูไกลมากเช่น Touch Screen หรือระบบ Wireless แต่ตอนนี้มันเข้ามาใกล้ตัวชนิดที่ว่า อยู่ในมือของทุก ๆ คนเลยที่เดียว และเราก็สามารถศึกษาและเขียนโปรแกรมควบคุมใช้งานมันได้ไม่ยาก กลับเข้าสู่ประเด็นว่าเราจะสร้างอะไร แต่ในงานด้านเครื่องจักรกลอัตโนมัติ มีโจทย์ที่ชัดเจนมากมายที่เราจะต้องสร้าง ซึ่งโจทย์เหล่านี้อาจไม่ถูกเปิดเผยมากนัก แต่แน่นอนครับถ้าเราก้าวเข้าสู่วงการอุตสาหกรรม จะมีโจทย์ที่เต็มไปด้วยความรีบร้อนในการแก้ไขโจทย์ และทำให้ปัญหาต่าง ๆ นั้นหายไป รวมถึงโจทย์ที่ต้องพัฒนาปรับปรุง เพื่อเป็นข้อได้เปรียบของแต่ละองค์กรรองรับการแข็งขันที่สูงขึ้น
>:( >:(
แนวทางที่สวนกันชัดเจนคือ ในอุตสาหกรรมเราต้องตีโจทย์ หาวิธีการและสร้างเครื่องมือที่ใช้เฉพาะ เพื่อแก้ไขปัญหาโดยตัวควบคุมหรือประมวลผล แน่นอนครับ PLC เป็นตัวที่ได้รับความนิยม และไว้วางใจ และไม่ต้องคิดว่าจะใช้อะไรแทนมันดี ในอุตสาหกรรมมองว่าสิ่งสำคัญคือการ คิดตีโจทย์ และหาวิธีการ มากว่าการศึกษาการใช้งานตัวควบคุมเพราะพื้นฐานคือ ตัวควบคุมสามารถทำได้ทุกอย่าง ส่วนในด้านการศึกษา เราศึกษาทุก ๆ อย่าง ด้วยไมโครคอนโทรลเลอร์ แต่ไม่ได้มีโจทย์ที่ชัดเจน แน่นอนครับ เมื่อมีโจทย์ที่ชัดเจนเค้าถึงจะเรียกเราไป เช่น บริษัทผลิต แอร์ บริษัท ทำ ECU บริษัท ผลิต เครื่องใช้ไฟฟ้า ต่าง ๆ ที่ใช้ระบบฝังตัวในการควบคุม ดังนั้น แนวทางในการศึกษาเมื่อ เรามีลอจิกในการคิดที่ดีแล้วเราก็สามารถตีโจทย์ได้ดี และมีเทคนิค รวมถึงประเมินความเป็นไปได้ เพราะเรามีพื้นฐานในการศึกษาที่ดีแล้ว แต่ยังมีคนกลุ่มใหญ่ ๆ ที่ไม่ได้ศึกษาพื้นฐานที่ลึกซึ้งเหมือนเรา แต่กลับเป็นคนที่ต้องไปตั้งโจทย์ให้เราทำ โดยโจทย์ที่ตั้งมาด้วยความไม่รู้ จะเป็นอะไรที่นะ อธิบายยากครับ
:D :D
แต่สิ่งหนึ่งที่ อยากให้เพื่อนสมาชิก ศึกษาต่ออีกหน่อยคือ PLC ครับ แน่นอนครับ รูปแบบอาจเปลี่ยนไปจาก Text Base เป็น Ladder Diagram แต่รับรองครับ ง่ายกว่ากันเยอะครับ ซึ่งตอนนี้เอง เจ้า Arduino เองก็เริ่มที่จะเข้าใกล้ PLC มากขึ้นครับ ลดความซับซ้อนของระบบลง Fix Input Output และโครงสร้าง เพื่อลดการ Config ต่าง ๆ ให้ใช้งานได้ง่ายขึ้น ตัวแปรและหน่วยความจำต่าง ๆ ถูกกำหนดตายตัว ทำให้เราสามารถเน้นไปที่การใช้งานได้โดยไม่ต้องลึกซึ้งกับการเซตอัป ในกระทู้บทความนี้ ผมจะนำเสนอ มุมมองของ PLC เมื่อเทียบกับ MCU ในตอนต่อ ๆ ไปครับถ้าเราสนใจช่วยดันกันด้วยครับ
ผมดูทักษะทั้งคนที่เข้ามาอ่านกระทู้ และคนที่เข้ามาเขียนกระทู้แล้ว เสียดายถ้าท่านศึกษาได้ลึกขนาดนี้แล้ว ไม่ศึกษา PLC เพราะ PLC นั้นง่ายกว่ามาก ๆ ครับ และเป็นสิ่งที่อนาคตถ้าเราก้าวเข้าสู่อุตสาหกรรมแล้วเราต้องเจอมันอย่างแน่นอน และตอนนี้ก็ขาดแคลนบุคลากรในด้านนี้มากด้วยครับ แล้วผมจะนำเสนอ และแลกเปลี่ยนความรู้ ความคิดเห็นกันในตอนต่อ ๆ ไปครับ
8) 8)
ขอบคุณครับ
http://www.108engineering.com
Engineering Knowledge Sharing
ผมจะนำเสนอ เกี่ยวกับ PLC และ MCU กันต่อครับ ให้ลองคิดกันเล่น ๆ ถึงรูปแบบ การจัดการ และการใช้งานที่ต่าง กัน ลองมาดูกันนะครับ
:)
ในประเด็นแรก ผมจะขอกล่าวถึง รูปแบบของ Package กันก่อน ครับ PLC กับ MCU เป็นหน่วยประมวลผลที่ทุกคนทราบกันดี แต่Package แตกต่างกันอย่างสิ้นเชิงครับ ด้วย PLC ออกแบบบนมาตรฐาน CE UL แต่ MCU เป็น Board สำหรับทดลองดังนี้ การนำไปใช้งานจริงที่ต้องรองรับ สภาพแวดล้อมที่ค่อนข้างจะเลวร้าย เช่น ฝุ่น Noise สนามแม่เหล็ก หรือ อุณหภูมิ ในประเด็นนี้ ชัดเจนว่า ถ้าเราจะทำให้ MCU ของเราต้องไปอยู่ในสภาพแวดล้อมที่ไม่ใช้ห้องทดลอง ก็ต้องคิดหาวิธีป้องกันกันด้วยครับ
(http://www.robotshop.com/media/files/images/arduino-due-32bit-arm-microcontroller-large.jpg)
:) จากรูปจะเห็นได้ว่า MCU ได้พัฒนาไปให้ง่ายขึ้นจากที่เราต้องกำหนด Config ของตัว MCU เองก็ถูกกำหนดตายตัว ทำให้ Config ต่าง ๆ ก็จะถูกกำหนดตายตัวมาให้ด้วยได้เช่นกัน สิ่งที่ต้อง ทำเกี่ยวกับอุปกรณ์การต่อพวงทางอินพุต และเอาต์พุต เมื่อเราใช้ MCU ยกตัวอย่าง ปุ่มกด เราก็จำเป็นจะต้องใช้ R Pull up สำหรับต่อ เป็นปุ่ม อินพุต และอุปกรณ์ เอาต์พุตจำพวก หลอดไฟ ก็ต้องมี R Drop เพื่อจำกัดกระแส และป้องกันการเสียหาย ซึ่งสิ่งเหล่านี้ส่วนใหญ่ผู้ผลิต Board จะมีมาให้เราใน Board อยู่แล้วแต่อย่าลืมว่า ถ้าเรานำไปใช้งานจริง ก็จำเป็นต้องมี วงจรจำพวกนี้เข้าไปด้วย และถ้านำไปใช้กับอุปกรณ์ในภาคอุตสาหกรรม สิ่งที่จะต้องออกแบบเพิ่มเติมก็คือ วงจร Opto Isolator ทั้ง Input และ Output และในส่วน Output เองก็ต้องมีวงจร Driver สำหรับการรองรับกระแส และแรงดันที่สูงขึ้น เช่น Transister หรือ Relay ต่าง ๆ
(http://www.inverter-plc.com/plc/FX0_FX0N_FX0S_PLC/images/FX0N-40-ER-ES-UL.jpg)
;) ในส่วนของ PLC เห็นได้ว่า ระบบจะถูกออกแบบมาใน Package ที่ทนต่อสภาพแวดล้อม และทดต่อการใช้งาน มีอายุการใช้งานเป็น 10 ปี พร้อมสต๊อกของ และ Platform ที่สามารถใช้แทนกันได้ในรุ่นใหม่ ๆ ส่วนวงจรด้านในก็จะถูกออกแบบมาให้รองรับกับอุปกรณ์ ต่อพวงภายนอกมาตรฐาน อุตสาหกรรม สามารถต่อพ่วงอุปกรณ์ต่าง ๆ ได้ง่าย และด้วยมาตรฐานอุตสาหกรรม อุปกรณ์ต่าง ๆ ก็สามารถใช้แทนกันได้เมื่อเสีย หรือ ต้องการเปลี่ยน
ดังนั้นในหัวข้อนี้ จะเห็นได้ว่า PLC นั้นได้ออกแบบมาให้ใช้งานด้านอุตสาหกรรมโดยตรง แต่ MCU ออกแบบมาสำหรับการศึกษา และทดลอง แต่จริง ๆ แล้วด้านใน PLC หน่วยประมวลผลก็คือ MCU นั้นเอง แต่ได้ถูกออกแบบให้มี Platform ที่เป็นมาตรฐานอุตสาหกรรม และที่สำคัญรูปแบบในการเขียนโปรแกรม สำหรับครับ MCU และ PLC นั้น มีความแตกต่างกันด้วยรูปแบบ ที่เป็น Text Base และ Ladder Diagram ซึ่งจะมีความได้เปรียบเสียเปรียบกันในบ้างอย่าง แล้วผมจะมานำเสนอต่อไปครับ
ลองดูตัวอย่างครับ การสั่งให้ ถ้ากดปุ่ม PB1 ให้ PL1 ติด และถ้า ปล่อย ปุ่ม PB1 ให้ PL1 ดับ
รูปแบบการเขียนแบบ Text Base
while (1)
{
if (PB_1 == 0)
{
PL_1 = 0; // LED ON
}
else
{
PL_1 = 1; // LED OFF
}
}
รูปแบบการเขียนแบบ Ladder Diagram
| PB_1 PL_1 |
|-------| |------------------------( )---|
| |
:D :D :D
ขอบคุณทุกท่านที่เข้ามาอ่านบทความ และเป็นกำลังใจให้ทุกคนที่กำลังศึกษาใช้งานอุปกรณ์ต่าง ๆ อยู่นะครับ ;)
........................................................
http://www.108engineering.com
Engineering Knowledge Sharing
จริงๆ PLC และ MCU มันก็อันเดียวกันแหละคับผมว่า
เพียงแต่ PLC มันก็เหมือนข้าวกล่องสำเร็จรูปตาม 7-11 เวฟเสร็จเปิดกล่องก็กินได้เลย(ใน PLC มันก็มี MCU เหมือนกันเพียงแต่มีระบบ OS มาให้เรียบร้อยแล้ว)
แต่ MCU มันก็เหมือนของสดที่เราต้องจัดก่อนลงกะทะ ผ่านการปรุงจึงเป็นอาหารให้เราทานได้(ต้องบริหารจัดการ OS เอง)
ซึ่งมันย่อมมีความหลากหลายอย่างแน่นอน
ผมก็เขียนทั้ง 2 อย่างแต่ตอนนี้เริ่มเห็นอะไรบางอย่างว่า MCU น่ะมันไปได้ไกลกว่าเยอะคับ
เด๋วนี PLC ก็เขียนภาษา C ได้เกือบทุกยี่ห้อแล้วเหมือน(ขนาดยี่ห้อจีนยังเขียนได้)กันนับประสาอะไร
ไว่ว่างๆจะลองเอา PLC มาผสมพันธ์ กับ MCU มาให้ชมคับ
ชักหิวแล้ว ขอตัวก่อนน่ะคับ :D
ขอบคุณ คุณ boe ครับที่ร่วมแสดงความคิดเห็นครับ ผมจะรอชม PCU ครับ (PLC + MCU) ;D
"ผมก็เขียนทั้ง 2 อย่างแต่ตอนนี้เริ่มเห็นอะไรบางอย่างว่า MCU น่ะมันไปได้ไกลกว่าเยอะคับ" เป็นประเด็นที่น่าสนใจครับ ยินดีที่ได้ร่วมกันแสดงความคิดเห็นในแง่มุมต่าง ๆ ครับ
;) ในวันนี้ ผมจะขอกล่าวถึงการจัดการหน่วยความจำของ PLC และ MCU นะครับ ใน MCU มีการ Include File เพื่อการอ้างอิงถึง Register ที่ตัว MCU มีอยู่ด้านใน ส่วน PLC ก็คล้าย ๆ กัน ครับ แต่จะเป็นการเลือกตอนที่เราจะเริ่มทำการเขียนโปรแกรมว่า จะเลือกเป็น PLC Model ไหนครับ
:D ประเด็นที่น่าสนใจอยู่ที่การจัดการหน่วยความจำที่ใช้ในการเขียนโปรแกรมครับ ในส่วนของ MCU เราอาศัยการประกาศตัวแปร ระบุชนิดของตัวแปร และขนาดของตัวแปร เช่น char int float double ส่วน ตำแหน่งหรือ Address ของตัวแปรนั้น แล้วแต่ Compiler จะไปจัดการซึ่งเราก็ไม่รู้ แต่ก็สามารถใช้ Pointer ในการเข้าถึงตำแหน่งโดยตรงได้ ดังนั้นเมื่อเรา Compile ก็จะรู้ว่า หน่วยความจำเราเหลือ มากน้อยเพียงใด และในส่วนของหน่วยความจำที่ต้องการค้างค่าไว้ เมื่อปิดไฟ ก็จะมีการเข้าถึงในส่วนของพื้นที่ EEPROM ซึ่งก็จะมีรูปแบบในการเข้าถึงอีกรูปแบบหนึ่ง และยังมีหน่วยความจำที่เป็น Flash ที่เราสามารถใช้ได้ในลัษณะที่เป็นค่าคงที่ เพื่อไม่ให้เปลือกหน่วยความจำไปโดยเปล่าประโยชน์ ท่านที่ศึกษา MCU ก็ต้องทำความเข้าใจสำหรับหน่วยความจำ ทั้งแบบ RAM ROM และ EEPROM เพื่อเป็นพื้นฐานในการเขียนโปรแกรมและเลือกใช้งานได้อย่างถูกต้องนะครับ
:) ส่วนการจัดการหน่วยความจำของ PLC จะมีการระบุตายตัว ไม่มีการประกาศตัวแปร [จะยังไม่กล่าวถึง Function Block] และแบ่งช่วงของหน่วยความจำที่เป็น EEPROM หรือ ค้างค่าไว้ได้ อย่างชัดเจน โดยใช้ตัวอักษร เป็นตัวแยก ชนิดของหน่อยความจำ และใช้ตัวเลขเป็นการระบุตำแหน่งแทนชื่อ เหมือนที่เราประกาศตัวแปร เช่น D100 แบบ Word [16Bit] M0 เป็นแบบ Bit X0 เป็น Input 1Bit Y10 เป็น Output 1 Bit DXXX เป็น Datamemory แบบ ค้างค่าได้ ตอนเริ่มเขียนใหม่ ๆ ถ้าเคยเล่น MCU มาก่อน จะรู้สึกว่า ยากหน่อยเพราะ เราไม่สามารถกำหนดหรือ เรียกชื่อตัวแปรในการเข้าถึงได้โดยตรงเหมือนการประกาศตัวแปร แต่ใช้ไปนาน ๆ ก็สอนให้เราแบ่งเป็นกลุ่ม หรือช่วงการใช้งานได้ง่ายขึ้น
::) อีกประเด็นที่น่าสนใจคือ การประมวลผลหน่วยความจำ เราต้องเข้าใจถึงการเรียงตัวของหน่วยความจำกันก่อนครับ D0 D1 D2 จะเป็นหน่วยความจำ 16 บิต ที่เรียงตัวติดต่อกันไป เรื่อย ดังนั้น ในการเข้าถึงของ PLC จะใช้คำสั่งเป็นตัว กระทำว่าจะกระทำแบบ 16Bit หรือ 32 Bit
ยกตัวอย่างเช่น การเคลื่อนย้าย data เมื่อมีการกดปุ่ม PB_1 (X1 Input ของ PLC)
>:( >:(
int intA;
int intB=3000;
if (PB_1 ==0)
{
intA = intB;
}
| X1 |
|------| |-------------[MOV K3000 D0]--|
| |
| |------[MOV D0 D10 ]--|
>:( >:(
float fltA;
float fltB = 1.23;
if (PB_1 == 0)
{
fltA=fltB;
}
| X1 |
|------| |-------------[EMOV E1.23 D0]--|
| | |
| |------[EMOV D0 D10 ]--|
;D จากตัวอย่างจะเห็นได้ว่าเป็นการ เคลื่อนย้ายข้อมูล แบบ 16 Bit และ 32 Bit ซึ่ง PLC จะใช้คำสั่ง E นำหน้าคำสั่งใน PLC Mitsubishi เพื่อให้กระทำแบบ Floating (32 Bit) นั่นเอง และการกระทำดังกล่าวก็จะ ใช้หน่วยความจำ 16Bit สองตัวจากตัวอย่างก็จะใช้ D0กับD1 และ D10กับD11 แต่การใช้งานใน MCU จะใช้คำสั่งเดียวกัน แต่ชนิดของตัวแปรที่ใช้ในการประกาศนั้นต่างกัน
เป็นไงกันบ้างครับ งง กันยัง 555 ผมกลับไปอ่านเองก็ยังงง นะ ไม่รู้เพื่อน ๆ เข้าใจกันหรือเปล่า แต่ในประเด็นต่อไป ผมจะกล่าวถึง คุณสมบัติของ Relay ซึ่งเป็น Relay ที่เรารู้จักกันดี ซึ่งจะมี Coil และ Contact เพื่อน ๆ น่าจะเคยใช้กันมาบ้างแล้วนะครับ แต่มาดูความมหัศจรรย์ ของมันกันครับ เพราะใน PLC จะใช้คุณสมบัติของ Relay ,มาจัดการทั้งหมดครับ แล้วคอยติดตาม และเป็นกำลังใจกันได้ในตอนต่อไปครับ
ขอบคุณสำหรับกำลังใจดี ๆ หลังไมค์ และเพื่อน ๆ ที่ช่วยกันแสดงความคิดเห็นแลกเปลี่ยนกันครับ
:D :D :D
................................................
http://www.108engineering.com
Engineering Knowledge Sharing
คนละอย่างกันนะครับ ถ้าคุณเอามาใช้แล้วรู้สึกว่าใช้ยาก แสดงว่าใช้งานผิดประเภทไง
PLC นี้มัน Industry
MCU นี้มัน Application product
ขอค้านตรงที่ว่า "MCU ออกแบบมาสำหรับการศึกษา และทดลอง"
มันไม่ใช่แค่นั้นนะครับ
เพิ่มเติมหน่อยว่าจริงๆแล้ว PLC เป็น subset ของ MCU เพราะว่า PLC มันเป็น application ชนิดหนึ่งของ MCU
มองต่างมุมกัน แต่ผมก็ชอบครับ ได้ความรู้ดี ;D
นานๆจะตอบกระทู้หลายๆที ;D
เจ้าของกระทู้เคยเล่น LD Micro บ้างรึยังคับ
ลองแล้วอาจติดใจเหมือนผม(งานไม่ซับซ้อนก็ทำงานเหมือนกับ PLC เป๊ะผมใช้ pic16f887)
http://www.electoday.com/index.php/topic,251.0.html
แต่จะรู้เลยว่าข้อจำกัดของ PLC นั้นมีอะไรบ้างโดยเฉพาะเรื่องความยืดหยุ่นของการเขียนโปรแกรม
PLC มันก็คือ subset ของ MCU นั่นแหละคับอย่างที่เค้าตอบข้างบนนั่นแหละคับ
MCU ผมก็ยังงูๆปลาๆอยู่เลยก็ต้องเพิ่งเซียนประจำบอร์ดแถวนี้ช่วยเหมือนกันครัชช 8)
จริงโดยทั่วไปคนที่อยู่ด้านระบบสมองกล จะไม่ยึดติดกับสิ่งใดสิ่งหนึ่งอะไรที่ นักพัฒนาเองสามารถที่จะทำเองได้ก็จะทำ อะไรที่ซื้อได้ถ้าราคาไม่แพงก็จะซือ
ขึ้นอยู่ความประสงค์ของแต่ละท่าน อะไรที่กำหนดตายตัว ต้องอย่างงี้ ต้องต่อแบบนี้ ต้องใช้อุปกรณ์ตัวนี้ ต้องใช้ software ตัวนี้ ใช้ิ boards แบบนี้ ต้องกำหนดแบบนี้
มันเป็นอะไรที่นักพัฒนาทั้งด้าน Hardware และ software (โปรแกรมเชิง driver เท่านั้น) ไม่ชอบเอ้าสะเลย
โอเคอะไรมันง่ายจริงแต่คุณลองดูจริงของความคุ้มค่าต้องการจะนำไปต่อยอดตามที่เราต้องการ มันมักจะต้องไปเจอทางตัน ข้างเป้นแน่ อย่างเช่น ต้องจ่ายเงินเพิ่มขึ้น
เพื่อจะต้องซื้อ Hardware มาต่อแล้วเขียนโปรแกรมควบคุม เป็นต้น อะไรที่เราจะทำในเชิงธุรกิจมันต้องเป็นอะไรที่ไม่ควรจะสำเร็จรูปจนมากเกินไป เพราะเราต้องซื้อเขาเพื่อจะนำมาใช้ในงานของเรา
ตัวผมเองอาจจะยอมเสียเวลาออกแบบวงจรดีกว่าจะไปซื้อวงจรมาประกอบแล้วเขียนโปรแกรมควบคุม เพราะมันทำให้เราเข้าใจอะไรมากมากมากมายขึ้นมาแล้ว
นำไปพัฒนาต่อยอดได้รวดเร้วและราคาที่ไม่แพงได้ยิ่งขึ้น มองแรกๆ หลายคนบอกว่า มีขายเยาะแยะจะเสียเวลาซื้อทำไม่ เราซื้อเฉพาะในสิ่งที่คิดว่าจำเป็นเท่านั้น
PLC ตัวหนึ่งที่ชาตินี้ผมไม่ขอเล่น เพราะมันเหมือน ตัวต่อเลโก้ คุณต้องต่อแบบนี้ ต่อตามนี้แล้วออก มันเหมาะกับอะไรที่เป็นโรงงาน และถ้าใครจะขี้ช้างจับตักกะแตนก็ไม่ว่ากัน
ที่จะนำมาเขียนเล่นๆ แต่ถ้านำไปเล่นเพื่อเลี้ยงชีพก็ไม่ว่ากันครับ
ตอนนี้กระแส Pi โหมมาผมมาลองนั่งคิดดูว่า แล้วลองดูฝรั่งเขาเล่นกัน มันเหมือนขี้ช้าง อะไรไม่รุ้ เอ้าไปใช้งานไม่สมกับประสิทธิภาพที่มันควรจะทำได้
มันมีอะไรที่สำเร็จรูปอยู่แล้วเพียงคุณรู้ว่า function อะไรทำอะไรก็ใช้งานได้แล้ว แล้ว board Pi นี้เราทำเองไม่ได้เลย ต้องซื้ออย่างเดียวเพราะมี chip BGA แบบนี้ไงละครับเป็นเทคโนโลยีที่ผูกขาด ประเทศไทยเรา คนไทยเราเข้าใจว่าเป็นไง
สรุปคือจะเป็น MCU หรือ PLC สุดท้ายแล้วมันก็ขึ้นอยู่กับตัวคนใช้งานเองว่าต้องการแบบไหน
งานเป็นตัวกำหนด ถ้าเพื่อการศึกษา ใช้ board Pi หรือ IOIO หรือ Ardino ก็โอเคนะ
แต่ถ้านำไปใช้ทางธุรกิจเราต้องสร้าง พวกนั้นได้ถึงจะนำไปใช้ในทางการค้าได้
: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 ได้โดยตรงครับ
(http://www.igetweb.com/www/108engineering/private_folder/PLCBOARD.jpg)
;) ;)
ขอบคุณ คุณ kritsada ด้วยครับที่นำเสนอมุมมองของความเหมาะสมในการเลือกใช้ และ Board ที่หลาย ๆ บริษัททำออกมาให้เราได้ศึกษาทดลองกันง่ายขึ้น แต่ถ้าจะทำเพื่อการค้า เราเองก็ต้องละลาย Board เพื่อสร้างใหม่เป็นสินค้าของเราเองครับ
;D ;D
ขอบคุณ คุณ nont_peet ด้วยครับ เข้ามาช่วยกัน ดันกระทู้นี้ต่อครับ
;D ;D
แนะนำ Web www.kickstarter.com ครับหลาย ๆ ท่านน่าจะเคยผ่านเข้าไปบ้างแล้วครับ เป็น Web ที่น่าสนใจนะครับ มีนักพัฒนาและสร้างนวตกรรมกัน หลาย ๆ โปรเจค จากทั่วโลก ได้นำเสนอผลงานของตัวเองเพื่อของสนับสนุนในการสร้างสิ่งประดิษฐ์ที่ตัวเองนำเสนอ อยากให้เรามีวัตถุประสงค์หรือค้นหาวัตถุประสงค์ไปควบคู่กับการศึกษาหาความรู้ไปด้วยครับ
"จินตนาการ สำคัญกว่า ความรู้" อัลเบิร์ต ไอสไตน์
กลับมาช่วยกันแสดงความคิดเห็นกันต่อนะครับ
.................................................
http://www.108engineering.com
Engineering Knowledge Sharing.
;) กลับมาดูในเรื่องของ PLC กับ MCU กันต่อนะครับ คราวก่อนผมค้างไว้ตรงที่ ความอัศจรรย์ ของ รีเลย์ (Relay) ครับ มาดู โครงสร้างของ รีเลย์ กันก่อนครับ
(http://www.inventor.in.th/images/electronics/relayCircuit0002.jpg)
;) จากรูปจะเห็นได้ว่า มี 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
PLC ก็คือ MCU ที่เขียนโปรแกรมผ่าน Library รูปแบบ LADDER
และงานที่เปรียบเทียบเป็นวงจรตู้คอนโทรล เอียงไปในทางถนัดของ PLC ที่ออกแบบมาเพื่อสิ่งนี้
จะได้เปรียบการเขียนโค้ด MCU แบบ ตรงๆ ไปหน่อยครับ. ถ้า MCU เขียนผ่าน Library ผมว่าสูสีกัน
คงไม่เทียบเรื่องความคุ้มค่า/ราคา แต่ถ้าความเหมาะสมกับงานโรงงาน
เพื่อให้การทำงานอุปกรณ์วงจรทนสภาวะการใช้งานในโรงงาน และต่อเชื่อมระบบโดยมาตรฐานที่เข้ากันได้
ช่างซ่อมบำรุงดูแลได้ในวิธีแบบเดียวกัน ใช้ PLC ก็เหมาะสมครับ
MCU Flexible กว่า. การเขียนแบบโค้ด. สามารถทำงานเลียนแบบ ที่ PLC ทำงานได้
แต่ PLC ถ้าเขียนแบบ LADDER อย่างเดียวอาจจะทำงานเลียนแบบ MCU ได้เช่นกันแต่มึนหลายบรรทัดแน่
จึงต้องมีส่วนเสริมเขียน C ได้ด้วย แต่อาจจะไม่เหมาะกันเพราะเหมาะสมกันคนละอย่างครับ
เช่นใช้ PLC ออกแบบเป็นผลิตภัณฑ์ไม่เหมาะสมเป็นแน่ เพราะ PLC เป็นผลิตภัณฑ์อยู่แล้ว
แต่ใช้ MCU ในงานคอนโทรลในโรงงาน ออกแบบวงจรต่างๆ ให้ดีเทียบเท่าได้
แต่ช่างที่เขียนเดี้ยงไป งานก็คงหยุดยาวเป็นแน่.
ขอบคุณครับ. เป็นการแนะนำ PLC ที่น่าสนใจมากครับ มีโค้ดการทำงานเปรียบเทียบให้ด้วย
แอบสนใจ PLC BOARD (STM32) ในเวบท่านไม่มีราคาลงไว้ ;D
ติดตามชมครับ ;)
จริงๆ จขกท มีจุดประสงค์อะไรน่าจะทราบกันดีจาก link ท้าย rip จขกท เองนะคับ จิตวิทยาคัับ ผมพอจะเดาออก ;D ;D ;D
:) :)
สวัสดีอีกครั้งครับ และขอบคุณ คุณ 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
มาปูเสื่อ ครับ ความรู้เพียบ
รบกวนครับ อยากทราบวิธี PLC (LADDER) แก้ไขโจทย์การทำงานนี้ดูบ้างครับ
http://www.electoday.com/index.php/topic,10724
เพราะเป็น เงื่อนไขการทำงานของสวิตช์ และเงื่อนไขคาบเวลา เพื่อแสดงค่าออกเอาท์พุต งานด้าน PLC
ขอบคุณครับ. :D
:D :D
กลับมาอีกครั้งครับ เดี๊ยวคุณ prakit340 จะปูเสื่อรอหลับไปก่อน (ช่วงนี้งานเข้า ครับพี่น้องครับ) ขอบคุณสำหรับการติดตามครับ
ทักทายคุณ RoLRoR ด้วยครับกลับมาพร้อมโจทย์เลยครับคราวนี้ ผมลองไปอ่านดูโจทย์ มานะลองตีโจทย์แล้วไม่แน่ใจว่าถูกหรือเปล่าครับ จะลองดูครับ ในส่วนการใช้ MCU มันต้องใช้การจัดการที่เยอะกว่านั้นครับ และอย่างที่เพื่อน ๆ Board บ่นกันครับ โจทย์เพื่ออะไรกันแน่ครับ ผมเคยเจอ น้อง ๆ ถามถึงวิธีการนับ แบบประมาณนี้แหละครับ ถ้าอันนี้มาก่อนกันนี้ ให้นับขึ้น ถ้าอันนี้มาหลังอันนี้ให้นับลง ไรประมาณนี้ก็คิดกันเยอะพอดู แต่ประเด็นแล้ว จะเอาไปทำอะไรครับ สุดท้ายน้องเค้าบอกว่า ไปรับสัญญาณ Encoder A/B Phase --" ผมก็อ๋อ แล้วก็บอกไปว่าเลิกคิดไปเลย มีคำสั่งให้ใช้ จบ คำสั่งเดียว จบครับ... ประเด็นของโจทย์นี้ ไม่รู้จะเหมือนกันหรือเปล่า จริง ๆ จขกท น่าจะบอกหน่อยว่าจะเอาไปทำอะไรนะครับ คนที่เค้าช่วยจะได้ช่วยตีโจทย์ก่อน ที่จะมาหาวิธีกัน และอย่างที่เพื่อน ๆ บอกครับ 5 mS. สงสัยจริง ๆ ว่าจะทดสอบอย่างไร ถึงแม้จะแก้โจทย์ตรงนี้ได้ ด้วยวิธีหนึ่งแต่ นำวิธีนี้ไปใช้แล้ว ก็จะเป็นปัญหาในการจัดการของโปรเจคโดยภาพรวมอีก ตัวนี้ได้ ติดตัวนั้น แก้ตัวนั้นได้ กลับมาติดตัวนี้ เพราะไม่รู้ภาพรวมครับ
ใน PLC เองไม่ยากครับ ผมจะทดลองให้ดูครับ จริง ๆ ว่าจะต่อ ด้วย Timer อยู่พอดีเลยครับ แต่ของแก้โจทย์นี้ดูก่อน แล้วค่อยเรียนรู้ ก็จะเป็นตัวอย่างที่ดี แต่เดี๊ยว เย็น ๆ กับมาอีกทีครับ พี่น้องครับ
;) ;)
.............................................
http://www.108engineering.com
Engineering Knowledge Sharing
ขอตัวอย่าง FB แบบของ S7 300 ให้หน่อยดิคับโดยเขียนบน OB1 รวมทั้งการ define datablock ด้วยอ่ะคับ
ถ้าให้ดีขอเป็น STL ด้วยก็ดีคับ
แล้วลองมาเทียบกับ MCU ว่ามันเหมือนและต่างกันงัยอ่ะครับ
อาจจะแค่ตัวอย่าง pump เปิดปิดสูบน้ำตามระดับน้ำใน tank ก็ได้ครัช
Quote from: 108engineering on November 24, 2013, 01:49:18 PM
: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 ได้โดยตรงครับ
(http://www.igetweb.com/www/108engineering/private_folder/PLCBOARD.jpg)
;) ;)
ขอบคุณ คุณ kritsada ด้วยครับที่นำเสนอมุมมองของความเหมาะสมในการเลือกใช้ และ Board ที่หลาย ๆ บริษัททำออกมาให้เราได้ศึกษาทดลองกันง่ายขึ้น แต่ถ้าจะทำเพื่อการค้า เราเองก็ต้องละลาย Board เพื่อสร้างใหม่เป็นสินค้าของเราเองครับ
;D ;D
ขอบคุณ คุณ nont_peet ด้วยครับ เข้ามาช่วยกัน ดันกระทู้นี้ต่อครับ
;D ;D
แนะนำ Web www.kickstarter.com ครับหลาย ๆ ท่านน่าจะเคยผ่านเข้าไปบ้างแล้วครับ เป็น Web ที่น่าสนใจนะครับ มีนักพัฒนาและสร้างนวตกรรมกัน หลาย ๆ โปรเจค จากทั่วโลก ได้นำเสนอผลงานของตัวเองเพื่อของสนับสนุนในการสร้างสิ่งประดิษฐ์ที่ตัวเองนำเสนอ อยากให้เรามีวัตถุประสงค์หรือค้นหาวัตถุประสงค์ไปควบคู่กับการศึกษาหาความรู้ไปด้วยครับ
"จินตนาการ สำคัญกว่า ความรู้" อัลเบิร์ต ไอสไตน์
กลับมาช่วยกันแสดงความคิดเห็นกันต่อนะครับ
.................................................
http://www.108engineering.com
Engineering Knowledge Sharing.
ขายเท่าไหร่ครับชุดนี้ แล้วทำงานสเถียรมั้ยคับ
อูยย ยยังไม่หลับครับผม
อิอิ เฝ้าอ่านตลอด เพราะรู้จัก กับโรงงานผลิต เมทัลชีทหลายเจ้า ซึ่งใช้ PLC ทั้งหมด
เป็นเพื่อนพ่อผมเอง
เลยจะศึกษาไว้ เผื่ออนาคต ผมจะเข้าไปเขียน PLC ให้เค้า
;D ;D
งานเข้ายาวเลยครับ >:(
:) :) มาแชร์กันต่อครับ คุณ prakit340 ยังไม่หลับนะครับ ขอบคุณที่ติดตามครับ ศึกษา เรียนรู้ไว้ครับ ไม่ว่าจะเป็นอะไร การศึกษาเป็นไรที่ดี และไม่มีวันสิ้นสุดครับ
;) สวัสดีคุณ boe ด้วยครับกับมาอีกครั้ง ราคานี้ผมยังไม่ได้วางจำหน่ายเลยครับ แต่ผมทดลองแล้วใช้ได้ครับ ตอนนี้เทส หนักเลยคืบหน้าอย่างไร ผมแจ้งให้ทราบอีกทีครับ ผมคิดว่าน่าจะ 3,900 พร้อมสาย Link usb232 และ คู่มือการใช้งาน PLC + HMI เบื้องต้น ขอดูว่าเพื่อน ๆ คนไหนสนใจ และมีความต้องการ ขนาดไหนนะครับ ตอนนี้ยังไม่ได้วางจำหน่ายครับ ยังไม่มีเงินทุน :-[ หรือจะลอง Pre Order กันดูมั๊ยครับ ;)แต่เรื่องค้าขาย เอาไว้อีกส่วนดีกว่าครับ เจ้าของกระทู้เค้าจัดระเบียบกระทู้ไว้ดีแล้วครับมีส่วนค้าขายให้ เดี๊ยวผมไปเปิดกระทู้ใหม่อีกทีนะครับ ใน VDO ด้านล่างผม Review ให้พร้อมโจทย์ที่เพื่อนสมาชิก ถามหามาด้วยครับลองไปดูกันครับ ส่วน FB มันก็เขียนด้วย Text Base ครับ ผมอยากนำเสนอ ด้วย Ladder กันก่อน เพราะผมเข้าใจว่า Text Base ใน PLC หรือ FB (Function Block) นั้น คงเป็นเรื่อง ธรรมดาไปแล้วในบอร์ดนี้นะครับ ขอบคุณที่แนะนำวิธีการนำเสนอครับ เดี๊ยวสักระยะ ถ้าเพื่อน ๆ ยังสนใจกันอยู่จะจัดให้นะครับ
8) ส่วนคุณ RoLRoR แนะนำการเสนออีกหนึ่่งรูปแบบ ของโจทย์ ที่เพื่อนสมาชิก Post ไว้อีกกระทู้นึงนะครับ ก็ลองดูครับ แต่การเขียนบนกระทู้มันเยอะครับ ผมขอนำเสนอเพื่อนสมาชิก เป็น VDO เลยแล้วกันครับ พร้อมนำเสนอ การศึกษา PLC เบื้องต้นกันด้วยจากที่เราได้เรียนรู้ ถึง PLC กันมาบ้างแล้วนะครับ ลองไปดูครับ ว่าจะยากง่ายกันอย่างไรบ้าง ในไฟล์นี้ ผมได้ใช้ PLC Board นะครับ และใช้ HMI หรือ Touch Screen นะครับ ลองไปดูว่า ถ้าเราใช้งาน PLC แล้วยากง่ายกันอย่างไรบ้างครับ
สำคัญมาก**** ผมตั้งใจทำขึ้นมาให้ท่านที่ศึกษา การเขียนโปรแกรมได้รู้ถึงมุมมองในการเขียนโปรแกรมแบบ Ladder นะครับ ไม่ได้มีประสงค์ที่จะบอกว่า อะไรยากกว่า อะไรง่ายกว่า อะไรน่าใช้งาน อะไรไม่น่าใช้งาน ประเด็น หลังนี้ขอให้เพื่อน ๆ ช่วยกันแสดงความคิดเห็นได้นะครับ เพราะต่างคนต่างมุมมองนะครับ ช่วยกันครับ ผมยังมีโปรเจคอีกหลายตัวทีเขียนด้วย PLC แล้วอยากลด Cost เหรือ เปลี่ยนเป็นเครื่องแบบสำเร็จรูป ด้วย MCU ไว้ว่ากันครับ ไปชม VDO กันได้แล้วครับ (เสียงอาจขัดหูบ้าง หรือสาธิตไปผิดบ้าง ต้องขออภัยด้วยครับ ;D)
http://www.youtube.com/v/DU9iwUnt6Ik&feature=youtu.be
ขอบคุณทุกท่านที่ติดตาม และเป็นกำลังใจให้ครับ
:D :D :D :D :D
..............................................
http://www.108engineering.com
Engineering Knowledge Sharing
เยี่ยมครับ + 1 like ทั้งการตีโจทย์ และความรวดเร็วในการออกแบบการทำงาน
ช่วยให้เห็นการใช้ PLC ใช้ทำงาน ได้มากขึ้น. และยังต่อจอควบคุมได้อีกอย่างสะดวก
ขอบคุณมากครับ. ;)
เยี่ยมเลยครับ
จะเข้ามาอ่านเลื่อยๆนะครับ
ติดตามอยู่
สวยงามครับ :)
Quote from: 108engineering on November 29, 2013, 08:35:20 PM
สวัสดีคุณ boe ด้วยครับกับมาอีกครั้ง ราคานี้ผมยังไม่ได้วางจำหน่ายเลยครับ แต่ผมทดลองแล้วใช้ได้ครับ ตอนนี้เทส หนักเลยคืบหน้าอย่างไร ผมแจ้งให้ทราบอีกทีครับ ผมคิดว่าน่าจะ 3,900 พร้อมสาย Link usb232 และ คู่มือการใช้งาน PLC + HMI เบื้องต้น ขอดูว่าเพื่อน ๆ คนไหนสนใจ และมีความต้องการ ขนาดไหนนะครับ ตอนนี้ยังไม่ได้วางจำหน่ายครับ ยังไม่มีเงินทุน :-[ หรือจะลอง Pre Order กันดูมั๊ยครับ ;)แต่เรื่องค้าขาย เอาไว้อีกส่วนดีกว่าครับ เจ้าของกระทู้เค้าจัดระเบียบกระทู้ไว้ดีแล้วครับมีส่วนค้าขายให้ เดี๊ยวผมไปเปิดกระทู้ใหม่อีกทีนะครับ ใน VDO ด้านล่างผม Review ให้พร้อมโจทย์ที่เพื่อนสมาชิก ถามหามาด้วยครับลองไปดูกันครับ ส่วน FB มันก็เขียนด้วย Text Base ครับ ผมอยากนำเสนอ ด้วย Ladder กันก่อน เพราะผมเข้าใจว่า Text Base ใน PLC หรือ FB (Function Block) นั้น คงเป็นเรื่อง ธรรมดาไปแล้วในบอร์ดนี้นะครับ ขอบคุณที่แนะนำวิธีการนำเสนอครับ เดี๊ยวสักระยะ ถ้าเพื่อน ๆ ยังสนใจกันอยู่จะจัดให้นะครับ
ที่ผมเขียนน่ะ หมายถึง PLC ของ siemens S7-300 น่ะครับ (ท่านเจ้าของกระทู้อาจจะยังไม่เข้าใจ)
ซึ่งมีวิธีเขียนแตกต่างจาก Mitsubishi มากๆ เพราะการเขียนส่วนใหญ่อิง FB หรือ Function Block ที่เราสร้างขึ้นมาเอง
ซึ่งสอดคล้องกับ DBหรือ Data Block ที่เราสร้างขึ้นมาครับ
Data Block ก็คือชุดตัวแปรต่างๆ ที่เราใช้งานร่วม กับ Function block นั้นๆ
ส่วนโปรแกรมทั่วไปที่เราสร้างทั้งหมด จะต้อง run อยู่บน OB1 เท่านั้น(เปรียบเหมือน main() บนภาษา C)
ว่าไปก็เป็นโครงสร้างคล้ายกับ C ที่เราๆเขียนนั่นแหละครับ
อาจจะทำให้เจ้าของกระทู้กระจ่างขึ้น
ส่วน บอร์ดราคา 3900 บาทผมมองว่าอาจจะแพงไปเพราะราคาเทียบ PLC (มือสอง) 2-3000 บาทก็น่าจะซื้อได้แล้ว สาย Link board ก็น่าจะเป็นแค่ DB9 ธรรมดาเองครับ
ความรู้เยอะเลย ขอบคุณค่ะ 8)
:o :o งานเข้ายาวเลยครับ ต้องขอโทษเพื่อสมาชิกที่ติด ตามและขอบคุณที่ตามให้กำลังใจดี ๆ เข้ามาด้วยครับ :)
หลังจากที่เราเห็นตัวอย่าง การใช้งาน State Machine กันมาแล้ว ซึ่งเป็นวิธีการจัดการโปรแกรมที่ ง่าย และสามารถใช้งานได้จริง แบบไม่ซับซ้อนมากนะครับ ในตัวอย่างก่อนหน้าที่ผมทิ้งท้ายไว้ เรื่องของ Timer / Counter ใน MCU นั้น จะใช้การนับจาก Clock Pulse ที่ได้จาก X'tal อาจมีจัดการ คูณ ความถี่ หาร ความถี่ที่เข้ามา เพื่อให้ได้ฐานเวลาที่ต้องการ หรือ PLL และ Counter ก็จะมีการ Set เพื่อสลับ Clock Pulse จาก X'tal มาเป็น Clock Pulse หรือ สัญญาณ จากภายนอก ให้สามารถนับได้ ดังนั้น Timer และ Counter จึงจำเป็นต้องเลือกใช้จะซ้ำกันไม่ได้ครับ
ในวงจรไฟฟ้า เราได้เรียนรู้ Relay กันแล้วนะครับ การทำงานคือ ถ้าเราจ่ายไฟ ให้กับ Coil จะส่งผลให้ หน้าสัมผัส ทำการเปลี่ยนสถานะ On/ Off ตามการต่อ NO หรือ NC ทันทีที่เราจ่าย ไฟให้ Coil แต่ถ้า เป็น Timer เมื่อเราจ่ายไฟให้กับ Coil หน้าสัมผัสของ Timer ทำการเปลี่ยนสถานะก็ต่อเมื่อ จ่ายไฟให้ Coil นานเท่ากับเวลาที่ตั้งไว้ ครับ หน้าสัมผัสถึงจะเปลี่ยนสถานะ โดยสามารถตั้งเวลาได้ ส่วนใหญ่ จะมีหน่วย หรือ Unit ให้ครับ เช่น 1 Sec คือ ค่า เราตั้ง 10 ก็จะมีค่า Timer เป็น 10 Sec หรือ ถ้า Unit เป็น 100 mS. เราตั้งเป็น 10 ก็จะมีค่าเป็น 1 Sec ดังนี้ เราสามารถนำคุณสมบัติของ Timer มาใช้งาน ใน PLC ได้โดยง่าย และสามารถใช้ได้ หลายตัวครับ
(https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSQ0pKAqIEsvGfs2wDreMsukBNSy2Lz6vlzSBTHe_-m0EIpMZ61)
เพื่อความเข้าใจผมจะยกตัวอย่าง โจทย์ ง่าย ๆ ครับ ถ้าเรากด ปุ่ม X0 นานกว่า 3 Sec ให้ Lamp1 On และถ้าปล่อย ก็ให้ Lamp1 Off ครับ
MCU (ใช้ State Machine )
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
State = 1; // Change State to 1
}
break;
case 1: if (X0 == 0) // PB Press
{
varDelayX0 = varDelayX0 + 1;
if (verDelayX0 == 300) // 10mS x 1000 = 10000mS. 3 Sec.
{
LAMP1 = 1; // LAMP ON <-- Latch Output
State = 2; // Change State to 2
varDelayX0 = 0; // Reset Set Counter Time
}
}
else //PB Release
{
LAMP1 =0; // LAMP OFF
State = 0; // Change State to 0
varDelayX0 = 0; //Reset Counter Time
}
break;
case 2: if (X0 == 1) // PB Release
{
LAMP1 =0; // LAMP OFF
State = 0; // Change State to 0
varDelayX0 = 0; //Reset Counter Time
}
break;
}
}
PLC
| X0
|------| |-----------------------------(T0 K30)------| Timer Unit 100 mS.
| T0 |
|------| |---------------------------------(Y0)-------| LAMP1
ช่วงนี้ งานเข้า เยอะครับ จะพยายามเข้ามา Update กันนะครับ
ขอบคุณทุกท่านที่ติดตาม และเป็นกำลังใจให้ครับ
:D :D :D :D :D
..............................................
http://www.108engineering.com
Engineering Knowledge Sharing
Quote from: 108engineering on April 09, 2014, 12:44:56 AM
:o :o งานเข้ายาวเลยครับ ต้องขอโทษเพื่อสมาชิกที่ติด ตามและขอบคุณที่ตามให้กำลังใจดี ๆ เข้ามาด้วยครับ :)
หลังจากที่เราเห็นตัวอย่าง การใช้งาน State Machine กันมาแล้ว ...
ดีครับ มีอะไรก็เขียนๆให้ข้อมูลไว้ ผิดสิ่งใดก็แก้ไข เห็นที่นี่ มีคนเก่งๆเยอะ คอยทำให้ข้อมูลมันถูกต้องถูกเวลาเอง
ถือเป็นการพัฒนาฝีมือการให้ข้อมูล
แต่ขอฝากไว้หน่อยช่วยปรับการวาง Code ตัวอย่างซักนิด จะได้ดูง่ายขึ้น ไม่ต้องเล็งมาก
ลองใช้ Insert Code และ indent เข้าช่วยสักหน่อย ก็พอจะอ่านได้ง่ายขึ้นมากกว่าเดิม
ลองดูตัวอย่างนะ
// MCU (ใช้ State Machine )
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
State = 1; // Change State to 1
}
break;
case 1:
if (X0 == 0) // PB Press
{
varDelayX0 = varDelayX0 + 1;
if (verDelayX0 == 300) // 10mS x 1000 = 10000mS. 3 Sec.
{
LAMP1 = 1; // LAMP ON <-- Latch Output
State = 2; // Change State to 2
varDelayX0 = 0; // Reset Set Counter Time
}
} else //PB Release
{
LAMP1 = 0; // LAMP OFF
State = 0; // Change State to 0
varDelayX0 = 0; //Reset Counter Time
}
break;
case 2:
if (X0 == 1) // PB Release
{
LAMP1 = 0; // LAMP OFF
State = 0; // Change State to 0
varDelayX0 = 0; //Reset Counter Time
}
break;
}
}
แม้ความสวยงามไม่ใช่สาระสำคัญมากนัก แต่ก็ทำให้น่ามองมากขึ้นครับ...
;D ;D ครับ ขอบคุณ คุณ unseen ที่แนะนำ ครับต้องขอโทษด้วยครับ ผมไม่เคยใช้ เดี๋ยว จะลองดูนะครับ :D
ขอบคุณทุกท่านที่ติดตาม และเป็นกำลังใจให้ครับ
..............................................
http://www.108engineering.com
Engineering Knowledge Sharing
ได้ความรู้ดีครับ กระทู้นี้ :)
;D ;D สวัสดีทุกท่านที่ติดตามเรามาครับ ขอบคุณทุกคำแนะนำ และติชมด้วยครับ
Counter สำหรับวงจรไฟฟ้า ก็จะสืบทอดคุณสมบัติของ Relay มาเหมือนกันครับ แต่จะ เปลี่ยนสถานะของ Contact ก็ต่อเมื่อมีการ On Coil และมีการ On ขาสัญญาณ เข้ามาครบตามจำนวนที่ตั้งไว้ครับ หน้าสัมผัสของ Counter ถึงจะทำงาน และจะหยุดทำงาน เมื่อมีการกด Reset ให้กับขา Counter
(http://sigma.octopart.com/505594/image/Omron-H7CX-AW.jpg)
มาถึง Counter กันบ้างครั้ง Counter ก็คือ ฟังก์ชันในการนับครับ โดยทั่วไปมีหลาย เงื่อนไขด้วยกันครับ
แบ่งตามการนับ
นับขึ้น นับลง
แบ่งตามเงื่อนไขสัญญาณ
ขอบขาขึ้น ขอบขาลง (X2 X4 นับทั้งขอบขาขึ้น ขอบขาลง)
แบ่งตามความถี่
สัญญาณความถี่ต่ำ หรือ พัลล์ที่เข้ามาต่อเวลา มีจำนวนน้อย
สัญญาณความถี่สูง หรือ พัลล์ที่เข้ามาต่อเวลา มีจำนวนมาก
แบ่งตามรูปแบบสัญญาณ
สัญญาณ พัลล์ และ ทิศทาง เช่น ถ้า bit1 On สัญญาณที่เข้ามานับขึ้น หรือ bit1 Off สัญญาณที่เข้ามานับลง
AB Phase เป็นการรับค่า พัลล์จาก Encoder เพื่อให้รับรู้ว่า ตอนนี้ Encoder หนุนไป ด้าน CW หรือ CCW
การประยุคก์
ใช้ Timer ร่วมกับ Counter เพื่อ นับสัญญาณที่อยู่ภายในเวลา ในงานวัดความเร็วรอบ เป็นต้น
จะเห็นได้ว่า การใช้งาน Counter นั้นมีหลากหลายมากครับ ซึ่งใน MCU และ ใน PLC ก็ทำได้ เหมือน ๆ กัน แต่ใน PLC นั้นจะทำดีเพราะออกแบบ แยกฟังก์ชันสำหรับ Counter นี้มาโดยเฉพาะ ให้เราเลือกใช้งานกันได้ง่าย ๆ ครับรวมถึงการระบุ สเปคของการวัดสัญญาณให้ด้วยในส่วนของคำสั่ง รูปแบบ และความสามารถในการรับความถี่ ให้เราได้เลือกใช้งานกันครับ
ส่วน MCU นั้น เราจะต้องมาเขียนเองครับ ผมจะลองยกตัวอย่าง ง่าย ๆ อีกตัวนะครับ
สมมุติ เรามี PB1 ให้เป็น X0 และ Lamp ให้เป็น Y0
โจทย์คือ ต้องการ กดปุ่ม 3 ครั้ง แล้วให้ Lamp หรือ Y0 On และให้ X1 เป็น ปุ่ม RESET ครับเมื่อกดให้ Y0 ดับ และ Reset Counter
ในการเขียน MCU เราก็จะใช้ ลักษณะของ BackGround ForeGround เหมือนเดิมครับ
Quote
// MCU (ใช้ State Machine )
int varDelayX0;
int varDelayX1;
int varCntX0;
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 Time
State = 1; // Change State to 1
}
if (X1 == 0) // PB Reset Press
{
varDelayX1 = 0; // Initial Time
State = 10;
}
break;
case 1:
if (X0 == 0) // PB Press
{
varDelayX0 = varDelayX0 + 1;
if (verDelayX0 >= 30) // 10mS x 30 = 300mS. Debounce
{
varCntX0 = varCntX0 +1; // Counter UP
if (varCntX0 == 3)
{
Y0 = 1; // LAMP ON
State = 2;
}
else
{
State = 2;
}
}
}
else //PB Release Bounce
{
State = 0; // Change State to 0
}
break;
case 2:
if (X0 == 1) // PB Release
{
State = 0; // Change State to 0
varDelayX0 = 0; //Reset Counter Time
}
break;
case 10:
if (X1 == 0) // PB Press
{
varDelayX1 = varDelayX1 + 1;
if (verDelayX1 >= 30) // 10mS x 30 = 300mS. Debounce
{
Y0 = 0; // LAMP OFF
varCntX0 = 0; // Clear Counter
State =0;
}
}
else //PB Release Bounce
{
State = 0; // Change State to 0
}
break;
}
}
ยาวพอสมควร ในที่นี้ State แรก เราเชคว่า ปุ่ม X0 หรือ X1 โดนกด เพราะ ผมเขียน if ไม่มี else ดังนั้น State 10 Reset จะสำคัญกว่า
ส่วนการเขียน ใน MCU เราต้องทำการ Debounce เองนะครับ ไม่งั้น กด 1 ครั้ง นับได้หลายพันครับ เร็วมาก ครับในส่วนนี้ PLC มีการกรองความถี่ ของสัญญาณ Input ไว้ให้แล้วครับดังนี้นเราจะเขียนได้ง่ายโดยไม่ต้องกังวลเรื่องของ Bounce ครับ
ส่วนใน PLC
| X0
|------|||------------------(C0 K3)----| // ขอบขาขึ้น X0 นับ 1 ครั้ง
| C0 |
|------| |---------------------(Y0)-----| // ครบ 3 ครั้ง Contact C0 On
| X1 |
|------| |--------------------(RST C0)-| // กด X1 Reset Counter Contact จะ Reset ด้วย
8) 8) 8) 8) 8) 8) 8) 8)
เป็นไงกันบ้างครับ ถึงตอนนี้แล้ว
ลองดูการบ้านกันดีมั๊ยครับ ผมจะตั้งโจทย์ทิ้งไว้ให้นะครับ
(https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcS2VZVdrW0T5EhEoTjdiGzRbGAzbWT7hlPd0uhHWUJxEeXrdYm2) (https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTLt7bipENuE3ECmDO6UqCt_5zUz6RpXdGPBY2vk7ExyVF2a0Ei)
สัญญาณไฟ คนข้ามถนน ครับ
มีปุ่ม สำหรับกด ข้ามถนน สองฝั่งครับ ให้เป็น X0 และ X1
มีไฟ แสดงผล เพื่อให้คนข้ามทราบครับ ไฟแดง ห้ามข้าม Y0 ไฟเขียว ข้ามถนนได้ Y1
มีไฟ สำหรับแจ้งสัญญาณให้กับรถ ครับ ไฟแดง ไฟเหลือง ไฟเขียว ให้เป็น Y10 Y11 Y12 ตามลำดับครับ (ไฟ ทำงานพร้อมกัน ทั้งซ้าย ขวา)
การทำงาน
ในสถาวะปรกติ ให้ไฟแจ้งสัญญาณรถ เป็นเขียว และแจ้งคนข้าม เป็นแดง คือให้รถผ่านได้คนห้ามข้าม
เมื่อมีการกดสัญญาณจากคน (ปุ่มเป็น กดติดปล่อยดับครับ) หนี่งครั้ง โปรแกรมจะเริ่มนับเวลา จนถึง 30 วินาที ให้แสดงไฟสัญญาณรถ เปลี่ยนจาก เขียว เป็นเหลือง และอีก 15 วินาที หลังจากนั้น เปลี่ยนจาก เหลือง เป็นแดง แล้วนับเวลาหลังจากแดงแล้ว 10 วินาที ไฟแจ้งสัญญาณ คนข้ามเปลี่ยนจาก แดง เป็นเขียว นับเวลาไปอีก 40 วินาที ให้ไฟ ที่แจ้งสัญญาณคนข้าม เปลี่ยนเป็น เขียวกระพริบ ทุก ๆ 1 วินาที 10 ครั้ง แล้ว จึงเปลี่ยนสัญณาณ ไฟคนข้ามเป็นสีแดง และไฟแจ้งสัญญาณรถ เป็นสีเขียว
ขอบคุณทุกท่านที่ติดตาม และเป็นกำลังใจให้ครับ
..............................................
http://www.108engineering.com
Engineering Knowledge Sharing
ชอบๆครับ ตอนนี้กำลังศึกษา PLC อยู่ครับ กำลังรออ่านต่อครับ ขอบคุณครับ
กำลังมันเลยทีเดียว รออ่านอยู่ระครับ
Quote from: 108engineering on April 10, 2014, 10:15:09 PM
;D ;D สวัสดีทุกท่านที่ติดตามเรามาครับ ขอบคุณทุกคำแนะนำ และติชมด้วยครับ
Counter สำหรับวงจรไฟฟ้า ก็จะสืบทอดคุณสมบัติของ Relay มาเหมือนกันครับ แต่จะ เปลี่ยนสถานะของ Contact ก็ต่อเมื่อมีการ On Coil และมีการ On ขาสัญญาณ เข้ามาครบตามจำนวนที่ตั้งไว้ครับ หน้าสัมผัสของ Counter ถึงจะทำงาน และจะหยุดทำงาน เมื่อมีการกด Reset ให้กับขา Counter
(http://sigma.octopart.com/505594/image/Omron-H7CX-AW.jpg)
มาถึง Counter กันบ้างครั้ง Counter ก็คือ ฟังก์ชันในการนับครับ โดยทั่วไปมีหลาย เงื่อนไขด้วยกันครับ
แบ่งตามการนับ
นับขึ้น นับลง
แบ่งตามเงื่อนไขสัญญาณ
ขอบขาขึ้น ขอบขาลง (X2 X4 นับทั้งขอบขาขึ้น ขอบขาลง)
แบ่งตามความถี่
สัญญาณความถี่ต่ำ หรือ พัลล์ที่เข้ามาต่อเวลา มีจำนวนน้อย
สัญญาณความถี่สูง หรือ พัลล์ที่เข้ามาต่อเวลา มีจำนวนมาก
แบ่งตามรูปแบบสัญญาณ
สัญญาณ พัลล์ และ ทิศทาง เช่น ถ้า bit1 On สัญญาณที่เข้ามานับขึ้น หรือ bit1 Off สัญญาณที่เข้ามานับลง
AB Phase เป็นการรับค่า พัลล์จาก Encoder เพื่อให้รับรู้ว่า ตอนนี้ Encoder หนุนไป ด้าน CW หรือ CCW
การประยุคก์
ใช้ Timer ร่วมกับ Counter เพื่อ นับสัญญาณที่อยู่ภายในเวลา ในงานวัดความเร็วรอบ เป็นต้น
จะเห็นได้ว่า การใช้งาน Counter นั้นมีหลากหลายมากครับ ซึ่งใน MCU และ ใน PLC ก็ทำได้ เหมือน ๆ กัน แต่ใน PLC นั้นจะทำดีเพราะออกแบบ แยกฟังก์ชันสำหรับ Counter นี้มาโดยเฉพาะ ให้เราเลือกใช้งานกันได้ง่าย ๆ ครับรวมถึงการระบุ สเปคของการวัดสัญญาณให้ด้วยในส่วนของคำสั่ง รูปแบบ และความสามารถในการรับความถี่ ให้เราได้เลือกใช้งานกันครับ
ส่วน MCU นั้น เราจะต้องมาเขียนเองครับ ผมจะลองยกตัวอย่าง ง่าย ๆ อีกตัวนะครับ
สมมุติ เรามี PB1 ให้เป็น X0 และ Lamp ให้เป็น Y0
โจทย์คือ ต้องการ กดปุ่ม 3 ครั้ง แล้วให้ Lamp หรือ Y0 On และให้ X1 เป็น ปุ่ม RESET ครับเมื่อกดให้ Y0 ดับ และ Reset Counter
ในการเขียน MCU เราก็จะใช้ ลักษณะของ BackGround ForeGround เหมือนเดิมครับ
Quote
// MCU (ใช้ State Machine )
int varDelayX0;
int varDelayX1;
int varCntX0;
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 Time
State = 1; // Change State to 1
}
if (X1 == 0) // PB Reset Press
{
varDelayX1 = 0; // Initial Time
State = 10;
}
break;
case 1:
if (X0 == 0) // PB Press
{
varDelayX0 = varDelayX0 + 1;
if (verDelayX0 >= 30) // 10mS x 30 = 300mS. Debounce
{
varCntX0 = varCntX0 +1; // Counter UP
if (varCntX0 == 3)
{
Y0 = 1; // LAMP ON
State = 2;
}
else
{
State = 2;
}
}
}
else //PB Release Bounce
{
State = 0; // Change State to 0
}
break;
case 2:
if (X0 == 1) // PB Release
{
State = 0; // Change State to 0
varDelayX0 = 0; //Reset Counter Time
}
break;
case 10:
if (X1 == 0) // PB Press
{
varDelayX1 = varDelayX1 + 1;
if (verDelayX1 >= 30) // 10mS x 30 = 300mS. Debounce
{
Y0 = 0; // LAMP OFF
varCntX0 = 0; // Clear Counter
State =0;
}
}
else //PB Release Bounce
{
State = 0; // Change State to 0
}
break;
}
}
ยาวพอสมควร ในที่นี้ State แรก เราเชคว่า ปุ่ม X0 หรือ X1 โดนกด เพราะ ผมเขียน if ไม่มี else ดังนั้น State 10 Reset จะสำคัญกว่า
ส่วนการเขียน ใน MCU เราต้องทำการ Debounce เองนะครับ ไม่งั้น กด 1 ครั้ง นับได้หลายพันครับ เร็วมาก ครับในส่วนนี้ PLC มีการกรองความถี่ ของสัญญาณ Input ไว้ให้แล้วครับดังนี้นเราจะเขียนได้ง่ายโดยไม่ต้องกังวลเรื่องของ Bounce ครับ
ส่วนใน PLC
| X0
|------|||------------------(C0 K3)----| // ขอบขาขึ้น X0 นับ 1 ครั้ง
| C0 |
|------| |---------------------(Y0)-----| // ครบ 3 ครั้ง Contact C0 On
| X1 |
|------| |--------------------(RST C0)-| // กด X1 Reset Counter Contact จะ Reset ด้วย
8) 8) 8) 8) 8) 8) 8) 8)
เป็นไงกันบ้างครับ ถึงตอนนี้แล้ว ลองดูการบ้านกันดีมั๊ยครับ ผมจะตั้งโจทย์ทิ้งไว้ให้นะครับ
(https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcS2VZVdrW0T5EhEoTjdiGzRbGAzbWT7hlPd0uhHWUJxEeXrdYm2) (https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTLt7bipENuE3ECmDO6UqCt_5zUz6RpXdGPBY2vk7ExyVF2a0Ei)
สัญญาณไฟ คนข้ามถนน ครับ
มีปุ่ม สำหรับกด ข้ามถนน สองฝั่งครับ ให้เป็น X0 และ X1
มีไฟ แสดงผล เพื่อให้คนข้ามทราบครับ ไฟแดง ห้ามข้าม Y0 ไฟเขียว ข้ามถนนได้ Y1
มีไฟ สำหรับแจ้งสัญญาณให้กับรถ ครับ ไฟแดง ไฟเหลือง ไฟเขียว ให้เป็น Y10 Y11 Y12 ตามลำดับครับ (ไฟ ทำงานพร้อมกัน ทั้งซ้าย ขวา)
การทำงาน
ในสถาวะปรกติ ให้ไฟแจ้งสัญญาณรถ เป็นเขียว และแจ้งคนข้าม เป็นแดง คือให้รถผ่านได้คนห้ามข้าม
เมื่อมีการกดสัญญาณจากคน (ปุ่มเป็น กดติดปล่อยดับครับ) หนี่งครั้ง โปรแกรมจะเริ่มนับเวลา จนถึง 30 วินาที ให้แสดงไฟสัญญาณรถ เปลี่ยนจาก เขียว เป็นเหลือง และอีก 15 วินาที หลังจากนั้น เปลี่ยนจาก เหลือง เป็นแดง แล้วนับเวลาหลังจากแดงแล้ว 10 วินาที ไฟแจ้งสัญญาณ คนข้ามเปลี่ยนจาก แดง เป็นเขียว นับเวลาไปอีก 40 วินาที ให้ไฟ ที่แจ้งสัญญาณคนข้าม เปลี่ยนเป็น เขียวกระพริบ ทุก ๆ 1 วินาที 10 ครั้ง แล้ว จึงเปลี่ยนสัญณาณ ไฟคนข้ามเป็นสีแดง และไฟแจ้งสัญญาณรถ เป็นสีเขียว
ขอบคุณทุกท่านที่ติดตาม และเป็นกำลังใจให้ครับ
..............................................
http://www.108engineering.com
Engineering Knowledge Sharing
ภาษาซีที่เขียนมันทำงานได้จริงหรือคับ ไม่ต้องแก้ดีเบาว์เลยหรอคับ
counter ตอนผมเขียนภาษา c จริงๆ ผมว่ามันยุ่งกว่านี้น่ะ
ไม่ว่าเรื่องการ scan 7 segment scan switch ที่กดตั้งค่า การอ่าน input counter ให้ทัน (interupt) การเปรียบเทียบค่า การจำค่าทีตั้งตอนไฟดับ etc.
หรือเขียนเป็นแค่แนวทางคับ
ส่วน PLC มันออกแบบมางานนี้โดยเฉพาะอยู่แล้ว
PLC กับ MCU มันเลยเป็นคนล่ะทางแล้วล่ะคับผมว่า
แต่ล่ะอันมันก็มีความโดดเด่นของมันเองการวางแผนการเขียนโปรแกรมก็ต่างกันสิ้นเชิงแล้วคับ ต้องเลือกใช้ให้ถูกงานมากกว่าคับ จึงจะใช้ประสิทธิภาพมันเต็มที่
;D ;D ;D สวัสดีทุก ๆ ท่าน ครับ ขอบคุณสำหรับการติดตาม แลกเปลี่ยนความคิดเห็นครับ และให้กำลังใจกันมาจากทุก ๆ ท่านนะครับ
วันนี้ เรามาดู การเขียนโปรแกรม PLC และการ Simulate Program PLC Mitsubishi สำหรับควบคุม ไฟจราจร กันครับ
วันนี้ มาส่งการบ้านนะครับ :D ต้องขอโทษด้วยนะครับ เสียงใน VDO. ออกมา เหมือนอยู่ท่ามกลาง สายฝน กันเลยที่เดียวครับ :-[
ขอบคุณ suriya22 สำหรับการติดตามครับ คุณ x-glove ดูจะเมามันเอามากนะครับ และ คุณ boe ที่ร่วมแสดงความคิดเห็นครับ ส่วน โค้ด ผมไม่ค่อยได้เขียนนานแล้วครับ พอเป็นแนวทาง และใน Code C ผม มี Debounce นะครับ ถ้าท่านใดได้ลอง โค้ด แจ้งผล กลับมาด้วยครับ ผิดพลาดยังไงต้องขออภัย ณ. ที่นี้ ด้วยครับ
http://www.youtube.com/v/nZ-Lg-CD52Y&feature=youtu.be
ขอบคุณทุกท่านที่ติดตาม และขอเป็นกำลังใจให้ทุกท่าน และ ทุก ๆ การเรียนรู้ครับ
;) ;)
..............................................
http://www.108engineering.com
Engineering Knowledge Sharing
ว่าแต่นี่ใช่การโปรโมทเว็ปรึเปล่าครับ แค่สงสัยอ่ะคับ
ยอดขาย cd เดือนนึงไม่ใช่น้อยเลยน่ะคับ
สวัสดี เพื่อน ๆ ที่ติดตามอ่าน โพสของ 108engineering อีกครั้งครับ ;) ;) ขอบคุณ คุณ boe ด้วยนะครับที่ติดตามผมในทุก ๆ Post ขอบคุณกำลังใจดี ๆ ใน Inbox และ หน้า webboard นี้ด้วยนะครับ
หลังจากที่ได้เรียนรู้ แนวทางการเขียนโปรแกรม และการใช้งาน PLC ไประดับหนึ่งแล้วนะครับวันนี้ ผมจะกล่าวถึงโครงสร้าง
ของ PLC และ MCU พอให้เพื่อน ๆ ได้เห็นภาพรวม เพื่อที่จะเป็นแนวทางในการศึกษาใช้งาน และ นำเอาการจัดการโครงสร้างของทั้ง PLC
และ MCU มาเป็นข้อมูลจะได้ใช้งานได้ง่ายขึ้นนะครับ ;D
ในแง่ของ Hardware MCU นั้น นอกจากตัว Chip แล้วเราจะนึกถึง บอร์ดทดลอง หรือ Development Board เป็น บอร์ตที่ออกแบบมา
สำหรับทดลอง MCU ตัวนั้น ๆ โดยเฉพาะ ทำให้เรา ไม่ต้องเสียเวลา ต่อวงจรเพิ่มเติมก็ทำให้เราสามารถที่จะใช้ MCU นั้นได้ทันที ซึ่งในบ้านเรา
หลาย ๆ ค่ายก็ทำออกมาบ้าง นำเข้ามาบ้าง เพราะ Chip MCU นั้นจำเป็นจะต้องมีวงจรภายนอกประกอบ ยกตัวอย่าง เช่น X'Tal สำหรับสร้างจังหวะ
ในการประมวลผล R Pull Up หรือวงจร IC ต่าง ๆ ที่จะเข้ามาต่อพวง เพื่อเติมเต็มความสามารถของ MCU เช่น RS232 USB LAN ต่าง ๆ
ดังนั้น การเริ่มต้น ศึกษา MCU ส่วนใหญ่เราก็จะเริ่มต้นกันที่ เลือกตัว MCU ที่เราสนใจ แล้ว ก็หาเลือก Development Board ที่ มีฟังก์ชันในการทดลอง
ครบ หรือตรงกับความต้องการของโปรเจคเรา หาข้อมูลในการศึกษาได้ง่าย ก็จัดซื้อจัดหา มาเพื่อทดลองเขียนโปรแกรม
Development Board นั้น ออกแบบมาเพื่อวัตถุประสงค์สำหรับการเรียนรู้ และ ต้นทุนต่ำ สามารถศึกษาเรียนรู้ได้โดยทั่วไป ดังนั้น การ
ออกแบบจึงไม่ได้ คำนึงถึง เกรด ของอุปกรณ์ที่จะใช้ หรือ วงจร ที่เลือกใช้ในการออกแบบ ว่าจะต้อง มีมาตรฐาน หรือข้อกำหนด
ที่จะนำไปใช้รวมถึง เงื่อนไขการทดสอบ เพื่อนำไปใช้งานจริง ดังนั้น Development Board นั้น จึงเหมาะสำหรับบาง โปรเจคเท่านั้น
ส่วนการพัฒนาสำหรับนักพัฒนา ที่จะสร้างสรรค์ ผลิตภัณฑ์ หรือสินค้า ต่าง ๆ นั้น หลังจากขั้นตอนของการเขียนโปรแกรม ทดลองด้วย
Development Board แล้วนั้น ก็จะออกแบบวงจรให้เหมาะสมกับ ผลิตภัณฑ์ อีกที ซึ่งในช่วงแรกอาจจะมีต้นทุนที่สูง แต่ถ้าผลิตในจำนวน
เยอะ ก็เฉลี่ยแล้วถูกกว่า PLC แน่นอนครับ :o
จากที่กล่าวมาข้างต้นทำให้เราเห็นได้ว่า MCU นั้น ส่วนใหญ่ ที่เราเจอ จะมาพร้อมกับ Development Board แน่นอนถ้าพูดถึง
ต้นทุนและ ขอบข่ายของ Development Board ส่วนใหญ่เราจะทำการทดลองกันในระดับ Low Voltage เป็น TTL หลอดไฟ LED ปุ่มกด ไมโครสวิสต์ และ IC
เบอร์ ต่าง ๆ ที่แต่ละบอร์ต ได้ออกแบบมาแข่งขันกัน ในต้นทุนที่เหมาะสมกับราคา และแข่งขันได้ จนกลายเป็นทางเลือกให้เรา ได้เลือกใช้งาน ได้หลากหลายขึ้น
แตกต่างจาก PLC ที่ออกแบบมาภายใต้มาตรฐานของ อุตสาหกรรม เพื่อรองรับอุปกรณ์ ต่อพวงอื่น ภายใต้มาตรฐานอุตสาหกรรม ซึ่งจะทำให้ PLC
มีราคาสูงขึ้นตามไปด้วยครับ 8)
ในแง่ของ Software MCU นั้น บริษัท ที่จำหน่าย บอร์ด ก็จะมี โปรแกรมตัวอย่าง รวมถึง Dvier หรือ Boot Loader หรือ .H (Include File)
มาประกอบเพื่อให้เรา สามารถใช้งาน บอร์ด ได้ง่าย ในเบื้องต้น และเนื่องด้วย Hardware ของ MCU อย่างเช่น IO หรือ Part UART นั้นมีความสามารถ
ที่จะ Config ให้สามารถใช้งานได้หลาย ๆ ฟังก์ชันในตำแหน่ง เดียวกัน เช่น จะกำหนด เป็น Input ก็ได้ หรือ Output ก็ได้ หรือใช้เป็น
ขาที่ใช้ในการสื่อสารก็ได้ ผลก็คือ Driver หรือ การกำหนด โครงสร้างของ ของโปรแกรม ให้ตรงตาม Hardware นั้น เราก็ต้องทำความเข้าใจ
ถึงโครงสร้าง Hardware และเมื่อเรา เขียนโปรแกรมทดลองในบอร์ต แล้วจะนำไปสร้างวงจร เราเองก็ต้องถ่ายทอด โครงสร้างเหล่านี้ให้ตรง
กับโปรแกรมที่เราออกแบบไว้ด้วยถึงจะใช้งานโปรแกรมได้โดยไม่ต้องเปลี่ยน Driver หรือ Config ในโปรแกรมเราใหม่ และผมเข้าใจว่า ประเด็น
ของการ ทำ Config หรือ Driver นี้แหละที่ทำให้ มือใหม่ พลาดกันบ่อยครั้ง เพราะเวลาเราทำการทดลองใน Development Board นั้น Drive
หรือ Boot Loader หรือ Include File ต่าง ๆ ผูกสร้างมาโดยผู้ผลิต ที่เข้าใจถึงโครงสร้างเป็นอย่างดี และ แนบมากับบอร์ตให้เราได้ใช้งานกัน
แล้วทำให้เราใช้งานกันได้ง่าย โดยข้ามผ่านการศึกษาเรียนรู้ โครงสร้างของ Hardware กับตัว Config หรือ Include ไฟล์ ต่างๆ ในเชิงลึก
ซึ่ง เข้าใจว่า จะอธิบาย กันให้เข้าใจก็ ยากอยู่พอสมควร เช่น ความสัมพันธ์ของ Register บางตัว กับขา ใช้งานบางขาของ MCU เพื่อให้ตรงกับ
บอร์ต ที่ออกแบบมา และเมื่อก็จะเกิดปัญหาขึ้น เช่น เราเคยทดลองใช้คำสั่งนี้ ฟังก์ชันนี้ มันได้ แต่ทำไมตอนนี้ มันใช้ไม่ได้ มีอะไรผิดพลาดไป
ถ้าไรไม่เข้าใจ เรื่อง Config การ Initial Register หรือการ เขียน Driver สำหรับ แต่ละ Hardware เหล่านี้ เราก็จะไม่สามารถวิเคราะห์หาสาเหตุ
ของปัญหาที่แท้จริง และก็ไม่สามารถที่จะแก้ปัญหาเหล่านั้นได้ครับ :)
ในส่วน PLC เนื่องด้วย Hardware ค่อนข้างจะกำหนด ตายตัว และมี Register ภายในสำหรับการเข้าถึงแบบตายตัว ดังนั้น Softwear
ของ PLC จะเข้าถึงได้ไม่ยากนัก และมีรูปแบบการเข้าถึงที่คล้าย ๆ กัน ส่วนการกำหนด Config เพื่อให้สอดคล้องกับการเปลี่ยนแปลงของ Hardware นั้น
PLC จะมี โปรแกรมเป็นลักษณะของ หน้าต่างเฉพาะ เพื่อให้สามารถ ปรับแต่ง Config ของ Hardware ที่เปลี่ยนแปลงไปให้ ตัวโปรแกรมหลัก สามารถ
เข้าถึง Regsiter ที่เพิ่มขึ้นได้ เสมือนกับการเปลี่ยนแปลง หรือแก้ไข Boot Loader , Driver หรือ Include File นั่นเองครับ ดังนั้นโดยส่วนใหญ่งาน MCU
จึงต้องศึกษา คู่กับ งานเขียนโปรแกรมบน PC (PC Base) ควบคู่ไปด้วยเพื่อ การปรับ Config หรือ Setting บางอย่างให้เหมาะกับแต่ละระบบ เมื่อเรานำ
MCU ไปใช้งานครับ :D
ส่วนสำคัญที่จะกล่าวถึงคือ ในเมื่อ Hardware ของแต่ละ Developer นั้นไม่เหมือนกัน ดังนั้น แนวทางการศึกษา และการต่อยอด จึงทำได้ยาก
โครงสร้างของการออกแบบ Hardware และ Software หรือ ไดรเวอร์ จึงแยกกันออกไปของแต่ละ บอร์ต มีความแตกต่างกัน ดังนั้นเมื่อเรา
จะศึกษา ต่อยอด หรือศึกษาเพิ่มเติม แน่นอน เราแทบจะเริ่มต้นทำความเข้าใจเกี่ยวกับ Hardware กันใหม่เลยทีเดียว ปัญหาดังกล่าวเป็น
โจทย์สำคัญ ที่ทำให้เกิดเจ้า Arduino ขึ้นมา จะเห็นได้ว่า โครงสร้างในการทำ Hardware จะเปลี่ยนไป จากเป็น Single Board ก็ถูกออกแบบ
ให้เป็น Multi Board เพื่อตอบสนองงานของ Developer ได้เป็นอย่างดี และ ทำการกำหนด Hardware ที่ตายตัว เพื่อง่ายต่อ การสร้าง Driver
หรือ โปรแกรมตัวอย่าง และ Function บางอย่างได้ เพราะ Hardware ที่ถูกกำหนด ตายตัว ถึงแม้จะ สร้างความลำบากที่จะไม่สามารถ ดัดแปลง
หรือ แก้ไขเพิ่มเติมเปลี่ยนแปลงได้ตามใจ เหมือน Development Board เมื่อก่อน แต่แน่นอนสิ่งที่ตามมาคือ โปรแกรมได้ง่ายขึ้น มีตัวอย่างที่
สามารถนำมาศึกษา ต่อยอด ใช้งานได้ง่ายขึ้นเยอะ ประกอบกับการหาข้อมูล ในเมื่อ Hardware ไม่แตกต่าง ตัวอย่างโปรแกรม หรือ Config Driver ต่าง ๆ
ก็สามารถหาได้ง่ายขึ้น นับว่าเป็นการก้าวหน้าไปอีกขึ้นสำหรับการศึกษา MCU ครับ ::)
ในครั้งต่อไป จะพาไปดูถึงข้อได้เปรียบเสียเปรียบในการจัดการ หน่วยความจำ ระหว่า MCU และ PLC รวมถึงรูปแบบที่สอดคล้อง เพื่อนำเป็นเป็นตัวอย่าง
ศึกษา และพัฒนาปรับปรุงการออกแบบ และเขียนโปรแกรมของเราได้ครับ
ขอบคุณทุกท่านที่ติดตาม และขอเป็นกำลังใจให้ทุกท่าน และ ทุก ๆ การเรียนรู้ครับ
;) ;)
..............................................
http://www.108engineering.com
Engineering Knowledge Sharing
ขอบคุณครับ สำหรับความรู้ดีๆครับ ผมก็เป็นคนนึงครับ กำลังหัดเล่น PLC อยู่ครับ อิอิ
บางทีหัวข้ออาจผิด "MCU VS PLC ทางเดียวกัน แต่คนล่ะโลกเลยครับ" ถ้าเล่นกันลึกๆจริงๆ และถ้าเจองานใหญ่ความรู้แบบ basic มันจะทำให้ไม่จบงานได้น่ะครับ
แหม่จะเข้ามาโปรโมทขาย cd ก็ไม่บอก :P
;) สวัสดีครับเพื่อนสมาชิกที่ติดตามบทความของ 108engineering มาโดยตลอดนะครับ สวัสดีปีใหม่ 2558 ด้วยนะครับ ช่วงที่ผ่านมายุ่ง ๆ กับการสร้างผลิตภัณฑ์ อยู่พักใหญ่ ๆ ได้มีโอกาสได้พูดคุย ปรึกษา วางแผนทำงานร่วมงานกับทีมงาน โปรเจคนึงเป็นเครื่องอำนวยความสะดวกภายในบ้านครับ อีกโปรเจคคือเครื่องที่ใช้บริการในการซ่อมบำรุงรถ และอีกโปรเจคเป็นเครื่องมือสำหรับโรงงานอุตสาหกรรมครับ วันนี้เลยขอลากเรื่องราวของการเขียนโปรแกรม กับการสร้างผลิตภัณฑ์ มาเล่าประสบการณ์แลกเปลี่ยนให้เพื่อนสมาชิกเพื่อเป็นแนวทางสำหรับ นักพัฒนาอย่างเรา ๆ นะครับคิดว่า เป็นประโยชน์ ไม่มากก็น้อยสำหรับเพื่อนสมาชิกที่เข้ามาอ่านนะครับ เพื่อเป็นแนวทาง รวมถึงเป็นกำลังใจให้กับ สิงโตหนุ่มอย่างคุณ ที่กำลังคิดการใหญ่อยู่นะครับ "ถ้ายังไม่สุด..อย่าหยุดที่จะคิด" สู้ ๆ ครับสักวันต้องเป็นวันของเรา
เริ่มต้นโปรเจคกันเลยครับ เรามาอยู่ในฐานะของ นักพัฒนากันครับสำหรับงานนี้ ดังนั้น ผมจะกล่าวถึง ส่วนที่เราเกี่ยวข้องโดยตรง ส่วน ภาพรวมของโปรเจค จะกล่าวถึงบางส่วนเท่าที่จะกล่าวได้นะครับ
เริ่มที่ทีมงานได้ทำการประชุมเพื่อเริ่มต้นโปรเจคกันครับ ได้อธิบายถึง ความต้องการ วิธีการ ลำดับขั้นตอน อุปกรณ์สำคัญต่าง ๆ ที่จะใช้งานในโปรเจค ขอบเขต และ ระยะเวลา รวมถึงโจทย์ที่เราต้องระมัดระวัง ที่เกี่ยวกับนักพัฒนาจริง ๆ ผมพอสรุปเป็นหัวข้ออย่างนี้ครับ
1 ฟังก์ชันที่เราต้องออกแบบและสร้างให้เหนือกว่าคู่แข่ง ในลำดับนี้ ต้องทำการวิเคราะห์ จุดแข็ง จุดอ่อน วิกฤต และ โอกาส (SWOT) กันอย่างเมามัน ผมเองก็ไม่ได้อยู่ในวงการของโปรเจคนี้เท่าไหร่ก็พอได้รู้อะไรลึก ๆ เกี่ยวกับผลิตภัณฑ์ มาพอสมควรครับ ในขั้นตอนนี้ เราได้เห็นภาพรวมของสินค้าตัว Top ของเรากันเลยทีเดียวครับว่าต้องมีความสามารถถึงขนาดไหนครับ ส่วนเรื่องขนาดของตลาด การวางตำแหน่งผลิตภัณฑ์ การนำสินค้าใหม่เข้าตลาด การประชาสัมพันธ์ การวางส่วนแบ่ง หรือกลยุทธทางการตลาดผมจะไม่กล่าวถึงนะครับ แต่บอกได้ว่า เริ่มต้น พร้อมกันครับ มีบริษัทที่จัดทำ Event จัดทำสื่อ ต่าง ๆ มาเป็น แพกเกจ ให้เลือก เลยครับ ตามงบตามกลุ่มเป้าหมาย รวมไปถึงการทดสอบมาตรฐาน ครับจากสถาบันต่าง ๆ ที่เข้ามาช่วยสนับสนุนให้ผลิตภัณฑ์ของเรามีความน่าเชื่อถือ และสามารถทำตลาดในบ้านเราได้ อีกอย่างที่ผมยังทึ่งคือ ทนายความ ทีมที่ปรึกษาครับ มองจุดของการจดสิทธิบัตร อนุสิทธิบัตร รวมไปถึงการใช้คำพูด หรือข้อความที่ทำให้ การจดสิทธิบัตรไม่ซ้ำ
2 แบ่งระดับของสินค้าครับ เป็นไรที่ อืมม.. ครับ ทำไมรถยี่ห้อนึงมีกล้องมองหลัง ทำไมอีกยี่ห้อไม่ทำ ทั้งที่เป็นคู่แข่งกัน หรือ ทำไมรถรุ่น Top มี GPS แล้วรุ่นรองลงมาไม่มี... เป็นลูกเล่นของการตลาด ที่เราต้องช่วยเขาพัฒนาให้สามารถที่จะ แบ่ง Option ได้ครับ ความเป็นจริง เทคโนโลยี หรือ ฟังก์ชัน ที่เข้ามาเป็น Option นั้นเป็นเรื่องการตลาดล้วน ๆ ครับ ลูกค้าต้องตัดสินใจ แต่ในการตัดสินใจของลูกค้า ต้องเลือกว่าเป็น รุ่น Top หรือ รุ่น รอง Top เท่านั้น ไม่ให้ติดสินใจว่า เลือก ยี่ห้อ A หรือ ยี่ห้อ B ดี ดังนั้นในการตลาดจะบอกว่า รุ่นนี้มีเพิ่มตรงนี้เข้ามาให้ เพิ่มตรงโน้นมาให้ แต่สำหรับการพัฒนาแล้วรุ่นนี้ ตัดอันนั้นออก รุ่นนี้ ตัดอันนั้นด้วยตัดอันนี้ด้วยครับ
3 การพัฒนาฟังก์ชั่นของสินค้า หลังจากที่เขียนโปรแกรม เสร็จก็มีการทดสอบการทำงานกันครับตรวจกันในทุก ๆ ด้านเพื่อไม่ให้เกิดความผิดพลาดถึงมือลูกค้า ในตอนไฟดับ ในตอนแบตหมด ในตอนที่ตัวนั้นเสีย ในตอนที่ตัวนี้พัง ในอุณหภูมิ สภาพอากาศ ของภาคต่างๆ ที่จะไปทำตลาด แรงดันน้ำ คุณภาพของกระแสไฟฟ้า ส่วนสำคัญที่เราต้องคำนึงถึงนอกจากการเขียนโปรแกรมให้สินค้าของเราทำงานได้แล้ว ต้องเขียนให้โปรแกรมของเราสามารถตรวจสอบบันทึกค่าของตัวแปรต่าง ๆ ได้ด้วย เพื่อเป็นข้อมูลเชิงตัวเลขในการ ทดสอบ ปรับปรุง และพัฒนา เช่น เวลาที่ใช้ในการทำงานของแต่ละครั้ง ค่าตัวแปรที่เกิดขึ้น หรือ แรงดัน ความอุณหภูมิ มีการบันทึกความผิดปรกติ วิธีการเข้ารหัสผ่าน เพื่อไปทำการปรับแก้ หรือ ดึงข้อมูลออกมา
4 ในด้านฟังก์ชันที่เกี่ยวข้องกับศูนย์บริการ ตัวแทนจำหน่าย นอกจากทำคู่มือให้ผู้ใช้งานแล้วโปรแกรมต้องคำนึงถึง ฟังก์ชัน วิธีการตรวจสอบ และซ่อมแซม ในกรณีที่สินค้าของเราต้องขยายไปยังศูนย์บริการ เราก็ต้องจัดทำคู่มือสำหรับช่าง จัดทำวิธีการตรวจสอบ ซ่อมบำรุง โปรแกรมจัดเก็บสถิต มีการใช้งานไปกี่ครั้งเมื่อไหร่บ้าง บันทึกการทำงานผิดพลาดที่เกิดขึ้น จัดทำระยะเวลาอายุการใช้งานของอุปกรณ์แต่ละตัวเป็นแนวทางในการเปลี่ยนอะไหล่ ยกตัวอย่าง เช่น เครื่องปริ้นเตอร์ บริษัทผู้ผลิต จะมีเวบ ให้ช่างเข้าไปโหลดโปรแกรมสำหรับซ่อม ซึ่งในโปรแกรมดังกล่าว สามารถที่จะ สั่งการทำงานแต่ละส่วนของเครื่องปริ้นแบบแยกอิสระได้ (Manual Mode) สามารถดูสถิติที่เคยใช้งานจาก หน่วยความจำที่อยู่ในเครื่องได้ ว่าพิมพ์ไปกี่ใบแล้วเริ่มใช้งานเมื่อไหร่ ใช้ไปกี่ชั่วโมงแล้ว เกิดความผิดพลาดอะไรบ้าง เป็นต้น
5 ในส่วนต้นทุนที่ผลิตได้ กับต้นทุนที่แข่งขันได้ ตรงจุดนี้ ก็ยากเหมือนกันครับ แต่ส่วนที่เกี่ยวข้องกับนักพัฒนาคือ เทคโนโลยี วิธีการซึ่งให้ได้ตามเป้าหมายด้วยต้นทุนที่ต่ำ หาอะไหล่ ชิ้นส่วนที่มีในบ้านเราหรือจากต่างประเทศ จำนวนในการสั่งซื้อ ต่อครั้ง ปัจจัยที่มีผลในด้านราคาต้นทุน วิธีการขนส่ง วิธีการจัดเก็บ รูปแบบของบรรจุภัณฑ์ กระบวนการผลิต ที่มีต้นทุนต่ำ คู่ค้าทางธุรกิจ แหล่งวัตถุดิบ ทั้งนี้ล้วนขึ้นอยู่กับการออกแบบของนักพัฒนา และการเลือกใช้วัตถุดิบทั้งนั้นครับ บางโปรเจค เริ่มต้นจากตรงนี้กันเลยทีเดียวคือ มีวัตถุดิบที่ราคาถูก มีการขนส่งกระจายสินค้าอยู่แล้ว มีลูกค้าในมือ มีศูนย์บริการอยู่แล้ว ข้อได้เปรียบกว่าคู่แข่งในตลาดเหล่านี้ เลยคิดต่อยอดสร้างผลิตภัณฑ์ ครับ
จากข้อมูลที่กล่าวมาข้างต้นนี้ ทำให้นักลงทุน มั่นใจได้ว่าหลังจากนำสินค้าลงในตลาดแล้วจะมี รายได้เข้ามาอย่างต่อเนื่องในระยะเวลาที่เขาตั้งเป้าไว้ ระยะเวลาคืนทุน ระยะเวลาของการเก็บเกี่ยวผลกำไร และ อายุของสินค้าตัวนั้น ๆ จะยืนระยะได้นานขนาดไหน และมองยาวไปหลังจากตัวสินค้าตัวนี้หมดอายุลง สิ่งที่ต้องทำต่อไปคืออะไร
ก็พอเป็นภาพรวมนำมาแชร์กันครับขาดตกบกพร่อง อย่างไรก็ช่วยกันเสริม ร่วมกันแชร์ได้นะครับ เพื่อเป็นแนวทาง ประสบการณ์ ไว้ให้ สิงโตหนุ่ม ได้ศึกษาพัฒนากันต่อครับ ในครั้งต่อไป จะพาไปดูถึงข้อได้เปรียบเสียเปรียบในการจัดการ หน่วยความจำ ระหว่าง MCU และ PLC รวมถึงรูปแบบที่สอดคล้อง เพื่อนำเป็นเป็นตัวอย่างศึกษา และพัฒนาปรับปรุงการออกแบบ และเขียนโปรแกรมของเรา ยังไม่ได้ลืมนะครับ ขอคั่นเวลานิดนึงครับ ;D
ขอบคุณทุกท่านที่ติดตาม และขอเป็นกำลังใจให้ทุกท่าน และ ทุก ๆ การเรียนรู้ครับ
;) ;)
..............................................
http://www.108engineering.com (http://www.108engineering.com)
Engineering Knowledge Sharing
PLC น่าจะใข้งานในอุตสาหกรรมได้เลย
MCU ถ้าจะใข้ในอุตสาหกรรม ต้องหาอะไรมาต่ออีกเพียบ แต่ถ้าใช้ทดลอง เรียนรู้น่าจะดีกว่า แล้วก็ ส่วนใหญ่ ราคาถูกกว่า PLC
สวัสดี สงกรานต์ สวัสดีวันปีใหม่ไทย ด้วยครับ ;D ;D
วันนี้พอมีเวลาหยุดยาวมาก ว่ากันต่อครับ ขอบคุณทุก ๆ ความคิดเห็นนะครับ ร่วมด้วยช่วยกันครับ วันนี้จากติดค้างมานานครับ มาดูเรื่อง หน่วยความจำ ในหน่วยประมวลผลกันครับ โดยปรกติในการประมวลผลของหน่วยประมวลผลต่าง ๆ จำเป็นอย่างยิ่งที่ต้องใช้หน่วยความจำ หรือ Memory ทั้งใน PLC และ MCU โดยทั้ง PLC และ MCU เป็น โปรแกรมเมเบิล หรือเป็นหน่วยประมวลผลที่สามารถ โปรแกรมได้ ดั้งนั้น หน่วยความจำ จะแบ่งเป็น 2 ส่วนหลัก ๆ ในเบื้องต้นก่อนคือ หน่วยความจำของโปรแกรม และ หน่วยความจำที่ช่วยในการประมวลผล หน่วยความจำโปรแกรม ใน MCU อาจเรียกส่วนนี้ว่า Flash Memory คือพื้นที่ในส่วนที่ เราเขียนโปรแกรมแล้วทำการโหลดโปรแกรมไปเก็บไว้นั้นเอง ใน PLC เองก็มีหน่วยความจำตรงส่วนนี้เช่นกัน และหน่วยความจำในส่วนนี้เองก็เป็นส่วนหนึ่งของข้อจำกัด ในการแบ่งรุ่นของหน่วยประมวลผล ที่มีความสามารถในการเขียนโปรแกรมได้เยอะขนาดไหนนั่นเอง ในบางครั้ง ตัวแปรที่เป็นค่าคงที่บางอย่าง เช่น Pattern ของ การแสดงผล Dot matrix หรือ 7 Segment หรือ การแสดงผลภาพ ที่ใช้หน่วยความจำเยอะ ๆ โปรแกรมเมอร์จะตัดสินใจเขียนไว้ในส่วนนี้บ้างเหมือนกัน เพื่อประหยัดพื้นที่ของหน่วยความจำที่ช่วยประมวลผล เปรียบได้เหมือน ตัวแปรที่เป็นค่าคงที่นั่นเอง
อีกส่วนหนึ่งคือหน่วยความจำที่ช่วยในการประมวลผล เป็นหน่วยความจำที่เราสามารถ ให้โปรแกรมเข้าถึงได้ เขียนอ่าน ได้ ซึ่งก็จะแบ่งเป็น 2 ส่วนหลัก ๆ คือ หน่วยความจำที่ค้างค่าได้ และหน่วยความจำทั่วไปที่เมื่อเราปิดไฟแล้วข้อมูลจะหายไป ซึ่ง ทั้ง PLC และ MCU ก็มีหน่วยความจำทั้งสองนี้เหมือนกัน ในส่วนของ MCU เราใช้ลักษณะการเขียนโปรแกรมแบบ Text Base เป็น ภาษา ซี บ้าง Basic บ้าง การเข้าถึงหน่วยความจำเราจะใช้การประกาศ ตัวแปร เพื่อใช้เป็นตัวอย่างอิงในโปรแกรม และแน่นอน โดยพื้นฐานในการศึกษาการเขียนโปรแกรม เราก็ต้อง ไปทำความรู้จักกับ ชนิดของตัวแปร
Bit On/Off
Byte 8 Bit
Word 16 Bit
Double 64 Bit (ทศนิยม)
Long 64 Bit (จำนวนเต็ม)
Float 32 Bit
Char 16 Bit
String (ตัวแปรข้อความ)
Unsigned (นำหน้าตัวแปร ที่ไม่คิดเครื่องหมายลบ)
ตัวอย่างเช่น
int X;
int Y;
X = 20;
Y = X - 5;
ผลการรันโปรแกรม
Y = 15
อีกส่วนหนึ่งที่จะกล่าวถึงก็คือ หน่วยความจำของ Hardware เช่น Port Input Output ใน MCU เองเราก็ต้องทำการ ประกาศการเข้าถึง และบาง Port ก็ยังต้องกำหนด Config ในการ ทำงานของ Port นั้น ด้วย เนื่องด้วย Port นั้นถูกออกแบบให้สามารถทำงานได้หลายหน้าที่หลังจากประกาศตัวแปรแล้วเราก็สามารถ อ้างอิงชื่อของตัวแปร เพื่อ เข้าถึงข้อมูลของแต่ละหน่วยความจำได้ ในส่วนของ MCU จึงได้มีการ Include ไฟล์เพื่อ ให้ง่ายต่อการ ประกาศ หน่วยความจำ พื้นฐานของ CPU แต่ละตัวมาให้เราได้ใช้งานตรงตามชื่อก็สามารถทำให้เรา ประหยัดเวลาในการประกาศ อ้างอิงหน่วยความจำของ Hardware ไปพอสมควร มาดูใน PLC กันบ้างครับ ใน PLC หน่วยความจำจะถูกจัดการแบ่งให้เราเรียบร้อยแล้ว ครั้งโดยทั่วไปจะแบ่งเป็นหน่วยความจำแบบ Bit และ Word ครับ โดยใช้ตัวอักษรทำหน้า เพื่อแบ่งชนิดของหน่วยความจำและตามด้วยตัวเลขเปรียบเสมือนชื่อของหน่วยความจำ นอกจากนี้ ช่วงของหน่วยความจำแต่ละตัว ยังเป็นช่วงแบบ Late หรือหน่วยความจำแบบค้างค่า เปรียบเสมือน เราเขียนค่าลงหน่วยความจำ EEProm ใน MCU นั้นเอง หรือ เราสามารถ จะกำหนดช่วงให้ค้างค่า หรือไม่ค้างได้ผ่าน โปรแกรม Parameter
M0 Bit On/off
M20 Bit On/Off
D10 Word (16 Bit)
Y0 Output Bit
X1 Input Bit
K (ค่าคงที่จำนวนเต็ม เช่น K5)
ตัวอย่างเช่น
--||---------------[MOV K20 D0] <<< X{D0} = 20; * แก้ไข D0 K20 สลับกันครับ ^^
|
-----------[SUB D0 K5 D1] <<< Y{D1} = X{D0} - 5;
ผลการรรันโปรแกรม
D1 = 15
ความรู้สึกแรก เมื่อเขียน MCU แล้ว มาเขียน PLC ทำไมตัวแปร มันประกาศ เป็นชื่อไม่ได้ แล้วเราจะจำมันได้ หรือเปล่า ถ้าเราใช้หน่วยความจำเยอะ ๆ แต่พอ ฝึนใจเขียนดู ทำให้เข้าใจว่า เมื่อเราแบ่งเป็นหน่วยความจำดังกล่าวแล้ว ทำให้เราวางแผนในการใช้งาน จัดการแบ่งช่วงต่าง ๆ ของหน่วยความจำออกก่อน และอีกประเด็นที่สำคัญคือ การเข้าถึงจะทำได้ง่าย สามารถอ้างอิงตำแหน่งเป็นลักษณะของ Pointer หรือ Array ได้ง่าย ประเด็นที่แตกต่าง กันอย่างชัดเจนคือ การเขียนแบบ Text Base หรือ MCU นั้นเราจะใช้การประกาศตัวแปร เป็นหลัก เพื่ออ้างอิงชนิดและการเข้าถึงหน่วยความจำ ส่วนการเขียน Ladder หรือ PLC นั้นพื้นฐานหน่วยความจำอยู่ที่เดิมที่ PLC ถึง Fix ไว้แล้ว ซึ่งถ้าเรามอง D0 D1 D2 D3 ... DXXXX หน่วยความจำเหล่านี้ Address จะต่อกัน ซึ่งก็เป็นรูปแบบ ของ Array อยู่แล้วนั่นเอง คราวนี้เวลาใช้จะใช้ รูปแบบของคำสั่ง เป็นสำคัญ
ตัวอย่างเช่น
MCU.
int Data[4];
for (i=0; i<4; i++)
{
Data = 20;
}
ผลการรันโปรแกรม
Data[0] = 20
Data[1] = 20
Data[2] = 20
Data[3] = 20
PLC.
--||----------[FMOV K20 D0 K4]
ผลการรันโปรแกรม
D0 = 20
D1 = 20
D2 = 20
D3 = 20
ในการศึกษาการเขียนโปรแกรม ทั้ง PLC และ MCU ก็เป็นลักษณะที่เหมือน ๆ กัน ขึ้นอยู่กับความเข้าใจของเราที่จะศึกษามันให้ลึกซึ้ง เข้าใจมันลึกขนาดไหน แต่ที่เห็นอย่างได้เปรียบคือ ท่านที่ศึกษาทั้งสองอย่าง จะทำให้มองภาพง่ายขึ้น ใน PLC เองก็จำเป็นต้องเข้าใจพื้นฐาน ในการเขียน Text Base อยู่เหมือนกัน เพราะนอกจาก PLC จะเขียนเป็น ภาษา Ladder ได้แล้ว ยังเขียนเป็น Text Base ได้อีกด้วยครับ เขียนเป็น SFC (Sequenc Function Chart) หรือ STL (Structure Text)ก็ได้ ซึ่งก็ใช้พื้นฐานการเขียนโปรแกรม มาผสมผสานกัน ทำให้โปรแกรมเมอร์ คล่องตัวขึ้นครับ
เป็นกำลังใจให้ทุก ๆ การเรียนรู้ครับ Post นี้ก็พอเรียนรู้ ไปอีกระดับหนึ่งนะครับ ใน Post หน้า จะมาลงตัวอย่าง กันอีกทีนะครับ สุขสันต์วันสงกรานต์ครับ
http://www.108engineering.com (http://www.108engineering.com)
Engineering Knowledge Sharing
แล้วแต่มุมมองจริงๆครับ
อ่านบทความแล้ว มองภาพออกเลย ขอบคุณครับ
อ่านหน้าแรกแล้วเริ่มคิดหนักกับบโปรเจ็คตัวเอง :o คงต้องเพิ่มความระมัดระวังให้กับarduinoให้มากกว่านี้ซะแล้วสิ
สวัสดีทุก ๆ ท่านที่ติดตามนะครับ ต้องขอโทษด้วยครับหายไปนานครับ 8)
การศึกษา หาความรู้ เป็นสิ่งที่ดี และมีประโยชน์ อย่างแน่นอนที่สุดครับ ส่วนเรื่องที่เราจะเลือกศึกษา นอกจากในสถานศึกษาแล้ว ส่วนใหญ่มาจากความชื่นชอบส่วนตัว
ผมย้อนมองตอนที่กำลังเป็นนักเรียน นักศึกษา เรามีเวลามากมายในการทำหลาย ๆ สิ่ง ด้วยความที่เป็นวัยอยากรู้อยากเห็น ในบทความนี้ ผมจะบอกว่า ถ้าเราเรียนนรู้ ได้ถูกที่
ถูกเวลา เราจะได้เร็ว และ ประสบความสำเร็จในชีวิตได้เร็วกว่าคนอื่น
ในวันนี้ ผมไม่ได้มาบอกให้ทุกท่าน ศึกษา PLC แต่จะมาเล่าให้ฟังว่า ท่านที่เขียน PLC นอกจากจะเจอกะ การเขียนแบบ Ladder ใน PLC แล้ว อุปกรณ์อื่น ๆ ที่เราจะไปติดต่อ ควบคุม ก็ยังหนีไม่พ้น Text Base เป็น ภาษา พื้นฐานเช่น ภาษาซี ภาษาเบสิค ภาษา แอสแซมบลี่ เช่นกัน
เริ่มต้นที่เจ้า Robot หรือ หุ่นยนต์ เป็นหุ่นยนต์อุตสาหกรรมนะครับ
(http://www07.abb.com/images/default-source/robotics/edit-and-debug-rst.jpg?sfvrsn=0)
จากรูป เป็นหุ่นยนต์อุตสาหกรรม 6 แกน นะครับ จะเห็นได้ว่า จะมีโปรแกรมสำหรับให้เรา Simulate สำหรับการเคลื่อนที่และการ การกำหนดจังหวะการทำงาน
ต่าง ๆ จะต้องเขียนโปรแกรม มีคำสั่ง MOVEL(เคลื่อนที่เชิงเส้น) MOVEJ(เลื่อนที่ตามแนวหมุนแกน) SETDO(สั่ง Output) WAITDI (รอ Input) อะไรประมาณนี้
ซึ่งส่วนใหญ่แล้ว Robot จะต้องติดต่อกับ PLC ดังนั้น เวลาเราทำงานด้าน Robot เราก็จำเป็นต้อง เขียน Ladder บ้าง เขียน Text Base บ้าง ครับ การเรียนรู้ Ladder
หรือ Text Base นั้น ก็หนีกันไม่ออกนะครับ แต่ท่านที่ศึกษา Text Base มาก่อน จะได้เปรียบครับ เพราะ Text Base เขียนค่อนข้างลึกต้องเข้าใจถึง อุปกรณ์สัญญาณ
แต่ Ladder นั้นส่วนใหญ่จะ Fix Hardware หรือ วิธีการติดต่อมาแล้ว ให้ใช้งานได้ง่ายขึ้น
ลองดูอีกตัวอย่าง ลองเป็นทัชสกรีน ด้านอุตสาหกรรม บ้างครับ
(http://www.108engineering.com/private_folder/MacroHMI.jpg)
ในอุตสาหกรรม ทัชสกรีน ถูกออกแบบให้ติดต่อกับอุปกรณ์ได้หลากหลาย ผ่านสัญญาณแบบ Serial เช่น RS232 RS485 ซึ่งจะมีรูปแบบ หรือ Protocal ที่
แตกต่างกันออกไป และมีฟังก์ชันให้เราใช้ได้สบาย ๆ เช่น สร้างปุ่ม แสดงกราฟ รูปภาพ ใส่ค่าตัวเลข ตัวหนังสือ รวมถึง ทำการบันทึกค่า Data Logging แล้ว ยังมีอีกฟังก์ชัน
ที่เราจำเป็นต้องใช้งานในการทำงานบางอย่าง คือการเขียน Macro เป็นการเขี่ยนโปรแกรม บนหน้าจออีกครั้งด้วย Text Base สามารถทำให้เราใช้งานได้อย่างเต็มประสิทธิภาพมากขึ้น ในรูปจะเป็น ของ ภาษา ซี ครับ
:D นอกจากนี้ ยังมีความหลากหลาย ของการเขียนโปรแกรมให้ใช้กันอีกมากมายครับ ใน PLC เองก็ยังไม่การเขียนแบบ ST หรือ Structure Text หรือ ในการเขียนแบบ FB หรือ ฟังก์ชันบล๊อก ครับ ซึ่ง เราก็สามารถที่จะเขียน PLC ด้วย Text Base ได้เช่นกันครับ เรียนรู้ไว้ ใช่ว่า ครับ เห็นบางท่านสับสน และลังเล ที่จะเริ่มเรียนรู้จะบอกว่า ไม่ต้องลังเลครับ การเรียนรู้ ไม่มีที่สิ้นสุด ของให้เริ่มต้น ครับ ความสำเร็จอาจอยู่แค่ครึ่งทางของการเรียนรู้ทั้งชีวิตของเรา ลุย เลยครับ
เป็นกำลังใจให้ทุก ๆ การเรียนรู้ครับ ^^"
http://www.108engineering.com
Engineering Knowledge Sharing
คอนโทรลเลอร์เดียวนี้ก็โครตอึดแล้วนะครับ เคยใช้อยู่
สวัสดี เพื่อนชาว อิเล็กทูเดย์ ครับ ห่างหายไปนานกลับมาดูกระทู้ ยังมีเพื่อน ๆ สนใจติดตามกันเยอะ เหมือนกันครับ
;) ;)
วันนี้เลยผมทำ คลิป วีดีโอ มาฝากครับ เป็นการใช้งานเจ้าตัว Arduino ที่เป็น Microcontroller มาเขียนโปรแกรมแบบ PLC Ladder Diagram
ชื่อ โปรแกรม SoapBox Snap ครับ ในวีดีโอ มีขั้นตอนในการ ติดตั้ง และการใช้งานครับ พอเป็นพื้นฐานให้เราได้เริ่มศึกษา กันอย่างง่ายมากครับ
ทดลองดูแล้วใช้ได้เลยทีเดียว ไปชมคลิปกันนะครับ
https://www.youtube.com/v/d0Dmm4rnvSA
;D ;D ;D ;D ;D ;D
http://www.108engineering.com
Engineering Knowledge Sharing
อืม ผมเข้าใจว่า MCU คือ วัตถุดิบ ของ PLC หรือเปล่าหว่า ?
PLC ต้องอาศัย MCU เป็นแกนการประมวลผล อาจจะ MCU แบรนใดแบรนนึง AVR ST PIC อะไรก็ว่าไป
แต่ MCU ไม่จำเป็นจะต้องกลายเป็น PLC เสมอไป แต่จะเป็นไรก็ได้ แล้วแต่ Developer
สรุป ผมคิดว่า PLC คือผลิตภัณตัวนึง ที่ต้องใช้ MCU ข้างใน 😊