ÇнÀ¸ñÇ¥    1

ÇнÀÁÖÁ¦    1

¿¹½À³»¿ë    1

½Ç½À¹æ¹ý    1

°ú    Á¦    1

Áß¿äÇÔ¼ö    1

ÅÊÅ©2´ë ¼öÀ§ ÃøÁ¤

ÇнÀ¸ñÇ¥

1´ëÀÇ ÅÊÅ©´Â ÀúÁ¶·Î »ç¿ëÇϰí 1´ë´Â ¹°ÀÌ Èê·¯³ª°¡´Â »óÅ¿¡¼­ ¼öÀ§Á¶ÀýÀ» ÇÑ´Ù.

ÇнÀÁÖÁ¦

1.      ¹°ÅÊÅ©¸¦ 2´ë ¸¸µé°í 1´ë´Â ÀúÁ¶·Î »ç¿ëÇϰí 1´ë´Â ¼öÀ§Á¶Àý¿ëÀ¸·Î »ç¿ëÇÑ´Ù.

2.      È­¸é¿¡¼­ Á¶ÀýÇÒ ¹°ÀÇ ³ôÀÌ¿Í Á¦¾î ¹üÀ§¸¦ ¼±ÅÃÇÏ¸é ÆßÇÁ°¡ On/Off µÇ¸é¼­ ¼öÀ§¸¦ Á¶ÀýÇÑ´Ù.

3.      ±âº» ÇÁ·Î±×·¥Àº Àü ½Ã°£ÀÇ ÅÊÅ© ¼öÀ§ Á¶Àý ÇÁ·Î±×·¥À» À̾ ÀÛ¼ºÇÑ´Ù.

 

´ÙÀ½°ú ȸ·Î¸¦ ¿¬°áÇÑ´Ù.

ÀÌ ¶§ ¡°USB-6008¡±¿¡´Â DC24V³ª AC220V ´ÜÀÚ°¡ ¿¬°áµÇ¸é PC°¡ ȸ¼Õ µÊÀ¸·Î °¢º°È÷ Á¶½ÉÇØ¾ß ÇÑ´Ù.

¿¹½À³»¿ë

 

½Ç½À¹æ¹ý

¸ñ    Â÷

 

´ÙÀ̾î·Î±× ¹Ú½º¿¡ ±×¸²°ú °°ÀÌ ÅÊÅ©¸¦ ¸ðµÎ º¹»ç ÇÏ¿© ¶È°°ÀÌ 2°³¸¦ ¸¸µé°í ÆßÇÁ Led¸¦ Ãß°¡ÇÑ´Ù. ±×¸®°í ±×·¡ÇÁ¸¦ Ãß°¡ÇÑ´Ù.

¾Æ·¡´Â ¸¶¿ì½º·Î ¼±ÅÃÇÏ°í ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ´­·¯¼­ º¯¼ö Ãß°¡¸¦ ÇÏ¿© ¸â¹ö º£¸®¾îºíÀ» Á¤ÀÇ ÇÑ´Ù.

Çì´õ ÆÄÀÏ¿¡ ¾Æ·¡¸¦ Ãß°¡ÇÑ´Ù.

 

// LevelDlg.h : Çì´õÆÄÀÏ

//

 

#pragma once

#include "nislide.h"

#include "nibutton.h"

#include "ninumedit.h"

#include "nigraph.h"

 

 

// CLevelDlg ´ëÈ­»óÀÚ

class CLevelDlg : public CDialog

{

// »ý¼ºÀÔ´Ï´Ù.

public:

        CNiDAQmxTask TaskIn01;  // ÀÔ·ÂÀ»À§ÇÑTask

        CNiDAQmxTask TaskIn02;  // ÀÔ·ÂÀ»À§ÇÑTask

        CNiDAQmxTask TaskOut01; // Ãâ·ÂÀ»À§ÇÑTask

        CNiDAQmxTask TaskOut02;

