Overview: Conveyor Tracking on the Yaskawa YRC1000 Controller
The Yaskawa Motoman YRC1000 controller supports conveyor tracking (line tracking) by encoding the belt position from a quadrature encoder and modifying the robot's Cartesian path so a TCP remains locked to a moving workpiece. In a foam-dispense application the typical flow is: trigger photo-eye detects a mold, the controller captures the current encoder count, the application program dispenses while the encoder advances the work frame, and a "pounce" program returns the TCP to the upstream start position to await the next trigger. The entire cycle runs inside a single user frame whose origin is taught at the conveyor reference plane.
Yaskawa publishes the conveyor tracking logic in the MC_TrackConveyorBelt Quick Reference (QRG.MWIEC.01) and the application notes collected under the Yaskawa Knowledge Center - Conveyor Tracking section. The key practical takeaway is that nearly every symptom of "angled," "drifting," or "non-repeating" tracking on first install traces back to a poorly taught conveyor frame or to encoder scaling rather than to the tracking job itself.
Prerequisites for a YRC1000 Tracking Install
Before any motion programming, verify the following hardware and software prerequisites. Skipping any of these typically surfaces later as the angled-tracking symptom described in the original report.
- Encoder: Single-channel or quadrature incremental encoder mounted to the conveyor drive shaft, roller, or tail pulley. Phase-A minimum; Phase-B optional but recommended for direction verification. Typical supply 24 VDC, sourcing output to the YRC1000's encoder input board (typically the CN309 or CN310 connector on the YIF board, depending on option).
- Trigger sensor: A digital input (commonly DI[1]..DI[8]) wired to the conveyor index/trigger. The input must be configured in the I/O menu and mapped to the conveyor-tracking trigger variable (B40700 in many standard tracking jobs).
- Pendant firmware: YAS2.81 or later on the YRC1000 supports the modern tracking job syntax. Older firmware may require the legacy CONVEY job template.
- Conveyor belt: Mechanically stable, no slip between belt and encoder roller. Verify by marking the belt, jogging the conveyor one full encoder revolution, and confirming the mark returns to the same physical position.
- Robot payload: Set in the payload file. Inaccurate payload shows up as a tracking lag only on fast belts, but it is worth setting before commissioning.
Conveyor Calibration: The Step-by-Step Procedure
The conveyor calibration teaches the controller three things: (1) how many encoder pulses equal a known linear distance (mm/pulse), (2) the conveyor direction vector in the chosen user frame, and (3) the home/origin point that is updated each time the trigger fires. Follow this sequence exactly; do not skip the verification at the end.
- From the Main Menu > Setup > Conveyor, enter the Conveyor Calibration screen. Create a new conveyor record if none exists. Assign the encoder input connector, the counts-per-revolution (CPR) of the encoder, and a gear ratio if the encoder is geared to the belt.
- Teach two calibration points. Jog the TCP to a point on the belt upstream of the work area. Record this point by pressing MODIFY then ENTER. Move the conveyor a known distance (a ruler taped to the belt is acceptable; 500 mm or 1000 mm is convenient). With the belt stopped, jog the TCP to the same physical point on the belt again, and record the second point.
- Enter the known distance between the two taught points. The controller computes mm/pulse as:
mm_per_pulse = distance_mm / (encoder_count_2 - encoder_count_1). - Teach the conveyor direction. Jog the TCP to a point, record, then jog the conveyor by hand (or via motor-on and a low-speed jog) and record the second point in the same user frame. The vector between the two points defines the +X of the conveyor frame. Per the MC_TrackConveyorBelt Quick Reference, the conveyor origin moves in the +X direction of the belt frame when tracking is active.
- Verify by jogging the conveyor and confirming the encoder count increments in the on-screen Conveyor Position field. The count must change proportionally to belt travel and the sign must match the direction the belt actually moves.
User Frame Setup for the Conveyor
Tracking happens inside a user frame whose X axis is parallel to the belt. The most common cause of "angled" tracking reported by first-time integrators is a twisted user frame: the X axis is not actually parallel to the belt, so the robot's lateral corrections during tracking cancel only partially and the TCP walks diagonally across the mold.
- Define a new user frame from Setup > Frame > User Frame.
- Teach the origin on the belt at the dispense location.
- Teach the X point by moving 500 mm or 1000 mm along the belt. Use a long reference straightedge clamped to the belt frame, not a tape measure draped over the belt.
- Teach the Y point perpendicular to the belt by jogging the TCP 500 mm off the belt at right angles.
- Set the conveyor frame equal to the user frame: in the Conveyor Calibration screen, set Frame Number to the same user frame ID you just defined.
A practical verification: with the conveyor stopped and the tracking job paused at the dispense position, record the XYZ TCP position. Move the belt by 200 mm manually. Re-record the TCP. The X component must change by exactly the expected belt distance, and the Y component must be unchanged to within ±0.5 mm. Any Y drift indicates a user-frame twist.
Trigger Capture and the B40700 Register
The YRC1000 exposes conveyor state through byte and integer registers. The most commonly cited register in field discussions is B40700, which functions as the conveyor-tracking trigger latch. When the trigger input transitions high, B40700 latches the current encoder count into the tracking job so the dispense trajectory is anchored to the physical mold position at the moment of detection.
| Register / Variable | Type | Purpose |
|---|---|---|
| B40700 | Byte / Integer | Conveyor trigger latch and tracking enable in standard tracking jobs |
| B40701..B40710 | Byte / Integer | Encoder counts, conveyor position, belt speed flags (job-dependent) |
| DI[n] | Digital Input | Physical trigger sensor input, mapped in I/O configuration |
| DO[n] | Digital Output | Trigger-ack or "part in zone" output back to the line PLC |
To verify the trigger chain on the bench:
- From the pendant, open the I/O display and force the trigger DI high.
- Watch B40700 transition from 0 to 1.
- Reset it with the SYEND system-end command or by toggling the DI low.
If B40700 will not reset between cycles, the controller never re-enables tracking and the robot will not return to its upstream "wait" position. This is the root cause of the symptom where the robot "tracks once and stops."
Application Program Structure
A robust dispense-on-conveyor job has three logical sections. Below is a representative INFORM III-style structure compatible with the YRC1000 standard conveyor template.
NOP
CALL JOB:TRK_WAIT ' Wait at upstream position
DO[1]=ON ' Signal upstream "ready"
WAIT DI[1]=ON ' Trigger input from photo-eye
DO[1]=OFF
CALL JOB:TRK_FOLLOW ' Track and dispense
CALL JOB:POUNCE_HOME ' Return to start position
JUMP *10 ' Loop forever
END
The TRK_FOLLOW job calls the conveyor-tracking motion instruction and uses position variables or the live conveyor frame to keep the TCP locked to the mold. The POUNCE_HOME job moves the TCP back to a taught point above the upstream wait position using a non-tracking linear move.
Resetting the Conveyor Between Cycles: SYEND and Job Modes
The SYEND instruction clears system-level tracking state, including the trigger latch and the captured encoder count. Place it at the end of the application program so every cycle begins from a clean state. The companion control is the JOB MODE setting:
- STEP: The job advances one line per CYCLE START. Used for commissioning only.
- 1 CYCLE: The job runs once and stops at the final position.
- CONTINUOUS / AUTO: The job loops back to the top when it reaches END or the chosen label. This is the mode required for an unattended dispense loop.
The job-mode setting lives under JOB > SELECT > EDIT JOB HEADER. If the robot runs the dispense motion exactly once and then idles with B40700 still latched, the most common cause is that 1 CYCLE mode is selected. Switch to AUTO/CONT for production.
For multiple triggers per cycle or multiple parts in flight, the controller supports position-variable-driven tracking jobs. The example Quick Pick Simulation shipped with MotoSim demonstrates this technique using P[1]..P[n] as a queue of captured encoder positions rather than a single trigger latch.
Pounce Program for the Return-to-Start Move
Because tracking modifies the robot's Cartesian path continuously, returning the TCP to the upstream wait position requires a non-tracking move. The cleanest pattern is a small auxiliary job that the main application calls when SYEND or the dispense-complete tag fires. Suggested structure:
' POUNCE_HOME job
JOB CALL:TRK_OFF ' Disable tracking offset
MOVL P[1] V=500 ' Move to upstream wait at moderate speed
WAIT IN#(40)=ON ' Wait for "ready for next part" from PLC
RET
Trigger this job from the main program with a conditional CALL JOB based on the dispense-complete tag or on B40700 returning to zero. If the pounce move is skipped, the TCP stays parked at the last tracked position and the next trigger attempts to capture an encoder count from an arbitrary belt location, which shows up as "the robot dispenses in the wrong place on part two."
Troubleshooting Matrix
| Symptom | Likely Root Cause | Corrective Action |
|---|---|---|
| Tracking at an angle; TCP walks diagonally across the mold | User frame X axis not parallel to belt, or conveyor frame direction taught with the belt moving | Re-teach user frame using a clamped straightedge; re-teach conveyor direction with belt stopped, jog TCP to two points |
| "All taught points are the same" during calibration | Encoder not counting or wired with reversed polarity | Verify encoder count changes on the calibration screen when the belt is jogged; check Phase-A wiring and shield |
| Tracks once then stops; B40700 stays latched | SYEND missing or job in 1-CYCLE mode | Add SYEND at end of job and switch JOB HEADER mode to AUTO/CONT |
| Robot dispenses in the wrong place on part two | No pounce/home program; tracking offset not cleared | Insert a CALL to POUNCE_HOME at the end of the application job, with a TRK_OFF tag before the linear return |
| Tracking lags behind the mold at high belt speed | Payload wrong, acceleration limited, or mm/pulse miscalculated | Recalculate mm/pulse with a longer calibration distance; raise acceleration in motion group; verify payload |
| Cannot simulate multiple triggers in MotoSim | B40700 only latches once per SYEND in the standard template | Use position-variable-driven tracking job (Quick Pick example); or place SYEND between simulated triggers |
| Tracking offset never zeroes when stopping the belt | Encoder counts continue to update from a slipping roller | Mechanically decouple slipping roller or add a "belt-stopped" interlock that inhibits tracking |
Verification Checklist Before Production
- With the belt stopped, run the full job in STEP mode. Confirm the TCP waits upstream, the trigger input latches B40700, the dispense motion executes, and SYEND clears the latch.
- Run ten cycles at low belt speed (0.1 m/s). Confirm dispense location is within ±1 mm of target on every cycle.
- Raise belt speed to production setpoint. Confirm tracking lag remains within tolerance and B40700 clears between cycles.
- Verify the upstream PLC handshake: DO[1] (ready) toggles, DI[1] (trigger) is acknowledged, no fault is raised on the conveyor indexer.
- Force a missed trigger (cover the photo-eye) and confirm the robot remains in the wait position without latching a stale encoder count.
- Back up the job, the user frame, and the conveyor calibration record to the USB or FTP archive before going to AUTO mode unattended.
MotoSim Simulation Notes
For offline development, MotoSim supports conveyor tracking through a virtual encoder and a simulated trigger input. To reset the conveyor position between simulated cycles in MotoSim, toggle the SYEND instruction as in production. The B40700-style latch resets on the next SYEND. To simulate several cycles in a single MotoSim run, either:
- Insert SYEND statements between simulated triggers, or
- Use the Quick Pick example template, which manages a queue of captured conveyor positions in position variables and does not require B40700 to be cleared between simulated parts.
MotoSim is a faithful environment for verifying the tracking job logic, but it does not exercise encoder wiring, ground loops, or belt slip. Always re-run the full verification checklist on the physical robot before production release.
Field-Proven Tips from Repeated Installations
- Clamp a straightedge to the conveyor frame, not to the belt, when teaching the user frame X point. A straightedge on the belt moves with the belt and introduces a Y error equal to half the belt width.
- Use the longest practical calibration distance (1 m or more). Short distances amplify the encoder quantization error.
- If the conveyor must run in reverse for any maintenance task, add a hardware interlock that inhibits tracking rather than relying on the controller's belt-direction logic.
- Log the encoder count at the trigger and the dispense position for the first 100 production cycles. The distribution of those two numbers will reveal belt slip, trigger latency, or encoder drift before they cause a quality issue.
FAQ
What does B40700 do on the Yaskawa YRC1000?
B40700 is the conveyor-tracking trigger latch in standard tracking jobs. It captures the current encoder count when the trigger digital input transitions high and must be cleared by SYEND or a system-end event before the next part can be tracked.
Why does my robot track at an angle on the first install?
An angled tracking path almost always indicates a twisted user frame or a conveyor direction vector that was taught with the belt moving. Re-teach the user frame X point with a straightedge clamped to the conveyor frame, and re-teach the conveyor direction with the belt stopped by jogging the TCP to two distinct physical points.
How do I reset the conveyor position between cycles?
Use the SYEND instruction at the end of the application job and switch JOB HEADER mode to AUTO/CONT instead of 1 CYCLE. SYEND clears B40700 and the captured encoder count so the next trigger starts from a clean state.
Why does the controller say "all taught points are the same" during conveyor calibration?
The encoder is not producing counts during the second teach. Verify Phase-A wiring and shield grounding, confirm the encoder shaft is mechanically coupled to the belt, and watch the on-screen encoder count increment while jogging the belt.
Can I track multiple parts on the conveyor at once on the YRC1000?
Yes. Use a position-variable-driven tracking job such as the Quick Pick example shipped with MotoSim. Position variables act as a queue of captured conveyor positions and allow several parts to be in flight simultaneously, beyond the single-trigger B40700 model.