Для добавления новой команды в протокол необходимо:
Добавить код её запроса и ответа в виде констант (используйте префикс сt и постфикс Request или Answer в зависимости от того запрос это или ответ);
Добавить в класс протокола новую функцию, которая будет реализовывать данную команду (название команды следует сформировать из названия функции в протоколе. Если функция что-то записывает в устройство, то предпочтительно использовать Write в названии, если читает, то Read. Но это не обязательно)
Если команда возвращает несколько значений, что надо создать соответствующую структуру и возвращать её. Возвращать объекты не рекомендуется.
Иногда команды, описанные в протоколе, возвращают то что было передано. Это сделано для отладки. Правильно сравнивать переданное и принятое и если они не совпадают — поднимать эксепшен.
Для того, что бы передать какие-нибудь параметры их надо превратить в массив байт. Для конвертации можно воспользоваться функциями из модуля
KArrayRoutines. Полученный массив надо поместить в переменную RequestArray, для того, чтобы сравнить запрос и полученный ответ, если это предусмотрено семантикой команды.
Создать экземпляр пакета нужного типа (например TFreGrafPackage), в который записать код запроса и массив созданный на предыдущем шаге;
С помощью передатчика пакетов передать созданный пакет используя метод RequestDevice;
Пакет который вернул метод RequestDevice проверить на наличие ошибок с помощью метода DoPackageCheck;
Данные из полученного пакета преобразовать к необходимому типу из типа Byte;
Вернуть результат работы функции.
Пример функции реализующей команду:
function TDeviceProtocolSingleton.WriteData(InputData: Word): Boolean;
var
Answer: TFreGrafPackage;
Temp: TByteArray;
begin
AddArrays(Temp, ConvertWordToBytes(InputData), Temp);
Answer := TDeviceSingleton.GetInstance.RequestDevice(
CreatePackage(mtWriteDataRequest, Temp));
try
DoPackageCheck(Answer, 6, mtWriteDataAnswer);
// Обработка результата
finally
Answer.Free;
end;
end;