학습목표   1

학습주제   1

예습내용   1

실습방법   1

       1

중요함수   1

 

 

순차적 입출력 제어

학습목표

입출력을 순차적으로 제어하여 안정된 방법으로 PLC 통신하는 프로그램을 만든다.

학습주제

타이머 함수에서 0.1 간격으로 PLC 데이터를 읽어 온다. 타이머 함수가 동작하고 있는 동안 출력을 위한 통신을 보내면 오류를 발생한다. 그러므로 출력을 위한 메시지를 보내는 동안 입력은 잠시 중단을 하고 출력을 처리한 후에 입력을 처리한다.

“Char” “nTransMode” 선언한다. 값이 0이면 입력을 처리하고 출력 스위치를 동작하면 값을 1 한다. 타이머 함수에서는 값이 1이면 출력을 내보내고 다시 값을 0으로 하면 평소에는 입력을 처리하다. 출력이 입력되면 이를 처리하고 다시 입력을 처리한다.

[순차적 입출력제어 프로그램 내려받기]

예습내용

 

실습방법

   

 

앞에서의 프로그램에서 타이머 함수에 따라 입력을 받아 들이는데 이때 동시에 출력을 보내면 입력이 리턴되어 오기 전에 출력 메세지가 나가서 에러가 발생할 있다. 이를 해결하여 안정된 방법으로 통신을 하는 방법을 만들어 본다.

 

통신은 타이머 함수에 의해 일정한 시간으로 한번씩 하게 한다. 평상시는 입력을 받고 있으나 출력 메시지가 들어오면 이를 처리 하고 나서 다시 입력을 수행하게 한다.

 

통신은 입력과 출력 2가지 모드로 나눈다. 이를 위해 nTransMode char 선언하고 “0”이면 입력을 “1”이면 출력을 나타낸다.

 

“OnInitDialog()” nTransMode 0으로 초기치를 설정한다.

OnInitDialog(){

====== 생략 ======

nTransMode = 0;

====== 생략 ======

}

 

출력 스위치를 동작하면 단순히 nTransMode 값을 0으로 한다.

 

void CRs232Dlg::OnValueChangedCwboolean9(BOOL Value)

{

              // TODO: Add your control notification handler code here

              nTransMode = 1;

}

 

 

nTransMode 값이 0이면 입력을 1이면 출력을 보내도록 한다.

 

void CRs232Dlg::OnTimer(UINT nIDEvent)

{

              // TODO: Add your message handler code here and/or call default

              CString strTemp;

 

              if(nTransMode == 0) {

                            strTemp.Format("%c%02dGP000008%c",0x05,(int)m_nMachinNo.Value,0x04);            // 입출력포트의 상태를 읽어 온다.

                            m_ComuPort.WriteComm((unsigned char*)(LPCTSTR)strTemp,strTemp.GetLength());

              }

              else

                            CheckOut();

 

              CDialog::OnTimer(nIDEvent);

}

 

처음

   

 

중요함수