Вообщем я настроил тестовый сервер KepServerEx, написал простенький сниффер на Дельфи ХЕ8 и считываю данные. Вот основной исходный код на дельфи:
Код: Выделить всё
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
bufSize: Integer; // Размер буфера
i: Integer; //итератор
buf: TIDbytes; //Буфер для массива байтов
mas: array of string; // Накопитель байтов
s: string; //Строка для отображения байтов
begin
try
bufSize:= AContext.Connection.IOHandler.InputBuffer.Size;
if bufSize > 0 then
begin
SetLength(mas, bufSize);
Memo1.Lines.Add('Размер - ' + IntToStr(bufSize)); //Вывод размера буфера
AContext.Connection.IOHandler.ReadBytes(buf, bufSize); //Читаем байты в буфер
s:= ''; //Очищаем строку отображения
for i:= 0 to bufSize - 1 do
begin
mas[i]:= ByteToHex(buf[i]); //Переводим буфер байтов в HEX-вид с преобразованием в строку
s:= s + mas[i] + '-'; //Копим байты в строке отображения
end;
Memo1.Lines.Add(s);
end;
finally
end;
end;
Приходит всегда пакет размером = 12 байт!Его отображение:
OC-01-00-00-00-06-00-03-00-00-00-01
При этом этот пакет обновляется примерно раз в пол секунды, меняется только один бит(второй)! Вот как это выглядит:
OC-01-00-00-00-06-00-03-00-00-00-01
OC-02-00-00-00-06-00-03-00-00-00-01
OC-03-00-00-00-06-00-03-00-00-00-01
OC-04-00-00-00-06-00-03-00-00-00-01
OC-05-00-00-00-06-00-03-00-00-00-01
OC-06-00-00-00-06-00-03-00-00-00-01
Видимо второй бит какой то счётчик.
Далее...
Я начинаю добавлять теги в KepServerEx по одному, пакет начинает меняться
OC-01-00-00-00-06-00-03-00-00-00-01 - добавлен 1 тег
OC-01-00-00-00-06-00-03-00-00-00-02 - добавлен 2 тег
...
...
...
OC-01-00-00-00-06-00-03-00-00-00-0F - добавлен 16 тег
Я могу трактовать это как уникальный адрес.
Собственно вопрос: как мне узнать информацию что это вообще за пакет? Назначение его битов? Предполагаю что это ADU посылка, но она не похожа на ту, что описана в документации на modbus.org. Подскажите пожалуйста, в каком направлении мне поискать, как мне расшифровать эту посылку битов?
Спасибо.