|
ÅÊÅ© ¼öÀ§ ÃøÁ¤ |
|||||||
ÇнÀ¸ñÇ¥ |
||||||||
¾×ü°¡ ÀúÀåµÈ ÅÊÅ©ÀÇ ¼öÀ§¸¦ ÃøÁ¤ÇÑ´Ù. |
||||||||
ÇнÀÁÖÁ¦ |
||||||||
1. ¼öÀ§ ÃøÁ¤±â´Â ¾¾µð¾ÆÀÌÅ×Å©¢ß(http://www.cdikorea.com)¿¡ ÆÇ¸ÅµÇ´Â ¸ðµ¨¹øÈ£ ¡°CDT-100R¡±À» »ç¿ëÇÏ¿´´Ù. 2. Àü¾ÐÀÇ ÃøÁ¤Àº NI»ç(http://www.ni.com/korea) ¡°NI USB-6008¡±À» »ç¿ë ÇÏ¿´´Ù. 3. ±â±â¿¡¼´Â 4~20mAÀÇ Àü·ù°¡ Ãâ·ÂµÊÀ¸·Î 500¿À¿ÈÀÇ ÀúÀåÀ» ¿¬°áÇÏ¿© 2~10VÀÇ Ãâ·ÂÀÌ ³ª¿Àµµ·Ï ÇÏ¿´´Ù. 4. ÇÁ·Î±×·¥¿¡¼ 0.5ÃÊ ¸¶´Ù ŸÀ̸Ӹ¦ µ¿ÀÛ½ÃÄѼ Àü¾ÐÀ» ÃàÁ¤Çϰí À̸¦ ÇÁ·Î±×·¥ÀÇ ½½¶óÀ̵忡 ¿¬°áÇÏ¿© ÇÁ·Î±×·¥ÇÑ´Ù. 5. ÇÏÀ§·¹º§°ú »óÀ§·¹º§¿¡¼ Ãâ·ÂÆ÷Æ® P0.0°ú P0.1·Î Ãâ·ÂÀÌ ³ª°¡µµ·Ï ÇÁ·Î±×·¥ÇÑ´Ù. 6. ÇÁ·Î±×·¥Àº ¡°C:\Documents and Settings\All Users\Documents\National Instruments\NI-DAQ\Examples\MStudioVC2005\Analog In\Measure Voltage\AcqOneVoltageSample¡±ÀÇ ¿¹Á¦ÇÁ·Î±×·¥À» ±âº»À¸·Î ÇÏ¿© ÀÀ¿ëÇÑ´Ù. |
||||||||
|
|
|||||||
´ÙÀ½°ú ȸ·Î¸¦ ¿¬°áÇÑ´Ù. ÀÌ ¶§ ¡°USB-6008¡±¿¡´Â DC24V³ª AC220V ´ÜÀÚ°¡ ¿¬°áµÇ¸é PC°¡ ȸ¼Õ µÊÀ¸·Î °¢º°È÷ Á¶½ÉÇØ¾ß ÇÑ´Ù. |
||||||||
¿¹½À³»¿ë |
||||||||
¼öÀ§ ÃøÁ¤±â´Â 4~20mAÀÇ Àü·ù°¡ Ãâ·ÂµÇ°í, ¡°NI USB-6008¡± 10V ±îÁö ÀÔ·Â Àü¾ÐÀÌ Çã¿ë µÊÀ¸·Î ¾Æ·¡¿Í °°ÀÌ °è»êÇÏ¿© ¿¬°á ÀúÇ×À» °áÁ¤ÇÑ´Ù. ÃÖ´ë Àü¾ÐÀ» 10V, Àü·ù¸¦ 20mA·Î Çϸé 10V/0.02A=500¿À¿È |
||||||||
½Ç½À¹æ¹ý |
||||||||
¸ñ Â÷ |
||||||||
¾Æ·¡¿Í °°ÀÌ ¡°NI MFC Application¡±À¸·Î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µç´Ù. ±×¸®°í ³ª¸ÓÁö´Â ±âº»°ªÀ¸·Î ¼±ÅÃÇÑ´Ù. |
||||||||
|
À§¿¡ ¡°¼Ó¼º ÆäÀÌÁö¡±¸¦ ¼±ÅÃÇÏ¿© ¾Æ·¡¿Í °°ÀÌ ÅÊÅ© ¸ð¾çÀÇ ½½¶óÀ̵å·Î ¹Ù²Û´Ù. |
|||||||
¸¶¿ì½º ¿À¸¥ÂʹöưÀ» ´·¯ ¾Æ·¡¿Í °°ÀÌ ¡°º¯¼ö Ãß°¡¡± ¼±Åà ÇÑ´Ù. |
¡°º¯¼ö À̸§¡±À» ¡°m_Tank1¡±·Î ÇÑ´Ù. |
|||||||
¸¶¿ì½º·Î ´ÙÀ̾î·Î±×¹Ú½º ¼±ÅÃÇÑ ÈÄ¿¡ ¡°¸Þ½ÃÁö¡±¿¡¼ ¡°WM_TIMER¡± ÇÔ¼ö¸¦ ¸¸µç´Ù. |
||||||||
¡°LevelDlg.h¡± Çì´õ ÆÄÀÏ¿¡ Task¸¦ Á¤ÀÇ ÇÕ´Ï´Ù. |
||||||||
|
// LevelDlg.h : Çì´õÆÄÀÏ // #pragma once #include "nislide.h" // CLevelDlg ´ëÈ»óÀÚ class CLevelDlg : public
CDialog { // »ý¼ºÀÔ´Ï´Ù. public: CNiDAQmxTask TaskIn01; CLevelDlg(CWnd*
pParent = NULL); // Ç¥ÁØ»ý¼ºÀÚÀÔ´Ï´Ù. // ´ëÈ»óÀÚµ¥ÀÌÅÍÀÔ´Ï´Ù. enum { IDD = IDD_LEVEL_DIALOG }; protected: virtual void
DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. //==================ÀÌÇÏ »ý·« =================== |
|
||||||
¡°OnInitDialog()¡± ÇÔ¼ö ¾È¿¡ Task¸¦ ¾Æ³ª·Î±× ÀÔ·ÂÀ¸·Î ¼³Á¤ Çϰí ŸÀÌ¸Ó µ¿ÀÛ ½Ã°£À» 0.2ÃÊ·Î ¼³Á¤ ÇÕ´Ï´Ù. |
||||||||
|
BOOL CLevelDlg::OnInitDialog() { CDialog::OnInitDialog(); // ½Ã½ºÅÛ¸Þ´º¿¡"Á¤º¸..." ¸Þ´ºÇ׸ñÀ»Ãß°¡ÇÕ´Ï´Ù. // IDM_ABOUTBOX´Â½Ã½ºÅÛ¸í·É¹üÀ§¿¡ÀÖ¾î¾ßÇÕ´Ï´Ù. ASSERT((IDM_ABOUTBOX
& 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX
< 0xF000); CMenu*
pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString
strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,
IDM_ABOUTBOX, strAboutMenu); } } // ÀÌ´ëÈ»óÀÚÀǾÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ÀÇÁÖâÀÌ´ëÈ»óÀÚ°¡¾Æ´Ò°æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©°¡ÀÌÀÛ¾÷À»ÀÚµ¿À¸·Î¼öÇàÇÕ´Ï´Ù. SetIcon(m_hIcon,
TRUE); // Å«¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. SetIcon(m_hIcon,
FALSE); // ÀÛÀº¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. // TODO: ¿©±â¿¡Ãß°¡ÃʱâÈÀÛ¾÷À»Ãß°¡ÇÕ´Ï´Ù. double
minimum=-10; double maximum=10; TaskIn01.AIChannels.CreateVoltageChannel("Dev1/ai0",_T(""),
static_cast<DAQmxAITerminalConfiguration>(-1),
minimum, maximum, DAQmxAIVoltageUnitsVolts); SetTimer(1,200,NULL); return TRUE;
// Æ÷Ä¿½º¸¦ÄÁÆ®·Ñ¿¡¼³Á¤ÇÏÁö¾ÊÀ¸¸éTRUE¸¦¹ÝȯÇÕ´Ï´Ù. } |
|
||||||
ŸÀÌ¸Ó ÇÔ¼ö¿¡¼ ¾Æ³ª·Î±× ÀÔ·ÂÆ÷Æ®ÀÇ °ªÀ» Àоî¿À°í ÅÊÅ©·¹º§·Î Ãâ·ÂÇÑ´Ù. |
||||||||
|
void CLevelDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: ¿©±â¿¡¸Þ½ÃÁö󸮱âÄڵ带Ãß°¡¹×/¶Ç´Â±âº»°ªÀ»È£ÃâÇÕ´Ï´Ù.
CNiString data; double meanValue; //µ¥ÀÌÅ͸¦ÃøÁ¤ÇÑ´Ù. CNiDAQmxAnalogSingleChannelReader
reader(myTask1.Stream); //ÃøÁ¤°ªÀ»ÅÊÅ©·¹º§·ÎÃâ·ÂÇÑ´Ù. data<<reader.ReadSingleSample(); data >> meanValue; TaskIn01.Value = meanValue; CDialog::OnTimer(nIDEvent); } |
|
||||||
ÇÁ·Î±×·¥À» µ¿ÀÛÇÏ¸é ·¹º§ÀÌ Ç¥½ÃµÇ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. |
|
|||||||
Áö±ÝºÎÅÍ ÅÊÅ©ÀÇ »óÀ§,ÇÏÀ§ ·¹º§À» ¼¼ÆÃÇÏ´Â ½½¶óÀ̵å¿Í Led¸¦ Ãß°¡Çϰí ÀÌ¿¡ µû¶ó Ãâ·ÂÀ» ³»º¸³»µµ·Ï ÇϰڽÀ´Ï´Ù. |
||||||||
|
||||||||
±×¸²°ú °°ÀÌ ½½¶óÀ̵带 Ãß°¡ÇÏ°í º¯¼ö¸¦ Ãß°¡ ÇÕ´Ï´Ù. |
º¯¼ö À̸§À» ¡°m_Alarm1¡±·Î ÇÕ´Ï´Ù. |
|||||||
¿À¸¥ÂÊ À§ ¡°¼Ó¼ºÆäÀÌÁö¡±¸¦
¼±ÅÃÇÑ ÈÄ¿¡ ¡°Pointer¡±¿¡¼ ¡°Add¡±¹öưÀ» 2¹ø´·¯ Æ÷ÀÎÅÍ 2°³¸¦ Ãß°¡ÇÑ ÈÄ¿¡ ¡°Min¡±, ¡°Max¡±·Î À̸§À» ¹Ù²Ù°í ¡°Fill style¡±°ú
»ö»óÀ» ¹Ù²Û´Ù. |
||||||||
|
|
|||||||
±×¸²°ú °°ÀÌ Led 2°³¸¦ ¸¸µé°í À§¿Í °°ÀÌ ¡°º¯¼öÃß°¡¡±¸¦ ¼±ÅÃÇÏ¿© °¢°¢ÀÇ º¯¼ö À̸§À» ¡°m_bLedd1_1¡±, ¡°m_bLedd1_2¡±·Î ÇÕ´Ï´Ù. |
|
|||||||
|
|
|||||||
¡°LevelDlg.h¡± Çì´õ ÆÄÀÏ¿¡ Task¸¦ ¼±¾ð ÇÕ´Ï´Ù. |
||||||||
|
// LevelDlg.h : Çì´õÆÄÀÏ // #pragma once #include "nislide.h" #include "nibutton.h" // CLevelDlg ´ëÈ»óÀÚ class CLevelDlg : public
CDialog { // »ý¼ºÀÔ´Ï´Ù. public: CNiDAQmxTask
TaskIn01; // ÀÔ·ÂÀ»À§ÇÑTask CNiDAQmxTask
TaskOut01; // Ãâ·ÂÀ»À§ÇÑTask CLevelDlg(CWnd*
pParent = NULL); // Ç¥ÁØ»ý¼ºÀÚÀÔ´Ï´Ù. // ´ëÈ»óÀÚµ¥ÀÌÅÍÀÔ´Ï´Ù. enum { IDD = IDD_LEVEL_DIALOG }; protected: virtual void
DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. |
|
||||||
|
||||||||
|
BOOL CLevelDlg::OnInitDialog() { CDialog::OnInitDialog(); // ½Ã½ºÅÛ¸Þ´º¿¡"Á¤º¸..." ¸Þ´ºÇ׸ñÀ»Ãß°¡ÇÕ´Ï´Ù. // IDM_ABOUTBOX´Â½Ã½ºÅÛ¸í·É¹üÀ§¿¡ÀÖ¾î¾ßÇÕ´Ï´Ù. ASSERT((IDM_ABOUTBOX
& 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX
< 0xF000); CMenu*
pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString
strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,
IDM_ABOUTBOX, strAboutMenu); } } // ÀÌ´ëÈ»óÀÚÀǾÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ÀÇÁÖâÀÌ´ëÈ»óÀÚ°¡¾Æ´Ò°æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©°¡ÀÌÀÛ¾÷À»ÀÚµ¿À¸·Î¼öÇàÇÕ´Ï´Ù. SetIcon(m_hIcon,
TRUE); // Å«¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. SetIcon(m_hIcon,
FALSE); // ÀÛÀº¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. // TODO: ¿©±â¿¡Ãß°¡ÃʱâÈÀÛ¾÷À»Ãß°¡ÇÕ´Ï´Ù. // µðÁöÅ»Ãâ·ÂÀ»À§ÇÑÃʱâÈ vector[0]=1;vector[1]=1;vector[2]=1;vector[3]=1; vector[4]=1;vector[5]=1;vector[6]=1;vector[7]=1; double minimum=-10; double maximum=10; TaskIn01.AIChannels.CreateVoltageChannel("Dev1/ai0",_T(""),
static_cast<DAQmxAITerminalConfiguration>(-1),
minimum, maximum, DAQmxAIVoltageUnitsVolts); TaskOut01.DOChannels.CreateChannel("Dev1/port0/line0:7",
"", DAQmxOneChannelForAllLines); SetTimer(1,200,NULL); return TRUE;
// Æ÷Ä¿½º¸¦ÄÁÆ®·Ñ¿¡¼³Á¤ÇÏÁö¾ÊÀ¸¸éTRUE¸¦¹ÝȯÇÕ´Ï´Ù. } |
|
||||||
¡°OnTimer¡± ÇÔ¼ö¿¡ ¼öÀ§¸¦ ÃøÁ¤ÇÏ¿© meanValue¿¡ ÀúÀåÇϰí
led Ãâ·Â°ú µðÁöÅÐ Æ÷Æ® Ãâ·ÂÀ» ÇÁ·Î±×·¥ÇÑ´Ù. |
||||||||
|
void CLevelDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: ¿©±â¿¡¸Þ½ÃÁö󸮱âÄڵ带Ãß°¡¹×/¶Ç´Â±âº»°ªÀ»È£ÃâÇÕ´Ï´Ù.
CNiString data; double meanValue; //µ¥ÀÌÅ͸¦ÃøÁ¤ÇÑ´Ù. CNiDAQmxAnalogSingleChannelReader
reader(TaskIn01.Stream); //ÃøÁ¤°ªÀ»ÅÊÅ©·¹º§·ÎÃâ·ÂÇÑ´Ù. data<<reader.ReadSingleSample(); data >> meanValue; m_Tank1.Value = meanValue; m_Alarm1.GetPointers().Item(1).Value
= meanValue; // ÅÊÅ©¼öÀ§ÃÖ´ë, ÃÖ¼Ò¼³Á¤¿¡µû¸¥Ãâ·ÂÀ»³»º¸³½´Ù. // »óÀ§·¹º§º¸´Ù³ôÀ¸¸éÃâ·ÂÀ»¸ØÃá´Ù. if(meanValue
>= m_Alarm1.GetPointers().Item(3).Value) { m_bLed1_1.Value
= 1; vector[0]=1; } else m_bLed1_1.Value
= 0; // ÇÏÀ§·¹º§º¸´Ù³¸À¸¸éÃâ·ÂÀ»³»º¸³½´Ù. if(meanValue<=m_Alarm1.GetPointers().Item(2).Value)
{ m_bLed1_2.Value
= 1; vector[0]=0; } else m_bLed1_2.Value
= 0; CNiDAQmxDigitalSingleChannelWriter
writer(TaskOut01.Stream); writer.WriteSingleSampleMultiLine(true,
vector); CDialog::OnTimer(nIDEvent); } |
|
||||||
|
||||||||
ÇÏÀ§·¹º§º¸´Ù ¼öÀ§°¡ ³·À¸¸é Led¿¡ ºÒÀÌ µé¾î¿À°í µðÁöÅÐ
Æ÷Æ® ¡°P0.0¡±(Æò»ó½Ã 5VÃâ·Â)À¸·Î Ãâ·ÂÀ» 0V¸¦ ³»º¸³»°í ÆßÇÁ°¡ µ¿ÀÛÇÏ°Ô ÇÑ´Ù. |
»óÀ§·¹º§º¸´Ù ¼öÀ§°¡ ³ôÀ¸¸é Led¿¡ ºÒÀÌ µé¾î¿À°í µðÁöÅÐ
Æ÷Æ® ¡°P0.0¡±(Æò»ó½Ã 5VÃâ·Â)À¸·Î Ãâ·ÂÀ» 5V¸¦ ³»º¸³»°í ÆßÇÁ µ¿ÀÛÀ» ¸ØÃß°Ô ÇÑ´Ù. |
|||||||
|
||||||||
°ú Á¦ |
||||||||
|
||||||||
Áß¿äÇÔ¼ö |
||||||||
|
||||||||