function handle() local desired_rpm = GetCurSpindleRPM() if (not IsRealDeviceConnected()) then desired_rpm = 0 end local value, is_online = ReadModbusRegisterUpdated("SpindleStatus") Sleep(30) local mode_updated = is_online and (value == get_mode(desired_rpm)) if (prev_rpm == nil or prev_rpm ~= desired_rpm or not mode_updated) then if (send_spindle_control_command(desired_rpm)) then prev_rpm = desired_rpm end end end function send_spindle_control_command(rpm) local mode = get_mode(rpm) local Hz = math.floor(math.abs(rpm) / 60 * 10 + 0.5) local success_1 = WriteModbusRegister("SpindleMode", mode) Sleep(30) local success_2 = WriteModbusRegister("SpindleRPM", Hz) return success_1 and success_2 end function get_mode(rpm) local mode = 3 -- Stop if (rpm > 0) then mode = 1 -- Forward elseif (rpm < 0) then mode = 2 -- Reverse end return mode end