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;