학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

PLC출력제어(MASTER-K10s1)

학습목표

PC 화면에서 출력 스위치의 상태를 읽어서 PLC 출력접점으로 출력을 내보내는 프로그램을 만든다.

학습주제

1.      MASTER-K10s1 에는 6개의 출력 단자가 있으므로 6개의 스위치를 만든다.

2.      스위치의 상태를 읽어서 송신하는 CheckOut() 함수를 만든다.

STX01 HP001006101000 EOT

위에서 01 기기번호, P 데이터 쓰기 명령, P001 데이터 쓰기의 시작번지, 06 쓰기 데이터 개수 이다. 101000의 상태는 P10 P12 24볼트의 출력을 보내고 나머지는 0V의 출력을 보낸다. 여기서 출력은 24V를 내보내는 것이 아니라 24V를 접지에 연결하는 오픈컬렉터 입니다.

strTemp.Format("%c%02dHP001006%1d%1d%1d%1d%1d%1d%c",0x05,

                         (int)m_nMachinNo.Value,(int)m_Out0.Value,(int)m_Out1.Value,

                         (int)m_Out2.Value,(int)m_Out3.Value,(int)m_Out4.Value,(int)m_Out5.Value,

                         0x04);

1단계 프로그램

그림과 같이 타이머의 시간에 따라 “Led0”에서 “Led7”까지 순차적으로 동작 하도록 한다.

2단계 프로그램

모드 설정 노브를 만들고 1단계 프로그램은 모드0”로 하고

모드1“Led3”“Led4” -> “Led2”“Led5” -> “Led1”“Led6” -> “Led0”“Led7” 이 동작하도록 하여 안에서 바깥쪽으로 Led가 점등 하도록 프로그램 한다.

3단계 프로그램

모드 설정 노브를 만들고 1단계 프로그램은 모드0”로 하고

모드2“Led0”“Led7” -> “Led1”“Led6” -> “Led2”“Led5” -> “Led3”“Led4” 이 동작하도록 하여 바깥쪽에서 안으로 Led가 점등 하도록 프로그램 한다.

예습내용

 

실습방법

   

 

프로젝트를 새로 만든다.

“NI MFC Application” 선택하고 프로젝트 이름 입력한다.

다이어로그 형태로 프로그램 함으로 “Finish” 누른다.

 

아래 그림과 같이 왼쪽 아래의 리소스뷰 선택하고 “Dialog”->”IDD_TIMER_DIALOG” 선택하면 다이어로그 박스를 있다.

도구상자에서 “CWButton Control” 선택하여 다이어로그 박스에 위치한다.

오른쪽 위의 속성 선택한다.

Led 모양을 선택한다.

이름을 “Led0” 한다.

“Led0”선택해서 복사”, “붙여넣기 8개의 Led 만들고 이름을 Led0~7까지로 한다.

변수추가 선택한다.

변수이름을 “m_nLed0~7”까지 이름을 기입한다.

클래스 이름이 추가 것을 있다.

다이어로그창에 노브를 만든다. “속성창에서 “Caption” 타이머 하여 오른쪽 그림과 같이 바꾼다.

마우스로 타이머를 선택한 마우스 오른쪽 버튼을 눌러 변수를 추가 한다.

변수이름 “m_nTimer” 한다.

그림과 같이 속성창에서

PointerValueChangedCwknob1함수를 만든다.

CTimeDlg 클래스에 변수”iTime” 추가한다.

타이머의 속성창을 선택한다.

속성창에서 스케일의 최대 1000, 최소 50으로 하고 “Discrete” 하여 정수값으로 변하게 하며 스케일의 형태는 “Log” 한다.

다이어로그박스를 선택하고 속성창에서 “WM_TIMER” 선택하여 “OnTimer” 함수를 만든다.

 

아래와 같이 TimerDlg.cpp을 프로그램 추가하여 Led가 동작하도록 한다.

 

// TimerDlg.cpp : 구현파일

//===================  생략  =====================================

BOOL CTimerDlg::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: 여기에추가초기화작업을추가합니다.

        //프로그램이시작하면자동으로타이머가동작하도록한다.

        iTime = 0;

       SetTimer(1,m_nTimer.Value,NULL);

 

        return TRUE;  // 포커스를컨트롤에설정하지않으면TRUE를반환합니다.

}

//===================  생략  =====================================

 

void CTimerDlg::PointerValueChangedCwknob1(long Pointer, VARIANT* Value)

{

        // TODO: 여기에메시지처리기코드를추가합니다.

        // 타이머시간이변하면그값을읽어서SetTimer를새로설정해준다. 

        SetTimer(1,m_nTimer.Value,NULL);

}

 

