§ 2.8. Программирование модуля Ke-USB24A на языке Delphi (Часть 3)
|
Дмитрий Иванов, 13 апреля 2008
|
|
Файлы к статье скачать
|
Имя: KA002_08.zip (ZIP архив) |
Размер: 218 КБ |
|
Еще одна небольшая статья по программированию модуля Ke-USB24A на языке Delphi. Здесь мы будем записывать/считывать данные из энергонезависимой памяти модуля (EEPROM).
|
В программе будет возможнрость записать в память модуля строку данных. Обратите внимание, что ее длина не должна превышать 32 символов. Так же можно будет считать ранее записанную строку данных.

Процедура записи данных весьма проста - мы просто формируем команду записи $KE,UD,SET и отправляем ее в порт.
procedure TForm1.Button2Click(Sender: TObject);
var
Buf: string;
CRbyte: Shortint;
LFbyte: Shortint;
NumberWritten : DWORD;
begin
CRbyte := 13; // HEX 0x0D
LFbyte := 10; // HEX 0x0A
if (Length(Edit2.Text) <= 0) then
begin
MessageDlg('No Data to write', mtError, [mbOK], 0);
Exit;
end;
Buf := '$KE,UD,SET,' + Edit2.Text + Char(CRbyte) + Char(LFbyte);
WriteFile(CommHandle, PChar(Buf)^, Length(Buf), NumberWritten, nil);
MessageDlg('Data has been sended to module', mtInformation, [mbOK], 0);
end;
Функция чтения данных из памяти модуля несколько сложнее, но сама структура нам уже знакома. Формируем команду на чтение данных, отправляем ее в порт, делаем небольшую задержку, читаем данные из порта, проводим их анализ и если все Ok - показываем сообщение.
procedure TForm1.Button3Click(Sender: TObject);
var
BinBuf: array[0..64] of Char;
Buf: string;
pBuf: array [0..64] of Char;
CRbyte: Shortint;
LFbyte: Shortint;
NumberWritten : DWORD;
begin
CRbyte := 13; // HEX 0x0D
LFbyte := 10; // HEX 0x0A
// Clear Port Buffers from previous data
PurgeComm(CommHandle, PURGE_TXABORT or PURGE_RXABORT or
PURGE_TXCLEAR or PURGE_RXCLEAR);
Buf := '$KE,UD,GET' + Char(CRbyte) + Char(LFbyte);
WriteFile(CommHandle, PChar(Buf)^, Length(Buf), NumberWritten, nil);
// Make littele pause for wait module anser
Sleep(480); // Wait 480 ms
ReadFile(CommHandle, BinBuf, 128, NumberWritten, nil);
if(NumberWritten = 0) then
begin
MessageDlg('Read Data Fail #1', mtError, [mbOK], 0);
Exit;
end;
if(StrLComp(BinBuf, '#UD,NOTSET', 10) = 0) then
begin
MessageDlg('Module is empty. No data at present.', mtInformation, [mbOK], 0);
Exit;
end;
// Removing sub-strings '#UD,' and CR,LF
StrLCopy(pBuf, BinBuf + 4, NumberWritten - 4 - 2);
MessageDlg(pBuf, mtInformation, [mbOK], 0);
end;
end.
© Дмитрий Иванов
13 апреля 2008 года
http://www.kernelchip.ru