11.1.1. cmlPmCfgGetCtrlMode


SYNOPSYS

VT_I4 cmlPmCfgGetCtrlMode ([in] VT_I4 BoardID,  [in] VT_I4 NodeId, [in] VT_I4 Channel, [out] VT_PI4 CtrlMode )

DESCRIPTION

  • cmlPmCfgGetCtrlMode() 함수는 각 축의 제어모드에 대하여 현재 원격 노드에 설정되어 있는 값을 읽어 들이는 함수입니다.

  • 이 함수의 사용과 호출에 있어, 제공된 ㈜커미조아의 함수 헤더 Visual Basic 에서는 함수의 첨두어 cml 가 붙지 않습니다.

PARAMETER

▶ BoardID : 사용자가 설정한 디바이스(보드) ID.

▶ NodeId : 노드 번호. 노드 번호는 3부터 시작합니다.

▶ Channel : 축 번호. 통합 축으로 관리되는 축 번호를 의미하며, 상수 값으로 0 (Zero Based) 이상, 최대 통합 축 개수 - 1 이하의 값을 축 번호로 설정할 수 있습니다.

▶ CtrlMode : cmlPmCfgSetCtrlMode() 함수의 인자이며, 제어 모드를 설정합니다. 이 값의 의미는 다음과 같습니다.

▶ CtrlMode : cmlPmCfgGetCtrlMode() 함수의 인자이며, 제어모드를 반환합니다. 반환값의 의미는 다음과 같습니다.

Value

Meaning

0(cmlCTRL_OPEN) [Default]
Open Loop 제어 모드입니다. 이 모드에서는 이송명령의 목표 좌표가 항상 커맨드
위치를 기준으로 설정됩니다.
1 (cmlCTRL_SEMI_C)
Scmli-Closed Loop 제어 모드입니다. 이 모드에서는 이송명령의 목표 좌표가 항상
피드백 위치를 기준으로 설정됩니다.

RETURN VALUE

Value

Meaning

음수

수행 실패

0(ERR_NONE)

수행 성공

REFERENCE

  • 여기서 설정하는 제어모드는 절대 좌표 이송 명령에서만 영향을 미치고, 상대 좌표 이송 명령에서는 항상 Open Loop 제어 모드로 운용됩니다.

  • 일반적인 서보드라이브에서 CW/CCW 혹은 OUT/DIR 모드를 결정하기 위한 지령 펄스(Command Pulse) 입력 설정이 존재합니다. 서보드라이브의 매뉴얼을 반드시 참조하여, ㈜커미조아 모션 모듈과 동일하게 설정하여 주십시오. 동일하게 설정이 되지 않았을 경우에는, 다음과 같은 현상이 발생할 수 있습니다.

  • 제어 모드에 따른 차이에 대한 이해를 돕기 위하여 예를 들어 보겠습니다. 현재 커맨드 위치가 5000 , 피드백 위치가 4000 인 상태에서 cmlPmSxMoveTo() 함수를 사용하여 10000의 위치로 이송하라는 명령을 하달하였을 때 • Open loop제어모드에서는 현재 위치에서 5000만큼 (+) 방향으로 이송 • Scmli-Closed Loop 제어모드에서는 현재 위치에서 6000만큼 (+) 방향으로 이송 을 하는 서로 다른 이송 결과를 나타낼 수 있습니다.

  • Scmli-Closed Loop제어모드로 설정하였을 때 이송 목표 좌표의 계산은 이송 명령을 수행하는 초기에 계산됩니다. 즉, 이송 명령을 실행하는 초기에 현재의 피드백 위치를 읽어서 목표 좌표와의 차이 만큼을 상대좌표 이송하는 방식으로 운용됩니다. 따라서 이송 명령이 끝나는 시점에서 피드백 위치를 확인하여 지령된 목표좌표에 피드백 위치가 항상 일치하는 것을 보장하는 Full-Closed Loop 방식과는 차이가 있습니다.

EXAMPLE

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
   C/C++
   #include “ComiMLink2_SDK.h”
   #include “ComiMLink2_SDK_Def.h”
   long nChannel = 0;//0번 축을 선택합니다.
   Long BoardID = 0;
   long nCtrlMode = 0;
   //0번 축을 Scmli-Closed Loop으로 설정합니다.
   cmlPmCfgSetCtrlMode(BoardID, 0, nChannel, ccmlCTRL_SEMI_C );
   //0번 축에 설정된 제어모드를 반환합니다.
   cmlPmCfgGetCtrlMode(BoardID, 0, nChannel, &nCtrlMode );