EnableSynchronizedControlMode
Adds the Modes of Operation and Modes of Operation Display variables to PDO. It changes the control mode through PDO instead of SDO, so the control mode can be changed faster (usually in 3-5 cycles). Not all drives support this feature.
Syntax
KsError EnableSynchronizedControlMode(
BOOL Active
);
Parameters
Active: TRUE: the Modes of Operation and Modes of Operation Display variables are mapped to PDO. FALSE: not mapped to PDO. By default, it is FALSE.
Return value
If the function succeeds, it returns errNoError
, otherwise an error code. For more information about the error code, see the KsError list.
Remarks
- This function must be called after Create and before Start.
- The control mode can always be changed without disabling the drive as long as your servo drive supports this feature. When EnableSynchronizedControlMode is disabled, the control mode is changed through SDO, which takes more time (about 10 cycles) to complete changing.
Usable EtherCAT states
ecatOffline
Example
BOOL StartKingstar() {
//Launch or connect to the KINGSTAR Subsystem process
KsError nRet = errNoError;
nRet = Create(INSTANCE, 0);
SubsystemStatus Subsystem = { ecatOffline, ecatOffline, 0, 0, 0,
{ecatOffline}, {ecatOffline}, {axisOffline} };
GetStatus(&Subsystem, NULL);
if (Subsystem.State == ecatOP) {
RtPrintf("Subsystem already started: %x\n", nRet);
return TRUE;
}
else if (Subsystem.State != ecatOffline) {
RtPrintf("Subsystem in unexpected state: %d\n", Subsystem.State);
return FALSE;
}
//Configure the Subsystem settings
nRet = SetCycleTime(cycle500);
nRet = SetAxisAccessMode(accessPos);
nRet = EnableServerLog(FALSE);
nRet = EnableAxisInput(TRUE);
nRet = EnableAxisOutput(FALSE);
nRet = EnableSecondEncoder(FALSE);
nRet = EnableActualVelocity(TRUE);
nRet = EnableActualTorque(TRUE);
nRet = EnableActualCurrent(TRUE);
nRet = EnableFollowingError(TRUE);
nRet = EnableMaxTorque(TRUE);
nRet = EnableMaxCurrent(TRUE);
nRet = EnableTorqueOffset(FALSE);
nRet = EnableProfilePosition(FALSE);
nRet = EnableSynchronizedControlMode(TRUE);
nRet = EnableAutoRestart(TRUE);
nRet = EnableAutoRepair(TRUE);
nRet = EnableAutoConfig(TRUE);
nRet = ConfigureDc(TRUE, TRUE, FALSE, 0);
nRet = EnableHotConnect(TRUE);
nRet = EnableRedundancy(TRUE);
nRet = SetConfiguredAxesCount(1);
nRet = SetConfiguredIoCount(3);
SlaveStatus simulatedIo = { 0 };
simulatedIo.InputLength = 16;
simulatedIo.OutputLength = 16;
for (int i = 0; i < IO_COUNT; i++) {
nRet = ConfigureIo(i, simulatedIo);
}
SlaveStatus axisDefinition = { "Simulated Axis", 0 };
ConfigureAxis(0, axisDefinition, 131072);
//Start the EtherCAT network
//This function is asynchronous so the network is not started yet when it returns
KsCommandStatus status = WaitForCommand(30, TRUE, Start());
return TRUE;
}
Requirements
RT | Win32 | |
---|---|---|
Minimum supported version | 4.0 | 4.0 |
Header | ksapi.h | ksapi.h |
Library | KsApi_Rtss.lib | KsApi.lib |
See also