Create
Prepares to link a program to the KINGSTAR Subsystem.
Syntax
KsError Create(
int Instance,
int IdealProcessor
);
Parameters
Instance: selects which KINGSTAR Runtime instance you want to use when you have Multiple Master Package. If you don't have the package, set it to zero (0). If you have three instances and want to use the third, set it to two (2). The number of instances is determined by the license you have.
IdealProcessor: configures which core the KINGSTAR Subsystem runs on. All threads run on the given processor. Core Zero is always for Windows. Other cores can be assigned to RTX64 depending on your settings. By default, IdealProcessor is set to zero, meaning the Subsystem can run on any core available to RTX64. If you set it to another number, such as two, RTX64 will take the Core Two. This parameter is optional.
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 should always be called first. All other functions will return
errWrongEnvironment
if Create has not been called. - Multiple instances means you have multiple
ksRuntime.rtss
running at the same time and controlling different network cards. If you have Multiple Master Package, you can use several Create to create multiple instances. For example, you have three Create functions. They can use the instance zero, one, and two for each of them. If you don't have Multiple Master Package, you can use several Create to create only one instance, which is the instance zero. Several applications can link to one KINGSTAR Runtime, but one application can't link to several Runtimes. - One KINGSTAR Runtime = One
ksRuntime.rtss
.
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