        CLevelDlg(CWnd* pParent = NULL); // Ç¥ÁØ»ý¼ºÀÚÀÔ´Ï´Ù.

 

        // ´ÙÀ̾î·Î±×¹Ú½º¿¡±Û¾¾¸¦¾²±âÀ§ÇÑÁ¤ÀÇ

        BOOL m_bTransparent;

       COLORREF m_colorText;

       COLORREF m_colorBk;

       LOGFONT m_logFont;

 

// ´ëÈ­»óÀÚµ¥ÀÌÅÍÀÔ´Ï´Ù.

        enum { IDD = IDD_LEVEL_DIALOG };

 

        protected:

        virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù.

 

 

// ±¸ÇöÀÔ´Ï´Ù.

protected:

        HICON m_hIcon;

 

        // »ý¼ºµÈ¸Þ½ÃÁö¸ÊÇÔ¼ö

        virtual BOOL OnInitDialog();

        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

        afx_msg void OnPaint();

        afx_msg HCURSOR OnQueryDragIcon();

        DECLARE_MESSAGE_MAP()

public:

        NI::CNiSlide m_Tank1;

        afx_msg void OnTimer(UINT_PTR nIDEvent);

        NI::CNiSlide m_Alarm1;

        NI::CNiButton m_bLed1_1;

        NI::CNiButton m_bLed1_2;

        NI::CNiButton m_bLed2_1;

        NI::CNiButton m_bLed2_2;

        NI::CNiSlide m_Alarm2;

        NI::CNiSlide m_Tank2;

public:

        NI::CNiNumEdit m_dK;

public:

        NI::CNiButton m_nPump;

        NI::CNiGraph m_Graph;

};

 

 

 

¡°LevelDlg.cpp¡± ÆÄÀÏ¿¡¼­ ´ÙÀ½ »¡°£ ±Û¾¾ ºÎºÐÀ» ¼öÁ¤ÇÑ´Ù.

 

// LevelDlg.cpp : ±¸ÇöÆÄÀÏ

//

 

#include "stdafx.h"

#include "Level.h"

#include "LevelDlg.h"

#include <stdlib.h>

 

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

 

CNiBoolVector vector(8);

 

 

// ÀÀ¿ëÇÁ·Î±×·¥Á¤º¸¿¡»ç¿ëµÇ´ÂCAboutDlg ´ëÈ­»óÀÚÀÔ´Ï´Ù.

 

class CAboutDlg : public CDialog

{

public:

        CAboutDlg();

 

// ´ëÈ­»óÀÚµ¥ÀÌÅÍÀÔ´Ï´Ù.

        enum { IDD = IDD_ABOUTBOX };

 

        protected:

        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV Áö¿øÀÔ´Ï´Ù.

 

// ±¸ÇöÀÔ´Ï´Ù.

protected:

        DECLARE_MESSAGE_MAP()

};

 

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

}

 

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

        CDialog::DoDataExchange(pDX);

}

 

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

 

 

// CLevelDlg ´ëÈ­»óÀÚ

CLevelDlg::CLevelDlg(CWnd* pParent /*=NULL*/)

        : CDialog(CLevelDlg::IDD, pParent)

