Цитата(Tiny @ Aug 22 2010, 15:31)

А не получится ли так, что после передачи двух младших разрядов сюда вклинется другой пользователь передающий команду, допустим 05603?
Коллизия не возникнет, если вы правильно напишите алгоритм работы сервера. Выход сервера должен быть буферизирован. Т.е. он не должен отправлять команды аппаратам в тот же момент, как приходит команда от клиента, а должен складывать сформированные команды в (циклический) буфер FIFO. А физическая передача на аппаратную "шину" производиться уже из буфера, причем в порядке ОБЩЕЙ ОЧЕРЕДИ.
Поэтому, заказ клиента будет дешифроваться, превращаться в команды, а затем помещаться в буфер. Причем следует особо озаботиться тем, чтобы команда аппарату писалась в буфер не по частям, а сразу в один присест. Тогда если у вас приложение однопоточное, то коллизии с наложением байтов не возникнут, а если многопоточмное, что придется сделать какой-нибуть семафор, чтобы не позволял другому процессу писать в буфер, пока в него не окончит запись другой. Такая ситуция типична для многих многопроцессорных алгоритмов.
Короче говоря, вам надо создать очередь на вывод в виде буфера и организовать в него запись исключительно целыми командами. Сделать это всегда возможно, т.к. в момент формирования команды все ее байты полностью известны.
Можно поступить и по-другому, учитывая, что посылка от клиента занимает всего один байт, - класть в буфер однобайтные запросы от клиентов, а в содержимое буфера обрабатывать в порядке очереди, преобразуя байт-запрос в командную посылку, и тут же ее отправлять. Тогда коллизий тоже не возникнет, но какой-то арбитраж на буфере все равно понадобится, т.к. придется следить за тем, чтобы его счетчик очереди инкреметировался правильно. В конце концов то на то и выйдет.