Yeah, the total run-scan function could be fairly short:
(defun run-scan (antenna scan)
"Perform a scan on this antenna. Return a scan log."
(let* ((slew-time (move-to antenna (scan-position scan)))
(on-source-time (delay antenna (scan-length scan))))
(setf (antenna-last-duration antenna) (+ on-source-time slew-time))
(make-scan-log scan slew-time on-source-time)))