4.2.2. cemCfgCtrlMode_Set


SYNOPSIS

VT_I4 cemCfgCtrlMode_Set(
  VT_I4 Axis,
  VT_I4 CtrlMode
)

DESCRIPTION

  • 각 축의 제어모드를 결정합니다. 여기서 제어모드라는 것은 엔코더 피드백 값을 이송 명령에서 어떻게 활용하느냐 하는 것입니다. 이송 명령이 내려졌을 때 목표 좌표를 커맨드(Command) 위치를 기준으로 적용할 것인지, 피드백 (Feedback) 위치를 기준으로 적용할 것인지를 결정하는 함수입니다

PARAMETER

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

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

Value

Meaning

0 (cemCTRL_OPEN) [Default]

Open Loop 제어 모드로 설정합니다. 이 모드에서는 이송명령의 목표 좌표가 항상 커맨드 위치를 기준으로 설정됩니다.

1 (cemCTRL_SEMI_C)

Semi-Closed Loop 제어 모드로 설정합니다. 이 모드에서는 이송 명령의 목표 좌표가 항상 피드백 위치를 기준으로 설정됩니다. 예를 들어서 10000 의 좌표로 이송하라는 명령이 하달되었을 때 커맨드 위치는 무시하고, 피드백 위치가 10000 이 되도록 이송의 목표좌표가 설정됩니다.

2 (cemCTRL_FULL_C)

값은 향후 버전을 위해서 예약된 값이며, 현재는 사용되지 않습니다.

RETURN VALUE

Value

Meaning

음수

수행 실패

0 (ceERR_NONE)

수행 성공

Note

여기서 설정하는 제어모드는 절대 좌표 이송 명령에서만 영향을 미치고, 상대 좌표 이송 명령에서는

항상 Open Loop 제어 모드로 운용됩니다.

제어 모드에 따른 차이에 대한 이해를 돕기 위하여 예를 들어 보겠습니다. 현재 커맨드 위치가 5000,

피드백 위치가 4000 인 상태에서 cemSxMoveTo() 함수를 사용하여 10000 의 위치로 이송하 라는

명령을 하달하였을 때

  • Open Loop 제어모드에서는 현재 위치에서 5000 만큼 (+) 방향으로 이송.

  • Semi-Closed Loop 제어모드에서는 현재 위치에서 6000 만큼 (+) 방향으로 이송.

을 하는 서로 다른 이송 결과를 나타낼 수 있습니다.

Semi-Closed Loop 제어모드로 설정하였을 때 이송 목표 좌표의 계산은 이송 명령을 수행하는

초기에 계산됩니다. 즉, 이송 명령을 실행하는 초기에 현재의 피드백 위치를 읽어서 목표 좌표와의

차이만큼 상대좌표 이송하는 방식으로 운용됩니다. 따라서 이송 명령이 끝나는 시점에서 피드백

위치를 확인하여 지령된 목표좌표에 피드백 위치가 항상 일치하는 것을 보장하는 Full-Closed Loop

방식과는 차이가 있습니다.

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
 C/C++
 #include “ceSDK.h”
 #include “ceSDKDef.h”
void OnSetCtrlMode ()
{
long nAxisNo = 1; // 제어 모드를 설정할 축을 선택합니다.
long nCtrlMode; // 제어 모드 정보.
/* 설정되어 있는 제어 모드를 확인하여 Semi-Closed 제어 모드로 설정합니다.
이 제어 모드에서는 이송 명령의 목표 좌표가 항상 피드백 위치를 기준으로 설정됩니다. 단, 절대 좌표 이송
명령에서만 영향을 미치고, 상대 좌표 이송 명령에서는 Open Loop 제어 모드로 운용됩니다. */
// 해당 축의 제어 모드 설정 상태를 확인하여, Semi-Closed Loop 제어 모드로 설정합니다.
if ( cemCfgCtrlMode_Get ( nAxisNo, nCtrlMode ) == ceERR_NONE )
{
 if ( nCtrlMode != cemCTRL_SEMI_C )
  {
  // Semi-Closed Loop 제어 모드로 설정
  cemCfgCtrlMode_Set ( nAxisNo, cemCTRL_OPEN );
  }
 }
}