DELTA DVP SERVO INDEX — REVIEWABLE TEACHING PSEUDOCODE Version: 2026-08-31 Purpose: state and evidence design for one pulse/direction indexing axis IMPORTANT This is not an ISPSoft, WPLSoft or DIADesigner import. It deliberately uses symbolic roles instead of universal X/Y/M/D addresses. Map the exact CPU, firmware, output channel, instruction variant, drive series, electrical interface, units and status devices from the controlled Delta manuals. Validate safety functions independently. TEACHING UNITS Ball screw pitch = 10 mm/revolution Approved command resolution = 20,000 command pulses/revolution Pulses per mm = 20,000 / 10 = 2,000 pulses/mm Relative move distance = 50 mm Relative move command = 50 * 2,000 = 100,000 pulses Target speed = 25 mm/s Pulse frequency = 25 * 2,000 = 50,000 pulses/s Acceleration/deceleration = 500 ms placeholder; engineer for the real load SYMBOLIC INPUTS AxisReady, AxisAlarm, AxisInPosition, AtZeroSpeed HomeSensor, ForwardLimit, ReverseLimit EnableRequest, HomeRequest, MoveRequest, ResetRequest RequestedDistance_mm, RequestedSpeed_mm_s SYMBOLIC OUTPUTS ServoEnableCommand, AlarmResetPulse PulseChannel, DirectionChannel OBSERVABLE INTERNALS State, FirstOutFault, Referenced RequestAccepted, RequestRejected, RejectReason CommandPulses, CommandFrequency, MoveInstructionActive PulseOutputComplete, MoveTimeout, DonePulse ACCEPTANCE CONDITION CanAcceptMove := State = IDLE AND Referenced AND AxisReady AND NOT AxisAlarm AND NOT ForwardLimit AND NOT ReverseLimit AND ParametersValid AND SafetyPermissionStatus; REQUEST EDGE On rising edge of MoveRequest: IF CanAcceptMove THEN latch RequestedDistance_mm and RequestedSpeed_mm_s; calculate pulses and frequency with checked wide arithmetic; range-check direction, travel target, pulse count and frequency; IF checks pass THEN RequestAccepted := TRUE; State := MOVING; ELSE RequestRejected := TRUE; RejectReason := RANGE_OR_MATH; ELSE RequestRejected := TRUE; RejectReason := first false acceptance condition; END_IF; MOVING ENTRY Call exactly one target-supported relative-position instruction such as the exact DRVI/DDRVI variant documented for the selected CPU and paired transistor outputs. Do not substitute the following symbols directly as an instruction signature: ExecuteRelativePulseMove( pulse_count := CommandPulses, pulse_frequency := CommandFrequency, pulse_channel := PulseChannel, direction_channel := DirectionChannel); MOVING STATE IF AxisAlarm THEN FirstOutFault := DRIVE_ALARM; State := FAULT; ELSIF target-direction limit becomes active THEN FirstOutFault := TRAVEL_LIMIT; State := FAULT; ELSIF MoveTimeout THEN FirstOutFault := MOVE_TIMEOUT; State := FAULT; ELSIF PulseOutputComplete AND AxisInPosition THEN State := COMPLETE; END_IF; COMPLETE STATE DonePulse := TRUE for one scan/event; Record final commanded coordinate, drive status and independent measured position; State := IDLE only after the request handshake is released/acknowledged. FAULT / RECOVERY Preserve FirstOutFault and drive alarm code before reset. Do not use AlarmResetPulse until the cause is removed, motion is inhibited, the axis is in the approved state and a new authorized ResetRequest edge occurs. Reset must not create a move. Reference validity after a fault is a written decision, not an assumption. HOMING Use the exact target-supported ZRN/homing method and verified sensor/limit polarity. A robust sequence may search, detect DOG/origin, back off, re-approach slowly and latch the approved coordinate. Block absolute moves until Referenced is true. DONE IS NOT JUST "PULSES SENT" PLC pulse output complete means the controller has finished generating a command. Drive In Position means the drive reports that its position-error condition is within its configured criterion. Production Done may require both, no alarm, valid reference, stable status for an approved dwell and external process evidence. TREND TOGETHER MoveRequest, RequestAccepted, State, CommandPulses, CommandFrequency, MoveInstructionActive, PulseOutputComplete, AxisReady, AxisAlarm, AxisInPosition, HomeSensor, both limits, Referenced, CommandedPosition, ActualPosition, timeout and FirstOutFault on one time base.