§ 2.6. Программирование модуля Ke-USB24A на языке Delphi (Часть 1)
|
Дмитрий Иванов, 5 апреля 2008
|
|
Файлы к статье скачать
|
Имя: KA002_6.zip (ZIP архив) |
Размер: 217 КБ |
|
Продемонстрирую работу с модулем Ke-USB24A и на других языках программирования. В этой статье мы поговорим о Delphi. Напишем программу, которая будет тушить/зажигать светодиоды, подключенные к выводам модуля (они должны быть настроены на выход).
|
Проект можно скачать готовым в файлах к статье. Внешний вид диалогового окна программы показан на рисунке ниже.

Рассмотрим обработчик нажатия кнопки "Open". В этой процедуре мы должны открыть COM порт и настроить его. Процедура нам уже знакомая, только здесь она выполняется средствами Delphi.
procedure TForm1.Button1Click(Sender: TObject);
begin
PortString := '\\.\COM' + Edit1.Text;
CommHandle := CreateFile(PChar(PortString), GENERIC_READ or
GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
if (CommHandle = INVALID_HANDLE_VALUE) then
begin
MessageDlg('Error. Can`t Open port', mtError, [mbOK], 0);
end
else
begin
GetCommState(CommHandle, DCB);
DCB.BaudRate := CBR_9600; // FORMALLY, CONNECT BAUD DOESN`T MATTER (Virtual Com Port)
DCB.Parity := NOPARITY;
DCB.ByteSize := 8;
DCB.StopBits := OneStopBit;
CommTimeOuts.ReadIntervalTimeout := 0;
CommTimeOuts.ReadTotalTimeoutMultiplier := 0;
CommTimeOuts.ReadTotalTimeoutConstant := 1000;
CommTimeOuts.WriteTotalTimeoutMultiplier := 0;
CommTimeOuts.WriteTotalTimeoutConstant := 1000;
SetCommTimeouts(CommHandle, CommTimeOuts);
SetCommState(CommHandle, DCB);
MessageDlg('Port Open Ok', mtInformation, [mbOK], 0);
end
end;
А вот обработчик нажатия кнопки "Write". Здесь мы считываем из окошек ввода номер линии ввода/вывода и значение для записи. Проверяем их на элементарную адекватность. Если все нормально, формируем команду записи $KE,WR и отправляем ее в порт.
procedure TForm1.Button2Click(Sender: TObject);
var
line: Shortint;
value: Shortint;
valid: Boolean;
buffer: string;
CRbyte: Shortint;
LFbyte: Shortint;
NumberWritten : DWORD;
begin
line := StrToInt(Edit2.Text);
value := StrToInt(Edit3.Text);
valid := TRUE;
if ((line > 24) or (line < 1)) then
begin
MessageDlg('Invalid Line Number', mtError, [mbOK], 0);
valid := FALSE;
end;
if ((value > 1) or (value < 0)) then
begin
MessageDlg('Invalid Value', mtError, [mbOK], 0);
valid := FALSE;
end;
if (valid = TRUE) then
begin
CRbyte := 13; // HEX 0x0D
LFbyte := 10; // HEX 0x0A
buffer := '$KE,WR,' + Edit2.Text + ',' + Edit3.Text + Char(CRbyte) +
Char(LFbyte);
WriteFile(CommHandle, PChar(buffer)^, Length(buffer), NumberWritten, nil);
end;
end;
Вот такой простенький пример, который позволит Вам работать с модулем Ke-USB24A на языке Delphi. В следующих статьях мы посмотрим как читать информацию передаваемую модулем.
© Дмитрий Иванов
5 апреля 2008 года
http://www.kernelchip.ru