tag:blogger.com,1999:blog-78269970227165747362024-02-20T17:30:32.696+07:00LabVIEWUnknownnoreply@blogger.comBlogger53125tag:blogger.com,1999:blog-7826997022716574736.post-31137713684080258292011-07-05T11:07:00.068+07:002013-08-16T09:18:24.933+07:00Balancing robot with Kalman filter<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/ZOWyvaYOV8w" width="500"></iframe><br />
<br />
<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/Bj3Zwccj8wI" width="500"></iframe><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
<br />
<br />
จากครั้งที่แล้วหามุมการเอียงของหุ่นย์โดยใช้วิธี complementary filter พบว่าเมื่อหุ่นยนต์ run ไปนานๆแล้วมุมที่อ่านได้จาก sensor มีความผิดพลาดเกิดขึ้นเนื่องจากสัญญาณที่ได้เกิดการ drift เกิดขึ้นที่ gyro sensor ดังนั้นผมเลยเปลี่ยนวิธีในการหามุมเอียงใหม่โดยใช้วิธี sensor fusion kalman filter โดยมีขั้นตอนดังนี้ เริ่มจากการเขียน state-space ของ Predict model เสียก่อน เรานิยามว่ามุมที่ได้จาก gyro ก็คือผลของการ Integrate สัญญาณจาก gyro นั้นเองและเรายังสามารถนิยาม bias ของสัญญาณขึ้นมาอีกตัวหนึ่งเพื่อที่จะทำการ tracking ค่า bias ให้มีค่าคงที่<br />
<br />
หาสมการ Kalman Predict<br />
<br />
Kalman predict equation<br />
<br />
x_dot=Ax+Bu<br />
P=APA'+Q;<br />
//***********************************************************************************//<br />
<br />
theta_dot=(gyro-bias) ...........................................................................(1)<br />
bias_dot=0<br />
<br />
จากสมการ (1) เรานิยาม state variable ดังนี้ x=[theta;bias]<br />
จากนั้นให้เราหา jacobian matrix ก็คือการทำ partial derivative สมการ (1) เทียบกับ [theta;bias] จะได้ Matrix A,B ดังนี้<br />
<br />
A=[0 -1;0 0], B=[1;0]<br />
<br />
เมื่อนำมาเขียนให้อยู่ในรูปของ state-space เราจะได้ดังนี้ จาก<br />
x_dot=A*x+B*u<br />
<br />
x_dot=[0 -1;0 0]*x+[1;0]*gyro ...............................(2)<br />
<br />
<br />
จะเห็นได้ว่า (2) ยังเป็นสมการที่อยู่ในรูปของระบบแบบ continuous อยู่แต่ในทางปฎิบัติจริงส่วนมากแล้วเราจะใช้พวก MCU ดังนั้น เราจึง Transform ไปสู่ Discrete model เราจะได้<br />
x_dot=(x(n+1)-x(n))/dt=[0 -1;0 0]*x+[1;0]*gyro;<br />
<br />
<br />
x1_(n+1)=x1(n)+dt*(gyro-x2(n)) .............................................(3)<br />
x2(n+1)=x2(n)<br />
<br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
Ad=[1 -dt;0 1];</div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
Bd=[dt;0];</div>
<br />
<br />
gyro ก็คือค่า ที่อ่านจาก sensor<br />
x1 คือ theta<br />
x2 คือ bias<br />
dt คือ sampling time<br />
<br />
จากนั้นจะคำนวนหา Covariance matrix P จากสมการ<br />
P(n+1)=Ad*P(n)*Ad'+Q ..........................................(4)<br />
<br />
โดยที่<br />
Q=[Q_accelerometer 0;0 Q_gyro];<br />
<br />
เมื่อคูณ Matrix แล้วได้<br />
P(n+1)=[P00 - dt P10 - (P01 - dt P11) dt + Q_accelerometer , P01 - dt P11;<br />
P10 -dt P11, P11 + Q_gyro];<br />
<br />
P00(n+1)=P00 - dt P10 - (P01 - dt P11) dt + Q_accelerometer ; .......................(5)<br />
P01(n+1)=P01 - dt P11;<br />
P10(n+1)=P10 -dt P11;<br />
P11(n+1)= P11 + Q_gyro;<br />
<br />
<br />
<br />
จากนั้นพิจรณา Measurement Update<br />
Measurement Update equation:<br />
K=PH'inv(HPH'+R).........................................(6)<br />
P=(I-KH)P......................................................(7)<br />
x=x+K(y-Hx)...................................................(8)<br />
<br />
H คือ measure output matrix<br />
y คือ measure sensor<br />
R measurement noise matrix<br />
<br />
H=[1 0]; เนื่องจากเราวัดมุมได้อย่างเดียวนั้นคือ accelerometer<br />
P=[P00 P01;P10 P11]<br />
<br />
คูณ (6) ได้<br />
<br />
<br />
K1=P00/(P00+R);<br />
K2=P10/(P00+R);<br />
<br />
คูณ (8) ได้<br />
<br />
<br />
x1=x1+K1*(y-x1);<br />
x2=x2+K2*(y-x2);<br />
<br />
คูณ (7) ได้<br />
<br />
<br />
P00=(1-K1)*P00;<br />
P01=(1-K1)*P01;<br />
P10=-K2*P00+P10;<br />
P11=-K2*P01+P11;<br />
<br />
เป็นอันเรียบร้อยในการทำ Kalman filter sensor fusion<br />
<br />
จากนั้นเราก็จะนำสมการด้านบนทั้งหมดมาเขียนโปรมแกรมและโหลดลงใน Micro-conroller (CCS Compiler)<br />
<br />
*********************************** CODE ****************************************<br />
#include <18f458.h><br />
#device adc=10<br />
#fuses H4, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP<br />
#use delay(clock=40000000)<br />
#define TxD PIN_C6 <br />
#define RxD PIN_C7<br />
#use rs232(baud=115200, xmit=TxD,rcv=RxD)<br />
#include <stdlib .h=".h"></stdlib><br />
#include <math .h=".h"></math><br />
#include <input .c=".c" /><br />
#include <stdlib .h=".h"></stdlib><br />
<br />
<br />
#use rtos(timer=0,minor_cycle=10ms)<br />
<br />
<br />
<br />
<br />
float x[2][1]={{0.47},{0.0}};<br />
float u[1][1];<br />
float P[2][2]={{.01*.01*0.00000135 0 },{0}};<br />
float K[2][1];<br />
float x1=0.4656;<br />
<br />
<br />
<br />
float Q_roll=0.00000135,Q_roll_bias=.183;<br />
const float R=0.028;<br />
float dt=0.010;<br />
float fc=1.765;<br />
<br />
<br />
float roll();<br />
float qm();<br />
<br />
<br />
<br />
float gyro;<br />
float qm(){<br />
<br />
set_ADC_channel(0);<br />
delay_cycles(60); <br />
gyro=(float)read_adc()*1/1023;<br />
return(gyro);<br />
}<br />
<br />
<br />
<br />
float ax;<br />
float roll(){<br />
<br />
set_ADC_channel(2);<br />
delay_cycles(60); <br />
ax=atan((float)read_adc()*1/1023);<br />
return(ax);<br />
}<br />
<br />
<br />
<br />
<br />
<br />
// ****************************** LPF ****************************************//<br />
void LPF(){<br />
<br />
x1+=dt*(-2*pi*fc*x1+2*pi*fc*ax);<br />
<br />
<br />
<br />
<br />
}<br />
<br />
float fhc=0.01;<br />
float gyro1_old=0.34,tou,a,y=0;<br />
<br />
void HPF(){<br />
tou=1/(2*pi*fhc);<br />
a=tou/(tou+dt);<br />
y=a*y+a*(gyro-gyro1_old);<br />
<br />
<br />
<br />
gyro1_old=gyro;<br />
<br />
}<br />
<br />
// ************************* KALMAN PREDICT **********************************// <br />
void Kalman_Predict(float qm){<br />
HPF();<br />
u[0][0]=y;<br />
<br />
x[0][0]=x[0][0]+dt*u[0][0]-dt*x[1][0];<br />
x[1][0]=x[1][0];<br />
<br />
/* P=A*P*P'+Q */ <br />
<br />
P[0][0]=P[0][0]-dt*P[1][0]-(P[0][1]-dt*P[1][1])*dt+Q_roll; <br />
P[0][1]=P[0][1]-dt*P[1][1];<br />
P[1][0]=P[1][0]-dt*P[1][1];<br />
P[1][1]=P[1][1]+Q_roll_bias;<br />
<br />
}<br />
<br />
//************************ KALMAN MEASURE ************************************//<br />
<br />
void Kalman_Measurement(float roll){<br />
LPF();<br />
<br />
K[0][0]=P[0][0]/(P[0][0]+R);<br />
K[1][0]=P[1][0]/(P[0][0]+R);<br />
<br />
x[0][0]+=K[0][0]*(x1-x[0][0]);<br />
x[1][0]+=K[1][0]*(x1-x[0][0]);<br />
<br />
P[0][0]=(1-K[0][0])*P[0][0];<br />
P[0][1]=(1-K[0][0])*P[0][1];<br />
P[1][0]=-K[1][0]*P[0][0]+P[1][0];<br />
P[1][1]=-K[1][0]*P[0][1]+P[1][1];<br />
<br />
}<br />
<br />
<br />
<br />
//****************************************************************************//<br />
<br />
#task(rate=10ms,max=10ms)<br />
void MAIN_LOOP(){<br />
<br />
Kalman_Predict(qm());<br />
Kalman_measurement(roll());<br />
<br />
<br />
}<br />
<br />
#task(rate=10ms,max=10ms)<br />
void print(){<br />
<br />
printf("%.4f %.4f %.4f %.4f\r\n",ax,x[0][0],K[0][0],K[1][0]);<br />
}<br />
<br />
<br />
void main(){<br />
setup_port_a(0x07);<br />
setup_adc(adc_clock_internal);<br />
enable_interrupts(GLOBAL);<br />
<br />
while(TRUE)<br />
<br />
{<br />
rtos_run();<br />
<br />
}<br />
<br />
}<br />
<br />
<br />
<b><span style="color: blue;">สนใจติดต่อ : sarayuthassa@gmail.com</span></b><br />
<b><span style="color: blue;"> 083-4391356</span></b><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-7826997022716574736.post-51775918736500592662011-04-11T08:32:00.005+07:002013-12-02T02:35:15.545+07:00Labview spectrum<div class="separator" style="clear: both; text-align: center;">
</div>
บ่อยครั้งที่ข้อมูลที่อ่านเข้ามายัง PC จะเป็นแบบ Point by point ซึ่งไม่ใช่ Wave form ข้อมูลแบบนี้เมื่อจะนำมันไปวิเคราะห์อะไรก็ค่อนข้างลำบาก วันนี้ผมก็เลยนำเทคนิดเล็กๆ น้อยๆ มาฝากนะครับ คือ จะนำข้อมูลที่เป็น Point มาหา Spectrum ของสัญญาณ เพื่อหาความถี่ของสัญญาณว่ามีค่าเท่าไหร่บ้าง โดยมี Code ดังรูปด้านล่าง นี้<br>
<br>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtWTVQGf30Ka__x5tOXnFIjJbXOKN8R-t7G1I5ZYYjkywTouAnE6grSgYWF2ljUCqFm8P2R0wP9U3Gr9NGNdLQLL1SMACEBHCDE68txlvWER7i2hM-1jE-MLyFPl_PYdIHCfXXP2j69f7p/s1600/diagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtWTVQGf30Ka__x5tOXnFIjJbXOKN8R-t7G1I5ZYYjkywTouAnE6grSgYWF2ljUCqFm8P2R0wP9U3Gr9NGNdLQLL1SMACEBHCDE68txlvWER7i2hM-1jE-MLyFPl_PYdIHCfXXP2j69f7p/s400/diagram.png" width="400"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEU8Vqsf8NGgL7SybaTH1N-Xg9uHgWMjMt7hU6IieMuD8iXmnS0lteRDc6RUFxBmScH_xSLkHoGl4amO2O4UOoLZB7oZyWJlE7uPrC3jBsSZy0vW8zzUZoHwh592mvo3jNpul_w0UxMnty/s1600/front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEU8Vqsf8NGgL7SybaTH1N-Xg9uHgWMjMt7hU6IieMuD8iXmnS0lteRDc6RUFxBmScH_xSLkHoGl4amO2O4UOoLZB7oZyWJlE7uPrC3jBsSZy0vW8zzUZoHwh592mvo3jNpul_w0UxMnty/s400/front.png" width="400"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br></div>
<br>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br></div>
<div style="text-align: center;">
<br></div>
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="350" src="http://www.youtube.com/embed/sgKF3Zlq2Ng" title="YouTube video player" width="490"></iframe><br>
<br></div>
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="350" src="http://www.youtube.com/embed/p0_lJNDrq0I" title="YouTube video player" width="490"></iframe></div>
Unknownnoreply@blogger.com7tag:blogger.com,1999:blog-7826997022716574736.post-66200311413581284482011-04-10T18:21:00.004+07:002011-04-10T18:36:24.513+07:00IMU6DOF via Labview rs-232บ่อยครั้งที่เราซื้อ sensor แล้วในตัว sensor นั้นมีการติดต่อแบบ serial มาในตัวเลย ในบทความนี้จะพูดถึงการอ่านข้อมูลจาก Gyro and accelerometer ที่ส่งข้อมูลแบบ serial โดยใช้โปรแกรม Labview rs-232 เนื่องจากข้อมูลที่ได้จาก sensor ตัวนี้ไม่ได้ส่งมาเฉพาะตัวเลขแต่จะข้อมูลแบบ string หลักแรก และ หลักสุดท้าย ดังรูปด้านล่าง<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-VT9DuuBUcjc/TaGNGCfZPEI/AAAAAAAAATA/Mynkmlimfnk/s1600/untitled.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="211" src="http://3.bp.blogspot.com/-VT9DuuBUcjc/TaGNGCfZPEI/AAAAAAAAATA/Mynkmlimfnk/s400/untitled.bmp" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;">ซึ่งถ้าเขียน Labview rs-232 รับมันตามcode ด้านล่างเราก็จะสามารถอ่านข้อมูลจาก Sensor ได้</div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-EOahLZRbLeg/TaGRmDgRC3I/AAAAAAAAATE/KbFgp4wG9tc/s1600/untitled1.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="http://1.bp.blogspot.com/-EOahLZRbLeg/TaGRmDgRC3I/AAAAAAAAATE/KbFgp4wG9tc/s400/untitled1.bmp" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-aGffUcFmlBE/TaGVvKU12RI/AAAAAAAAATI/i2WN2a9Exm0/s1600/untitled2.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="http://4.bp.blogspot.com/-aGffUcFmlBE/TaGVvKU12RI/AAAAAAAAATI/i2WN2a9Exm0/s400/untitled2.bmp" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">ข้อมูล sensor ที่ผมใช้ <a href="http://www.thaieasyelec.com/index.php?lay=show&ac=cat_show_pro_detail&pid=54848">http://www.thaieasyelec.com/index.php?lay=show&ac=cat_show_pro_detail&pid=54848</a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div>Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-7826997022716574736.post-60703264447706829192011-02-05T12:00:00.005+07:002013-08-16T09:21:50.705+07:00Mini segway ME KMUTT<div style="text-align: center;">
<div style="text-align: left;">
หลังจากเหนื่อยมาสามอาทิตย์กับการทำเจ้า Mini segway ตัวน้อยและแล้วมันก็สามารถยืนได้ด้วยตัวเองแล้วโดยการทำให้มันรู้ว่าตัวมันเอียงไปเท่าไหร่แล้วเมื่อเทียบกับพื้นโลก ด้วยวิธี Sensor fusion Kalman filter โดยต้องใช้ Sensor สองตัว นั้นก็คือ Accelerometer and Gyro และ การควบคุมตัวเองไม่ให้มันล้มด้วย State feedback control</div>
<div style="text-align: left;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br /></div>
<br />
อันนี้เป็น VDO ทำ Sensor fusion<br />
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/Tk9kgBa3CCs" title="YouTube video player" width="480"></iframe></div>
<div style="text-align: center;">
<br /></div>
<br />
อันนี้เป็น VDO การควบคุม Mini segway ตัวน้อย<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/CYnwFegeWQ0" title="YouTube video player" width="480"></iframe><br />
<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/Z34IK6baBXk" title="YouTube video player" width="480"></iframe><br />
<br />
<br />
<b><span style="color: blue;">สนใจติดต่อ : sarayuthassa@gmail.com</span></b><br />
<b><span style="color: blue;"> 083-4391356</span></b>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-7826997022716574736.post-3979018553409459542010-12-03T09:08:00.015+07:002013-08-16T09:13:09.600+07:00Inverted pendulum control<div style="text-align: justify;">
หลังจากที่ออกแบบและสร้าง Inverted pendulum ตัวใหม่ออกมา(อันนี้ คือ <a href="http://mechanic-top.blogspot.com/2010/10/inverted-pendulum-state-feedback.html">ตัวเก่า</a>)แล้วและทำการควบคุมมัน ซึ่งผลที่ได้เป็นที่น่าพอใจอย่างมาก ซึ่งตอนนี้มันก็สามารถควบคุมได้แล้ว การควบคุมแบบนี้เรียกว่า State feedback คือ Control law u=-kx โดยที่ x คือ state variable ซึ่งใน Inverted pendulum system x ก็จะมีทั้งหมดสี่ตัว คือ cart position,cart velocity,pendulum angle และ angular velocity ซึ่งเมื่อเราสามารถวัดมาได้ครบ เราก็ทำการออกแบบหาค่า K ด้วยวิธี Pole placement/LQ เมื่อออกแบบหาค่า Kแล้วก็นำมาเขียนลงใน Digital signal processing PIC18F4431</div>
<div style="text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHTJumGXbrB7gvOj6ti8CABMpFBVUqYRfWMgsLRJeLxT5hx30wksYvmv_NBaNy6JEKuBRloHq7M6p2EIY9Rq_J8uGjDiA9T64sTXzG8fzS9iknLUgcO9nHqkvwC-s4ogshxOPgZAs7GJbo/s1600/FIG.Real+INV+CONTROL.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHTJumGXbrB7gvOj6ti8CABMpFBVUqYRfWMgsLRJeLxT5hx30wksYvmv_NBaNy6JEKuBRloHq7M6p2EIY9Rq_J8uGjDiA9T64sTXzG8fzS9iknLUgcO9nHqkvwC-s4ogshxOPgZAs7GJbo/s400/FIG.Real+INV+CONTROL.JPG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
รูปที่.1 อุปกรณ์สำหรับการทดลองทั้งหมด</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcp15Wv_ic2B2CNabX5J-oC9dd7oQRe22gTzeNLdiFBliM3FmsouuDa42V3lpf6X97zYR4erLFH6zzzXtpZpqW7V-ubencH4l9_RSuB1xH40WuAV-p0ginmd255j0AMrHy7aUL4ZApltGi/s1600/STATE+FEEDBACK+CONTROL+DIAGRAM.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcp15Wv_ic2B2CNabX5J-oC9dd7oQRe22gTzeNLdiFBliM3FmsouuDa42V3lpf6X97zYR4erLFH6zzzXtpZpqW7V-ubencH4l9_RSuB1xH40WuAV-p0ginmd255j0AMrHy7aUL4ZApltGi/s400/STATE+FEEDBACK+CONTROL+DIAGRAM.bmp" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
รูปที่.2 STATE FEEDBACK CONTROL DIAGRAM</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
<div style="text-align: center;">
<object height="385" width="480"><param name="movie" value="http://www.youtube.com/v/KGFWH-LsBE4?fs=1&hl=en_US"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/KGFWH-LsBE4?fs=1&hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></div>
<br />
<br />
<div style="text-align: center;">
<br />
<object height="385" width="480"><param name="movie" value="http://www.youtube.com/v/J54ss7kRMWA?fs=1&hl=en_US"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/J54ss7kRMWA?fs=1&hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
สถานที่ถ่ายทำ ภาควิชาวิศวกรรมเครื่องกล มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าธนบุรี<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwt2fjIVaJOSOK4s71f9E2C5__7CIT7rFGWeiCKyjY7_IoMB3d8ZG2B6w24acCk-890HHaUQ5QzM6P0tDa1X8ojaOC6UY2OJ4P0MUDH9z-hE76yNVxhzvjNPH98ZAErBIqhxYr3QlgP3kQ/s1600/FIG.graph+invp+control.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwt2fjIVaJOSOK4s71f9E2C5__7CIT7rFGWeiCKyjY7_IoMB3d8ZG2B6w24acCk-890HHaUQ5QzM6P0tDa1X8ojaOC6UY2OJ4P0MUDH9z-hE76yNVxhzvjNPH98ZAErBIqhxYr3QlgP3kQ/s400/FIG.graph+invp+control.bmp" width="400" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
รูปที่.3 กราฟวัดการตอบสนองของระบบ เมื่อมีการรบกวน Rod จะเห็นได้ว่า Cart จะต้องวิ่งเพื่อกำจัด error ที่เกิดขึ้นกับ Rod หลังจากนั้น Cart ก็จะกลับมาที่ตำแหน่งที่ออกแบบ<br />
<br />
<div style="text-align: left;">
<b><span style="color: blue;">สนใจติดต่อ: sarayuthassa@gmail.com </span></b><br />
<b><span style="color: blue;"> 083-4391356</span></b></div>
</div>
</div>
Unknownnoreply@blogger.com25tag:blogger.com,1999:blog-7826997022716574736.post-32213610433508732862010-10-23T09:13:00.006+07:002011-03-23T00:25:13.589+07:00Inverted pendulum state feedback control<div style="text-align: justify;">พอดีทาง FIBO ได้มอบหมายงานชิ้นแรกให้ผม คือ ออกแบบ Control low เพื่อ ควบคุม Inverted pendulum หลังจากทำได้สองอาทิตย์ก็ทำสามารถให้มันตั้งได้แล้วแต่ state ของ cart ยังคง oscillate อยู่เพราะการปรับค่า gain ของระบบที่มีความเป็น Nonlinear และ Unstable มันไม่ใช่เรื่องง่าย และ Mechanic ก็ยังไม่ค่อยดีเท่าไหร่ แต่นี้เป็นแค่การทดสอบ Algorithm ว่า Micro controller รุ่น PIC18f4431 สามารถเขียน Control law u=-k1*(x1-reference)-k2*x2-k3*(x3-reference)-k4*x4-k5*z-k6*z1 ได้หรือเปล่าวโดยที่ x1 คือ Angle ของ pendulum x2 คือ Angular velocity ของ pendulum โดยติดตั้ง Potentiometer ไว้ที่จุดหมุนของ pendulum ส่วน x3 คือ Cart position และ x4 คือ linear velocity ของ cart มี Encoder ติดไว้ที่ motor z1 และ z2 คือ Integral error ของ Pendulum และ Cart x1 to x4 เราเรียกมันว่า State variable จะเห็นว่า x1 และ x3 สามารถวัดได้โดยตรง ส่วน x2 และ x4 ผมนำมันมา Derivative เทียบกับเวลาซึ่งไม่ใช่วิธีการที่ดีเท่าไหร่ แต่คิดไว้แล้วว่าจะใช้ Reduce order observer หรือ อาจจะใช้ Kalman filter มาประมาณหาความเร็วแต่ทั้งสองวิธีนี้จะต้องมีแบบจำลองทางคณิตศาสตร์ของระบบก่อนวันนี้พอเท่านี้ก่อนแล้วกันครับ ครั้งหน้าจะมาดูว่า</div><div style="text-align: justify;">1. หาแบบจำลองอย่างไร</div><div style="text-align: justify;">2.หาสัมประสิทธิ์คงที่ ของ Model</div><div style="text-align: justify;">3.ออกแบบ Observer </div><div style="text-align: justify;">4.หา Gain K โดยวิธี Lqr </div><div style="text-align: justify;">5.เขียน Code ลงใน PIC18F</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">อันนี้เป็น VDO ลองดูเล่นๆก่อน มันยังไม่สมบูรณ์เท่าที่ควรเพราะยังขาด Algorithm บางตัวอยู่ </div><div style="text-align: justify;"><br />
</div><br />
<div style="text-align: center;"><object height="385" width="480"><param name="movie" value="http://www.youtube.com/v/lr82i1ia7eQ?fs=1&hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/lr82i1ia7eQ?fs=1&hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></div><br />
<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/KGFWH-LsBE4" frameborder="0" allowfullscreen></iframe><br />
<br />
<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/J54ss7kRMWA" frameborder="0" allowfullscreen></iframe>Unknownnoreply@blogger.com28tag:blogger.com,1999:blog-7826997022716574736.post-58330070065287479492010-10-03T19:14:00.002+07:002010-10-03T23:13:29.478+07:00Convert Thermistor Reading<div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">บทความนี้จะพูดถึงการแปรงแรงดันไฟฟ้าไปเป็นอุณหภูมิ ก่อนอื่นมาทำความรู้จักกับเจ้า </span>thermistor <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ก่อน </span>Thermistor <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เป็นอุปกรณ์ตรวจรู้ชนิดหนึ่งที่มีคุณสมบัติ คือ เมื่อตัวมันได้รับความร้อนจะทำให้ความต้านทานภายในตัวมันมีการเปลี่ยนแปลง</span><span lang="TH"> </span><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ซึ่งเราจะอาศัยการเปลี่ยนแปลงเหล่านี้ไปหาความสัมพันธ์ระหว่างอุณหภูมิกับความต้านทาน </span><span style="font-family: inherit;">Thermistor</span> <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เป็นอุปกรณ์แบบ </span>passive <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">คือ มันจะต้องได้รับการกระตุ้นเสียก่อน ซึ่งในที่นี้สิ่งที่มากระตุ้นมันก็คือแรงดันไฟฟ้ากระแสตรง ซึ่งสามารถเขียนวงจรได้ดังรูปด้านล่างนี้</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKhyDVbYzSI/AAAAAAAAASY/s23dDjV1s9M/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKhyDVbYzSI/AAAAAAAAASY/s23dDjV1s9M/s1600/untitled.JPG" /></a></div><br />
<div class="MsoNormal"><br />
</div><br />
<br />
<div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เมื่อใช้กฎของโอห์มแล้วจะได้ความสัมพันธ์ดังนี้</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKhydCukjDI/AAAAAAAAASc/2SYG49tFMKo/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKhydCukjDI/AAAAAAAAASc/2SYG49tFMKo/s1600/untitled.JPG" /> </a></div><div class="separator" style="clear: both; text-align: center;"></div><br />
<div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">โดยที่ </span>A, B, C <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">คือค่าคงที่ของ </span>Thermistor <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">หาได้จาก </span>data sheet <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ของ </span>Thermistor<span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> เอง</span></div><div class="MsoNormal">Tk <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">คือ อุณหภูมิที่วัด มีหน่วย </span>(K)</div><div class="MsoNormal"> <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ขั้นตอนการเขียนโปรแกรม </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เมื่อเราเปิดโปรแกรม </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ขึ้นมาแล้วให้ไปที่ </span>Numeric<span style="font-family: Wingdings;">--></span>Scaling<span style="font-family: Wingdings;">--></span> Convert Temperature Reading.vi <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ดังรูปด้านล่าง</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKhy1NqYLgI/AAAAAAAAASg/iAfmNEdX5o4/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="164" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKhy1NqYLgI/AAAAAAAAASg/iAfmNEdX5o4/s320/untitled.JPG" width="320" /> </a></div><div class="separator" style="clear: both; text-align: center;"></div><div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">จากนั้นเราก็อ่าน ค่า </span>Voltage <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เข้ามาในโปรแกรม </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ถ้ามี<a href="http://draft.blogger.com/goog_537260153"> </a></span><a href="http://mechanic-top.blogspot.com/2010/09/daq-gpib-and-serial-communication.html">DAQ</a> <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เราก็สามารถวัดได้โดยตรงแต่ถ้าเราไม่มี </span>DAQ <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เราก็สามารถใช้ </span><a href="http://mechanic-top.blogspot.com/2010/03/pic16f877-program-labviewinterface.html">RS-232</a> <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ก็ได้</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKhzH55L5jI/AAAAAAAAASk/FsHnJmDLvBU/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKhzH55L5jI/AAAAAAAAASk/FsHnJmDLvBU/s1600/untitled.JPG" /></a></div><br />
<div class="MsoNormal"><br />
</div><br />
<br />
<div class="MsoNormal"></div><br />
<div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">หวังว่าบทความนี้จะเป็นประโยชน์กับผู้ที่สนใจเกี่ยวกับ โปรแกรม </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ไม่มากก็น้อยนะครับ</span></div><br />
<div class="MsoNormal"><br />
</div><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="MsoNormal"><br />
</div><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> </span><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> </span></div>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-7826997022716574736.post-73186749798628937972010-10-02T20:22:00.000+07:002011-09-12T08:25:15.970+07:00Labview write To Measurement File<div style="margin-bottom: 0cm;">
<div style="text-align: justify;">
บทความนี้ เราจะมาศึกษาการ <span style="font-family: 'Times New Roman', serif;">Save </span>ข้อมูลของโปรแกรม <span style="font-family: 'Times New Roman', serif;">Labview </span>วิธีก็คือเราต้องการบันทึกข้อมูลที่มีรูปแบบเป็น <span style="font-family: 'Times New Roman', serif;">waveform </span>โดยที่หลัก<span style="font-family: 'Times New Roman', serif;">(column)</span>แรกของข้อมูลจะเป็นเวลา และหลัก<span style="font-family: 'Times New Roman', serif;">(column)</span>ต่อมาจะเป็นข้อมูลที่เราต้องการ และจะให้มันบันทึก ก็ต่อเมื่อเรากดปุ่ม <span style="font-family: 'Times New Roman', serif;">save </span>มันจะบันทึกเพียงครั้งเดียว เพราะถ้าเราไม่เขียนแบบนี้แล้วมันจะบันทึกเองทุกรอบการทำงาน หมายความว่าถ้ามันวน <span style="font-family: 'Times New Roman', serif;">loop 100 </span>ครั้งมันก็บันทึกข้อมูล <span style="font-family: 'Times New Roman', serif;">100 </span>ครั้งซึ่งนั้นคงไม่ใช่สิ่งที่เราต้องแน่นอน ก่อนอื่นเมื่อเปิดโปรแกรมขึ้นมาแล้วไปที่ <span style="font-family: 'Times New Roman', serif;">file i/o<span style="font-family: Wingdings;"></span> write To Measurement File </span>แล้วจะได้ดังนี้</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKcxG-ICa8I/AAAAAAAAASI/O_Wn4l8khyE/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" px="true" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKcxG-ICa8I/AAAAAAAAASI/O_Wn4l8khyE/s320/untitled.JPG" width="320" /></a></div>
<div style="margin-bottom: 0cm;">
</div>
<div align="center" style="margin-bottom: 0cm;">
รูปที่<span style="font-family: 'Times New Roman', serif;">.1</span></div>
<div align="center" style="margin-bottom: 0cm;">
</div>
<div style="margin-bottom: 0cm;">
<div style="text-align: justify;">
จากนั้นก็ให้เราคลิกช่อง <span style="font-family: 'Times New Roman', serif;">Use next available file name </span>ที่เลือกตัวนี้ก็เพราะมันจะเปลี่ยนชื่อเองโดยอัตโนมัติซึ่งจะสะดวกในการใช้งานเพราะการเก็บข้อมูลอาจจะต้องมีการเก็บหลายครั้ง ต่อจากนั้นให้ดูที่ <span style="font-family: 'Times New Roman', serif;">X Value Column </span>ให้เลือก <span style="font-family: 'Times New Roman', serif;">One column only </span>หมายความว่าเราต้องการข้อมูลเกี่ยวกับเวลาแค่หลักเดียว เมื่อดำเนินตามขั้นต้นเสร็จ ก็คลิก <span style="font-family: 'Times New Roman', serif;">ok </span></div>
</div>
<div style="margin-bottom: 0cm;">
<div style="text-align: justify;">
ต่อมาก็เขียนตามรูปด้านล่างนี้</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKcxW2P7lLI/AAAAAAAAASM/Yq_Cpbzhq0I/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" px="true" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKcxW2P7lLI/AAAAAAAAASM/Yq_Cpbzhq0I/s320/untitled.JPG" width="320" /></a></div>
<div style="margin-bottom: 0cm; text-align: center;">
รูปที่<span style="font-family: 'Times New Roman', serif;">.2</span></div>
<div style="margin-bottom: 0cm; text-align: center;">
</div>
<div style="margin-bottom: 0cm;">
<div style="text-align: justify;">
ที่ <span style="font-family: 'Times New Roman', serif;">Button </span>ที่ชื่อว่า <span style="font-family: 'Times New Roman', serif;">save </span>ที่ผมตั้งชื่อขึ้นเองนี้ให้เราปรับมันนิดหน่อยโดยไปที่ <span style="font-family: 'Times New Roman', serif;">front panel </span>แล้วคลิกขวาที่ปุ่มกด <span style="font-family: 'Times New Roman', serif;">(button) <span style="font-family: Wingdings;"></span> mechanical action </span>แล้วเลือก <span style="font-family: 'Times New Roman', serif;">Latch when released </span>หรือ <span style="font-family: 'Times New Roman', serif;">Latch when pressed </span>ก็ได้ คือ มันจะทำงานเมื่อเรากด หรือ เราปล่อย <span style="font-family: 'Times New Roman', serif;">button </span>ดูตัวอย่างที่รูปด้านล่าง</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKcxlBEAFrI/AAAAAAAAASQ/d01DPiajH0M/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" px="true" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKcxlBEAFrI/AAAAAAAAASQ/d01DPiajH0M/s320/untitled.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
รูปที่<span style="font-family: 'Times New Roman', serif;">.3</span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="margin-bottom: 0cm;">
สุดท้ายเมื่อเรากด <span style="font-family: 'Times New Roman', serif;">Save </span>แล้วเราก็จะได้ <span style="font-family: 'Times New Roman', serif;">text file </span>ที่มีหน้าตาดังรูปด้านล่างนี้</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKcx55mW2QI/AAAAAAAAASU/XJV9vfw8q8c/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" px="true" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKcx55mW2QI/AAAAAAAAASU/XJV9vfw8q8c/s320/untitled.JPG" width="185" /></a></div>
<div style="margin-bottom: 0cm;">
<br /></div>
Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-7826997022716574736.post-57060256090155383312010-10-02T12:59:00.000+07:002010-10-02T12:59:40.051+07:00Labview Local variableบทความนี้เราจะศึกษาการเขียนโปรแกรม <span style="font-family: Times New Roman, serif;">Labview </span>เรื่อง <span style="font-family: Times New Roman, serif;">Labview Local variable </span>กันนะครับก่อนที่จะดูว่ามันสร้างอย่างไรเรามาดูมันก่อนว่ามันมีประโยชน์ อะไรบ้าง <span style="font-family: Times New Roman, serif;">Labview Local variable </span>มีไว้สำหรับใช้งานใน <span style="font-family: Times New Roman, serif;">vi </span>เดียวกัน แต่สามารถรับส่งข้อมูลกันไปมาระหว่าง <span style="font-family: Times New Roman, serif;">loop </span>หนึ่งไปยัง <span style="font-family: Times New Roman, serif;">loop </span>อื่นได้ เช่น เราอ่าน <span style="font-family: Times New Roman, serif;">visa </span>เข้ามาใน <span style="font-family: Times New Roman, serif;">loop </span>แรกแต่คราวนี้เราต้องการนำค่าที่ได้จาก <span style="font-family: Times New Roman, serif;">Visa</span>ไปใช้งานใน <span style="font-family: Times New Roman, serif;">loop </span>อื่นต่อเรา ก็สามารถสร้าง<span style="font-family: Times New Roman, serif;">Labview Local variable </span>ขึ้นมาเพื่อที่จะนำค่าไปใช้ใน <span style="font-family: Times New Roman, serif;">loop </span>อื่นต่อไป ดูได้จากตัวอย่างด้านล่างนี้ <div class="separator" style="clear: both; text-align: center;"><img border="0" height="240" px="true" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKbIT1mi2JI/AAAAAAAAAR0/0ceVB-PzWRc/s320/untitled.JPG" width="320" /></div><div class="separator" style="clear: both; text-align: center;">รูปที่<span style="font-family: Times New Roman, serif;">.1</span></div><div class="separator" style="clear: both; text-align: justify;">ตัวอย่างจากรูปที่<span style="font-family: Times New Roman, serif;">.1 </span>สมมุติถ้าเราต้องการที่จะนำค่าจาก <span style="font-family: Times New Roman, serif;">loop-A </span>มาบวกกับ <span style="font-family: Times New Roman, serif;">10 </span>ในรูป <span style="font-family: Times New Roman, serif;">loop B </span>ถ้าเขียนอย่านี้แล้วค่าที่ <span style="font-family: Times New Roman, serif;">loop-A </span>จะไม่สามารถส่งข้ามมายัง <span style="font-family: Times New Roman, serif;">loop-B </span>ได้จนกว่าเราจะกดปุ่ม <span style="font-family: Times New Roman, serif;">stop </span>มันถึงจะส่งข้อมูลตัสุดท้ายออกจาก <span style="font-family: Times New Roman, serif;">loop- A </span>ได้ แต่ถ้าเราสร้าง <span style="font-family: Times New Roman, serif;">Labview Local variable </span>ขึ้นมามันถึงสามารถส่งข้อมูระหว่าง <span style="font-family: Times New Roman, serif;">loop </span>ได้ทุกๆรอบการทำงานของ <span style="font-family: Times New Roman, serif;">while loop </span>ดังตัวอย่างด้านล่าง</div><div class="separator" style="clear: both; text-align: justify;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKbIv4ows0I/AAAAAAAAAR4/f3YGAoL6iAE/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" px="true" src="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKbIv4ows0I/AAAAAAAAAR4/f3YGAoL6iAE/s320/untitled.JPG" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;">รูปที่<span style="font-family: Times New Roman, serif;">.2</span> </div><div align="left" class="separator" style="clear: both; text-align: center;"></div><div style="margin-bottom: 0cm;">วิธีการสร้าง <span style="font-family: Times New Roman, serif;">Labview Local variable </span>ให้คลิกขวาตัวที่เราต้องการจะสร้าง <span style="font-family: Times New Roman, serif;">Labview Local variable</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKbJE1Xs8HI/AAAAAAAAAR8/1vYRTV6GhuY/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" px="true" src="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKbJE1Xs8HI/AAAAAAAAAR8/1vYRTV6GhuY/s320/untitled.JPG" width="320" /></a></div><div align="left" class="separator" style="clear: both; text-align: center;"><br />
</div><div align="left" class="separator" style="clear: both; text-align: center;">รูปที่<span style="font-family: Times New Roman, serif;">.3</span></div><div align="left" class="separator" style="clear: both; text-align: center;"></div><div style="margin-bottom: 0cm;">แล้วไปที่ <span style="font-family: Times New Roman, serif;">Create<span style="font-family: Wingdings;"></span>local variable</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKbJmwbaoXI/AAAAAAAAASA/sfe98vYsyvw/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" px="true" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKbJmwbaoXI/AAAAAAAAASA/sfe98vYsyvw/s320/untitled.JPG" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;">รูปที่<span style="font-family: Times New Roman, serif;">.4</span></div><br />
แล้วเราก็จะได้ <span style="font-family: Times New Roman, serif;">Labview Local variable </span>ดังนี้ <br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKbJ21mgAAI/AAAAAAAAASE/dstFSQ7dadU/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" px="true" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKbJ21mgAAI/AAAAAAAAASE/dstFSQ7dadU/s1600/untitled.JPG" /></a></div><div align="left" class="separator" style="clear: both; text-align: center;"></div><div style="text-align: center;"> </div><div style="margin-bottom: 0cm;">เพียงเท่านี้เราก็สามารถสร้าง <span style="font-family: Times New Roman, serif;">Labview Local variable </span>ได้แล้วนะครับ</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-20050531367616715882010-09-28T16:29:00.008+07:002010-09-29T16:14:52.073+07:00Labview Data Analysis program<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKGvOV1MVCI/AAAAAAAAARA/MrZW7wnA4kY/s1600/data+analysis.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="143" src="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKGvOV1MVCI/AAAAAAAAARA/MrZW7wnA4kY/s400/data+analysis.JPG" width="400" /></a></div><div style="text-align: justify;">วันนี้ผมก็มานั่งเปิด Comp ของตัวเองเล่นๆแล้วก็เปิดโปรแกรม Labview ของตัวเองก็ไปเจอโปรแกรมที่ตัวเองเขียนไว้นานแล้ว ก็มานั่งดูก็คิดว่าก็น่าจะเป็นประโยชน์กับผู้ที่สนใจเกี่ยวกับเรื่องนี้ผมก็เลยอยากจะเอามาแบ่งปันกัน โปรแกรมตัวนี้มีไว้สำหรับวิเคราะห์สัญญาณซึ่งการใช้งานนั้นก็ไม่ซับซ้อนอะไรแค่ Import data ที่มีนามสกุล .txt เข้ามาโดยที่ หลักแรกของขู้อมูลจะต้องเป็นเวลา time และหลักถัดจากนั้นก็คือข้อมูลที่เราเก็บมา เราสามารถวัดความถี่ของสัญญาณง่ายๆด้วยการเลื่อน cursor เพื่อเลือกช่วงสัญญาณที่เราต้องการดูมัน จากนั้นมันก็จะแสดงข้อมูลของความถี่มีค่าเท่าไหร่ และ แสดง Amplitude ของสัญญาณด้วยในเวลาเดียวกัน และเรายังสามารถ fit curve ข้อมูลได้ถึง order 6 ถ้าเพื่อนๆ คนไหนสนใจก็ลอง download ไปเล่นได้นะครับโดยต้องลงโปรแกรม Labview 8.2 ก่อนนะครับ</div><br />
<b><a href="http://www.ziddu.com/download/11872395/DataAnalysis.rar.html">>>DOWNLOAD PROGRAM<<</a></b><br />
<b><a href="http://www.ziddu.com/download/11816059/LabviewRuntimeEngine.rar.html">>>DOWNLOAD DRIVER<<</a> </b><br />
<br />
<script type="text/javascript">
<!--
google_ad_client = "pub-8578905442990836";
/* 468x60, ถูกสร้างขึ้นแล้ว 9/28/10 */
google_ad_slot = "0717457108";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-51798937924315412202010-09-28T11:13:00.002+07:002011-09-12T08:26:39.007+07:00Labview Share variable<div style="text-align: justify;">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ก่อนที่จะดูขั้นตอนการทำ </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">Share variable </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ว่ามีขั้นตอนการทำอย่างไร เรามาพูดถึงประโยชน์ของมันก่อนแล้วกันนะครับ ท่านเคยพัฒนา </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">sub vi </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">หลายๆอันแล้วเราก็ใช้ตัวแปรตัวเดียวร่วมกันในหลายๆ </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">sub vi </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">รึเปล่าครับสมมุติเราอ่าน </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">AI </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">มาหนึ่งช่องแล้วเราต้องการนำข้อมูลนี้ไปประมวลผลหลายๆ รูปแบบ เช่นไปแสดงเป็นกราฟ หรือนำไปเข้าสมการ โดยที่ในแต่ละการคำนวณเราก็มี </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">sub vi </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ของมันอยู่แล้ว คราวนี้จะทำอย่างไรล่ะ ถ้าเราเขียนให้มันรับ </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">AI </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ทุก </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">Sub vi </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">คงไม่สะดวกแน่ ดังนั้นเราก็เลยสร้าง </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">share variable </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ขึ้นมา หลักการของมันก็คือเมื่อเราสร้างมันขึ้นมาแล้วเราจะสามารถเรียกใช้มันได้ทุกๆ </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">sub vi </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">เลย โดยที่เราไม่ต้องสร้างมันขึ้นมาใหม่ทุกครั้งไป เช่น </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">share variable </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ตัวนี้วัด อุณหภูมิมา เราก็สามารถนำค่าที่อ่านได้นี้ไปแสดงผล ในที่ใดๆก็ได้ตามใจชอบ ซึ่งมันจะมีหน้าตาเป็นอย่างนี้ </span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKFpDIDpBmI/AAAAAAAAAQU/YOYainzimoE/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKFpDIDpBmI/AAAAAAAAAQU/YOYainzimoE/s1600/untitled.JPG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKFo5YkC1AI/AAAAAAAAAQQ/Z1Mi8_zspHA/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"> </a></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">เรามาดูขั้นตอนการสร้างเลยแล้วกันนะครับ เมื่อเราเปิดโปรแกรม </span><span lang="TH"> </span>Labview <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ขึ้นมาแล้วเราก็สร้าง </span>Labview Project <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ขึ้นมาแล้วก็ </span>Save <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ดังรูปด้านล่าง สังเกตว่าใน</span>Project <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">เรายังไม่มี </span>vi <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">และ</span>/<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">หรือ </span>variable <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ใดๆเลย</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKFpffd_bqI/AAAAAAAAAQY/GDo99H0IOD8/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKFpffd_bqI/AAAAAAAAAQY/GDo99H0IOD8/s320/untitled.JPG" width="320" /></a></div>
<div class="MsoNormal">
<br /></div>
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;"> </span> <br />
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ขั้นต่อมาให้คลิกขวาที่ </span>My computer <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ในเมนูของ </span>Project <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">แล้ว เลือก</span><span lang="TH"> </span>new<span style="font-family: Wingdings;">--></span>variable <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ดังรูปด้านล่าง</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKFptTj-SZI/AAAAAAAAAQc/kUVfCDsWA2M/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKFptTj-SZI/AAAAAAAAAQc/kUVfCDsWA2M/s320/untitled.JPG" width="320" /></a></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;"> </span> </div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">จะได้ หน้าต่างใหม่ขึ้นมาดังรูปด้านล่าง</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKFp9goOjBI/AAAAAAAAAQg/VJifrJ_DT4M/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="105" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKFp9goOjBI/AAAAAAAAAQg/VJifrJ_DT4M/s320/untitled.JPG" width="320" /></a></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;"> </span> </div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ให้สังเกตรูปดานบน ที่ </span>Data type <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ให้เราเลือกได้ว่าข้อมูลของเรานั้นมันเป็นชนิดไหน เช่น </span>double, waveform <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">และอื่นๆ หลังจากนั้นก็ เลือก </span>Variable Type <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ให้ เป็น </span>single process <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">แล้วคลิก </span>ok <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">เราก็จะได้ </span>variable <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ขึ้นมาแล้วหนึ่งตัวดังรูปด้านล่าง</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKFqJr8ZZgI/AAAAAAAAAQk/Z7K-DvjvNws/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="http://4.bp.blogspot.com/_A05s-G9ZYTo/TKFqJr8ZZgI/AAAAAAAAAQk/Z7K-DvjvNws/s320/untitled.JPG" width="320" /></a></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;"> </span> </div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">เราสามารถตั้งชื่อมันได้ตามใจชอบเลยนะครับ </span></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ต่อจากนั้นเรามาดูวิธีการเรียกใช้มัน ครับ เราสร้าง </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">vi </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ขึ้นมาสักอัน ใน</span><span style="font-family: 'Times New Roman'; font-size: 12pt;">Project </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">เราก่อนแล้วคลิกขวาที่ </span><span style="font-family: 'Times New Roman'; font-size: 12pt;">block diagram</span><span style="font-family: Wingdings; font-size: 12pt;"><span style="font-family: 'Times New Roman';">--></span></span><span style="font-family: 'Times New Roman'; font-size: 12pt;">structures</span><span style="font-family: Wingdings; font-size: 12pt;"><span style="font-family: 'Times New Roman';">--></span></span><span style="font-family: 'Times New Roman'; font-size: 12pt;"> share variable </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ดังรูปด้นล่าง</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKFqWvUYhFI/AAAAAAAAAQo/xFAs64QVXFY/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKFqWvUYhFI/AAAAAAAAAQo/xFAs64QVXFY/s320/untitled.JPG" width="320" /></a></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;"> </span><span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;"> </span> </div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">แล้วจะได้ดังรูด้านล่างซึ่งตอนนี้มันยังไม่สามารถทำงานได้</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKFqjyNXmsI/AAAAAAAAAQs/CaofRyvf1N8/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKFqjyNXmsI/AAAAAAAAAQs/CaofRyvf1N8/s1600/untitled.JPG" /></a></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;"> </span> </div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ให้คลิกขวาที่ </span>Share variable <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">แล้วเลือก </span>select variable</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKFqt6LA3CI/AAAAAAAAAQw/-zAN0MVeo24/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKFqt6LA3CI/AAAAAAAAAQw/-zAN0MVeo24/s320/untitled.JPG" width="300" /></a></div>
<div class="MsoNormal">
</div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">เราก็จะได้ </span>Window <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ใหม่ขึ้นมาดังรูปด้านล่าง</span><span lang="TH"> </span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKFq6Lq5ZkI/AAAAAAAAAQ0/NmjU5xp3vZA/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="214" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TKFq6Lq5ZkI/AAAAAAAAAQ0/NmjU5xp3vZA/s320/untitled.JPG" width="320" /></a></div>
<br />
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">แล้วก็คลิก </span>Ok <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">จะได้</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKFrDr6LaRI/AAAAAAAAAQ4/45XerWIVXUg/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKFrDr6LaRI/AAAAAAAAAQ4/45XerWIVXUg/s1600/untitled.JPG" /></a></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;"> </span> </div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">จากนั้นให้คลิกขวาที่ </span>Variable <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">แล้วเลือก </span>change to write <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">เพื่อที่จะให้มันอ่านสัญญาณที่เป็น </span>waveform <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">เราก็จะได้ดังนี้</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKFrPX2NsEI/AAAAAAAAAQ8/ylmlj8GjioM/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKFrPX2NsEI/AAAAAAAAAQ8/ylmlj8GjioM/s1600/untitled.JPG" /></a></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;"> </span> </div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">แล้วมันก็จะอ่านข้อมูลนี้เก็บไว้ในตัวแปร </span>Temp <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">ถ้าเราต้องการนำตัวแปรนี้ไปใช้ใน </span>vi <span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">อื่นเราก็ทำตามขั้นตอนที่ได้กล่าวมาข้างต้น </span></div>
<div class="MsoNormal">
<span lang="TH" style="font-family: 'Angsana New'; font-size: 14pt;">บทความนี้ขอจบเพียงเท่านี้ก่อนแล้วกันนะครับ</span></div>
<script type="text/javascript">
<!--
google_ad_client = "pub-8578905442990836";
/* 468x60, ถูกสร้างขึ้นแล้ว 9/28/10 */
google_ad_slot = "0717457108";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-72275133915717553202010-09-27T19:23:00.000+07:002010-09-27T19:23:14.265+07:00Find VI labview on disk<!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:ApplyBreakingRules/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:ตารางปกติ;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-bidi-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style> <![endif]--> <br />
<div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">หลายท่านคงเคยเกิดปัญหาในเวลาที่เราพัฒนา </span>Labview Project <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เมื่อเราเขียน </span>Sub vi <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ขึ้นมาเยอะๆแล้วไม่รู้ว่าเราไป </span>Save <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ที่ไหนบ้างในบทความนี้เราจะพูดถึงขั้นตอนการหา </span>sub vi <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ที่เราไมรู้ว่ามันอยู่ที่ไหนใน </span>Computer <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">กันขั้นตอนแรก เมื่อเราเปิดโปรแกรม </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ขึ้นมาแล้ว ที่ </span>Getting start window <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ให้เราเลือกที่ </span>Tool <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">หลังจากนั้นให้เลือก </span>Find VIs on disk…<span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ดังรูปด้านล่าง</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKCLspq38cI/AAAAAAAAAQE/YuthSIN8NxU/s1600/Find+vi+on+disk.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="340" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TKCLspq38cI/AAAAAAAAAQE/YuthSIN8NxU/s400/Find+vi+on+disk.JPG" width="400" /></a></div><div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> </span><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:ApplyBreakingRules/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if !mso]><img src="http://draft.blogger.comhttp://img2.blogblog.com/img/video_object.png" style="background-color: #b2b2b2; " class="BLOGGER-object-element tr_noresize tr_placeholder" id="ieooui" data-original-id="ieooui" /> <style>
st1\:*{behavior:url(#ieooui) }
</style> <![endif]--><!--[if gte mso 10]> <style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:ตารางปกติ;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-bidi-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style> <![endif]--> </div><div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">หลังจากนั้นเมื่อเราเลือก </span>Find VIs on disk <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">แล้ว เราก็จะได้ </span>window <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ใหม่ขึ้นมา</span><span lang="TH"> </span><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ดังรูปด้านล่าง</span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKCL3AfGlpI/AAAAAAAAAQI/14OLFwZhwRs/s1600/Find+vi+on+disk1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TKCL3AfGlpI/AAAAAAAAAQI/14OLFwZhwRs/s400/Find+vi+on+disk1.JPG" width="400" /></a></div><div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> </span><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:ApplyBreakingRules/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:ตารางปกติ;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-bidi-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style> <![endif]--> </div><div class="MsoNormal"><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">แล้วให้เราเลือกว่าเราต้องการที่จะค้นหาที่ </span>Drive <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ไหนก่อนได้ตามใจชอบแล้วให้เลือก </span>Current Folder<span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> จากนั้นคลิ้ก </span>Find <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เมื่อเราให้มันค้นหาโปรแกรมก็</span>Run <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">หาเฉพาะ </span>File <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ที่มีนามสกุล </span>.vi <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เท่านั้น แล้วให้เราทำไปเรื่อยๆทุก </span>Drive <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">จนกว่าจะเจอ ซึ่งจะใช้เวลาในการค้นหาไม่นานเท่าใดนัก </span></div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-7826997022716574736.post-39733474458573643352010-09-27T08:17:00.005+07:002010-09-27T08:47:40.134+07:00Creating Labview time-engine<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TJ_xycLuVeI/AAAAAAAAAP8/o99pghmycHQ/s1600/untitled.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TJ_xycLuVeI/AAAAAAAAAP8/o99pghmycHQ/s320/untitled.JPG" width="285" /></a></div><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ต่อจากบทความที่แล้ว(</span><span style="font-size: small;"><a href="http://mechanic-top.blogspot.com/2010/09/labview-run-time-engine.html">LabVIEW Run-Time Engine</a></span><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">) คราวนี้เราจะพูดถึงขั้นตอนการสร้าง </span>Labview time-engine <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ขั้นตอนแรกให้สร้าง </span>Labview Project <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">แล้วทำการบันทึก จากนั้นให้ คลิกขวาที่ </span>Build Specification<span style="font-family: Wingdings;">--></span>new<span style="font-family: Wingdings;">--></span>Installer <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เราก็จะได้ </span>Window <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ใหม่ขึ้นมาจากนั้นให้เลือก </span>Additional Installers <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">แล้วให้เราเลือกได้ตามใจเลยครับ แต่มีหลักการเลือก ดังนี้ คือเราต้องดูว่า </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ที่เราเขียนขึ้นมานั้นมีเครื่องมือไรบ้างเช่นที่ผมทำคือมันประกอบด้วย</span> NI-VIZA <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ผมก็ต้องเลือกมันเข้าไปด้วย เมื่อเราเลือกเรียบร้อยแล้วก็ให้เรา </span>Build <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">โปรแกรมได้เลย สุดท้ายแล้วเราก็จะได้ </span>File Install <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">มาหนึ่ง </span>file <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ซึ่งเอาไว้ไป </span>Install <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ในเครื่องอื่นๆ ตัวอย่างที่ผมนำไปประยุกต์ใช้ ก็มี </span><span style="font-size: small;"><a href="http://mechanic-top.blogspot.com/2010/03/build-oscilloscope-by-labview_21.html">Build Oscilloscope By Labview ,</a></span><span style="font-size: small;"><a href="http://mechanic-top.blogspot.com/2010/03/blog-post_21.html">เครื่องวัดอุณหภูมิ</a></span><br />
<br />
<span style="font-size: small;"> </span><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TJ_x4BlCAxI/AAAAAAAAAQA/ZJOtJsI-vuQ/s1600/untitled1.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="222" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TJ_x4BlCAxI/AAAAAAAAAQA/ZJOtJsI-vuQ/s320/untitled1.JPG" width="320" /></a></div><h3 class="post-title entry-title" style="font-weight: normal;"><span style="font-size: small;"><a href="http://mechanic-top.blogspot.com/2010/03/blog-post_21.html"><br />
</a></span></h3><div class="MsoNormal"><br />
</div><h3 class="post-title entry-title"><a href="http://mechanic-top.blogspot.com/2010/03/build-oscilloscope-by-labview_21.html"><br />
</a></h3><div class="MsoNormal"></div><script type="text/javascript">
<!--
google_ad_client = "pub-8578905442990836";
/* 250x250, ถูกสร้างขึ้นแล้ว 9/25/10 */
google_ad_slot = "2802196756";
google_ad_width = 250;
google_ad_height = 250;
//-->
</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-7826997022716574736.post-45832749772136652512010-09-24T20:18:00.012+07:002010-09-28T01:59:01.665+07:00LabVIEW Run-Time Engine<div class="MsoNormal"><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TJy34ym5jkI/AAAAAAAAAP4/CACbdc-1v8Q/s1600/Labview+runtime+engine.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="223" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TJy34ym5jkI/AAAAAAAAAP4/CACbdc-1v8Q/s320/Labview+runtime+engine.JPG" width="320" /></a></div><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">บทความนี้เราจะมาพูดถึงเครื่องมือสำคัญเครื่องมือหนึ่งของ</span><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">โปรแกรม </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">นั้นคือ </span>Runtime Engine <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ประโยชน์ของ </span>Runtime Engine<span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> นี้คือ มันสามารถ</span> Run <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ใน </span>Computer <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ทุกตัวด้วยตัวมันเองโดยที่เราไม่ต้องลงโปรแกรม </span>Install<span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ซึ่งสามารถนำไปประยุกต์ใช้ในงานต่างๆมากมาย เช่น เราต้องการเขียนโปรแกรม </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">แบบนามสกุล </span><span style="font-family: Arial,Helvetica,sans-serif; font-size: large;"><a href="http://mechanic-top.blogspot.com/2010/03/labview-application-building.html">.exe</a></span><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"><span style="font-family: Arial,Helvetica,sans-serif; font-size: large;"> </span>สิ่งแรกที่ต้องมีในการลงโปรแกรมทั่วๆไปนั้นก็คือ </span>Driver <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เพื่อที่จะให้ </span>Computer <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เรารู้จักกับ </span>Software <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">นั้นๆ ซึ่ง </span>Runtime Engine<span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> ก็จะเป็นในลักษณะเดียวกันกับ </span>Driver <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ตัวหนึ่งเหมือนกัน เช่นเราเขียนโปรแกรม </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ขึ้นมาโปรเจคหนึ่งซึ่งในโปรเจคนั้นอาจจะมี <span style="font-size: large;"><a href="http://mechanic-top.blogspot.com/2010/03/pic16f877-program-labviewinterface.html"><span style="font-family: Arial,Helvetica,sans-serif; font-size: large;">serial communication</span> </a></span></span><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">อยู่</span><span lang="TH"> </span><span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ดังนั้นใน </span>driver <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เราจะต้องมี เครื่องมือ </span>serial communication<span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> ด้วยโปรแกรมเราถึงจะสามารถ </span>Run <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ได้ ดังนั้นถ้าเราเอา </span>serial communication<span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;"> เข้าไปใน </span>Runtime Engine <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เมื่อเรานำไป </span>Install <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ลงเครื่องอื่นๆแล้วเราก็สามารถ </span>Run <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">โปรแกรม </span>.exe <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ได้เลยโดยไม่ต้องลงโปรแกรม </span>Install Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">เลยเพราะโปรแกรม </span>Labview <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">นั้นมันเป็น </span>file <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">ที่ถือว่าใหญ่พอสมควร ดังนั้นคงจะเห็นประโยชน์ของ </span>Runtime Engine <span lang="TH" style="font-family: "Angsana New"; font-size: 14pt;">กันแล้วนะครับ คราวต่อไปเราจะพูดถึงขั้นตอนการสร้างกันครับ หวังว่าบทความนี้คงจะเป็นประโยชน์กับผู้ที่สนใจในเรื่องนี้ไม่มากก็น้อยนะครับ วันนี้ขอจบเรื่องเพียงเท่านี้ก่อนนะครับ</span></div><script type="text/javascript">
<!--
google_ad_client = "pub-8578905442990836";
/* 468x60, ถูกสร้างขึ้นแล้ว 9/24/10 */
google_ad_slot = "5022609267";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-7826997022716574736.post-34472841493118403782010-09-23T10:51:00.005+07:002010-09-26T01:38:03.336+07:00คลายเครียด Physicถ้าเราดูให้ตลกมันก็สุดฮาเลยครับท่าน แต่ถ้าเราลองคิดสักหน่อยถ้าเกิดว่าความสูงที่เริ่มปล่อยตัวลงจากภูเขาและมุมที่เริ่มลอยตัวในอากาศไม่เท่ากับในที่ทดลองจะเกิดอะไรขึ้นไม่อยากจะคิดเลย เพราะการเคลื่อนที่แบบ projectile motion ในทิศทางแกน x มันจะขึ้นอยู่กับความเร็วต้นและมุมที่ปล่อยตัวเท่านั้น<a href="http://www.icphysics.com/images/Content/middle/Image12.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.icphysics.com/images/Content/middle/Image12.gif" /></a>โดยที่ความเร็วต้นนั้นขึ้นอยู่กับความสูงที่ปล่อยลงจากเขาเพราะมันจะเปลี่ยนจาก พลังงานศักย์ มาเป็นพลังงานจลน์ u=sqrt(2gh)<br />
<br />
<div style="text-align: center;"><object height="385" width="640"><param name="movie" value="http://www.youtube.com/v/3wAjpMP5eyo?fs=1&hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/3wAjpMP5eyo?fs=1&hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="485" height="350"></embed></object> </div><div style="text-align: left;"><br />
</div><div style="text-align: left;"><br />
</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-31111408918392620012010-09-18T21:18:00.001+07:002010-09-24T21:47:45.791+07:00Continuous Data Acquisition<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TJTJ6PiM8JI/AAAAAAAAAPg/gKwWNXqUw4s/s1600/untitled.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br />
</a></div> วิธีการที่เรานิยมเรียกว่า Circular Buffering หรืออาจเรียกได้อีกชื่อหนึ่งว่า Continuous Data Acquisition หรือ real-time Data Acquisition จะเป็นการให้ใช้ข้อมูลในระหว่างกระบวนการเก็บข้อมูลโดยไม่มีการขัดจังหวะการ เก็บข้อมูล วิธีการนี้จะเริ่มจากการกำหนดขนาดของ Buffer ที่แน่นอนล่วงหน้าไว้ก่อน จากนั้นจะเก็บข้อมูลชนิดวนไปเรื่อยๆ คือเริ่มเก็บข้อมูลไปจนกระทั่งเต็ม Buffer จากนั้นจะย้อนเริ่มกับมาเก็บที่จุดเริ่มต้นใหม่ โดยเขียนทับข้อมูลที่ใส่ไว้ในรอบที่ผ่านมาโดยไม่สนใขว่าจะมีการอ่านข้อมูล เหล่านั้นหรือยัง ดังนั้นโดยหลักการเราก็จะต้องอ่านข้อมูลที่เก็บไว้ใน Buffer ให้เสร็จสิ้นก่อนที่จะมีการเขียนข้อมูลทับของเก่าลงไป วิธีการนี้จะเกี่ยวข้องกับการใช้ Circular Buffer ดังที่แสดงในรูปต่อไปนี้<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TJTJ6PiM8JI/AAAAAAAAAPg/gKwWNXqUw4s/s1600/untitled.bmp" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TJTJ6PiM8JI/AAAAAAAAAPg/gKwWNXqUw4s/s320/untitled.bmp" width="320" /></a></div><div style="text-align: center;"><div style="text-align: left;"><script type="text/javascript">
<!--
google_ad_client = "pub-8578905442990836";
/* 468x60, ถูกสร้างขึ้นแล้ว 9/24/10 */
google_ad_slot = "5022609267";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><br />
เริ่มจากเรากำหนดขนาดของ Circular Buffer จากนั้น DAQ Board จะเก็บข้อมูลและนำไปเก็บไว้ใน Buffer เมื่อ Buffer เต็ม Board ก็จะเริ่มเขียนข้อมูลใหม่จากจุดเริ่มต้นโดยเขียนทับข้อมูลเก่าที่เก็บไว้ในรอบก่อนหน้านี้ ไม่ว่าข้อมูลนี้จะถูกอ่านไปใช้หรือยัง กระบวนการนี้จะดำเนินต่อไป จนกระทั่งระบบเก็บข้อมูลได้ตามต้องการ หรือ LabVIEW ยกเลิกการทำงาน หรือเกิดความผิดพลาดขึ้น การทำ Continuous Data Acquisition นี้มีประโยชน์มากในการเขียนข้อมูลลงไปใน Disk เรื่อยๆ หรือแสดงผลข้อมูลตามเวลาจริง</div></div>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-7826997022716574736.post-38987736998699455192010-09-18T21:09:00.002+07:002010-09-18T21:48:24.526+07:00Triggering LABVIEWTriggering หมายถึงวิธีการใดๆ ซึ่งทำให้เราสามารถ เริ่ม,หยุด หรือประสานการเก็บข้อมูลได้ Triggering โดยปกติจะเป็นสัญญาณ Analog หรือ Digital ที่ส่งให้เกิดการวิเคราะห์ว่าจะให้กระบวนการเก็บข้อมูลดำเนินการไปอย่างไร การใช้ Software ทำการ Trigger เป็นวิธีการง่ายและสะดวกที่สุด โดยเราจะเขียนโปรแกรมเพื่อให้เกิดกระบวนการเก็บข้อมูล ยกตัวอย่าง เช่น สร้าง Boolean ขึ้นบน Front Panel เพื่อควบคุมการเริ่ม-หยุดการเก็บข้อมูล ส่วน Hardware Triggering จะให้วงจรบนอุปกรณ์ DAQ เป็นตัวกำหนดกระบวนการ สำหรับ Hardware Trigger นั้นสามารถแบ่งย่อยออกเป็น 2 ประเภทคือ External Triggering และ Internal Triggering ตัวอย่างของ Internal Triggering เช่น การโปรแกรมให้อุปกรณ์ DAQ ส่งสัญญาณ digital ออกไปเมื่อค่าที่ได้จากบางช่องสัญญาณมีปริมาณตามที่กำหนด ส่วนตัวอย่างของ External Triggering ก็เช่น รอให้ได้รับสัญญาณ digital เข้ามาทางช่องสัญญาณหนึ่งก่อนที่จะเริ่มทำการเก็บข้อมูลUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-28555259187774242522010-09-17T07:20:00.001+07:002010-09-18T21:49:56.681+07:00DAQ Board LABVIEW<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_A05s-G9ZYTo/TJK0BjWg5WI/AAAAAAAAAPc/QpvshWMdQuw/s1600/040806_pci6251_l.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="232" src="http://4.bp.blogspot.com/_A05s-G9ZYTo/TJK0BjWg5WI/AAAAAAAAAPc/QpvshWMdQuw/s320/040806_pci6251_l.jpg" width="320" /></a></div>โดยปกติแล้ว DAQ Board เป็น อุปกรณ์พิเศษ คือไม่ได้เป็นมาตรฐานที่ติดตั้งมากับคอมพิวเตอร์ สำหรับบอร์ดประเภทนี้จะมีผู้ผลิตหลายบริษัท ซึ่งลักษณะการทำงานก็อาจจะแตกต่างกันบ้างตามแต่ผู้ผลิตแต่ละแห่งออกแบบมา ข้อสำคัญที่เราต้องเข้าใจในเบื้องต้นนี้ก็คือไม่ใช่ว่า DAQ Board ทุกแบบ จะเหมาะสมกับการทำงานร่วมกับ LabVIEW ทั้งหมด อย่างไรก็ตาม ที่มหาวิทยาลัยเทคโนโลยีสุรนารีเราได้ใช้ DAQ Board ที่ผลิตโดยบริษัท National Instrument ดังนั้น DAQ Board ทุกแบบที่เรามีอยู่จะสามารถทำงานร่วมกับ LabVIEW ได้อย่างแน่นอน <br />
สำหรับ DAQ Board ที่ผลิตโดยผู้ผลิตไม่ใช่ว่าจะไม่สามารถทำงานร่วมกับ LabVIEW ได้ แต่ว่าการที่ DAQ Board ที่ผลิตโดยผู้ผลิตรายอื่นนั้นจะสามารถทำงานร่วมกับ LabVIEW ได้ก็ต่อเมื่อมี Driver ของอุปกรณ์นั้น เพื่อให้ใช้งานร่วมกับ LabVIEW ได้เท่านั้นเท่านั้น ดังนั้นหากว่าทางบริษัทผู้ผลิต DAQ Board นั้นไม่มี Driver ที่ใช้งานร่วมกับ LabVIEW มาให้ เราอาจจำเป็นที่จะต้องเขียน Driver ขึ้นมาเอง ซึ่งวิธีการนี้ค่อนข้างจะยุ่งยากและเสียเวลามาก<br />
การเลือกใช้ DAQ Board ที่ เหมาะสมกับตนที่จะใช้ถือว่าเป็นเรื่องที่สำคัญมากประการหนึ่ง เพราะราคาของเครื่องมือนี้จะเปลี่ยนแปลงไปอย่างมากหากเรากำหนดข้อจำกัดแตก ต่างกันออกไป เช่น อัตราการเรียกสุ่มตัวอย่าง (sampling rate) จำนวนช่องรับ-ส่งสัญญาณ (I/O channel) หรืออื่นๆ โดยปกติราคาของ DAQ Board ที่ผลิตโดยบริษัท National Instrument จะมีราคาอยู่ระหว่าง $700-2000 ขึ้นอยู่กับความต้องการ ซึ่งเป็นราคาที่นับว่าสูงมาก เราอาจจะได้ board ที่ราคาถูกกว่านี้จากผู้ผลิตรายอื่น แต่อาจจะมีปัญหาเรื่องการใช้งานร่วมกับ LabVIEW<br />
หน้าที่ของ DAQ Board นี้จะทำการติดต่อโดยตรงกับ Transducer ซึ่งอาจจะผ่านอุปกรณ์ Signal Conditioner หรือ ไม่ก็ได้ตามความจำเป็น นอกเหนือจากนั้นแล้วเราไม่จำเป็นต้องมีอุปกรณ์อื่นเข้ามาร่วมในการสร้าง เครื่องมือวัดเสมือนจริง ซึ่งจุดนี้เป็นจุดได้เปรียบของ DAQ Board นั่นคือแม้ว่าจะมีราคาแพง แต่สามารถจะทดแทนการซื้อเครื่องมือวัดอื่นๆ ได้มากมาย เราจะกล่าวถึง DAQ board อย่างละเอียดอีกครั้งหนึ่งในบทที่กล่าวถึง Data Acquisition HardwareUnknownnoreply@blogger.com2tag:blogger.com,1999:blog-7826997022716574736.post-658478168281269322010-09-14T11:51:00.003+07:002010-09-15T00:34:53.580+07:00Icon และ Connector Labviewถ้าเราคุ้นเคยกับการเขียนโปรแกรมเป็นตัวอักษร เราคงทราบว่าเราสามารถเขียนโปรแกรมย่อยขึ้นมาเพื่อใช้ร่วมกับโปรแกรมหลัก โดยการเขียนโปรแกรมย่อยหรือ Subroutine นี้จะมีประโยชน์มากในกรณีที่จะต้องทำการประมวลผลบ่อย ในภาษารูปภาพก็เช่นกันเราสามารถที่จะสร้าง Subroutine ขึ้นมาได้ ซึ่งเราจะเรียกว่า subVI โดย สำหรับข้อดีของการเขียนด้วยภาษารูปภาพนี้ก็คือ ทุก VI ที่เราเขียนขึ้นมาสามารถทำหน้าที่เป็น subVI ได้ แต่เนื่องจากเราจำเป็นจะต้องกำหนดลักษณะของ subVI ให้เป็นรูปภาพ และมีช่องที่จะต้องส่งเข้าสู่ subVI นั้น เราจึงได้กำหนด Icon และ Connector ขึ้น <br />
หากเราจะกล่าวคร่าวๆ icon นี้ก็อาจจะมองว่าเป็น node ในอีกรูปแบบหนึ่งก็ได้ โดย Icon จะหมายถึง Node ของ subVI ในทุกครั้งที่เราเขียน VI เราจะพบว่า LabVIEW จะให้ VI นั้นสามารถทำงานเป็น subVI ได้ถ้าหากเราต้องการ โดยที่ LabVIEW จะกำหนด icon ให้กับทุก VI ที่เขียนขึ้น ซึ่งเราสามารถเปลี่ยนแปลงรูปแบบของ Icon ที่ LabVIEW เขียนขึ้นได้ <br />
<br />
หากเราเปิด LabVIEW ใหม่ขึ้นมาเราจะสามารถสังเกตรูปของ Icon ที่ LabVIEW กำหนดขึ้นมาได้ โดยรูปของ icon จะปรากฏอยู่ที่มุมบนด้านซ้ายใต้ Tittle Bar ของทั้งหน้าต่าง Block Diagram และ Front Panel <br />
เมื่อเรานำ VI นี้ ไปใช้เพื่อเป็น subVI เราสามารถที่จะกำหนดให้มี Input และ Output ที่จะเข้าและออกจาก VI ของเราได้ ซึ่งการเข้าและออกของข้อมูลสู่ subVI นั้นจะผ่านทาง Connector ซึ่งหากจะเปรียบเทียบกับภาษาตัวอักษรที่เราคุ้นเคยแล้ว การใช้ Connector ก็เหมือนกับการใช้คำสั่ง parameter ในภาษา C หรือการใช้คำสั่ง Function ในภาษา FORTRAN นั่นคือการกำหนดว่าข้อมูลใดเป็นข้อมูลที่ส่งไปสู่ Subroutine และข้อมูลใดเป็นข้อมูลที่จะรับกลับออกมาจาก Subroutine ทำนองเดียวกันกับในLabVIEW คือเราจะส่งข้อมูลเข้าสู่ Icon หรือ subVI โดยผ่านทาง Input connector เมื่อข้อมูลได้รับการประมวลใน subVI แล้วก็ส่งกลับมาทาง Output Connector Terminal<br />
โดยปกติแล้ว Connector จะถูกบังอยู่ด้านหลังของรูป Icon เราสามารถแสดงให้เห็น Connector ได้โดยการใช้คำสั่ง Show Connector ซึ่งรายละเอียดเหล่านี้จะกล่าวในภายหลัง<br />
ในรูปต่อไปนี้เป็นการแสดง Icon และ Connector ของ VI หนึ่งซึ่งเป็นส่วนที่มาพร้อมกับ LabVIEW ส่วนที่เป็นรูปตรงกลางเราเรียก Icon และส่วนที่เป็นสายต่อต่างๆ เราเรียก Conector<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TI7_GdOAzLI/AAAAAAAAAPU/OFVVsc6nGbA/s1600/untitled.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="158" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TI7_GdOAzLI/AAAAAAAAAPU/OFVVsc6nGbA/s320/untitled.JPG" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><br />
สำหรับรายละเอียดเกี่ยวกับการสร้าง Icon และการกำหนด Connector นี้จะกล่าวถึงในบทต่อไป หลังจากที่เราได้ทำความคุ้นเคยกับการเขียนโปรแกรมด้วย LabVIEW แล้วUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-53067254929114760092010-09-14T11:39:00.004+07:002010-09-18T10:31:36.222+07:00Labview Block Diagrams<div style="float: right; margin: 1px;"><div class="widget-content"><script type="text/javascript"><!--
google_ad_client = "pub-8578905442990836";
/* 120x240, ถูกสร้างขึ้นแล้ว 9/14/10 */
google_ad_slot = "4214846614";
google_ad_width = 120;
google_ad_height = 240;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
</div></div>ที่ผ่านมาเราจะพบว่าเราสามารถสร้าง Front Panel ได้ให้เป็นไปตามต้องการของเรา ซึ่งไม่ใช่สิ่งที่ยากมากนักสำหรับ LabVIEW แต่สิ่งที่จะยุ่งยากมากกว่าคือการกำหนดให้สิ่งต่างๆ หรือที่เราเรียกว่า Object นั้นให้มีขั้นตอนหรือมีกระบวนการของการวิเคราะห์ต่างๆ ตามที่เราต้องการ เพราะเราจะต้องกำหนดการทำงานที่เกิดขึ้นหลังฉาก Front Panel เหล่านั้น นั่นคือหลังจากการที่เราออกแบบ GUI เรียบร้อยแล้วขั้นต่อไปก็คือการกำหนดการทำงานของ GUI เหล่านั้นนั่นเอง และส่วนที่มีหน้าที่นั้นคือ Block Diagram ในเบื้องต้นนี้เราอาจมอง Block Diagram ว่าเป็น Data Flow Chart และตัวโปรแกรมหรือ code ของ LabVIEW ก็ได้ การเขียน Block Diagram ก็คือการเขียน code ในภาษา G นั่นเอง ซึ่งก็เหมือนกับการเขียน code ในภาษา C หรือ FORTRAN นั่นเอง ความแตกต่างที่สำคัญระหว่าง code ในภาษา C หรือ FORTRAN กับ Block Diagram ใน LabVIEW ก็คือ Block Diagram นั้นพร้อมที่จะ execute หรือทำการประมวลผลตลอดเวลา นั่นคือในระหว่างที่เราสร้าง Block Diagram อยู่ LabVIEW จะตรวจสอบการทำงานของ VI อยู่ตลอดเวลา ตัวอย่างของ Block Diagram เป็นไปตามรูป<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_A05s-G9ZYTo/TI77D5VLhHI/AAAAAAAAAPE/LWYdfvJxzJQ/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="137" src="http://4.bp.blogspot.com/_A05s-G9ZYTo/TI77D5VLhHI/AAAAAAAAAPE/LWYdfvJxzJQ/s320/untitled.JPG" width="320" /></a></div>ถ้าหากเราพิจารณาองค์ประกอบใน Block Diagram เราจะพบว่าในส่วนของ Block Diagram จะมีส่วนประกอบที่สำคัญ 3 ส่วน คือ<br />
<b>Terminal</b><br />
<b>Node</b><br />
<b>Wire</b><br />
ทั้งสามส่วนจะมีหน้าที่หลักคือการควบคุมการส่งผ่านหรือเราอาจเรียกว่าการไหลของข้อมูล (Data Flow) และกำหนดถึงวิธีการประมวลผลข้อมูล<br />
<br />
<b>Terminal</b><br />
ทุกครั้งที่เราสร้าง Control หรือ Indicator บน Front Panel ใน Window ของ Block Diagram จะปรากฏ Terminal ขึ้น Terminal ก็คล้ายกับสถานีของข้อมูลคือจะเป็นทั้งสถานีต้นทางของข้อมูลถ้า Terminal นั้นเป็น Terminal ของ Controls และขณะเดียวกันจะเป็นทั้งสถานีปลายทางของข้อมูลถ้า Terminal นั้นเป็น Terminal ของ Indicator<br />
ข้อที่ควรเข้าใจอย่างหนึ่งก็คือ Object นี้เกิดขึ้นจากการเขียนขึ้นบน Front Panel ดังนั้นเมื่อเราจะไม่สามารถลบ Terminal ออกจาก Block Diagram ได้ และถ้าหากเราจะลบ Control หรือ Indicator นั้นออกไปจาก Front Panel แล้ว Terminal เหล่านี้ก็จะหายไปจาก Block Diagram เช่นกัน สำหรับลักษณะของตัวแปรต่างๆเราจะกล่าวในบทต่อไป<br />
<br />
<b>Node</b><br />
Node เป็นคำที่ใช้เรียก object ที่ทำกรรมวิธีใดๆ เพื่อประมวลข้อมูลใน Block Diagram เช่นเดียวกับที่เราเขียน Flow Chart แล้วใช้สัญลักษณ์ต่างๆแทนวิธีการวิเคราะห์ข้อมูล เมื่อมีข้อมูลเข้าสู่ node สิ่งที่เกิดขึ้นภายใน node ก็จะขึ้นอยู่กับว่าจะกำหนดให้ข้อมูลที่ส่งเข้าไปนั้น จะมีการประมวลผลอย่างไร ซึ่งอาจจะเป็นการบวก ลบ คูณ หาร หาราก ยกกำลัง หรือเป็นประเภทการเปรียบเทียบข้อมูล ว่ามากหรือน้อยกว่า หรืออื่นๆ ซึ่งจะเป็นการประมวลผลทางคณิตศาสตร์ทั่วไป นอกเหนือจากนั้น node นี้จะมีส่วนที่เรียกว่า Function แบบต่างๆ ซึ่งจะเหมือนกับ Function สำเร็จรูปเช่น sine, cosine, log เป็นต้น ซึ่งก็จะเหมือนกับในภาษาที่เป็นตัวอักษรทั่วๆ ไป<br />
รูปต่อไปนี้แสดงถึงลักษณะของ Node และ Terminal ที่บรรจุอยู่ภายใน Block Diagram ของ LabVIEW <br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TI778wV5YAI/AAAAAAAAAPM/mXzEhzIVU1Q/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="137" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TI778wV5YAI/AAAAAAAAAPM/mXzEhzIVU1Q/s320/untitled.JPG" width="320" /></a></div>นอกเหนือจากการประมวลผลทางคณิตศาสตร์แล้ว เรายังมี node ประเภท Structure หรือ Control Flow อีกด้วย (ในภาษาตัวอักษร Structure Command จะเป็น คำสั่งจำพวก IF...THEN, FOR..., WHILE... เป็นต้น) <br />
<br />
<b>Wires</b><br />
ขณะที่เรามีที่มาของข้อมูล ส่วนประมวลหรือปรับแต่งข้อมูล และส่วนแสดงผลข้อมูลเรียบร้อยแล้ว ขั้นต่อไปคือเราจะต้องสามารถควบคุมการส่งผ่านข้อมูลให้เป็นไปตามที่เราต้องการ อุปกรณ์ที่ใช้ใน LabVIEW ก็คือ การต่อสาย หรือ Wires ซึ่งจะเป็นการเชื่อมการส่งข้อมูลระหว่าง terminal หรือ node ต่างๆที่มีใน Block Diagram นี้เข้าด้วยกัน โดย wires นี้จะเป็นการกำหนดเส้นทางของข้อมูลว่าเมื่อออกจาก terminal หนึ่งแล้ว จะกำหนดการไหลไปที่ node ใดบ้าง มีลำดับเป็นอย่างไร และสุดท้ายจะให้แสดงผลที่ terminal ใดนั่นเอง ซึ่งการเชื่อมต่อสายนี้จะทำให้เราเข้าใจถึงหลักการของ Data Flow Programming ได้ดีขึ้น<br />
เนื่องจากข้อมูลนั้นมีหลายแบบไม่ว่าจะเป็นเลขทศนิยม, เลขจำนวนจริง, ตัวอักษร หรือค่าจริง-เท็จ (Boolean) ดังนั้นเพื่อแสดงถึงความแตกต่างของข้อมูลแต่ละแบบ LabVIEW จึงได้กำหนดให้ลักษณะของ wires สำหรับข้อมูลแต่ละแบบมีลักษณะของเส้นและสีที่แตกต่างกัน นอกจากนั้นข้อมูลแต่ละแบบดังกล่าวยังอาจมีลักษณะเป็น scalars, 1-D array, 2-D array ได้ซึ่งลักษณะของเส้นของข้อมูลแต่ละแบบก็จะแตกต่างออกไปอีก<br />
<br />
เราจะเข้าใจหลักการของ Data Flow Programming ได้ในขณะที่เราต่อสายระหว่าง terminal และ Node ต่างๆ เข้าด้วยกัน ซึ่งหลักการทำงานของ Data Flow Programming จะต่างจากการเขียนโปรแกรมโดยใช้ตัวอักษร เพราะในโปรแกรมตัวอักษรคำสั่งจะถูกส่งเข้าสู่ส่วนประมวลผลทีละบรรทัด เพื่อการคำนวณตามลำดับบรรทัด แต่ใน Data Flow นั้น โปรแกรมจะคำนวณเมื่อมีข้อมูลส่งเข้ามาถึง Input ของ Node นั้นๆ ครบ และเมื่อข้อมูลส่งครบเข้าถึง Node นั้นแล้ว จะมีการประมวลผลและส่งค่าที่ได้ออกไปตามการต่อเชื่อมสาย การคำนวณจะเสร็จสิ้นในแต่ละรอบเมื่อข้อมูลส่งข้ามไปถึง Terminal สุดท้าย การประมวลผลไม่ได้เป็นไปตามลำดับการจัดวางคือไม่ได้ทำจากซ้ายไปขวาหรือบนลงล่าง แต่เป็นไปตามขั้นตอนการเดินทางของข้อมูลซึ่งในการเขียนโปรแกรมในเบื้องต้นผู้ที่คุ้นเคยกับภาษาตัวหนังสือโดยทั่วไปอาจจะต้องใช้เวลาสักระยะเพื่อที่จะทำความเข้าใจการทำงานของ LabVIEWUnknownnoreply@blogger.com2tag:blogger.com,1999:blog-7826997022716574736.post-70844322904787982882010-09-14T11:29:00.003+07:002010-09-15T00:31:16.717+07:00ส่วนประกอบของ LabVIEW ส่วนประกอบของ LabVIEW<br />
ในบทนี้เราจะกล่าวถึงส่วนประกอบต่างๆของ LabVIEW เพื่อให้เข้าใจถึงส่วนประกอบต่างๆ ที่ใช้งานการเขียนโปรแกรม หรือ VI พื้นฐานการการต่อสายเชื่อมใน Block Diagram ลักษณะของตัวแปร และอื่นๆ อีกหลายอย่างแม้ว่าเราไม่ได้คาดหวังว่าคุณจะสามารถเริ่มเขียน VI ได้ในบทนี้แต่ก็จะเป็นพื้นฐานในการเขียน VI ในบทต่อไป และเมื่อจบการศึกษาในบทนี้แล้วเราจะมีความรู้ในเรื่องส่วนประกอบต่างๆ ของ LabVIEWFront Panel และ Block Diagramคำสั่งใน Menu ต่างๆ เช่น Menu Bar, Tool Bar และ Pop-up Menu.การกำหนด Controls และ Indicators และชนิดของตัวแปรที่ใช้ใน LabVIEW Node, Terminal, Icon และ Connector รวมถึงการเชื่อมต่อสายระหว่าง Object ต่างๆใน Block Diagramทำความรู้จักกับอุปกรณ์บางแบบบน Palette แบบต่างๆสำหรับกิจกรรมที่จัดให้ในบทนี้จะเป็นกิจกรรมเพื่อให้เราเกิดความคุ้นเคยกับส่วนประกอบต่างๆของ LabVIEW และให้รู้จักหลักการทำงานพื้นฐานของ LabVIEW อย่างไรก็ตามเรายังจะไม่เน้นหนักด้านการเขียนโปรแกรมหรือ VI ในบทนี้ กิจกรรมต่างๆ มีจุดประสงค์เพื่อให้เกิดความเข้าใจพื้นฐานเท่านั้น<br />
<br />
<b>1. Front Panels and Block Diagrams.</b><br />
<br />
อันดับแรกเราจะแนะนำให้คุณได้รู้จักกับองค์ประกอบพื้นฐานของ LabVIEW สองส่วนคือส่วนที่ผู้ใช้จะติดต่อกับโปรแกรมหรือ Front Panel และส่วนที่ผู้เขียนจะต้องกำหนดการทำงานของโปรแกรม หรือ Block DiagramFront Panel<br />
<br />
<b>Front Panel </b><br />
หรือ หน้าปัทม์คือส่วนที่ผู้ใช้จะใช้ติดต่อกับโปรแกรม ในขณะที่เราให้ VI ทำงานอยู่นั้นหน้าปัทม์นี้จะต้องทำงานร่วมอยู่ด้วย เพื่อให้ผู้ใช้หรือผู้ควบคุมสามารถให้ข้อมูลเข้าสู่โปรแกรม และเมื่อข้อมูลได้รับการประมวลผลแล้วก็จะแสดงออกมาทาง Front Panel นี้ ดังนั้นหากจะเปรียบกับโปรแกรมสำเร็จรูปอื่นๆและ Front Panel นี้ก็คือ Graphic User Interface (GUI) ของ LabVIEW นั่นเอง ตัวอย่างของลักษณะของ Front Panel ใน LabVIEW เป็นไปตามรูป ซึ่งในขั้นแรกนี้ผู้ที่ยังไม่มีความคุ้นเคยกับโปรแกรมนี้อาจมองดูว่าการ สร้างองค์ประกอบต่างๆคงจะมีความยุ่งยาก แต่ถ้าหากเราเริ่มทำความเข้าใจกับ LabVIEW แล้วเราจะพบว่าการเขียน Front Panel ในลักษณะในรูปนี้ไม่ใช่สิ่งที่ยุ่งยากหรือสิ้นเปลืองเวลาในการเขียนเลย<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_A05s-G9ZYTo/TI74HzAAOBI/AAAAAAAAAO4/hlZes0PBMcQ/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="http://4.bp.blogspot.com/_A05s-G9ZYTo/TI74HzAAOBI/AAAAAAAAAO4/hlZes0PBMcQ/s320/untitled.JPG" width="320" /></a></div><br />
หากเราสังเกตจากรูปนี้เราจะพบว่าบนหน้าปัทม์ Front Panel ของ LabVIEW จะมีส่วนประกอบที่สำคัญ 2 แบบ คือ ตัวควบคุม (Controlled) และ ตัวแสดงผล (Indicator) ซึ่งส่วนประกอบทั้ง 2 จะมีการทำงานต่างกันและหน้าที่ตรงกันข้ามกัน ดังมีรายละเอียดต่อไปนี้<br />
<br />
<b>Controls</b><br />
Controls มีหน้าที่เป็นตัวควบคุมคือให้ค่าหรือ Input จากผู้ใช้ ลักษณะของ Controls เช่น ปุ่มปรับค่า, สะพานปิด – เปิดไฟ, แท่งเลื่อนเพื่อปรับค่า, การให้ค่าด้วยตัวเลข Digital หรืออื่นๆ ดังนั้นจากหลักการของ Controls ก็หมายความว่าเป็นการกำหนดค่าหรือแหล่ง (source) ของข้อมูล โดยปกติเราจะไม่สามารถนำข้อมูลมาแสดงผลที่ Controls ได้ และถ้าหากเราพยายามที่จะให้ Control แสดงผลข้อมูลก็จะเกิดความผิดพลาดขึ้นใน VI ของเราทันที<br />
ตัวอย่างของ Object ที่ปกติแล้วจะทำหน้าที่เป็น Controls บน Front Panel บางประเภท จะแสดงในรูปต่อไปนี้ เราจะสังเกตเห็นว่าหากเปรียบเทียบกับในอุปกรณ์เครื่องมือวัดจริงแล้ว อุปกรณ์เหล่านี้จะได้รับการกำหนดค่าจากผู้ใช้ ดังนั้นจะเห็นว่า LabVIEW พยามทำให้เราได้รู้สึกว่าใช้งานกับเครื่องมือจริงๆอยู่<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TI75LsVzuPI/AAAAAAAAAO8/VJ_wZrGJI5c/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TI75LsVzuPI/AAAAAAAAAO8/VJ_wZrGJI5c/s320/untitled.JPG" width="320" /></a></div><b>Indicators</b><br />
Indicator มีหน้าที่เป็นตัวแสดงผลเพียงอย่างเดียวโดยจะรับค่าที่ได้จากแหล่งข้อมูลมาแสดงผลซึ่งอาจปรากฏในรูปของกราฟ, เข็มชี้, ระดับของเหลว หรืออื่นๆ Indicator นี้เปรียบเสมือน output เพื่อให้ผู้ใช้ได้ทราบค่าสิ่งที่เรากำลังวิเคราะห์อยู่ และผู้ใช้ไม่สามารถปรับค่าบน indicator ได้โดยตรงแต่จะต้องมีแหล่งข้อมูลที่ส่งให้กับ Indicators เหล่านี้ ดังนั้นเราอาจมอง Indicator ว่าเป็นเหมือน Sink ของข้อมูล ตัวอย่างของ object ที่ปกติแล้วจะมีเป็น Indicator บางชนิดได้แสดงในรูปต่อไปนี้<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_A05s-G9ZYTo/TI75eRPK4KI/AAAAAAAAAPA/xoU274p2REY/s1600/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="99" src="http://1.bp.blogspot.com/_A05s-G9ZYTo/TI75eRPK4KI/AAAAAAAAAPA/xoU274p2REY/s320/untitled.JPG" width="320" /></a></div>ในการเขียน VI อันดับแรกคือการเขียนหน้าปัทม์ซึ่งผู้ใช้จะต้องออกแบบส่วนนี้จะจัดวางให้เหมาะสม ซึ่งจะกล่าวถึงในบทต่อไป สำหรับในขั้นนี้เราเพียงแต่เน้นว่าบนหน้าปัทม์ Front Panel จะประกอบด้วยสองส่วนและการที่เราจะเลือก Controls และ Indicators เป็นเรื่องสำคัญเพราะทั้งสองนี้ไม่สามารถแทนกันได้ นั่นคือเราไม่สามารถกำหนดค่าให้ Controls แสดงค่าได้และไม่สามารถนำค่าจาก Indicators ออกไปเป็นข้อมูลของระบบได้Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-82612581210645908982010-09-13T14:32:00.008+07:002010-09-20T18:50:47.943+07:00DAQ, GPIB and Serial Communication<div style="font-family: inherit;"><span class="MsoPageNumber"> <br />
ในงานด้านการวัดและเครื่องมือวัดทางวิศวกรรม จะประกอบด้วยขึ้นตอนหรือกระบวนการวัด<br />
หลักๆ ตามลำดับดังนี้</span></div><div class="MsoNormal" style="font-family: inherit; margin-left: 51pt; text-align: justify; text-indent: -25.5pt;"><span class="MsoPageNumber"><b>1.<span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></b></span><span class="MsoPageNumber">Sensor - Transducer <span lang="TH">ทำหน้าที่เปลี่ยนปรากฏการณ์ทางธรรมชาติหรือปริมาณต่างๆ ทางฟิสิกส์ให้เป็นปริมาณทางไฟฟ้าที่สามารถตรวจจับได้ ไม่ว่าจะเป็น กระแส ความต่างศักดิ์ แรงเคลื่อนไฟฟ้า หรือความต้านทานไฟฟ้า</span></span></div><div class="MsoNormal" style="font-family: inherit; margin-left: 51pt; text-align: justify; text-indent: -25.5pt;"><span class="MsoPageNumber"><b>2.<span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></b></span><span class="MsoPageNumber">Signal Conditioner <span lang="TH">ทำหน้าที่ปรับแต่งปริมาณสัญญาณที่ได้จากขั้นที่ </span>1<span lang="TH"> ให้มีขนาดปริมาณหรือลักษณะที่เหมาะสม เพราะสัญญาณที่ได้จากขั้นตอนที่ </span>1<span lang="TH"> นั้น อาจมีขนาดไม่เหมาะสมหรือมีสัญญาณรบกวนมากเกินกว่าที่จะนำไปวิเคราะห์ในทันทีได้</span></span></div><div class="MsoNormal" style="font-family: inherit; margin-left: 51pt; text-align: justify; text-indent: -25.5pt;"><span class="MsoPageNumber"><b>3.<span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></b></span><span class="MsoPageNumber">Data Acquisition <span lang="TH">ทำหน้าที่ประมวลแปลความหมายหรือเปลี่ยนสัญญาณในลักษณะ </span>Analog <span lang="TH">ให้มาอยู่ในรูปของ </span>digital signal <span lang="TH">เพื่อประโยชน์ในการตีความหมายและใช้ในการควบคุมหน้าที่ของ </span>DAQ boards <span lang="TH">อาจจะเป็นการอ่านสัญญาณ </span>analog (A/D Conversion) <span lang="TH">การสร้างสัญญาณอันนาลอก </span>(D/A conversion) <span lang="TH">เขียนและอ่านสัญญาณ เพื่อเชื่อมต่อกับ </span>Transducer</span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber">ในเอกสารบางเล่มอาจเรียกขั้นตอนที่ </span><span class="MsoPageNumber">2<span lang="TH"> และ </span>3<span lang="TH"> อาจเรียกรวมกันว่า </span>Signal Processing <span lang="TH">และในบางกรณีที่สัญญาณที่ได้มาจากการวัดนั้น หากมีขนาดที่เหมาะสมเราอาจจะไม่ต้องการขั้นตอนการปรับสภาพสัญญาณหรือ </span>Signal Conditioner <span lang="TH">ก็เป็นได้</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">การติดต่อระหว่างคอมพิวเตอร์และ </span><span class="MsoPageNumber">transducer <span lang="TH">จึงเป็นเรื่องสำคัญสำหรับคอมพิวเตอร์โดยปกติแล้ว สามารถที่จะติดต่อสื่อสารกับอุปกรณ์ภายนอกได้โดยการผ่าน </span>Input/Output Board (I/O Board) <span lang="TH">ซึ่ง </span>I/O board <span lang="TH">นี้จะมีหลายแบบแต่แบบที่สำคัญและสามารถเชื่อมต่อโดยผ่านคำสั่งของ </span>LabVIEW <span lang="TH">ได้ทันทีจะประกอบด้วยอุปกรณ์ดังต่อไปนี้</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"><b> 1.<span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></b></span><span class="MsoPageNumber">DAQ Board<b> </b></span><br />
<span class="MsoPageNumber"><b> 2.<span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></b></span><span class="MsoPageNumber">GPIB Board<b> </b></span><br />
<span class="MsoPageNumber"><b> 3.<span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></b></span><span class="MsoPageNumber">Serial Interface</span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><br />
<span class="MsoPageNumber"><b>DAQ Board</b> </span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">โดยปกติแล้ว </span><span class="MsoPageNumber">DAQ Board <span lang="TH">เป็นอุปกรณ์พิเศษ คือไม่ได้เป็นมาตรฐานที่ติดตั้งมากับคอมพิวเตอร์ สำหรับบอร์ดประเภทนี้จะมีผู้ผลิตหลายบริษัท ซึ่งลักษณะการทำงานก็อาจจะแตกต่างกันบ้างตามแต่ผู้ผลิตแต่ละแห่งออกแบบมา ข้อสำคัญที่เราต้องเข้าใจในเบื้องต้นนี้ก็คือไม่ใช่ว่า </span>DAQ Board <span lang="TH">ทุกแบบ จะเหมาะสมกับการทำงานร่วมกับ </span>LabVIEW <span lang="TH">ทั้งหมด อย่างไรก็ตาม ที่มหาวิทยาลัยเทคโนโลยีสุรนารีเราได้ใช้ </span>DAQ Board <span lang="TH">ที่ผลิตโดยบริษัท </span>National Instrument <span lang="TH">ดังนั้น </span>DAQ Board <span lang="TH">ทุกแบบที่เรามีอยู่จะสามารถทำงานร่วมกับ </span>LabVIEW <span lang="TH">ได้อย่างแน่นอน </span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">สำหรับ </span><span class="MsoPageNumber">DAQ Board <span lang="TH">ที่ผลิตโดยผู้ผลิตไม่ใช่ว่าจะไม่สามารถทำงานร่วมกับ </span>LabVIEW <span lang="TH">ได้ แต่ว่าการที่ </span>DAQ Board <span lang="TH">ที่ผลิตโดยผู้ผลิตรายอื่นนั้นจะสามารถทำงานร่วมกับ </span>LabVIEW <span lang="TH">ได้ก็ต่อเมื่อมี </span>Driver <span lang="TH">ของอุปกรณ์นั้น เพื่อให้ใช้งานร่วมกับ </span>LabVIEW <span lang="TH">ได้เท่านั้นเท่านั้น ดังนั้นหากว่าทางบริษัทผู้ผลิต </span>DAQ Board <span lang="TH">นั้นไม่มี </span>Driver <span lang="TH">ที่ใช้งานร่วมกับ </span>LabVIEW <span lang="TH">มาให้ เราอาจจำเป็นที่จะต้องเขียน </span>Driver <span lang="TH">ขึ้นมาเอง ซึ่งวิธีการนี้ค่อนข้างจะยุ่งยากและเสียเวลามาก</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> <span lang="TH">การเลือกใช้ </span>DAQ Board <span lang="TH">ที่เหมาะสมกับตนที่จะใช้ถือว่าเป็นเรื่องที่สำคัญมากประการหนึ่ง เพราะราคาของเครื่องมือนี้จะเปลี่ยนแปลงไปอย่างมากหากเรากำหนดข้อจำกัดแตกต่างกันออกไป เช่น อัตราการเรียกสุ่มตัวอย่าง </span>(sampling rate) <span lang="TH">จำนวนช่องรับ</span>-<span lang="TH">ส่งสัญญาณ </span>(I/O channel) <span lang="TH">หรืออื่นๆ โดยปกติราคาของ </span>DAQ Board <span lang="TH">ที่ผลิตโดยบริษัท </span>National Instrument <span lang="TH">จะมีราคาอยู่ระหว่าง </span>$700-2000 <span lang="TH">ขึ้นอยู่กับความต้องการ ซึ่งเป็นราคาที่นับว่าสูงมาก เราอาจจะได้ </span>board <span lang="TH">ที่ราคาถูกกว่านี้จากผู้ผลิตรายอื่น แต่อาจจะมีปัญหาเรื่องการใช้งานร่วมกับ </span>LabVIEW</span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> <span lang="TH">หน้าที่ของ </span>DAQ Board <span lang="TH">นี้จะทำการติดต่อโดยตรงกับ </span>Transducer <span lang="TH">ซึ่งอาจจะผ่านอุปกรณ์ </span>Signal Conditioner <span lang="TH">หรือไม่ก็ได้ตามความจำเป็น นอกเหนือจากนั้นแล้วเราไม่จำเป็นต้องมีอุปกรณ์อื่นเข้ามาร่วมในการสร้างเครื่องมือวัดเสมือนจริง ซึ่งจุดนี้เป็นจุดได้เปรียบของ </span>DAQ Board <span lang="TH">นั่นคือแม้ว่าจะมีราคาแพง แต่สามารถจะทดแทนการซื้อเครื่องมือวัดอื่นๆ ได้มากมาย เราจะกล่าวถึง </span>DAQ board <span lang="TH">อย่างละเอียดอีกครั้งหนึ่งในบทที่กล่าวถึง </span>Data Acquisition Hardware</span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><br />
</div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> </span><b><span class="MsoPageNumber"> GPIB</span></b></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> General Purpose Interface Bus <span lang="TH">เป็นการขนถ่ายข้อมูลระบบใหม่ที่พึ่งได้รับความนิยม แม้ว่าจะได้รับการพัฒนาโดยบริษัท </span>Hewlett-Packard <span lang="TH">ตั้งแต่ปลายทศวรรษ </span>1960 <span lang="TH">และได้พัฒนาจนกระทั่งได้รับมาตรฐานจาก </span>Institute of Electrical and Electronic Engineer (IEEE) <span lang="TH">ในปี </span>1975 <span lang="TH">ซึ่งต่อมารู้จักกันในชื่อ </span>IEEE 488 standard</span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> <span lang="TH">จุดประสงค์แรกของ </span>GPIB <span lang="TH">คือใช้ในการควบคุมเครื่องมือวัดโดยคอมพิวเตอร์ อย่างไรก็ตามจุดประสงค์ได้เปลี่ยนแปลงไปบ้างแล้ว โดยการนำ </span>GPIB <span lang="TH">มาใช้ควบคุมและติดต่อระหว่างคอมพิวเตอร์ด้วยกันหรือระหว่างคอมพิวเตอร์ กับ </span>scanner <span lang="TH">หรือเครื่องมือวัดอื่นๆ ในระยะ </span>1-2<span lang="TH"> ปี ที่ผ่านมาเราจะพบว่าเครื่องคอมพิวเตอร์บางรุ่นเริ่มมี </span>GPIB <span lang="TH">ติดมาเป็นอุปกรณ์มาตรฐานของเครื่องแล้ว</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> GPIB <span lang="TH">เป็นการติดต่อแบบใหม่ที่สามารถเชื่อมต่ออุปกรณ์หลายชิ้นเข้ากับ </span>GPIB Port <span lang="TH">ตัวเดียวได้ โดยสามารถต่ออุปกรณ์ได้สูงถึง </span>15<span lang="TH"> ชั้น โดยใช้ </span>bus <span lang="TH">เพียงตัวเดียว ทำให้ประหยัด </span>(<span lang="TH">และป้องกันเรื่องปวดหัวในการ </span>set <span lang="TH">อุปกรณ์</span>) <span lang="TH">ส่วนข้อดีอื่นๆ มีดังนี้</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><br />
</div><div class="MsoNormal" style="font-family: inherit; margin-left: 54pt; text-align: justify; text-indent: -18pt;"><span class="MsoPageNumber"><span style="font-size: 10pt;"> <span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></span></span><span class="MsoPageNumber">ส่งผ่านข้อมูลด้วยวิธีแบบขนาน ครั้งละ </span><span class="MsoPageNumber">1 byte (8-bits)</span></div><div class="MsoNormal" style="font-family: inherit; margin-left: 54pt; text-align: justify; text-indent: -18pt;"><span class="MsoPageNumber"><span style="font-size: 10pt;"> <span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></span></span><span class="MsoPageNumber">Hardware <span lang="TH">จะเป็นผู้จัดการเรื่อง </span>Handshaking, timing <span lang="TH">และอื่นๆ</span></span></div><div class="MsoNormal" style="font-family: inherit; margin-left: 54pt; text-align: justify; text-indent: -18pt;"><span class="MsoPageNumber"><span style="font-size: 10pt;"><span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></span></span><span class="MsoPageNumber">อัตราการส่งผ่านข้อมูล </span><span class="MsoPageNumber">800 Kbytes/sec <span lang="TH">หรือมากกว่า ซึ่งนับว่าเร็วมากเมื่อเทียบกับ </span>port <span lang="TH">แบบเก่า</span></span></div><div class="MsoNormal" style="font-family: inherit; margin-left: 54pt; text-align: justify; text-indent: -18pt;"><span class="MsoPageNumber"><span style="font-size: 10pt;"><span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></span></span><span class="MsoPageNumber">ใช้คำสั่ง </span><span class="MsoPageNumber">ASCII <span lang="TH">ในการติดต่อ</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><br />
</div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber">และอื่นๆ อีกหลายประการ</span><span class="MsoPageNumber"></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><br />
</div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">ถึงจุดนี้คุณอาจสงสัยว่า ถ้าหากว่าเรามี </span><span class="MsoPageNumber">GPIB Port <span lang="TH">ซึ่งมีประสิทธิภาพตามที่กล่าวมาแล้วและมีราคาถูกมากหรืออาจติดตั้งมาพร้อมกับคอมพิวเตอร์แล้ว ทำไมเราจะต้องซื้อ </span>DAQ Card <span lang="TH">มาใช้อีก สิ่งที่เราต้องเข้าใจในอันดับแรกคือ </span>GPIB Port <span lang="TH">ไม่สามารถทำให้คอมพิวเตอร์ติดต่อโดยตรงกับ </span>Transducer <span lang="TH">ได้ </span>GPIB Port <span lang="TH">จะเป็นการติดต่อระหว่างคอมพิวเตอร์กับอุปกรณ์ที่มี </span>GPIB Port <span lang="TH">เท่านั้น ซึ่งอุปกรณ์ที่มี </span>GPIB Port <span lang="TH">ติดตั้งอยู่ก็มักจะเป็นอุปกรณ์ประเภทเครื่องมือวัดเช่น </span>Oscilloscope, Multimeter <span lang="TH">ซึ่งเป็น </span>Actual Instrument <span lang="TH">อยู่แล้ว ดังนั้นการส่งผ่านข้อมูลจึงเป็นข้อมูลที่อ่านค่าได้เรียบร้อยแล้ว เพราะบนเครื่องมือเหล่านั้นจะมีระบบ </span>Signal Processing <span lang="TH">อยู่ในตัวเองเรียบร้อยแล้ว</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> <span lang="TH">อย่างไรก็ตามการที่ </span>LabVIEW <span lang="TH">ติดต่อกับอุปกรณ์อื่นโดยผ่านทาง </span>GPIB Port <span lang="TH">ได้ สามารถทำให้เราสามารถเพิ่มศักย์ภาพของเครื่องมือจริง และสามารถนำค่าที่ได้จากเครื่องมือไปใช้ควบคุมอุปกรณ์อื่นๆ ด้วยคอมพิวเตอร์ได้อีกด้วย</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><br />
</div><h3 style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber" style="font-size: large;"> <span style="font-size: small;">Serial Communication</span></span></h3><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> <span lang="TH">ข้อดีของ </span>serial communication <span lang="TH">ผ่านทาง </span>Serial Port <span lang="TH">หรือพอร์ตอนุกรมก็คือราคาถูก และเครื่องมือมากมายได้ใช้อุปกรณ์นี้เป็นมาตรฐาน ลักษณะการทำงานของพอร์ตก็จะคล้ายกับ </span>GPIB Port <span lang="TH">เพียงแต่ส่งผ่านข้อมูลแบบอนุกรม และมีอัตราการส่งข้อมูลที่ช้ากว่า ซึ่งพอร์ตนี้จะใช้มาตรฐาน </span>RS-232 <span lang="TH">หรือ </span>RS-485 <span lang="TH">และการติดต่อข้อมูลจะต้องทำระหว่างคอมพิวเตอร์กับอุปกรณ์ที่มีพอร์ทนี้อยู่ด้วย</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> LabVIEW <span lang="TH">มี </span>subVI <span lang="TH">ที่ใช้ในการติดต่อระหว่างอุปกรณ์ต่างๆ กับคอมพิวเตอร์ที่สามารถเรียกมาใช้งานได้ทันทีและการ </span>Set Up <span lang="TH">เครื่องมือจะมีความยุ่งยากน้อยกว่าอุปกรณ์แบบอื่นๆ ข้อสำคัญเราต้องมีความเข้าใจกับ </span>Baud Speed, Parity, Stop Bits <span lang="TH">และอื่นๆ เป็นต้น อย่างไรก็ตามมีแนวโน้มว่า </span>GPIB Port <span lang="TH">จะเข้ามาเป็นมาตรฐานและเข้าแทนที่พอร์ตขนานได้ในอีกไม่นานนัก</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> </span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> <span lang="TH">กล่าวโดยรวมแล้วการทำงานของ </span>LabVIEW <span lang="TH">จะมีประสิทธิภาพสูงสุดหากว่าเราใช้เพื่อการติดต่อกับเครื่องมือวัดโดยตรง แม้ว่าในการเขียนโปรแกรมขั้นพื้นฐานเราจะไม่ได้กล่าวถึงการร่วมใช้กับอุปกรณ์อื่นๆ ก็ตาม การเขียน </span>VI <span lang="TH">ในเบื้องต้น ผู้ใช้อาจมีความรู้สึกว่ายุ่งยาก ต้องจดจำ </span>icon <span lang="TH">และระบบควบคุมต่างๆ มากมายแต่ก็จะเหมือนกับโปรแกรมหลายๆ แบบ หลังจากที่เราได้ทำความคุ้นเคยกับตัวโปรแกรมและการเขียนโปรแกรมพื้นฐานแล้ว เราจะพบว่าการนำ </span>LabVIEW <span lang="TH">ไปใช้งานไม่ได้มีความยุ่งยากอย่างที่เราคิดเลย</span></span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-9317275867768019502010-09-13T14:22:00.000+07:002010-09-13T14:22:16.666+07:00What Task is for LabVIEW<div style="font-family: inherit;"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:ApplyBreakingRules/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:ตารางปกติ;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style> <![endif]--> </div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">ถ้าหากว่าเรามีโปรแกรมสำเร็จรูปโปรแกรมหนึ่ง แล้วบอกว่าโปรแกรมนั้นเหมาะกับการใช้งานทุกรูปแบบ คงจะเป็นคำพูดที่เกินความเหมาะสมไป เพราะโปรแกรมแต่ละโปรแกรมนั้นผู้สร้างมีวัตถุประสงค์ในการจัดทำขึ้นอย่างแน่นอน และมีขอบข่ายของงานที่แน่ชัด ดังนั้นหากเรานำโปรแกรมดังกล่าวไม่ตรงกับวัตถุประสงค์ หรืออยู่นอกขอบข่ายการทำงาน เราก็คงจะไม่สามารถใช้ประโยชน์อย่างสูงสุดจากโปรแกรมนั้นได้</span><span class="MsoPageNumber"></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"><span> </span>LabVIEW <span lang="TH">ก็เช่นเดียวกัน โดยจุดประสงค์หลักแล้ว บริษัท </span>National Instrument <span lang="TH">ได้เริ่มพัฒนาโปรแกรมที่จะนำมาใช้กับระบบเครื่องมือวัดที่มีความง่ายในการเขียนโปรแกรมและมีฟังก์ชันเพื่อจะช่วยในการวัดทางวิศวกรรมให้มากที่สุด เพราะด้วยความเป็นมาบริษัท </span>National Instrument <span lang="TH">เริ่มจากการผลิตอุปกรณ์ที่ใช้กับการวัดทางวิศวกรรม ไม่ใช่บริษัทที่เริ่มต้นมาจากการผลิต </span>Software <span lang="TH">เป็นหลัก ดังนั้นคงไม่ผิดนักสำหรับผู้ที่ต้องการจะใช้ประโยชน์สูงสุดจากโปรแกรม </span>LabVIEW <span lang="TH">คือผู้ที่ต้องการจะนำข้อมูลจากภายนอกเครื่องคอมพิวเตอร์ เข้ามาในเครื่องเพื่อทำการการวิเคราะห์ข้อมูล ประมวลค่า แสดงผลและในหลายกรณีใช้ในระบบควบคุมอัตโนมัติด้วยคอมพิวเตอร์</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">ข้อได้เปรียบสูงสุดของ </span><span class="MsoPageNumber">LabVIEW <span lang="TH">คือการพยายามทำให้เครื่องคอมพิวเตอร์ของเราเมื่อรวมกับ </span>LabVIEW <span lang="TH">และ อุปกรณ์เชื่อมต่อเพื่อการเก็บข้อมูล </span>(Data Acquisition Card) <span lang="TH">แล้วสามารถเปลี่ยนเครื่องคอมพิวเตอร์ส่วนบุคคลของเราให้กลายเป็นเครื่องมือวัดในหลายรูปแบบ ไม่ว่าจะเป็น </span>Oscilloscope, Multi-meter, Function Generator, Strain Meter Thermometer <span lang="TH">หรือเครื่องมือวัดอื่นๆ ตามที่เราต้องการ ทำให้เราสามารถใช้คอมพิวเตอร์ในการทำการวัดและเครื่องมือวัดได้อย่างกว้างขวาง ซึ่งจุดนี้เองที่เป็นที่มาของชื่อ เครื่องมือวัดเสมือนจริง </span>(Virtual Instrument) <span lang="TH">และข้อได้เปรียบเหนือการใช้อุปกรณ์จริงเหล่านั้นคือ </span>Virtual Instrument <span lang="TH">สามารถปรับเปลี่ยนให้เหมาะสมกับการใช้งานของผู้ใช้แต่ละกลุ่มได้ โดยการเปลี่ยน </span>VI <span lang="TH">ให้เป็นไปตามต้องการเป็นเรื่องที่ไม่ยุ่งยากนัก</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">ข้อดีอีกประการหนึ่งในการหนึ่งของการใช้คอมพิวเตอร์เป็นเครื่องมือวัดก็คือ สามารถใช้ทำเป็น </span><span class="MsoPageNumber">Data Logger <span lang="TH">และ </span>PLC (Programmable Logical Controlled) <span lang="TH">ได้พร้อมกัน ซึ่งโดยปกติแล้วระบบควบคุมมักจะไม่มีในเครื่องมือวัดจริงขั้นพื้นฐาน หรือ </span>Data Logger <span lang="TH">แม้จะเก็บข้อมูลได้ แต่การสั่งการทำงานกับอุปกรณ์ตัวอื่น จะมีความยุ่งยากในการสั่งการมาก</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">กล่าวโดยสรุปก็คือหากเรามี </span><span class="MsoPageNumber">LabVIEW, <span lang="TH">คอมพิวเตอร์และ </span>DAQ Card (<span lang="TH">หรือระบบการติดต่อสื่อสารอื่นเช่น </span>GPIB <span lang="TH">หรือ </span>Serial Port<span lang="TH"> ซึ่งรายละเอียดและความแตกต่างจะกล่าวต่อไปภายหลัง เราสามารถสร้างเครื่องมือวัดเสมือนจริงได้มากมาย หากเราต้องมี </span>Transducer <span lang="TH">ที่เหมาะสมประกอบอยู่ด้วย ซึ่งจุดนี้เองคือข้อดีของโปรแกรมนี้ </span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">ส่วนท่านที่มีความคิดที่จะใช้ </span><span class="MsoPageNumber">LabVIEW <span lang="TH">เพื่อใช้ในการคำนวณและแสดงผลในงานทางวิศวกรรมที่ไม่มีการวัดค่าจากเครื่องมืออื่นใดเลย หรือไม่ได้มีการนำข้อมูลจากภายนอกเข้ามาสู่เครื่องคอมพิวเตอร์เลย </span>LabVIEW <span lang="TH">อาจจะไม่ใช่โปรแกรมที่เหมาะสม คุณอาจจะมองหาโปรแกรมอื่นๆลองเปรียบเทียบดูเพื่อตัดสินใจก็ได้ เพราะการเรียน </span>LabVIEW <span lang="TH">จะเป็นการเริ่มเรียนในแนวความคิดใหม่อีกรูปแบบหนึ่ง</span></span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-22724995491641353892010-09-13T14:19:00.003+07:002010-09-15T00:41:02.949+07:00Function of LabVIEW<div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">โปรแกรมที่เขียนขึ้นมาโดย </span><span class="MsoPageNumber">LabVIEW <span lang="TH">เราจะเรียกว่า </span>Virtual Instrument (VI) <span lang="TH">เพราะลักษณะที่ปรากฏทางจอภาพเมื่อผู้ใช้ใช้</span></span><br />
<br />
<span class="MsoPageNumber"><span lang="TH">งานจะเหมือนกับเครื่องมือหรืออุปกรณ์ทางวิศวกรรม ในขณะเดียวกันหลังฉากของอุปกรณ์เสมือนจริงเหล่านั้นจะเป็นการทำงานของ ฟังก์ชัน</span>, Subroutines <span lang="TH">และโปรแกรมหลักเหมือนกับภาษาทั่วไป สำหรับ </span>VI <span lang="TH">หนึ่งๆ จะประกอบด้วยส่วนประกอบที่สำคัญสามส่วนคือ</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"></div><div class="MsoNormal" style="font-family: inherit; margin-left: 90pt; text-align: justify; text-indent: -19.1pt;"><span class="MsoPageNumber"><b>1.<span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></b></span><span class="MsoPageNumber">Front Panel</span></div><div class="MsoNormal" style="font-family: inherit; margin-left: 90pt; text-align: justify; text-indent: -19.1pt;"><span class="MsoPageNumber"><b>2.<span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></b></span><span class="MsoPageNumber">Block Diagram</span></div><div class="MsoNormal" style="font-family: inherit; margin-left: 90pt; text-align: justify; text-indent: -19.1pt;"><span class="MsoPageNumber"><b>3.<span style="font-size-adjust: none; font-size: 7pt; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;"> </span></b></span><span class="MsoPageNumber">Icon <span lang="TH">และ </span>Connector</span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><br />
</div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">ทั้งสามส่วนหนี้จะประกอบกันขึ้นมาเป็นอุปกรณ์เสมือนจริง ลักษณะและหน้าที่ของส่วนประกอบทั้งสามมีดังต่อไปนี้</span><span class="MsoPageNumber"></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">1. Front Panel <span lang="TH">หรือหน้าปัทม์ จะเป็นส่วนที่ใช้สื่อความกันระหว่างผู้ใช้กับโปรแกรม </span>(<span lang="TH">หรือที่นิยมเรียก </span>user interface) <span lang="TH">โดยทั่วไปจะมีลักษณะเหมือนกับหน้าปัทม์ของของเครื่องมือหรืออุปกรณ์ที่ใช้งานด้านการวัดทั่วๆ ไป โดยทั่วไปจะประกอบด้วย สวิตซ์ปิดเปิด</span>, <span lang="TH">ปุ่มบิด</span>, <span lang="TH">ปุ่มกด จอแสดงผลหรือแม้แต่ค่าที่ผู้ใช้สามารถกำหนด ดังนั้นสำหรับผู้ที่คุ้นเคยกับการเขียนโปรแกรมประเภท </span>Visual <span lang="TH">ทั้งหลายคงจะเข้าใจถ้าหากบอกว่า </span>Front Panel <span lang="TH">นี้จะเปรียบเสมือนเป็น </span>GUI <span lang="TH">ของโปรแกรมหรือ </span>VI <span lang="TH">นั่นเอง ลักษณะของ </span>Front Panel <span lang="TH">แสดงในรูปต่อไปนี้</span></span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_A05s-G9ZYTo/TI3O-kSB6QI/AAAAAAAAAOw/EdmMgD9gYxI/s1600/untitled.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="222" src="http://3.bp.blogspot.com/_A05s-G9ZYTo/TI3O-kSB6QI/AAAAAAAAAOw/EdmMgD9gYxI/s320/untitled.bmp" width="320" /></a></div><div class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber"><span style="font-family: "Angsana New";"><span lang="TH"> </span></span></span> </div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">2. Block Diagram <span lang="TH">เพื่อให้เกิดความเข้าใจง่ายขึ้น เราอาจมอง </span>Block Diagram <span lang="TH">นี้เป็นเสมือนกับ </span>Source Code <span lang="TH">หรือโปรแกรมของ </span>LabVIEW <span lang="TH">ซึ่งปรากฏว่าอยู่ในรูปของภาษา </span>G <span lang="TH">ซึ่ง </span>Block Diagram <span lang="TH">นี้ ถือว่าเป็น </span>Executable Program <span lang="TH">คือสามารถที่จะทำงานได้ทันที และข้อดีอีกประการหนึ่งก็คือ </span>LabVIEW <span lang="TH">จะมีการตรวจสอบความผิดพลาดของโปรแกรมตลอดเวลา ทำให้โปรแกรมจะทำงานได้ก็ต่อเมื่อไม่มีข้อผิดพลาดในโปรแกรมเท่านั้นโดยผู้ใช้สามารถที่จะดูรายละเอียดของความผิดพลาดแสดงให้เห็นได้ตลอดเวลา ทำให้การเขียนโปรแกรมนั้นง่ายขึ้นมาก</span> ส่วนประกอบภายใน </span><span class="MsoPageNumber">Block Diagram <span lang="TH">นี้จะประกอบด้วย ฟังก์ชัน ค่าคงที่ โปรแกรมควบคุมการทำงานหรือโครงสร้าง จากนั้นในแต่ละส่วนเหล่านี้ ซึ่งจะปรากฏในรูปของ </span>Block <span lang="TH">เราจะได้รับการต่อสาย </span>(wire) <span lang="TH">สำหรับ </span>Block <span lang="TH">ที่เหมาะสมเข้าด้วยกัน เพื่อกำหนดลักษณะการไหลของข้อมูลระหว่าง </span>block <span lang="TH">เหล่านั้น ทำให้ข้อมูลได้รับการประมวลผลตามที่ต้องการ และแสดงผลออกมาให้แก่ผู้ใช้ต่อไป</span></span></div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_A05s-G9ZYTo/TI3PjCdjp2I/AAAAAAAAAO0/ce-aSvtm0EU/s1600/untitled.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="191" src="http://2.bp.blogspot.com/_A05s-G9ZYTo/TI3PjCdjp2I/AAAAAAAAAO0/ce-aSvtm0EU/s320/untitled.bmp" width="320" /></a></div><div class="MsoNormal" style="text-align: justify; text-indent: 36pt;"></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber">3. Icon <span lang="TH">และ </span>Connector <span lang="TH">เปรียบเสมือนโปรแกรมย่อย </span>Subroutine <span lang="TH">ในโปรแกรมปกติทั่วๆ ไปโดย </span>icon <span lang="TH">จะหมายถึง </span>block diagram <span lang="TH">ตัวหนึ่งที่มีการส่งข้อมูลเข้าและออกผ่านทาง </span>Connector <span lang="TH">ซึ่งใน </span>LabVIEW <span lang="TH">เราจะเรียก </span>Subroutine <span lang="TH">นี้ว่า </span>subVI <span lang="TH">ข้อดีของการเขียนโปรแกรมด้วยภาษา </span>G <span lang="TH">นี้ก็คือเราสามารถสร้าง </span>VI <span lang="TH">ทีละส่วนขึ้นมาให้ทำงานด้วยตัวเองได้อย่างอิสระ จากนั้นในภายหลักหากเราต้องการเราก็สามารถเขียนโปรแกรมอื่นขึ้นมาเพื่อเรียกใช้งาน </span>VI <span lang="TH">ที่เราเคยสร้างขึ้นก่อนหน้านี้ทีละตัว ซึ่งทำให้ </span>VI <span lang="TH">ที่เราเขียนขึ้นก่อนกลายเป็น </span>subVI <span lang="TH">ไป การเขียนในลักษณะนี้เราเรียกว่า เขียนเป็น </span>module</span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><span class="MsoPageNumber"> <span lang="TH">สำหรับลักษณะทั่วไปของ </span>Icon <span lang="TH">และ </span>Connector <span lang="TH">จะแสดงในรูปต่อไปนี้ เราจะเห็นว่าเมื่อเราแสดงในรูปของ </span>Connector <span lang="TH">เราจะพบว่ามีช่องต่อข้อมูลหรือที่เรียกว่า </span>Terminal <span lang="TH">ปรากฏให้เห็น</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber"> คำศัพท์ต่างๆที่ใช้กันใน </span><span class="MsoPageNumber">LabVIEW <span lang="TH">นี้ออกจะแตกต่างจากที่เราใช้กันในภาษาการเขียนโปรแกรมตัวหนังสือทั่วๆไปในหลายๆด้าน ดังนั้นเพื่อให้ผู้ที่เริ่มใช้ </span>LabVIEW <span lang="TH">เข้าใจถึงศัพท์ต่างๆ ที่ใช้ในโปรแกรม เราจึงขอเปรียบเทียบศัพท์ใช้ใน </span>LabVIEW <span lang="TH">กับโปรแกรมพื้นฐานทั่วๆ ไปตามตารางที่ได้แสดงต่อไปนี้</span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><br />
</div><table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; border: medium none; font-family: inherit; margin-left: 5.4pt;"><tbody>
<tr style="height: 12pt; page-break-inside: avoid;"> <td style="border-color: windowtext; border-style: double solid; border-width: 1.5pt 1pt; height: 12pt; padding: 0cm 5.4pt; width: 3cm;" width="113"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">LabVIEW</span></div></td> <td style="border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: double solid double none; border-width: 1.5pt 1pt 1.5pt medium; height: 12pt; padding: 0cm 5.4pt; width: 92.15pt;" width="123"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">โปรแกรมพื้นฐาน</span><span class="MsoPageNumber"></span></div></td> <td style="border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: double solid double none; border-width: 1.5pt 1pt 1.5pt medium; height: 12pt; padding: 0cm 5.4pt; width: 9cm;" width="340"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">หน้าที่</span><span class="MsoPageNumber"></span></div></td> </tr>
<tr style="height: 30.55pt; page-break-inside: avoid;"> <td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid dotted; border-width: medium 1pt 1pt; height: 30.55pt; padding: 0cm 5.4pt; width: 3cm;" width="113"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">VI</span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid dotted none; border-width: medium 1pt 1pt medium; height: 30.55pt; padding: 0cm 5.4pt; width: 92.15pt;" width="123"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">Program</span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid dotted none; border-width: medium 1pt 1pt medium; height: 30.55pt; padding: 0cm 5.4pt; width: 9cm;" width="340"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">ตัวโปรแกรมหลัก</span><span class="MsoPageNumber"></span></div></td> </tr>
<tr style="height: 49pt; page-break-inside: avoid;"> <td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid dotted; border-width: medium 1pt 1pt; height: 49pt; padding: 0cm 5.4pt; width: 3cm;" width="113"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">Function</span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid dotted none; border-width: medium 1pt 1pt medium; height: 49pt; padding: 0cm 5.4pt; width: 92.15pt;" width="123"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">function</span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid dotted none; border-width: medium 1pt 1pt medium; height: 49pt; padding: 0cm 5.4pt; width: 9cm;" width="340"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">ฟังก์ชันสำเร็จรูปที่สร้างขึ้นมากับโปรแกรมนั้นเช่น </span><span class="MsoPageNumber">sin, log <span lang="TH">เป็นต้น</span></span></div></td> </tr>
<tr style="height: 27.7pt; page-break-inside: avoid;"> <td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid dotted; border-width: medium 1pt 1pt; height: 27.7pt; padding: 0cm 5.4pt; width: 3cm;" width="113"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">SubVI</span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid dotted none; border-width: medium 1pt 1pt medium; height: 27.7pt; padding: 0cm 5.4pt; width: 92.15pt;" width="123"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">Subroutine</span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid dotted none; border-width: medium 1pt 1pt medium; height: 27.7pt; padding: 0cm 5.4pt; width: 9cm;" width="340"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">โปรแกรมย่อยที่ถูกเรียกใช้โดยโปรแกรมหลัก</span><span class="MsoPageNumber"></span></div></td> </tr>
<tr style="height: 27.45pt; page-break-inside: avoid;"> <td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid dotted; border-width: medium 1pt 1pt; height: 27.45pt; padding: 0cm 5.4pt; width: 3cm;" width="113"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">Front Panel </span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid dotted none; border-width: medium 1pt 1pt medium; height: 27.45pt; padding: 0cm 5.4pt; width: 92.15pt;" width="123"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">user interface</span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid dotted none; border-width: medium 1pt 1pt medium; height: 27.45pt; padding: 0cm 5.4pt; width: 9cm;" width="340"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">ส่วนที่ติดต่อกับผู้ใช้</span><span class="MsoPageNumber"></span></div></td> </tr>
<tr style="height: 28.5pt; page-break-inside: avoid;"> <td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid double; border-width: medium 1pt 1.5pt; height: 28.5pt; padding: 0cm 5.4pt; width: 3cm;" width="113"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">Block Diagram </span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid double none; border-width: medium 1pt 1.5pt medium; height: 28.5pt; padding: 0cm 5.4pt; width: 92.15pt;" width="123"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">Program code </span></div></td> <td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid double none; border-width: medium 1pt 1.5pt medium; height: 28.5pt; padding: 0cm 5.4pt; width: 9cm;" width="340"><div class="MsoNormal" style="text-align: justify;"><span class="MsoPageNumber">การเขียนตามขั้นตอนของที่แต่ละโปรแกรมกำหนดขึ้น</span><span class="MsoPageNumber"></span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="font-family: inherit; text-align: justify;"><br />
</div><div class="MsoNormal" style="text-align: justify; text-indent: 36pt;"><span class="MsoPageNumber"><span style="font-family: "Angsana New";"><span lang="TH"></span></span></span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7826997022716574736.post-62079407362465023972010-09-12T11:21:00.007+07:002010-09-20T18:45:31.807+07:00What is labview<span style="font-size: small;"><span class="MsoPageNumber"> หลายท่านคงจะสงสัยว่า </span><span class="MsoPageNumber">LabVIEW <span lang="TH">คืออะไร เป็นโปรแกรมที่ผลิตขึ้นมาเพื่อใช้ประโยชน์ในด้านใด เหมาะสมที่จะใช้ในงานด้านใดมากที่สุด ต้องมีอุปกรณ์<br />
อื่นใดร่วมใช้กับโปรแกรมนี้บ้าง และความแตกต่างของโปรแกรมนี้กับโปรแกรมอื่นๆ อย่างไร</span></span></span><br />
<div class="MsoNormal" style="font-family: inherit; margin-right: 1.35pt; text-align: justify; text-indent: 36pt;"><span style="font-size: small;"><span class="MsoPageNumber">อันดับแรก </span><span class="MsoPageNumber">LabVIEW <span lang="TH">เป็นโปรแกรมคอมพิวเตอร์ที่สร้างเพื่อนำมาใช้ในด้านการวัดและเครื่องมือวัดสำหรับงานทางวิศวกรรม </span>LabVIEW <span lang="TH">ย่อมาจาก </span>Laboratory Virtual Instrument Engineering Workbench <span lang="TH">ซึ่งหมายความว่าเป็นโปรแกรมที่สร้าง เครื่องมือวัดเสมือนจริงในห้องปฏิบัติการทางวิศวกรรม ดังนั้นจุดประสงค์หลักของการทำงานของโปรแกรมนี้ก็คือการจัดการในด้านการวัดและเครื่องมือวัด อย่างมีประสิทธิภาพ และในตัวของโปรแกรมจะประกอบไปด้วยฟังก์ชันที่ใช้ช่วยในการวัดมากมายและแน่นอนที่สุด โปรแกรมนี้จะมีประโยชน์อย่างสูงเมื่อใช้ร่วมกับเครื่องมือวัดทางวิศวกรรมต่างๆ</span></span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span style="font-size: small;"><span class="MsoPageNumber">สิ่งที่ </span><span class="MsoPageNumber">LabVIEW <span lang="TH">แตกต่างจากโปรแกรมอื่นอย่างเห็นได้ชัดที่สุดก็คือ </span>LabVIEW <span lang="TH">นี้เป็นโปรแกรมประเภท </span>GUI (Graphic User Interface) <span lang="TH">โดยสมบูรณ์ นั่นคือเราไม่จำเป็นต้องเขียน </span>code <span lang="TH">หรือคำสั่งใดๆ ทั้งสิ้น และที่สำคัญลักษณะภาษาที่ใช้ในโปรแกรมนี้เราจะเรียกว่าเป็น ภาษารูปภาพ หรือเรียกอีกอย่างว่าภาษา </span>G (Graphical Language) <span lang="TH">ซึ่งจะแทนการเขียนโปรแกรมเป็นบรรทัดอย่างที่เราคุ้นเคยกับภาษาพื้นฐาน เช่น </span>C, BASIC <span lang="TH">หรือ </span>FORTRAN <span lang="TH">ด้วยรูปภาพหรือสัญลักษณ์ทั้งหมด ซึ่งแม้ว่าในเบื้องต้นเราอาจจะสับสนกับการจัดเรียบหรือเขียนโปรแกรมบ้าง แต่เมื่อเราคุ้นเคยกับการใช้โปรแกรมนี้แล้วเราจะพบว่า </span>LabVIEW <span lang="TH">นี้มีความสะดวกและสามารถลดเวลาในการเขียนโปรแกรมลงไปได้มาก โดยเฉพาะในงานเขียนโปรแกรมคอมพิวเตอร์เพื่อเชื่อมต่อกับอุปกรณ์อื่นๆ เพื่อใช้ในการวัดและการควบคุม</span></span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span style="font-size: small;"><span class="MsoPageNumber">สำหรับผู้ที่เคยใช้โปรแกรมประเภทที่ใช้ตัวหนังสือ หรือที่เรียกว่า </span><span class="MsoPageNumber">Text Base <span lang="TH">ทั้งหลาย คงจะทราบถึงความยุ่งยากในการจัดการกับตำแหน่งการส่งผ่านข้อมูลตามอุปกรณ์เชื่อมต่อเช่น </span>Port <span lang="TH">หรือ </span>Card <span lang="TH">ต่างๆ รวมถึงการจัดวางตำแหน่งในหน่วยความจำเพื่อที่จะสามารถรวบรวมข้อมูลมาใช้ในการคำนวณและเก็บข้อมูลให้ได้ประโยชน์สูงสุด ปัญหาเหล่านี้ได้รับการแก้ไขใน </span>LabVIEW <span lang="TH">โดยได้มีการบรรจุโปรแกรมจำนวนมาก หรือ </span>Libraries <span lang="TH">ไว้สำหรับจัดการกับปัญหาเหล่านั้น ไม่ว่าอุปกรณ์การเชื่อมต่อจะเป็น </span>DAQ (Data Acquisition), GPIB (General Purpose Interface Bus <span lang="TH">หรือก่อนหน้านี้รู้จักกันในชื่อ </span>Hewlett Packard Interface Bus, HP-IB), <span lang="TH">พอร์ตอนุกรม หรือ </span>Serial Port <span lang="TH">เพื่อใช้ติดต่อกับอุปกรณ์ที่ส่งผ่านข้อมูลแบบอนุกรม </span>(Serial Instrument) <span lang="TH">รวมถึงการวิเคราะห์ข้อมูลที่ได้ด้วยวิธีการต่างๆ นอกจากนี้ใน </span>Libraries <span lang="TH">เหล่านั้นยังได้บรรจุฟังก์ชันการทำงานที่สำคัญอีกหลายประการเช่น </span>signal generation, signal processing, filters, <span lang="TH">สถิติ</span>, <span lang="TH">พีชคณิต และคณิตศาสตร์อื่นๆ ดังนั้น </span>LabVIEW <span lang="TH">จึงทำให้การวัดและการใช้เครื่องมือวัดกลายเป็นเรื่องง่ายลงไปมาก และทำให้คอมพิวเตอร์ส่วนบุคคลของเรากลายเป็นเครื่องมือทางด้านการวัดหลายชนิดอยู่ในเครื่องเดียว</span></span></span></div><div class="MsoNormal" style="font-family: inherit; text-align: justify; text-indent: 36pt;"><span style="font-size: small;"><span class="MsoPageNumber">เราหวังว่าคงจะสามารถตอบคำถามโดยพื้นฐานได้บ้างว่า </span><span class="MsoPageNumber">LabVIEW <span lang="TH">นี้คืออะไร</span></span></span></div>Unknownnoreply@blogger.com0