{

        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

 

void CLevelDlg::DoDataExchange(CDataExchange* pDX)

{

        CDialog::DoDataExchange(pDX);

        DDX_Control(pDX, IDC_CWSLIDE1, m_Tank1);

        DDX_Control(pDX, IDC_CWSLIDE2, m_Alarm1);

        DDX_Control(pDX, IDC_CWBOOLEAN1, m_bLed1_1);

        DDX_Control(pDX, IDC_CWBOOLEAN2, m_bLed1_2);

        DDX_Control(pDX, IDC_CWBOOLEAN3, m_bLed2_1);

        DDX_Control(pDX, IDC_CWBOOLEAN4, m_bLed2_2);

        DDX_Control(pDX, IDC_CWSLIDE4, m_Alarm2);

        DDX_Control(pDX, IDC_CWSLIDE3, m_Tank2);

        DDX_Control(pDX, IDC_CWNUMEDIT1, m_dK);

        DDX_Control(pDX, IDC_CWBOOLEAN5, m_nPump);

        DDX_Control(pDX, IDC_CWGRAPH1, m_Graph);

}

 

BEGIN_MESSAGE_MAP(CLevelDlg, CDialog)

        ON_WM_SYSCOMMAND()

        ON_WM_PAINT()

        ON_WM_QUERYDRAGICON()

        //}}AFX_MSG_MAP

        ON_WM_TIMER()

END_MESSAGE_MAP()

 

 

// CLevelDlg ¸Þ½ÃÁö󸮱â

 

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: ¿©±â¿¡Ãß°¡ÃʱâÈ­ÀÛ¾÷À»Ãß°¡ÇÕ´Ï´Ù.

        // µðÁöÅ»Ãâ·ÂÀ»À§ÇÑÃʱâÈ­

        //========== ÆùÆ®¼³Á¤===========================

        m_bTransparent = FALSE;

       m_colorText = RGB(0, 0, 0);                // ÆùÆ®»ö»ó

       m_colorBk = RGB(230,230,230);              // ÆùÆ®¹è°Ï»ö»ó

 

       m_logFont.lfHeight                  = -40; //ÆùƮũ±â

       m_logFont.lfWidth                   = 0;

       m_logFont.lfEscapement              = 0;

       m_logFont.lfOrientation             = 0;

       //m_logFont.lfWeight                = FW_NORMAL;

       m_logFont.lfWeight                  = 900; // ±½Àº±Û¾¾

       m_logFont.lfItalic                  = FALSE;

       m_logFont.lfUnderline        = FALSE;

       m_logFont.lfStrikeOut        = FALSE;

       m_logFont.lfCharSet                 = DEFAULT_CHARSET;

       m_logFont.lfOutPrecision     = OUT_CHARACTER_PRECIS;

       m_logFont.lfClipPrecision    = CLIP_CHARACTER_PRECIS;

       m_logFont.lfQuality                 = DEFAULT_QUALITY;

       m_logFont.lfPitchAndFamily   = DEFAULT_PITCH|FF_DONTCARE;

       strcpy(m_logFont.lfFaceName, "Arial");

        //========== ÆùÆ®¼³Á¤===========================

        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);

       TaskIn02.AIChannels.CreateVoltageChannel("Dev1/ai1",_T(""),

            static_cast<DAQmxAITerminalConfiguration>(-1),

            minimum, maximum, DAQmxAIVoltageUnitsVolts);

       TaskOut01.DOChannels.CreateChannel("Dev1/port0/line0:7", "",

                     DAQmxOneChannelForAllLines);

       TaskOut02.DOChannels.CreateChannel("Dev1/port0/line0:7", "",

                     DAQmxOneChannelForAllLines);

                    

 

       SetTimer(1,200,NULL);

 

        return TRUE;  // Æ÷Ä¿½º¸¦ÄÁÆ®·Ñ¿¡¼³Á¤ÇÏÁö¾ÊÀ¸¸éTRUE¸¦¹ÝȯÇÕ´Ï´Ù.

}

 

void CLevelDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

        if ((nID & 0xFFF0) == IDM_ABOUTBOX)

        {

                CAboutDlg dlgAbout;

                dlgAbout.DoModal();

        }

        else

        {

                CDialog::OnSysCommand(nID, lParam);

        }

}

 

// ´ëÈ­»óÀÚ¿¡ÃÖ¼ÒÈ­´ÜÃ߸¦Ãß°¡ÇÒ°æ¿ì¾ÆÀÌÄÜÀ»±×¸®·Á¸é