void CTimerDlg::OnTimer(UINT_PTR nIDEvent)

{

        // TODO: 여기에메시지처리기코드를추가및/또는기본값을호출합니다.

        // 타이머함수가실행되면iTime의값이1씩증가하며그값이8이되면

        // 다시0으로만들어0~7까지반보적으로변하게한다.

        iTime++;

       if(iTime >= 8)

              iTime = 0;

 

        // 초기에Led를모두off하고if문을사용하여iTime의값에

        // 해당하는LedOn이되게한다.

        m_nLed0.Value=0;

       m_nLed1.Value=0;

       m_nLed2.Value=0;

       m_nLed3.Value=0;

       m_nLed4.Value=0;

       m_nLed5.Value=0;

       m_nLed6.Value=0;

       m_nLed7.Value=0;

 

       if(iTime==0)

              m_nLed0.Value=1;

       else if(iTime==1)

              m_nLed1.Value=1;

       else if(iTime==2)

              m_nLed2.Value=1;

       else if(iTime==3)

              m_nLed3.Value=1;

       else if(iTime==4)

              m_nLed4.Value=1;

       else if(iTime==5)

              m_nLed5.Value=1;

       else if(iTime==6)

              m_nLed6.Value=1;

       else if(iTime==7)

              m_nLed7.Value=1;

 

        CDialog::OnTimer(nIDEvent);

}

 

 

 

다이어로그 박스에 노브를 만들고 Caption 모드 하고 “Numeric”에서 “Discrete” 선택한다.

변수 이름을 “m_nMode” 한다.

“CTimerDlg” 클래스를 선택하고 함수를 추가한다.

반환형식은 “void” 하고 함수이름을 “Mode0”, “Mode1”, “Mode2” 3개를 만든다.

 

 

void CTimerDlg::OnTimer(UINT_PTR nIDEvent)

{

        // TODO: 여기에메시지처리기코드를추가및/또는기본값을호출합니다.

        // 타이머함수가실행되면iTime의값이1씩증가하며그값이8이되면

        // 다시0으로만들어0~7까지반보적으로변하게한다.

        iTime++;

        // 초기에Led를모두off하고if문을사용하여iTime의값에

        // 해당하는LedOn이되게한다.

        m_nLed0.Value=0;

       m_nLed1.Value=0;

       m_nLed2.Value=0;

       m_nLed3.Value=0;

       m_nLed4.Value=0;

       m_nLed5.Value=0;

       m_nLed6.Value=0;

       m_nLed7.Value=0;

 

       if(m_nMode.Value == 0)

              Mode0();

       else if(m_nMode.Value == 1)

              Mode1();

       else if(m_nMode.Value == 2)

              Mode2();

 

        CDialog::OnTimer(nIDEvent);

}

 

//void CTimerDlg::PointerValueChangedCwknob2(long Pointer, VARIANT* Value)

//{

//      // TODO: 여기에메시지처리기코드를추가합니다.

//}

 

void CTimerDlg::Mode0(void)

{

        if(iTime >= 8)

              iTime = 0;

      

       if(iTime==0)

              m_nLed0.Value=1;

       else if(iTime==1)

              m_nLed1.Value=1;

       else if(iTime==2)

              m_nLed2.Value=1;

       else if(iTime==3)

              m_nLed3.Value=1;

       else if(iTime==4)

              m_nLed4.Value=1;

       else if(iTime==5)

              m_nLed5.Value=1;

       else if(iTime==6)

              m_nLed6.Value=1;

       else if(iTime==7)

              m_nLed7.Value=1;

}

 

void CTimerDlg::Mode1(void)

{

        if(iTime >= 4)

              iTime = 0;

      

       if(iTime==0) {

              m_nLed3.Value=1;

              m_nLed4.Value=1;

       }

       else if(iTime==1) {

              m_nLed2.Value=1;

              m_nLed5.Value=1;

       }

       else if(iTime==2) {

              m_nLed1.Value=1;

              m_nLed6.Value=1;

       }

       else if(iTime==3) {

              m_nLed0.Value=1;

              m_nLed7.Value=1;

       }

}

 

void CTimerDlg::Mode2(void)

{

        if(iTime >= 4)

              iTime = 0;

      

       if(iTime==3) {

              m_nLed3.Value=1;

              m_nLed4.Value=1;

       }

       else if(iTime==2) {

              m_nLed2.Value=1;

              m_nLed5.Value=1;

       }

       else if(iTime==1) {

              m_nLed1.Value=1;

              m_nLed6.Value=1;

       }

       else if(iTime==0) {

              m_nLed0.Value=1;

              m_nLed7.Value=1;

       }

}

 

 

 

 

처음

   

 

중요함수