12.PMAC 상위기-통신 중단(하위기 알림 상위기)

앞서 말했듯이 상위기 제어 하드웨어는 모두 명령을 보내는 것을 통해 진행되는데 이것은 일방적인 것이다.그러면 반대로 하위기 하드웨어가 상위기에 명령을 보내면 어떻게 실현할 수 있습니까?PMAC에서 가장 흔히 볼 수 있는 상황은 PMAC이 한 번의 운동이 끝났을 때 현재 PC 프로그램의 운동이 이미 끝났다는 것을 알리는 것이다.
1. 하위기 알림 상위기 원리
다음 그림과 같이
PC는 PMAC에 명령을 보내서 무엇을 하는지 제어한다. 운동 프로그램이 끝난 후에 상위기에 알림을 끊고 끊기는 동시에 완성된 프로그램 번호를 표시하는 표지 P100을 보낸다. 이 표지는 1번 축이 운동이 끝났는지 2번 축이 운동이 끝났는지 표시한다.PC단에 인터럽트 리셋 함수가 하나 있는데 하위기 발송이 인터럽트되면 자동으로 이 함수로 넘어가 인터럽트 함수는 인터럽트를 받아들이고 표지 P100에 따라 상황에 따라 처리를 결정한다.
일반적으로 다음과 같은 절차가 있습니다.
PC->PMAC:    ,      			(&1b40r)
PMAC:   ,  PC        			(While (M613 = 1)  wait)
PMAC->PC:      ,PC       		(P100=1 M613=1)

PC:  PMAC               		(  P100  )
PC->PMAC:    ,              	(P100=0 M613=0)

위의 그림에서 보듯이 M613은 하드웨어 점프선으로 설정된 것으로 현재 인터럽트 응답 채널을 지정하고 구체적인 설정은 여기에 있다.P100은 우리가 지정한 상하위기 통신 변수로 이것은 스스로 정의한 것이거나 P1/P2/P3 등이 될 수 있다.
2. 하위 코드
&1
CLOSE ;          

OPEN PROG 40
CLEAR

TA(200)
TS(20)
F(30)
INC
Linear

X(10) Y(40)
dwell 0

;       
While (M613 = 1)  wait  ;             
P100=1					;         ,  0、1、2      
M613=1					;        

CLOSE

3. 상위기 처리 코드
등록 중단 처리 함수:
BOOL CInterruptDlg::ConnectPmac()
{
	//  Pcomm32.dll   ,    myRuntimeLink   
	if (NULL == PmacRuntimeLink(PMAC_NUM))
	{
		AfxMessageBox(TEXT("  Pcomm32.dll      PMAC     !"));
		return m_bIsConnect = FALSE;
	}
	
	//      
	if(  FALSE == PmacINTRFuncCallInit(PMAC_NUM, InterruptFunc2, 0, 0xFF1F))
	{
		AfxMessageBox(TEXT("PMAC         "));
		return m_bIsConnect = FALSE;
	}
	
	return m_bIsConnect = TRUE;
}

해당 인터럽트 함수는 다음과 같이 처리됩니다.
//    
void WINAPI InterruptFunc2(DWORD msg, PINTRBUFFER pBuffer)
{
	extern CInterruptApp theApp;
	TCHAR szRes[MAX_PATH];
	TCHAR szCmd[MAX_PATH];
	
	if (pBuffer->dwInterruptType == ISR_IR6)
	{
		if (1 == PmacGetVariable(PMAC_NUM, 'P', 100, 0))
		{
			AfxMessageBox(TEXT("    !"));
			
			//    
			lstrcpy(szCmd, "M613=0 P100=0");
			PmacGetResponse(0,szRes,MAX_PATH,szCmd);
		}
	}
}

프로그램 소스 코드 다운로드 주소를 보여 줍니다. 이 프로그램에서 모터를 누르면 0으로 돌아간 후, 0으로 돌아간 단추는 회색화됩니다.하위기가 0으로 되돌아와 상위기 프로그램에 중단될 때까지 상위기 프로그램이 판단한 후에 에너지 버튼을 처리합니다.이 프로그램은 가장 간단한 중단 처리 프로그램으로 주로 원리를 밝히기 위해서이다. 아무리 복잡한 프로그램이라도 이 원리와 같다. 이 원리를 바탕으로 우리는 더욱 복잡한 상하위기 상호작용 프로그램을 개발할 수 있다.
기본 설치가 완료된runtime를 사용할 수 없습니다.h, 원래 문제가 있어서 프로그램 원본 폴더에 넣은 myRuntime를 다시 써야 합니다.h.
더 많은 PMAC 코드는 나의 사이트를 참조하는데 기본적으로 모두 이 시리즈가 관련된 지식점이다.
지금까지 PMAC의 사용 시리즈는 기본적으로 다 썼습니다. 이 시리즈를 보고 기본적인 PMAC 프로그래밍과 디버깅은 문제가 없을 것입니다. 나머지는 Read The Fuck Manual입니다.
오리지널http://blog.csdn.net/wenzhou1219

좋은 웹페이지 즐겨찾기