//  ¾Æ·¡Äڵ尡ÇÊ¿äÇÕ´Ï´Ù. ¹®¼­/ºä¸ðµ¨À»»ç¿ëÇÏ´ÂMFC ÀÀ¿ëÇÁ·Î±×·¥Àǰæ¿ì¿¡´Â

//  ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ÀÌÀÛ¾÷À»ÀÚµ¿À¸·Î¼öÇàÇÕ´Ï´Ù.

void CLevelDlg::OnPaint()

{

        /*

        // ÆùÆ®¸¦¾²±âÀ§ÇØ¿ø·¡ÀÇÇÔ¼ö¸¦Áö¿ì°í¾Æ·¡ÇÁ·Î±×·¥À»Ãß°¡ÇÑ´Ù.

        if (IsIconic())

        {

                CPaintDC dc(this); // ±×¸®±â¸¦À§Çѵð¹ÙÀ̽ºÄÁÅØ½ºÆ®

 

                SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

 

                // Ŭ¶óÀÌ¾ðÆ®»ç°¢Çü¿¡¼­¾ÆÀÌÄÜÀ»°¡¿îµ¥¿¡¸ÂÃä´Ï´Ù.

                int cxIcon = GetSystemMetrics(SM_CXICON);

                int cyIcon = GetSystemMetrics(SM_CYICON);

                CRect rect;

                GetClientRect(&rect);

                int x = (rect.Width() - cxIcon + 1) / 2;

                int y = (rect.Height() - cyIcon + 1) / 2;

 

                // ¾ÆÀÌÄÜÀ»±×¸³´Ï´Ù.

                dc.DrawIcon(x, y, m_hIcon);

        }

        else

        {

                CDialog::OnPaint();

        }

        */

 

        CPaintDC dc(this); // device context for painting

      

       // TODO: Add your message handler code here

       CRect rect;

       CString s;

       int x,y;

       GetClientRect(&rect);

 

       // LOGFONT·ÎºÎÅÍÆùÆ®¸¦»ý¼º

       CFont newFont, *pOldFont;

       newFont.CreateFontIndirect(&m_logFont);

 

       // »ý¼ºµÈÆùÆ®¸¦DC¿¡¼±ÅÃ

       pOldFont = (CFont *)dc.SelectObject(&newFont);

 

       // ÅØ½ºÆ®ÀÇÀü°æ»ö°ú¹è°æ»ö¼³Á¤

       dc.SetTextColor(m_colorText);

       dc.SetBkColor(m_colorBk);

      

       // ¹è°æ¸ðµå¸¦¼³Á¤

       if(m_bTransparent) dc.SetBkMode(TRANSPARENT);

       else dc.SetBkMode(OPAQUE);

 

       // ÅØ½ºÆ®¸¦±×¸²

       x=70; y=0;    // ±Û¾¾ÀÇÀ§Ä¡

       rect=CRect(x,y,x+900,y+50);  // ±Û¾¾¸¦¾²´Â¹Ú½ºÀÇÅ©±â

       dc.DrawText("2008³â¸ÞīƮ·Î´Ð½º°ú¼öÀ§Á¶ÀýÁ¹¾÷ÀÛǰ", &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER);

        // Do not call CDialog::OnPaint() for painting messages

}

 

// »ç¿ëÀÚ°¡ÃÖ¼ÒÈ­µÈâÀ»²ô´Âµ¿¾È¿¡Ä¿¼­°¡Ç¥½ÃµÇµµ·Ï½Ã½ºÅÛ¿¡¼­

//  ÀÌÇÔ¼ö¸¦È£ÃâÇÕ´Ï´Ù.

HCURSOR CLevelDlg::OnQueryDragIcon()

{

        return static_cast<HCURSOR>(m_hIcon);

}

 

 

void CLevelDlg::OnTimer(UINT_PTR nIDEvent)

