Numerical Literacy
จดทำ�โดย1.น�งส�วมยร อรรคบตร รหส
503050361-42.น�งส�วมทน� เอกวงศษ� รหส
503050362-23.น�งส�วว�รนทร อนทอง รหส
503050366-44.น�งส�ววชร�ภรณ ช�วงษ รหส
503050364-85.น�งส�ววล�สณย ม�กน�ค� รหส
503050367-26.น�ยศ�นตรกษ อณ�พรหม รหส
503050369-87.น�งส�วอรษ� พนธเทศ รหส
503050377-98.น�ส�วอรณน โทเท รหส
503050387-7
เสนอ อ�จ�รยอสร� ก�นจกร
เอกส�รฉบบนเปนสวนหนงของร�ยวช�ก�รพฒน�ทกษะด�นก�รใชเทคโนโลยส�รสนเทศ
ภ�คเรยนท 1 ปก�รศกษ� 2551คำ�นำ�
เนองจากในปจจบนเทคโนโลยสารสนเทศไดพฒนาไปอยางรวดเรวมากซงผใชกตองอาศยการเรยนรสงตางๆทเกยวของกบเทคโนโลย
สารสนเทศ ซงในทนเทคโนโลยแบงไดหลายประเภท ดงนนสมาชกในกลม ไดเลงเหนถงความสำาคญจงไดทำาการศกษาเทคโนโลยสารสนเทศ
Numerical Literacy จงไดคนหาขอมลแลวนำามาคดกรองเพอเกบไวเปน เอกสารไวศกษาใหสำาหรบผทสนใจ หรอผทตองการศกษาสามารถนำาไปใชให
เกดความรได ซงคณะผจดทำาหวงเปนอยางยงวาเอกสารฉบบนจะเปน ประโยชนตอผทตองการศกษา หากผดพลาดประการใดกขอ อภยไว ณ ทน
ดวย
คณะผจดทำ�
ส�รบญหนา
ความหมาย Numerical Literacy1
ความหมายของ CNC (Computer Numerical Control)2
ขอด/ขอเสย9
Numerical Programming11
ตวอยางของการทำางานของเครองปรนเตอร30
Numerical Literacy
Numerical คอ ตวเลข 0 ถง 9 ตวอกษร หรอโคด เชน A , B , C ถง Z และสญลกษณอน ๆ เชน เครองหมาย + , - และ %
Numerical Literacy จงหมายถง การรทางตวเลข ซงเปนวชาเกยวกบ ตรรก เปนตวเลขทใชเกยวกบการควบคมเครองจกรกลตางๆ ซงเปนราย
ละเอยดเกยวกบ CNC (Computer Numerical Control)
C ยอมาจาก Control ( คอนโทรล ) หมายถง การควบคมโดยกำาหนด คา หรอตำาแหนงจรงทตองการเพอใหเครองจกรทำางานใหไดคาตามท
กำาหนด
เอนซ ( NC ) หมายถง การควบคมเครองจกรกลดวยระบบตวเลขและ ตวอกษร ซงคำาจำากดความนไดจากประเทศสหรฐอเมรกา กลาวคอ การ
เคลอนทตาง ๆ ตลอดจนการทำางานอน ๆ ของเครองจกรกล จะถก
ควบคมโดยรหสคำาสงทประกอบดวยตวเลข ตวอกษร และสญลกษณอน ๆ ซงจะถกแปลงเปนเคลอนสญญาณ ( Pulse ) ของกระแสไฟฟาหรอ
สญญาณออกอน ๆ ทจะไปกระตนมอเตอรหรออปกรณอน ๆ เพอทำาใหเครองจกรกลทำางานตามขนตอนทตองการ
ความหมายของ CNC (Computer Numerical Control)
Computer ยอมาจาก คอมพวเตอรทตดตงบนเครองจกร
Numerical คอ ตวเลข 0 ถง 9 ตวอกษร หรอโคด เชน A , B , C ถง Z และสญลกษณอน ๆ เชน เครองหมาย + , - และ %
C ยอมาจาก Control ( คอนโทรล ) หมายถง การควบคมโดยกำาหนด คา หรอตำาแหนงจรงทตองการเพอใหเครองจกรทำางานใหไดคาตามท
กำาหนด
ดงนน ซ เอน ซ ( CNC ) ซงยอมาจาก Computer Numerical Control คอ คอมพวเตอรหรอไมโครโปรเซสเซอร สำาหรบใชควบคมการ
ทำางาน โดยมากจะเปนงานโลหะทมความซบซอนและตองการความแมนยำา สง โดยทการหลอไมสามารถทำาไดหรอสามารถทำาไดกตาม
เครองจกรกลเอนซในปจจบนนนสวนมากจะหมายถง เครองจกร กล ซเอนซ ซงจะมคอมพวเตอรทสามารถเขาใจตวเลขและตวอกษรหรอ
โปรแกรมทปอนและขณะเดยวกน จะใชคอมพวเตอรสำาหรบการควบคม เครองจกรจากคำาสง หรอ โคดในโปรแกรมทปอนเขาไป โดยโปรแกรมดง
กลาวสามารถปอนเขาคอมพวเตอรโดยใช
1. คยบอรด ( Keyboard ) หรอ แปนพมพ
2. สอบนทกความจำา เชน แผนดสก , แถบเทปแมเหลก และ แถบเทป กระดาษ
3. ระบบสอสารเชอมโยงขอมล เชน สายสงสญญาณ RS 232
เครองจกรกลพนฐานเชน เครองกลง เครองกด เครองเจยรนย และเครองตดโลหะแผนเปนเครองจกรกลทมความสำาคญอยางยงตอ
อตสาหกรรมการผลตชนสวนเครองจกร เครองยนต และแมพมพ ตลอด – จนหนวยงานสราง ซอมงานโลหะโดยทวไป และอาจกลาวไดวาความ
กาวหนาของเครองจกรกลประสทธภาพสงหลายประเภทในยคปจจบนลวนแตมรากฐานมาจากเครองจกรพนฐานเหลานทงสน
รปท 1 การทำางานของเครองกลงทใชมอคนในการหมนเกลยวขบเพอปอนมดกลงเขาหาชนงาน
ระบบ CNC (Computer Numerical Control) เปนระบบคอมพวเตอร ทถกสรางขนโดยมวตถประสงคหลกคอ เพอเปลยนแปลงและควบคม
สภาพการทำางานของเครองจกรกลพนฐานดงกลาวจากเดมซงใชแรงงาน คนในการทำางานรวมกบเครองจกร ใหเครองจกรเหลานสามารถทำางานได
โดยอตโนมตดวยตวเอง นอกจากน ระบบ CNC ยงชวยเพมความสามารถใหเครองจกรพนฐานเหลานสามารถทำางานลกษณะซบซอนไดดวยความรวดเรวและแมนยำาในระดบทพนความสามารถในการรบรของมนษยโดย
ทวไปหลายสบเทาตว สำาหรบการประยกตใชระบบ CNC ในเครองจกรพน ฐานดงกลาว ระบบ CNC จะประกอบไปดวยมอเตอรไฟฟาจำานวนหนงซง
ถกนำาไปใชในการหมนเกลยวขบแทนมอคน และระบบคอมพวเตอรซงใชใน การควบคมมมและความเรวทมอเตอรไฟฟาเหลานนหมนเกลยวขบ โดย
ระบบคอมพวเตอรดงกลาวสามารถควบคมมมของมอเตอรไดดวยความ ละเอยดถง 0.1 องศาหรอดกวา หรอสามารถใหความละเอยดในการปอน
อปกรณตดเขาสชนงานสงถง 0.02 มม หรอดกวา ทงนขนอยกบระยะ คลอนของเกลยวขบ ตวอยางของการใชงานระบบ CNC กบเครองกลงใน
การปอนมดกลงโดยใชมอเตอรไฟฟา 2 ตวแสดงไวในรปท 2
รปท 2 ระบบ CNC ใชมอเตอรไฟฟาในการหมนเกลยวขบเพอปอนอปกรณตดและใชระบบคอมพวเตอรในการควบคมมมและความเรวในการหมนของมอเตอร
ในปจจบน มการใชระบบ CNC สำาหรบเครองจกรพนฐานใน อตสาหกรรมผลตชนสวนเครองจกรกล เครองยนต แมพมพ และในหนวย
– งานสราง ซอมอยางแพรหลาย หากประมาณคราวๆ มลคาเบองตนของ ระบบ CNC ในอตสาหกรรมเหลานอยในระดบหลายพนลานบาท ในทาง
ปฏบตระบบ CNC ดงกลาวและผเชยวชาญในระบบดงกลาวถกนำาเขาจาก ประเทศทพฒนาแลว เชน สหรฐอเมรกา เยอรมน และ ญปน เปนตน ทงน
เนองจาก CNC ดงกลาวเปนเทคโนโลยระดบสงทยากตอการออกแบบและ การทำาความเขาใจจนสามารถนำามาใชงานไดจรง อยางไรกตาม ดร. พนจ
งามสม ไดใชเวลากวา 4 ปในการวจย ออกแบบ และพฒนา จนประสบผล สำาเรจในการสรางระบบ CNC ทใชงานไดจรง โดยงานวจยทเปนรากฐาน
ของผลงานนไดรบการพจารณาใหเปนบทความดเดนสาขา Dynamics, Systems, and Control ในการประชมเครอขายวศวกรรมเครองกลแหง
ประเทศไทย ในป พ.ศ. 2545 และไดรบการตพมพในวารสารวชาการระดบ สากลทมความแขงแกรงทางวชาการมากทสดเลมหนง คอ Journal of
Dynamic System, Measurement, and Control โดย American Society of Mechanical Engineers ในป พ.ศ. 2546
ระบบ CNC ทสรางขนนสามารถควบคมมม ความเรว และแรงบดในการหมนของมอเตอรไฟฟาภายใตความไมแนนอนของภาระงานและ
คณสมบตภายในได 4 ตวพรอมกน ( ขยายไดเปน 8 ตวเพอการควบคมแขนกลลกษณะตางๆ) โดยใชมาตรฐานรหส G และ M ในการสงการ ระบบสามารถแสดงความกาวหนาของการทำางานไดทงในเชงตวเลขและเชง
รปภาพบนจอคอมพวเตอร นอกจากนยงสามารถเปลยนพารามเตอรของ ระบบควบคมใหเขากบการใชงานควบคมเครองจกรไดหลากหลายรปแบบ
เชน เครองกด, เครองกลง, แขนกล, เครองตดพลาสมา, เครองลอกพนผว, และเครองพบโลหะ เปนตน ในการทดสอบ ระบบ CNC ทสรางขน ถกนำาไปใชในการควบคมเครองกดททำางานในสามมตโดยใชมอเตอร
ไฟฟากระแสตรงจำานวน 4 ตว ซงในจำานวนน มอเตอร 3 ตวถกใชไปในการ ปอนชนงานและดอกกดในแนว X, Y, และ Z สวนมอเตอรอกหนงตวใชใน
การหมนดอกกดชนงาน ระบบ CNC ทออกแบบและสรางขนนสามารถ ควบคมใหเครองกดทำางานไดโดยอตโนมตตามโปรแกรมทตงไว ดวยความ
ละเอยด 0.02 มม (ถกจำากดดวยระยะคลอนของเกลยวขบทใชอย) หลงจาก การพฒนาระบบ CNC ตนแบบเสรจสนลง ในปจจบนระบบ CNC ดงกลาว
มตนทนในการสรางประมาณ 60,000 บาทตอเครอง ( รปท 3 แสดงวงจร ควบคมของระบบ CNC, รปท 4 แสดงโปรแกรมควบคมททำางานบน
คอมพวเตอร, และรปท 5 แสดงตวอยางชนงานทไดจากเครองกดท ควบคมการทำางานโดยระบบ CNC ทออกแบบและสรางขน)
ระบบ CNC นกำาลงถกเผยแพรออกสภาคอตสาหกรรมและภาคการ ศกษาเพอการใชงานจรงในหลายรปแบบ ตนแบบของระบบ CNC ทใช
ควบคมการทำางานของเครองกดและเครองกลงถกใชเปนอปกรณการเรยนการสอนในหองทดลองระบบควบคมสงกดภาควชาวศวกรรมเครองกล
รปท 3 สวนหนงของวงจรควบคมระบบ CNC ทออกแบบและสรางขน
รปท 4 ระบบ CNC แสดงผลการทำางานและความกาวหนาบนคอมพวเตอร
รปท 5 ตวอยางชนงานทไดจากเครองกดทควบคมดวยระบบ CNC ทสราง ขน (Compressed250%)
ขอด
1. มความเทยงตรงสงในการปฏบตงานเพราะชนงานตาง ๆ ตองการขนาดทแนนอน
2. คณภาพสมำาเสมอทกชนงานเทากนหมดเนองจากผลตโดยใชโปรแกรม ในการสงเครองจกร CNC ทำางาน
3. โอกาสเกดความเสยหาย หรอตองแกไขชนงานนอยหรอแทบไมม เพราะชนงานททำาจะใชโปรแกรมในการควบคมถาผดพลาดกแกไขทโปรแกรม
4. สามารถทำางานไดตลอด 24 ชวโมงโดยไมตองหยดพกเครองแตตองม คนควบคมประจำาเครอง CNC
5. มความรวดเรวสงในการผลตทำาใหไดผลผลตสง เพราะสามารถกำาหนด ระยะเวลาในการผลตชนงานไดวาใชเวลาในการทำางานกชนตอวนาท / นาท
/ ชวโมง
6. สามารถคาดคะแนและวางแผนการผลตไดอยางแมนยำา เพราะรระยะเวลาในการ
ปฏบตงานเพอทจะนดหรอสงงานลกคาไดตรงตามเวลา
7. สามารถสลบเปลยนรปแบบของชนงานไดหลากหลายรปทรงเนองจากสะดวกและรวดเรวในการทำางานเพราะใชโปรมแกรมในการสงงาน
8. เมอเปรยบเทยบจำานวนผลผลตทเทากน เครองจกรกล ซเอนซ ใชพนทนอยกวาและลดพนทการจดเกบชนงาน
10. มความสะดวก สำาหรบใชในการผลตชนงานตนแบบทมการแกไขบอย ๆ เพราะเวลาแกไขสามารถแกไขไดทโปรแกรม
11. ชนงานทมความซบซอนสงและมหลายขนตอนการผลต สามารถใช เครองจกรกล
ซเอนซ เครองเดยว ทำาใหไมตองยายไปทำางานทเครองอนใหเสยเวลาในการปฏบตงาน
12. ลดขนตอนในการตรวจสอบคณภาพลงเพราชนงานนนไดขนาดเทากน ทก ๆ ชนแตควรเลอกคาของความเรวรอบ , ความเรวตด ใหเหมาะสม
เพอลดอายการสกหรอของทลทใช
13. ทำาใหสามารถใช ทล หรอ เครองมอตดไดอยางมประสทธภาพ เพราะ จะตองคำานวณคาตาง ๆ มากอนลงมอปฏบตงานกบเครองจกร CNC
14. ลดแรงงานในสายการผลตลงเนองจาก ผควบคมเครอง 1 คน สามารถคมได 3 ถง
5 เครอง
15. ใชอปกรณเสรมนอย ไมตองใชแผนลอกแบบ ( Camplates หรอTemplates ) แตผใชจะตองเขยนโปรแกรมใหถกตอง
ขอเสย
1. มราคาแพงมากเพราะตองนำาเขาจากตางประเทศเนองจากยงไมมการ ผลตเครองจกร CNC ภายในประเทศ
2. คาซอมแซมสง การซอมแซมมความซบซอน เพราะทง ฮารดแวร และ ซอฟตแวร รวมถง คอมพวเตอรและอปกรณไฟฟา อเลคโทรนกส ตองใช
ผชำานาญการ
3. อปกรณและซอฟตแวรเสรม ( Option ) มราคาสงและตองไดมาจากผ ผลตเครองจกร CNC นน ๆ เทานน
4. ตองมความรพนฐานทางวชาคณตศาสตรมากพอสมควรสำาหรบใชใน การเขยนโปรแกรมเพราะไมนนไมสามารถคำานวณหาคาของจดตาง ๆ ได
เลย
5. ตองมพนทในการทำางานวางพอและยงรวมไปถงสงอำานวยความสะดวก ตาง ๆ ใหแกผเขยนโปรแกรม NC
6. ตองหางานปอนใหเครองทำางานประจำาอยางสมำาเสมอไมใหหยดนงเพราะอาจจะทำาใหชนสวนบางอยางเสอมสภาพและเครองจกรจะไดรนเครองเตรยมพรอมตลอดเวลา
7. ไมเหมาะสมกบการผลตชนงานจำานวนนอย ๆ ควรใชกบผลตชนงาน จำานวนมาก ๆ เพราะจะไมตองเสยคาใชสงในจางพนกงาน
8. คาซอมบำารงรกษาเครองจกรสงมาก ๆ เพราะตองใชชางผชำานาญ เฉพาะทางในการซอมแซม
9. ชนสวนอะไหลถาเกดการชำารดหรอเสยหายในบางกรณ ตองรอสงมาจากตางประเทศอยางเดยวเนองจากไมไดผลตในประเทศ
10. คอนโทรลเลอร เปนภาษาองกฤษ ชางตองเรยนรและมการฝกอบรมการใชเครองและการเขยนโปรแกรมกอนเรมใชเครองเพราะไมนนจะใชไม
เปน
Numerical Programming
เขยนโปรแกรม bow_der_kleine
Numerical Arithmetic Programming คอ การเขยนโปรแกรมทเนน การคำานวน โดยใช Array และ Matrix เปนหลก การเรยกใช Operation
หรอ Function ตาง ๆ ไมจำาเปนตองเขาถงสมาชกแตละตวใน Array หรอMatrix แตสามารถเรยกใชผานตวแปรทเปน Array หรอ Matrix ไดเลย
เชน ตวอยางแรก เปนการใช Procecure Arithmetic ทการบวก ตองเขาถง สมาชกทกตวใน List
a = [1,2,3,4,5]
b = [5,4,3,2,1]
c = []
for i,j in zip(a,b):
c.append(i+j)
ตวอยางตอมา มการทำางานเหมอนตวอยางแรกทกประการ แตใชNumerical Arithmetic ทการบวกไมตองเขาถงสมาชกใน Array
from numpy import *
a = array([1,2,3,4,5])
b = array([5,4,3,2,1])
c = a+b
จะเหนไดวา การเขยนโปรแกรมแบบ Numerical อำานวยความสะดวก ในการเขยนโปรแกรมไดคอนขางมาก โดยเฉพาะอยางยง โปรแกรมทมการ
คำานวนทซบซอนมาก ๆ ภาษาเขยนโปรแกรมทรองรบการเขยนโปรแกรม แบบ Numerical มเพยงไมกภาษาเทานน ไดแก
MATLAB เขาใจวาเปนภาษาแรก ทรองรบ การเขยนโปรแกรมลกษณะน สวน Octave และ SciLab กถอวาเปนภาษา MATLAB แตม
Implementation ทตางออกไป
Python ดวยโมดล Numpy
FORTRAN 90 แตไมใช Arithmetic หลก และยงขาดอกหลาย ๆ Features
C++ ดวย Blitz++
จะเนน Python+Numpy และ MATLAB เปนหลก ซงการเขยน โปรแกรมทงสองภาษามความทาทายอยท จะทำาอยางไรถงจะใช for loop ให
นอยทสด การลด for loop เปนเรองทคอนขางจำาเปน ในการเขยน โปรแกรมแบบ Numerical เพราะนอกจากจะทำาใหโปรแกรมสนลง และอาน
งายขนแลว ในกรณของ Python+Numpy และ MATLAB ยงทำาให ความเรวของโปรแกรมเพมขนอกดวย ( อยางนอยหาเทา แตโดยปกตยสบ
ถงหาสบเทา)
การเขยนโปรแกรมแบบ Numerical ตางจากการเขยนโปรแกรมแบบ Procedure คอนขางมาก การจะลด for loop ไดนน ตองรเคลดไมลบตาง ๆ
พอสมควร
หลกการเขยน
1 Initial
การสราง Array หรอ Matrix นน มวธการอยมากมายหลายวธดวยกน วธ ทพน ๆ ทสด คอ กำาหนดคาสมาชกตาง ๆ ใน Array หรอ Matrix ดวยตว
เอง หาก Array หรอ Matrix มสมาชกจำานวนนอย ๆ กดไป แตเมอไรท สมาชกจำานวนมากขน กพมพกนนวบวมเหมอนกน ยกตวอยางเชน
# Python + Numpy
from numpy import *
# สราง Array
a = array([1,2,3,4,5])
# สราง 2D Array
a = array([[1,2,3,4,5], [6,7,8,9,10]])
# สราง 3D Array
a = array([[[1,2,3,4,5], [6,7,8,9,10]],[[1,2,3,4,5], [6,7,8,9,10]]])
# สราง Matrix
b = matrix('1 2 3;0 0 1;1 12 0')
# สราง Matrix
b = matrix([[1, 2, 3], [0, 0, 1], [1 12 0]])
# สราง Matrix จาก Array
b = matrix([a,a,a])
Ex2
% MATLAB
% สราง 1D Matrix แนวนอน
a = [1,2,3,4,5]
% สราง 1D Matrix แนวตง
a = [1;2;3;4;5]
% สราง 2D Matrix
b = [[2,3,4];[4,5,6];[6,7,8]];
หมายเหต จะเหนไดวา MATLAB และ Numpy มความคลายคลงกน พอสมควร แตมจดตางทสำาคญมากคอ Numpy แยกระหวาง Array และ
Matrix โดย Operation ระหวาง Array จะเปนแบบ สมาชกตอสมาชก(elementwise operation) และจะมกมตกได สวน Matrix จะเปนแบบLinear Algebra ทม 1 หรอ 2 มต แตใน MATLAB มองทกอยางเปนMatrix ทม 1 หรอ 2 มต
วธสราง Array หรอ Matrix แบบตอมา เปนการสรางแบบเรยงลำาตบ ตวเลข เชน 1-100 หรอ กลบหลงเปน 100-1 เปนตน ซงวธนใน MATLAB
คอนขางงายกวา Numpy เพราะใชแคเครองหมาย : สวนใน Numpy ตอง เรยกใชฟงกชน arange(), r_[], c_[] ซงคอนขางยงยากและสบสนพอ
สมควร
ประโยชนของการสราง Array ในลกษณะนคอ การนำา Array ทไดไป เปน แกน x หรอ แกน y ในการแทนคาผานฟงกชนหนง ๆ ยกตวอยางเชน
เราอยากรคาของ sin(x) ท x มคาตงแต -10 ถง 10 เรากสรางแกน x ทม
คาตามทตองการ แลวนำาแกน x ทได ไปหาคาฟงกชน เปนตน ตอไปนคอตวอยางการใชงานครบ
>>> from numpy import *
>>> # สราง Array ทมคาตงแต -10 ถง 10 โดยสมาชกแตละตว มคาหาง กน 0.5
>>> x = arange(-10,10,0.5)
>>> y = sin(x) # คำานวนหาคา ฟงกชนผานแกน x
>>> # r_[begin:end:interval] เหมอน arange() ทกประการ ในกรณน สรางแกน x แบบกลบดาน
>>> x = r_[10:-10:-0.5]
>>> # c_[] คลาย ๆ r_[] แตสามารถสราง Muti Dimension Array ได
>>> x = c_[1:5,2:6]
>>> y = x**2 + 3*x + 4 # คำานวนคา พหนาม
>>> # สราง Matrix จาก c_[] แลวนำาคาทไดมาคณกน
>>> x = matrix(c_[1:5,2:6]) * matrix(c_[1:5,2:6]).T
Ex2
>> % เหมอนตวอยางแรกใน python เกอบทกประการ แตใน MATLAB จะรวมคาสดทายลงไปในผลทไดดวย
>> % Syntax begin:interval:end
>> x = -10:0.5:10;
>> y = sin(x);
>> % สราง Matrix ในเครองหมาย ; คนระหวาง row
>> x = [1:5;2:6] ;
วธสราง Array หรอ Matrix อกแบบคอ การสราง Array หรอMatrix ทเปนคาคงท นนหมายความวา สมาชกทกตวใน Array หรอMatrix มคาเดยวกนหมด คาคงททมกถกนำามาใชบอย ๆ คอ ศนย และ
หนง เพราะทงสองคา เปนคณสมบตการบวก และการคณตามลำาดบ ในMATLAB และ Numpy จงมฟงกชนทใชสราง Array หรอ Matrix ทมคา
ศนย หรอ หนงโดยเฉพาะ ซงเราสามารถดดแปลงเปนการสราง Array คา คงตวอน ๆ ได ดวยการบวก หรอคณคาคงตวอน ๆ จาก Array ทได
การสราง Array ลกษณะน จะถกนำามาใชงานรวมกบ Array Slicing และ Conditioning ในกรณท เราตองการเกบคาทไดจากการคำานวน ไวใน
สมาชกของ Array ทเราตองการ โดยทเรารขนาดของ Array ลวงหนา ( อานแลวงง ๆ เอาเปนวาดตวอยาง ใน Slicing และ Condition อกท)
>>> from numpy import *
>>> # สราง Array หนงมต มสมาชสบตว และสมาชกทกตวมคาเปนศนย
>>> a = zeros(20)
>>> # เหมอนตวอยางแรก แตกำาหนดประเภทตวแปร เปนจำานวนเชงซอน
>>> a = zeros(20, dtype=complex64)
>>> # เหมอนตวอยางทสอง แต เปน Array สองมต ขนาด 10x10
>>> a = zeros((10,10), dtype=complex64)
>>> # เหมอนตวอยางทสาม แตสมาชกทกตวมคาเปนหนง
>>> a = ones((10,10), dtype=complex64)
>>> # เหมอนตวอยางทส แต เปน Array สามมต ขนาด 10x10x10
>>> a = ones((10,10,10), dtype=complex64)
>>> # เหมอนตวอยางทหา แตสมาชกทกตวมคาเปน pi และ เปนตวแปร ประเภท float
>>> a = ones((10,10,10)) * pi
Ex2
>> % สราง Matrix ขนาด 10x10 สมาชกทกตวมคาเปนศนย
>> a = zeros(10) ;
>> % สราง Matrix ขนาด 1x10 สมาชกทกตวมคาเปนศนย
>> a = zeros(1,10) ;
>> % สราง Matrix ขนาด 10x1 สมาชกทกตวมคาเปนศนย
>> a = zeros(10,1) ;
>> % สราง Matrix ขนาด 10x1 สมาชกทกตวมคาเปนหนง
>> a = ones(10,1) ;
>> % สราง Matrix ขนาด 10x1 สมาชกทกตวมคาเปนหนง
>> a = ones(10,1) ;
>> % สราง Matrix ขนาด 10x1 สมาชกทกตวมคาเปน pi
>> a = ones(10,1)*pi;
>> % สราง Matrix ขนาด 10x1 สมาชกทกตวมคาเปน 0 + 1i (จำานวนเชงซอน)
>> a = zeros(10,1) + i*ones(10,1)
การสราง Array แบบสดทายทผมจะนำาเสนอ คอ การสราง Array แบบสม ซงสามารถนำาไปใชประโยชนไดคอนขางมาก โดยเฉพาะใน Simulation ซง
Array แบบสม ทมกถกนำามาใชบอย ๆ มดวยกนสองแบบคอ Normal Distribution กบ Uniform Distribution สวน Distribution อน ๆ นน มให
เลอกใชมากมาย ทงใน Numpy และ MATLAB แตผมรสกวาของMATLAB เจงกวาของ Numpy พอสมควร
>>> from numpy import *
>>> # การสราง Array แบบสม ตองการโมดลแยกตางหาก
>>> from numpy.random import *
>>> # Uniform Distribution สมาชกมคาตงแต 0-1 ขนาด 100000
>>> a = random(100000)
>>> # Uniform Distribution สมาชกมคาตงแต 0-1 ขนาด 100x100
>>> a = random((100,100))
>>> # Uniform Distribution (Integer) สมาชกมคาตงแต -10-10 ขนาด100x100
>>> a = randint(-10,10, (100,100))
>>> # Normal Distribution ขนาด 100x100 , Mean = 0, Sigma = 1
>>> a = normal(0,1,(100,100))
Ex2
>> % Uniform Distribution สมาชกมคาตงแต 0-1 ขนาด 1x100000
>> a = random('uniform',0,1,1,100000);
>> % Uniform Distribution สมาชกมคาตงแต 0-1 ขนาด 100x100
>> a = random('uniform',0,1,100,100);
>> % Uniform Distribution (Integer) สมาชกมคาตงแต 0-1 ขนาด100x100
>> a =floor(random('uniform',-10,10,100,100));
>> % Normal Distribution ขนาด 1x100000 , Mean = 0, Sigma = 1
>> a = random('normal',0,1,1,100000);
2 Slicing
เมอสราง Array ไดแลว ปญหาตอมาคอ เราจะนำาสมาชกทอยใน Array มา ใชไดอยางไร โดยปกตหากเรานำาตวแปร Array มาใช โดยทไมไดระบการเขา
ถงสมาชก หมายความวา เราตองการคำานวน โดยใชคาจากสมาชกทกตว ซงเปนการคำานวนแบบ Numerical ทว ๆ ไป แตกมการคำานวนหลาย ๆ
กรณ ทเราตองการคาบางคาของ Array มาใช ซงกรณเหลาน สามารถ กำาหนดไดโดย Slicing และ Conditioning
การเลอกสมาชกใน Array โดย Slicing นน เราสามารถกำาหนดไดโดยพารา เมเตอรสามตวคอ Index ของสมาชกตวแรก ทเรา ตองการเลอก (begin)
ความหางของ Index ระหวางสมาชกแตละตว ทเราตองการเลอก(interval) และ Index ของสมาชกตวสดทายทเราตองการเลอก (end)
ระหวาง MATLAB และ Numpy นน มขอแตกตางกนเลกนอยคอMATLAB จะเรยงลำาดบการ Slicing เปน begin:interval:end สวนNumpy จะเปน begin:end:interval
นอกจากนใน Numpy ยงม Syntax ทคอนขางยดหยนกวา MATLAB กลาวคอ เราสามารถละคา begin, end และ interval ได การละคาดงกลาว
เทากบเรากำาหนดคาตาง ๆ เปนคาปรยาย โดยคาปรยายมคาดงน begin=1 ในกรณท interval มคาเปนบวก และมคาเปนขนาดของ Array-1 ในกรณท
interval มคาเปนลบ สวน end มคากลบกน และ interval มคาปรยายเปน -1
>>> from numpy import *
>>> # สราง Array ทมคาสมาชกตงแต 0 - 9999
>>> a = arange(10000)
>>> # เลอกสมาชก Array ทมคา Index เปน เลขค
>>> a[::2]
>>> # เลอกสมาชก Array ทมคา Index เปน เลขค
>>> a[1::2]
>>> # Inverse ของ Array
>>> a[::-1]
>>> # เลอกสมาชกของ Array ทกตว ยกเวน 20 คาสดทาย
>>> a[:-20]
>>> # เลอกสมาชกของ Array ยกเวน 20 คาสดทาย และ 10 คาแรก เรยงIndex จากมากไปหานอย
>>> a[-20:10:-1]
>>> # สราง Array สองมต ขนาด 2x100 ท column แรกสมาชกมคา ตงแต 0 -99 และ column ทสองสมาชกมคาตงแต100-1
>>> b = c_[:100,100:0:-1]
>>> # เลอกคาทกคาใน row แรก
>>> b[0,:]
>>> # เลอกคาทกคาใน column แรก
>>> b[:,0]
Ex2
>> % สราง Matrix ทมคาสมาชกตงแต 1 - 10000
>> a = 1:10000;
>> % เลอกสมาชก Matrix ทมคา Index เปน เลขค
>> a(1:2:end)
>> % เลอกสมาชก Matrix ทมคา Index เปน เลขค
>> a(2:2:end)
>> % Inverse ของ Matrix
>> a(end:-1:1)
>> % เลอกสมาชกของ Matrix ทกตว ยกเวน 20 คาสดทาย
>> a(1:1:end-20)
>> % สราง Array สองมต ขนาด 100x2 ท row แรกสมาชกมคาตงแต 1 -100 และ row ทสองสมาชกมคาตงแต 100-1
>> b = [1:1:100;100:-1:1]
>> % เลอกคาทกคาใน row แรก
>> b(1,1:end)
>> % เลอกคาทกคาใน column แรก
>> b(1:end,1)
ตวอยางตอไปน เปนการเปลยนจาก Bit-Array ทประกอบดวยคา 1 และ 0 เปนสญญาณรป Sine (sin(x)) โดยคา Bit-Array หนงคา จะถก
แปลงเปนคาสญญาน 32 คา (32 Samples per Bit) โดยมเงอนไขวา หากBit มคาเปน 0 สญญาณจะมคาเปน -sin(x) และหาก bit มคาเปน 1
สญญาณจะมคาเปน sin(x) เนองจากโคดของ Numpy และ MATLAB คลายกนมาก ผมเลยขอละ โคดของ MATLAB เอาไว
>>> from numpy import *
>>> from numpy.random import *
>>> # กำาหนดจำานวน bit ของ Bit-Array
>>> nbit = 10000
>>> # กำาหนดจำานวน Samples per bit ของ สญญาณ
>>> sample = 32
>>> # สราง Bit-Array ดวยการสม
>>> bit = randint(0,2,nbit)
>>> # สรางสญญาณพนฐาน
>>> sig = sin(arange(sample*nbit)*pi/16)
>>> # คำานวนคา prefix หาก bit == 1 => prefix = 1 , bit == 0 => prefix = -1
>>> prefix = bit*2 -1
>>> # คำานวนคาสญญาณ
>>> for i in range(sample) : sig[i::sample] = prefix*sig[i::sample]
ตวอยางตอมา คลาย ๆ กบตวอยางกอนหนาน แต Bit-Array เปน Array สองมต และสญญาณทไดเปนสญญาณเชงซอน โดยคาของ Bit-Array ใน
row ทหนง จะถกแปลงเปนสวนจรงของสญญาณ และ คาของ Bit-Array ใน row ทสอง จะถกแปลงเปนสวนจนตภาพของสญญาณ นอกจากน ยง
กำาหนดใหฟงกชนพนฐานของสวนจตภาพของสญญาณ เปน Cosine แทนทจะเปน Sine อกดวย
>>> from numpy import *
>>> from numpy.random import *
>>> nbit = 10000
>>> sample = 32
>>> bit = randint(0,2,(2,nbit))
>>> # สรางสญญาณพนฐาน เปนสญญาณเชงซอน
>>> sig = sin(arange(sample*nbit)*pi/16) + 1j * cos(arange(sample*nbit)*pi/16)
>>> prefix = bit*2 -1
>>> # คำานวนคาสญญาณ โดยใชการ Slicing แบบสองมต และแยกคำานว นระหวางสวนจรง และสวนจตภาพ
>>> for i in range(sample) : sig[i::sample] = prefix[0,:]*sig[i::sample].real + 1j*prefix[1,:]*sig[i::sample].imag
เพอแสดงใหเหนถงขอแตกตาง ตวอยางตอไปนเปนโปรแกรมเดยวกน กบ ตวอยางกอนหนาน แตใช List ของ Python แทน Array ในการคำานวน
แมวา List ของ Python จะสามารถ slice ได แตกไมสามารถคำานวนในรป แบบ Numerical ได ดงนนเราจงตองใช for loop ในการเขาถงสมาชกทก
ตว ผลทไดคอ โคดทมความยาวมากขน และยงใชเวลาในการคำานวน มากกวาการคำานวนแบบ Numerical ถงแปดเทา
>>> from random import *
>>> from math import *
>>> nbit = 100000
>>> sample = 32
>>> bit = [[],[]]
>>> for i in xrange(nbit):
... bit[0].append(randint(0,2))
... bit[1].append(randint(0,2))
>>> sig = []
>>> for i in xrange(sample*nbit):
... sig.append( sin(i*pi/16) + 1j*cos(i*pi/16))
>>> prefix = bit
>>> for i in xrange(nbit):
... prefix[0][i] = bit[0][i]*2 - 1
... prefix[1][i] = bit[1][i]*2 - 1
>>> for i in xrange(nbit) :
... for j in xrange(sample):
... sig[i*sample + j] = prefix[0][i]*sig[i*sample + j].real + 1j*prefix[1][i]*sig[i*sample + j].imag
ตวอยางสดทาย เปนตวอยางทแสดงใหเหนถงประโยชนของการใช งาน zeros รวมกบ Slicing โดยในตวอยางน เราตองการหา Array ทม
ลกษณะสมมาตร (symmetry) โดยในขนแรก เราสราง Array ทมขนาดครง นง ของขนาด Array ทเราตองการกอน จากนนเราจงคำานวนคาฟงกชน จาก Array ดงกลาว แลวจงสงคาทได ไปยง Array ทเราตองการ โดยใช
Slicing
>>> from numpy import *
>>> x = sin(arange(0,10,0.01))
>>> y = zeros(2*x.shape[0], dtype=float32)
>>> y[:x.shape[0]] = 1*x
>>> y[x.shape[0]:] = 1*x[::-1]
3 Conditioning
Conditioning คอ การเขาถงสมาชกของ Array โดยมเงอนไข หากไม ใช Numerical ในการคำานวน กคอ การใช if-statement ใน loop นนเอง โดย
ในขนแรก เราตองกำาหนดเงอนไขกบ Array ทเราตองการกอน ผลทไดคอArray ทมสมาชกเปนคา boolean และมจำานวนสมาชกเทากบ Array ทเรา
กำาหนดเงอนไข จากนน เราจงนำา Array ทได ไปเปนตวกรอง สำาหรบ Array ทเราตองการเลอกคา ซงตองมจำานวนสมาชกเทากบ Array เงอนไข ผลท
ไดคอ Array อกตวหนง ซงใชตรรกะจาก Array เงอนไข ในการเลอก สมาชก จาก Array เลอกคา อานแลวงงเหมอนเดม ดตวอยางดกวาครบ
>>> from numpy import *
>>> from math import *
>>> a = normal(0,1,1000)
>>> # สราง Array เงอนไข ทมคาเปน True เมอ สมาชกของ a มคา มากกวา 0
>>> cond = a > 0
>>> # สราง Array ทมคณสมบตเหมอน a แตสมาชกทกตวมคาเปนศนย
>>> c = zeros_like(a)
>>> # สำาหรบ a ทมคามากกวา ศนย ใหหาคา sin ของ a แลวเกบไวใน c
>>> c[cond] = sin(a[cond])
>>> # สำาหรบ a ทมคานอยกวา ศนย ใหหาคา cos ของ a แลวเกบไวใน c
>>> c[~cond] = cos(a[~cond])
Ex2
>> % การคำานวนเหมอนตวอยางใน Numpy ทกประการ
>> a = random('normal',0, 1, 1, 1000);
>> cond = a > 0;
>> c = zeros(size(a));
>> c(cond) = sin(a(cond));
>> c(~cond) = sin(a(~cond));
ตวอยางตอไปน เปนตวอยางคลาย ๆ กบตวอยางการสรางสญญาณ ใน Array Slicing แตแทนทจะสรางสญญาณเปนรป sin กสรางสญญาณ
เปนรป Gauss แทน จากนนจงบวกคา Noise ลงไปในสญญาณ จากนนก กรองสญญาณดวย Gauss-Filter แลวจงมาคำานวนกลบเปนคา bit อกครง
หนง คา bit ทได จะถกนำาไปเปรยบเทยบกบคา bit ทถกสรางขนในตอนแรก เพอคำานวนหาอตราขอผดพลาดของการสงสญญาณ แมวาจะเปนตวอยาง
ทคอนขางซบซอน แตกแสดงการนำาเทคนคตาง ๆ มาใชงานไดดทเดยว
#!/usr/bin/python
# -*- coding: utf-8 -*-
from numpy import *
from numpy.random import *
from numpy.fft import *
# Gauss low pass filter
def gauss_lp(dimen):
# คำานวน Gauss Filter
return roll( exp(-0.5*arange(-8,8,16/float(dimen), dtype=complex64)**2), dimen/2)
def get_signal_error():
nbit = 100000
sample = 32
bit = randint(0,2,(2,nbit))
prefix = (bit[0]*2-1) + 1j*(bit[1]*2 -1)
sig = zeros(sample*nbit, dtype=complex64)
# คำานวน Gauss-Impulse (สญญาณรประฆงควำา)
impulse = exp(-0.5*arange(-4,4,0.25)**2)
for i in range(sample) :
# แปลง Bit เปนสญญาณรป Gauss
sig[i::sample] = impulse[i]*prefix
# คำานวนสญญาณรบกวน
noise = normal(0,0.75,nbit*sample) + 1j*normal(0,0.25,nbit*sample)
# บวกสญญาณรบกวรลงไปในสญญาณ
sig += noise
# กรองสญญาณดวย Gauss-Filter
sig = ifft(fft(sig)*gauss_lp(sample*nbit))
# คำานวนหา Bit ทไดจากสญญาณ หากสญญาณมคามากกวา 0 => Bit = 1
bitOut = array([ 1*( sig[16::32].real > 0), 1*( sig[16::32].imag > 0)])
# หาจำานวน Bit ทผดพลาด โดยเปรยบเทยบ Bit ขาเขา กบ Bit ขาออก
BER = sum(sum(bit != bitOut)) / (2.0*nbit)
print 'Bit Error Rates = %.5f '%BER
if __name__ == '__main__' : get_signal_error()
แมวาโปรแกรมในตวอยางสดทาย ( หรอตวอยางอน ๆ ) สามารถใชการ เขยนโปรแกรมแบบทเรารจกกนทวไป แกปญหาได ( ทง Numpy และ
MATLAB) แตขนาดของโปรแกรมตองมขนาดใหญกวาหลายเทา และท สำาคญ โปรแกรมทไดมความเรวตำากวาการใช Numerical มาก
การควบคมเชงตวเลขดวยคอมพวเตอร ( CNC )
การควบคมเชงตวเลขดวยคอมพวเตอร หรอทรจกกนในชอของCNC ( Computerized Numerical Control ) นน
เปนการประยกตใชความสามารถขนสงของระบบควบคมทประมวลผลเชง ตวเลข ซงมคอมพวเตอรเปนอปกรณหลก
ในการประมวลผลความเรวสง โดยนำามาใชกบการควบคมกระบวนการ ทำางานของเครองจกรในอตสาหกรรมการผลต
ดงนน จงอาจกลาวไดวา CNC คอ การควบคมเครองจกรกลดวย คอมพวเตอร ซงจะตองทำาการเขยนชดคำาสง หรอ
โปรแกรมสำาหรบควบคมเครองจกรดวย โดยทวไปแลว นยมเรยกรวมทง ระบบควบคมและเครองจกรวา เครอง CNC
ปจจบน มการนำาความสามารถดานการควบคมของฟซซลอจกมา ผนวกใชกบ CNC เพอชวยเพมความถกตองแมนยำา และปรบแตงคาตางๆ
ในการควบคมการทำางานของเครอง CNC ดวย
การเลอกซอ CNC มาใชงานนนเราตองดกอน วางานของเรานนขน รปดวยกรรมวธการผลตแบบใด หลกๆ นนเครอง CNC ทใชทวไปพนฐาน
นนกคอ เครองกลง และ เครองกด สำาหรบหลกการเบองตนนน จะเลอกเครองจกรดงน
1. ประเภทของงาน วสดทใชสรางชนงาน( เหลก อะลมเนยม หรอไม )
2. ขนาดของงาน เลอกเครองจกรทม table ทใหญกวาชนงาน เลอกใหญๆ ไวกด เพราะเผอทำางานทมขนาดใหญๆ ได
3. ความละเอยดในการสรางชนงาน ตองดกอนวางานของเรานนตองการprecission มากนอยแคไหน โดยปกตแลวในระดบ 0.1 mm (100 ไมครอน)
กนาจะเหมาะสม นอกเสยจากวาตองการละเอยดในระดบ 10-50 ไมครอน กตองเลอกเครองจกรทละเอยดหนอย
4. ความเรวรอบของหวจบ หรอหวกด รวมถงกำาลงของเครองจกร ดวย
การควบคมเครองจกรดวยระบบเชงตวเลข โดยจดหาและประมวลผลดวย คอมพวเตอร กลาวคอ ระบบควบคมแบบนจะมคอมพวเตอรทมความสง
เพมขนเขาไปในระบบเพอทำาใหสามารถจดการกบขอมลทปอนเขาไปในระบบ น ตลอดจนสามารถประมวลผลขอมลเพอนำาผลลพธทไดไปควบคมการ
ทำางานของเครองจกร
ตวอย�งของ CNC
ก�รทำ�ง�นของปรนเตอร
การทำางานของเครองพมพ
1. Initailized เครองพมพ โดย
1. เครองคอมพวเตอรจะสงสญญาณ Reset ไปท Printer Card
2. Printer Card จะสงสญญาณ Reset ผาน Parallel Port ไปท เครองพมพ
3. Printer Card จะสงสญญาณ STROBS ผาน Parallel Port ไปท เครองพมพ ไฟ Online ทเครองพมพจะตด และเครองพมพจะสง
สญญาณ Select กลบมาท Printer Card และ Printer Card จะสง สญญาณ I/O CH RDY ไปทเครองคอมพวเตอร ซงจะแสดงวา
เครองพมพพรอมทำางาน
2. การพมพงานออกจากเครองพมพ
1. เครองคอมพวเตอรจะสงสญญาณ IRQ 7 ไปท Printer Card
2. เครองคอมพวเตอรจะสงสญญาณ I/O W ไปท Printer Card
3. Printer Card จะสงสญญาณ I/O CH RDY ไปทเครอง คอมพวเตอร เพอจะแสดงวาเครองพมพพรอมรบขอมล
4. เมอเครองคอมพวเตอรไดรบสญญาณ I/O CH RDY จะสงขอมล ผานพอรตขนาน ไปท Printer Card
5. เครองพมพจะสงสญญาณ Select ไปท Printer Card เพอจะแสดง วาเครองพมพพรอมรบขอมล
6. Printer card จะสงขอมล Buffer ของเครองพมพ เพอพมพงาน ตามลำาดบ
7. เครองพมพจะสงสญญาณ ACK ไปท Printer Card เพอจะแสดง วาเครองพมพไดรบขอมลแลว
8. เครองพมพจะสงสญญาณ BUSY ไปท Printer Card เพอจะ แสดงวาเครองพมพกำาลงพมพงานอย ไมวางทจะรบขอมลใหมไดอก
จนกวาจะพมพงานเสรจ
3. ถาเกดปญหาระหวางการพมพ จะมการทำางานดงน
1. ถากระดาษหมด paper out sensor ในเครองพมพจะตรวจพบ และ สงสญญาณ Paper Out ไปท Printer Card ไฟสญญาณแสดงสถานะ กระดาษจะตด หรอ ถากระดาษตดขด หรอกลไกขดของ sensor จะสง
สญญาณ Error ไปท Printer Card
2. เครองพมพจะสงสญญาณ select เปน 0 ไฟ online จะดบ
4. Printer Card จะสงสญญาณ I/O CH RDY เปน 0 เพอแสดงวาเครองพมพไมพรอมทจะทำางาน
ภาพวงจรการทำางานของปรนเตอร
อางองhttp://biolawcom.de/blog/709
http://en.wikipedia.org/wiki/Numeracy
Top Related