Если запрос сформировать так:
Код:
procedure TMain.Read;
begin
ReplyLen:=255;
ReplyBuffer:=GetMem(ReplyLen);
Ret := W_IO(#$1, #$00, 0, '', ReplyLen, ReplyBuffer);
if Ret = REPLY_OK then begin
Edit1.Text:='Команда выполнена успешно, получены данные';
Edit2.Text:=PChar(ReplyBuffer);
end;
FreeMem(ReplyBuffer);
end;
то компилятор ругается на
Код:
ReplyBuffer:=GetMem(ReplyLen);
[Error] Main_form.pas(138): Incompatible types
Если сделать таким образом:
Код:
procedure TMain.Read;
begin
ReplyLen:=255;
ReplyBuffer:=GetMemory(ReplyLen);
Ret := W_IO(#$1, #$00, 0, '', ReplyLen, ReplyBuffer);
if Ret = REPLY_OK then begin
Edit1.Text:='Команда выполнена успешно, получены данные';
Edit2.Text:=PChar(ReplyBuffer);
end;
FreeMemory(ReplyBuffer);
end;
То все компилируется, но вылетает ошибка и в Edit2 ничего не вписывает.
Что я опять сделал не так?
Привел запрос к следующму виду
Код:
procedure TMain.Read;
begin
ReplyLen:=255;
ReplyBuffer:=GetMemory(ReplyLen);
Ret := W_IO(#$1, #$00, 0, '', ReplyLen, ReplyBuffer);
if Ret = REPLY_OK then begin
Edit1.Text:='Команда выполнена успешно, получены данные';
Edit2.Text:=PChar(GetMemory(ReplyLen));
end;
//FreeMemory(ReplyBuffer);
end;
И теперь в Edit2 вписывает - "-6E"
Если езменить ReplyLen:=25;, то вписывает - "TK•", но это не то, что мне необходимо вывести.
В Edit2 должно выводиться примерно следующее - "31 33 20 4D 48 7A 20 52 65 61 64 65 72"
При включении FreeMemory(ReplyBuffer);, программа при первом же запросе падает в ошибку, а при отключении при втором.
Насколько можно судить по снифферу, так это происходит по потому что порт не закрывается, но если прописать неизвествую команду, то проблем нет, ровно как и ничего не вписывается в Edit.
При выполнении запроса в цикле ошибка не выскакивает, программа ререстает отвечать, хотя со считывателем общается.
Код:
procedure TMain.Read;
begin
repeat
ReplyLen:=25;
ReplyBuffer:=GetMemory(ReplyLen);
Ret := W_IO(#$1, #$00, 0, '', ReplyLen, ReplyBuffer);
if Ret = REPLY_OK then
Edit1.Text:='Команда выполнена успешно, получены данные';
Edit2.Text:=PChar(GetMemory(ReplyLen));
until Ret = REPLY_ACK; // выход из цикла чтения при ошибке
end;