Всем доброго времени суток.
Суть вот в чем:
1. Есть считыватель БСК MF-RW-USB, который создает виртуальный COM порт средствами FT232.
2. Для общения со считывателес используется DLL библиотека, которая содержит в себе все необходимое.
3. Обмен данными со считывателем осуществляется с использованием проверки контрольных сумм по FCS алгаритму.
Функция W_IO: обмен данными со считывателем
Код:
function W_IO(Address, Cmd: char; BodyLen: integer; const CmdBody; var ReplyLen: integer; var Reply-Buffer): char;
char W_IO(char Address, char Cmd, int BodyLen, void *CmdBody, int *ReplyLen, void *ReplyBuffer);
Описание:
Address адрес считывателя (0..3F)
Cmd команда
BodyLen длина дополнительных данных для команды
CmdBody буфер, содержащий дополнительные данные
ReplyLen длина данных, полученных от считывателя
ReplyBuffer буфер, в который будут помещены полученные данные.
При вызове функции в ReplyLen должен быть записан размер области памяти, отведенной под Reply-
Buffer. На выходе в ReplyLen будет записана длина фактически полученных данных.
Возвращаемое значение – код возврата, см. раздел «Константы» REPLY_XXXXX.
Пример из мануала к библиотеке:
Код:
procedure ReadEventLog;
var
Ret: char;
RL: integer;
Event: TEvent;
begin
// до вызова этой функции должна быть вызвана функция W_SetPortParams
// читаем считыватель с адресом 3F
repeat
Ret := W_IO(#$3F, #$10, 0, '', RL, Event);
if Ret = REPLY_OK then begin
// Успешно прочитали событие, обрабатываем его…
Ret := W_IO(#$3F, #$11, 0, '', RL, Event);
if Ret <> REPLY_ACK then begin
// Ошибка удаления последнего события – обрабатываем…
end;
end else begin
// Ошибка чтения события – обрабатываем…
end;
until Ret <> REPLY_ACK; // выход из цикла чтения при ошибке
end;
Скажите пожалуйста, как сформировать запрос таким образом, чтобы ответ полученный от считывателя вписывался в Edit.
В Edit необходимо вывести данные из ReplyBuffer.
Еще было бы не плохо выкинуть настройки порта в ini
Код:
t.Port:= 1;
t.BaudRate:= 9600;
t.WaitPortTimeout:= 200;
t.ReadTotalTimeout:= 100;
t.ReadNextByteTimeout:= 50;
t.RecordSize:= 21;
Прошу, не пинайте, в работе с портами я ноль, а сделать необходимо.
Всем заранее огромное спасибо за помощь.