ÇнÀ¸ñÇ¥    1

ÇнÀÁÖÁ¦    1

¿¹½À³»¿ë    1

½Ç½À¹æ¹ý    1

°ú    Á¦    1

Áß¿äÇÔ¼ö    1

ÅÊÅ© ¼öÀ§ ÃøÁ¤

ÇнÀ¸ñÇ¥

¾×ü°¡ ÀúÀåµÈ ÅÊÅ©ÀÇ ¼öÀ§¸¦ ÃøÁ¤ÇÑ´Ù.

ÇнÀÁÖÁ¦

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¸¦ ³»º¸³»°í ÆßÇÁ µ¿ÀÛÀ» ¸ØÃß°Ô ÇÑ´Ù.

 

óÀ½

°ú    Á¦

 

Áß¿äÇÔ¼ö