{

        // TODO: ¿©±â¿¡¸Þ½ÃÁö󸮱âÄڵ带Ãß°¡¹×/¶Ç´Â±âº»°ªÀ»È£ÃâÇÕ´Ï´Ù.

        CNiString data;

       double meanValue,meanValue2;

 

       //µ¥ÀÌÅ͸¦ÃøÁ¤ÇÑ´Ù.

       CNiDAQmxAnalogSingleChannelReader reader(TaskIn01.Stream);

       CNiDAQmxAnalogSingleChannelReader reader2(TaskIn02.Stream);

 

       //ÃøÁ¤°ªÀ»ÅÊÅ©·¹º§·ÎÃâ·ÂÇÑ´Ù.

       data<<reader.ReadSingleSample();

       data >> meanValue;

       m_Tank1.Value = meanValue;

       m_Alarm1.GetPointers().Item(1).Value = meanValue;

 

       data<<reader2.ReadSingleSample();

       data >> meanValue2;

       m_Tank2.Value = meanValue2;

       m_Alarm2.GetPointers().Item(1).Value = meanValue2;

       

        // ÅÊÅ©¼öÀ§ÃÖ´ë, ÃÖ¼Ò¼³Á¤¿¡µû¸¥Ãâ·ÂÀ»³»º¸³½´Ù.

        // ÅÊÅ©ÀÇ»óÀ§·¹º§Led ·¥ÇÁÇ¥½Ã

        //(»óÀ§·¹º§º¸´Ù³ôÀ¸¸éÃâ·ÂÀ»¸ØÃá´Ù.)

        if(meanValue >= m_Alarm1.GetPointers().Item(3).Value) {

              m_bLed1_1.Value = 1;

              //vector[0]=1;

       }

       else

              m_bLed1_1.Value = 0;

        //ÆßÇÁÃâ·ÂÁ¦¾î

        double k=m_dK.Value;

       if(meanValue >= m_Alarm1.GetPointers().Item(3).Value+m_dK.Value) {

              vector[0]=1;

              m_nPump.Value = 0;

       }

       else if(meanValue <= m_Alarm1.GetPointers().Item(3).Value-m_dK.Value) {

              vector[0]=0;

              m_nPump.Value = 1;

       }

 

 

        // ÅÊÅ©ÀÇÇÏÀ§·¹º§Led ·¥ÇÁÇ¥½Ã

        //(ÇÏÀ§·¹º§º¸´Ù³¸À¸¸éÃâ·ÂÀ»³»º¸³½´Ù.)

        if(meanValue<=m_Alarm1.GetPointers().Item(2).Value) {

              m_bLed1_2.Value = 0;

              //vector[0]=0;

       }

       else

              m_bLed1_2.Value = 0;

 

        // ÅÊÅ©ÀÇ»óÀ§·¹º§Led ·¥ÇÁÇ¥½Ã

        if(meanValue2 >= m_Alarm2.GetPointers().Item(3).Value)

              m_bLed2_1.Value = 1;

       else

              m_bLed2_1.Value = 0;

 

        // ÅÊÅ©ÀÇÇÏÀ§·¹º§Led ·¥ÇÁÇ¥½Ã

        if(meanValue2<=m_Alarm2.GetPointers().Item(2).Value)

              m_bLed2_2.Value = 1;

       else

              m_bLed2_2.Value = 0;

 

       CNiDAQmxDigitalSingleChannelWriter writer(TaskOut01.Stream);

       writer.WriteSingleSampleMultiLine(true, vector);

 

       // ±×·¡ÇÁ¸¦±×¸°´Ù.

       m_Graph.GetPlots().Item("Plot-1").ChartY(meanValue);

       m_Graph.GetPlots().Item("Plot-2").ChartY(m_Alarm1.GetPointers().Item(3).Value);

 

       

        CDialog::OnTimer(nIDEvent);

}

 

 

 

 

óÀ½

°ú    Á¦

 

Áß¿äÇÔ¼ö