Предлагаю сделать вот что:
- на стороне робота завести:
- регистр-ячейку "Master"  памяти - на кого сейчас работает робот - три варианта:
- на сервер штабелеров
 - на сторонние программы
 - неопределено
 
 - если робот работает на сервер штабелеров, то он не принимает команды от сторонних программ
 - если робот работает на сторонних программы, то он не принимает команды от сервера штабелеров
 - если команда от сервера штабелеров, то в ней будет встроен специальный маркер. Команды от других программ к роботам будут идти без этого маркера
 - переключение между "хозяевами" робота происходит следующим образом:
- если "Master"= неопределено, то любая команда от сервера штабелеров переводит "Master"=на сервер штабелеров
 - если "Master"= неопределено, то любая команда от сторонней программы переводит "Master"=на сторонние программы
 - если "Master"= на стороннюю программу, то переключение "Master" в "на сервер штабелеров" происходит по специальной команде
 - если "Master"= на сервер штабелеров, то переключение "Master" в "неопределено" происходит по специальной команде
 
 
 - регистр-ячейку "Master"  памяти - на кого сейчас работает робот - три варианта:
 - на стороне сервера штабелеров:
- любой робот можно будет поставить "на паузу" - при этом шлется соотв. команда роботу по смене "Master" на "неопределено"
 - любой робот из паузы можно будет "снять" - при этом шлется соотв. команда роботу по смене "Master" на "на сервер штабелеров"
 - при постановке на паузу всего АСК, соотв. команды шлются всем роботам
 - при снятии с паузы всего АСК, соотв. команды шлются всем роботам
 - также при снятии с паузы всего АСК или перезапуске системы сервер штабелеров проверяет соответствие реальной ситуации с тем, что есть в его модели. Если что-то не соответствует, то:
- то, что можно, сервер пытается поправить в своей модели
 - если расхождения большие, то сервер выдает сообщение об ошибке с детальным указанием, что стоит поправить, и не снимает АСК с паузы