cmmIntSetMask¶
SYNOPSIS¶
VT_I4 cmmIntSetMask(
[in] VT_I4 Axis, [in] VT_I4 Mask
)
DESCRIPTION¶
이 함수는 어떠한 조건의 인터럽트를 받아들일 것인지를 설정합니다. 인터럽트를 발생 시킬 조건을 Mask 매개 변수를 통하여 설정하십시오. 단, 이 것은 “이벤트 인터럽트”에만 적용되는 것이며, “에러 인터럽트”는 마스크될 수 없습니다.
PARAMETER¶
Axis: 축번호. 축번호는 상수값으로 [cmX1] 부터 0 번째 축을 기준 축으로 임의의 축을 설정할 수 있습니다.
Mask : 인터럽트를 발생시킬 조건을 설정합니다. 이 값의 각 비트는 다음의 표와 같이 인터럽트 발생 조건을 설정합니다. 각 비트값이 1 이면 해당조건이 인터럽트를 발생시키며, 0 이면 발생시키지 않습니다.
Bit No. |
Meaning |
---|---|
BIT0 |
Normal Stop |
BIT1 |
Succesive start of the next operation |
BIT2 |
Reserved |
BIT3 |
Reserved |
BIT4 |
Start of acceleration |
BIT5 |
End of acceleration |
BIT6 |
Start of deceleration |
BIT7 |
End of deceleration |
BIT8 |
Reserved |
BIT9 |
Reserved |
BIT10 |
Position error tolerance exceed (cmmCmpErrSetConfig() 함수 참조) |
BIT11 |
General Comparator (cmmCmpGenSetConfig() 함수 참조) |
BIT12 |
CMP output triggered (cmmCmpTrgSetConfig() 함수 참조) |
BIT13 |
CLR signal input resetting counter value. |
BIT14 |
LTC input making counter value latched |
BIT15 |
ORG input signal ON |
BIT16 |
SD input signal ON |
BIT17 |
±DR input signal state changed |
BIT18 |
STA input signal state turned ON |
RETURN VALUE¶
Value |
Meaning |
---|---|
음수 |
수행 실패 |
cmERR_NONE |
수행 성공 |
EXAMPLE¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | C/C++
//**************************************************************
// OnbtnApplyMask(): "Apply Mask Change" 이벤트 핸들러.
// EventInterrupt 의 마스크를 설정한다. 마스크는 인터럽트를 받고자하는
// 종류를 선택하는 것입니다.
// 참고: ErrorInterrupt 는 마스크에 관계없이 항상 인터럽트를 받을
// 수 있도록 되어 있습니다.
//**************************************************************
#define NUM_CHECKBOX 15
void CInterruptEventDlg::OnbtnApplyMask()
{
int nAxis = cmX1;
// IntMask 에서 몇 개의 비트가 Reserved 로 되어 있어서 화면상의
// CheckBox 순서가
// 비트 순서와 일치하지 않아서 아래와 같이 각 CheckBox 별로 비트 순서를
// 알려주는 배열을 작성하였습니다.
int nBitIdx[NUM_CHECKBOX] = {0, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18};
long dwIntMask = 0x0;
for(int i=0; i<NUM_CHECKBOX; i++){
if(IsDlgButtonChecked(IDC_chkMask0+i)){
cmmSetBit(dwIntMask, nBitIdx[i], 1);
} else{
cmmSetBit(dwIntMask, nBitIdx[i], 0);
}
}
cmmIntSetMask(nAxis, dwIntMask);
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | Visual Basic
'//*************************************************************
'// OnbtnApplyMask(): "Apply Mask Change" 이벤트 핸들러.
'// EventInterrupt 의 마스크를 설정한다. 마스크는 인터럽트를 받고자하는
'// 종류를 선택하는 것입니다.
'// 참고: ErrorInterrupt 는 마스크에 관계없이 항상 인터럽트를 받을
'// 수 있도록 되어 있습니다.
'//*************************************************************
Private Sub OnApplyMask()
Dim nAxis As Long
'// IntMask 에서 몇 개의 비트가 Reserved 로 되어 있어서 화면상의
'// CheckBox 순서가
'// 비트 순서와 일치하지 않아서 아래와 같이 각 CheckBox 별로 비트 순서를
'// 알려주는 배열을 작성하였습니다.
Dim nBitIdx(4) As Long
nBitIdx(0) = 0
nBitIdx(1) = 1
nBitIdx(2) = 4
nBitIdx(3) = 5
Dim dwIntMask As Long
dwIntMask = &H0
If Check1.Value Then
Call cmmSetBit(dwIntMask, nBitIdx(0), 1)
Else
Call cmmSetBit(dwIntMask, nBitIdx(0), 0)
End If
If Check2.Value Then
Call cmmSetBit(dwIntMask, nBitIdx(1), 1)
Else
Call cmmSetBit(dwIntMask, nBitIdx(1), 0)
End If
If Check3.Value Then
Call cmmSetBit(dwIntMask, nBitIdx(2), 1)
Else
Call cmmSetBit(dwIntMask, nBitIdx(2), 0)
End If
If Check4.Value Then
Call cmmSetBit(dwIntMask, nBitIdx(3), 1)
Else
Call cmmSetBit(dwIntMask, nBitIdx(3), 0)
End If
Call cmmIntSetMask(nAxis, dwIntMask)
End Sub
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | Delphi
// Description : 인터럽트 마스크를 설정합니다.
// 상수 배열 nBitIndex 의 요소가 0,1,2,3,4 순으로
// 1 씩 증가하지 않는 이유는 2 번이나 3 번등의 인터럽트 마스크
// 는 내부적으로 예약되어 있기 때문입니다. 따라서 해당
// 인터럽트 마스크 비트는 사용하지 말아야 합니다.
Procedure btnSetInterruptMaskClick();
const
nBitIndex : Array[0..14] of LongInt = (0, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18);
var
i : Integer;
nIntMask : LongInt;
begin
// CheckBox 컴포넌트를 검색하여, 어떤 CheckBox 가 Checked 되어 있는지
// 확인합니다. 확인된 상태를 통해 Interrupt Mask 를 구성합니다.
for i:=0 to 14 do begin
if TCheckBox(FindComponent('CheckBox' + IntToStr(i))).Checked then
begin
nIntMask := (nIntMask) OR (1 shl nBitIndex[i]);
end
else
nIntMask := nIntMask And Not(1 shl nBitIndex[i]);
end;
// 인터럽트 마스크 대상축은 cmX1 (0 번째 축) 을 기준으로 합니다.
// 실제 응용프로그램에서는 인터럽트 이벤트 발생시에
// 다축의 인터럽트 마스크일 경우 어떤 축의 이벤트가 발생했는지를
// 확인해 볼 필요가 있습니다.
cmmIntSetMask(cmX1,nIntMask);
MessageBox('Event mask has been updated');
end;
|