ABB RAPID Remote Start: Pointer State, Not SDK Error

Erik Lindqvist6 min read
ABBRoboticsTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Remote start succeeds after the RAPID task has a valid program pointer. A controller handle, automatic operating mode, mastership, and a task reference are not enough by themselves: the controller must also have motor power available and an executable location selected when Task[0].Start() is evaluated.

Start-permission state

The number that matters is the count of missing start conditions: it must be zero. A remote start request crosses several independent permission gates. Passing one gate does not compensate for another that is false.

Motor power is the physical gate. Without it, the controller cannot command robot motion. Automatic mode is the operating-authority gate. Mastership controls whether the PC SDK client may perform protected controller operations. The program pointer is the execution gate: it identifies where the RAPID task will begin or resume.

StartResult.error is therefore a result, not a diagnosis. It says the requested transition to running did not complete. In the reported sequence, adding Task.ResetProgramPointer() before the start call restored operation, identifying the absent or unusable program pointer as the blocking condition.

Condition Required state Where to read or test it Failure effect
Operating mode Automatic Controller operating-mode property Remote execution remains inhibited
Mastership Held by the application for the required operation Mastership acquisition result and exception handling The write or start operation is rejected
Motor power On Controller state exposed by the SDK or operator interface Motion-capable execution cannot start
Program pointer Valid executable location Task state, followed by a controlled reset test Task[0].Start() can return StartResult.error
Selected task The intended RAPID task Inspect the task collection rather than relying only on array position The application may act on a different task

Control approaches

Two approaches fit this control problem: start the task directly through the PC SDK, or expose controller system inputs and outputs for supervisory control. They solve different architectural needs.

Criterion Direct PC SDK start System inputs and outputs
Command path The Windows application invokes the task API A PLC or supervisory application drives configured controller signals
State handling The application checks mode, mastership, motor state, task state, and pointer readiness The controller maps external signals into configured control actions
Best fit PC-owned sequencing, engineering utilities, and applications that already manage controller sessions Cell-level start/stop handshakes and PLC-centered machine control
Primary diagnostic point SDK call results and controller/task state immediately before the call Signal state, mapping, permissives, and handshake feedback
Recurring pitfall Calling Start() without a valid program pointer Treating a signal transition as sufficient while a controller permissive remains false

For the immediate PC SDK fault, keep the direct approach and establish the program pointer before calling Start(). Choose system inputs and outputs when a PLC already owns the cell sequence or when start commands need an explicit signal handshake visible to the rest of the machine. Changing architectures is unnecessary merely to correct a missing pointer.

Diagnostic decision path

  1. Confirm automatic mode. Read the controller operating mode immediately before the requested start. A value sampled earlier can become stale if an operator changes mode.
  2. Confirm motor power. Read the current controller state rather than inferring it from a successful connection. Communication with the controller does not prove that motor power is on.
  3. Confirm mastership. Treat successful acquisition as a separate checkpoint. Keep acquisition, the protected operation, and release within a controlled scope so another client cannot invalidate assumptions between unrelated operations.
  4. Confirm the task reference. Task[0] means the first element returned by the task collection; the expression does not document which task that is. Inspect the selected task before issuing a production start.
  5. Test pointer readiness. If the other gates are valid, reset the selected task's program pointer and retry the start. A successful retry isolates pointer state as the immediate cause.
  6. Record the result at each step. Capture the operating mode, motor state, mastership outcome, selected task, reset outcome, and value returned by Start(). This separates a start rejection from a connection or task-selection error.

Evaluate these states in the same command transaction or as close to the start call as the application design permits. This is a timing problem at the state boundary: the values that matter are the values present when the controller processes the start request.

Program-pointer recovery procedure

Resetting the program pointer changes the task's execution position. Apply it only when restarting from the task's reset position matches the machine sequence and physical state. A reset can cause initialization or motion logic to run again, so coordinate the software action with the cell's established restart policy.

  1. Obtain the controller handle and verify that the connection is usable.
  2. Read the operating mode and proceed only in automatic mode.
  3. Verify that motor power is on.
  4. Acquire the mastership required for the controller operation.
  5. Select and validate the intended task from the controller's task collection.
  6. Invoke Task.ResetProgramPointer() for that task.
  7. Call Task[0].Start(), or call Start() on the validated task reference retained by the application.
  8. Inspect the returned StartResult instead of treating completion of the method call as proof that RAPID started.
  9. Release mastership through the application's normal cleanup path, including exception paths.
// The task reference must first be validated as the intended task.
Task.ResetProgramPointer();
StartResult result = Task[0].Start();

// Evaluate result; StartResult.error means the start did not complete.

The reset belongs immediately before the start only when every requested start is intended to begin from the reset position. If the application must resume paused execution, unconditional pointer reset changes the required behavior; preserve the existing pointer and diagnose the remaining permissives instead.

Run-state verification

A non-error return is the first verification point, not the last. Read the task state after the command and confirm that it entered the expected execution state. Then confirm the RAPID sequence reached an application-defined checkpoint, such as a controller signal or task variable already designed for supervision.

Verification Pass condition Meaning of failure
Start result The return is not StartResult.error The controller rejected or failed the requested transition
Task state The selected task reports the expected running state The call result alone did not produce sustained execution
Application checkpoint The expected RAPID-side state changes The task may have started at an unintended location or stopped inside program logic
Repeat test Start behavior remains deterministic after the defined stop/reset cycle The application has an unresolved state or sequencing dependency

Log the state snapshot before and after every remote start. Avoid logging only a generic exception string; the operating mode, motor state, task identity, pointer action, and returned result are the fields that distinguish recurring causes.

Recurring implementation pitfalls

Connection state and execution readiness are separate. A PC SDK application can communicate with the controller while automatic mode, motor power, or the program pointer still blocks execution. Likewise, mastership authorizes an operation but does not create an executable pointer.

Array indexing is another weak boundary. If task enumeration changes, hard-coded Task[0] selection can target the wrong task. Resolve the intended task explicitly from the collection and retain that validated reference for both pointer reset and start, so the two operations cannot address different tasks.

Finally, distinguish reset-and-start from resume. Resetting the pointer solved this failure because a valid starting location was missing. Making that reset unconditional can restart process logic that was meant to continue, so define the required restart semantics before placing ResetProgramPointer() in a reusable start routine.

FAQ

How do I fix StartResult.error when starting RAPID remotely?

Verify automatic mode, motor power, mastership, and the selected task. If those conditions pass, invoke Task.ResetProgramPointer() on the intended task and retry Start(); that sequence corrected the missing-pointer failure described here.

How do I decide between PC SDK start and system inputs?

Use the PC SDK when the Windows application owns sequencing and can manage controller state. Use system inputs and outputs when a PLC owns the cell sequence and start/stop actions need a signal-based handshake.

When should I stop troubleshooting and contact ABB support?

Stop after confirming automatic mode, motor power, mastership, the intended task, a successful pointer reset, and a repeatable StartResult.error. Preserve the before-and-after controller state, task identity, SDK call results, application exception details, and controller diagnostic entries, then escalate through an official ABB support channel.

Back to blog