Работа с последовательным портом из среды программирования Delphi7

Для работы с последовательным портом в среде программирования Delphi7 ниже приводится простенький пример, который может быть использован и для связи с Arduino.

Для начала нужно создать проект (File\New\Application), далее в форму добавляются два однострочных редактора (TEdit) для отправки и приема данных. И два списка (TComboBox) для выбора последовательного порта и задания скорости. Ну и три кнопки. Эти компоненты могут быть расставлены следующим образом:

Рисунок 33. Форма программы работы с COM

Далее, необходимо подключить библиотеку для работы с последовательным портом (ComPort).

Для этого нужно перейти в код программы и в разделе Uses добавить ComPort.

Данная библиотека или модуль содержит три подпрограммы, которые облегчают работу с последовательным портом:

procedure ComInit(proc:TProcRx; COM:string; speed:LongWord);

Запускает поток, в котором программа считывает с последовательного порта и кладет в буфер. При окончании строки (встречи символа с кодом 13), программа передает результат передает результат в указанную процедуру, которая автоматически вызывается. Процедура должна принимать один строковый параметр.

procedure ComWrite(A:byte);

Отправляет в последовательный порт 1 байт

procedure ComStop;

Останавливает считывание с последовательного порта.

Нажав на форму двойным щелчком, попадаем в обработчик события TForm1.FormCreate(Sender: TObject);

И его нужно привести в следующий вид:

var i:Integer;
begin
  for i:=0 to ComPorts.Count-1 do//Цикл  по доступным портам
    ComboBox1.Items.Add(ComPorts[i]);//Добавление их в Combobox
  ComboBox2.Text:='9600';//Задание скорости поумолчанию
  if ComPorts.Count<>0 then ComboBox1.Text:=ComboBox1.Items[0]
  else ComboBox1.Text:='Что-то не нашел. Впишите сами';
end;

Объект ComPorts содержит в себе список найденных в системе последовательных портов. Таким образом, при запуске программы происходит их добавление в список Combobox, чтоб пользователь смогу выбрать из доступных портов.

Далее необходимо написать обработчик для кнопки «Запустить», в которой нужно вызвать процедуру инициализации последовательного порта, но перед этим, необходимо создать процедуру, которая будет обрабатывать принятую строку:

procedure ReciveCom(st:string);
begin
  Form1.edit1.text:=st; {записывает принятую строку в однострочный редактор Edit1.}
end;

Теперь уже можно инициализировать связь с COM-портом:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ComInit(ReciveCom, ComboBox1.Text, StrToInt(ComboBox2.Text));
end;

Таким образом, при приеме строки, будет вызываться процедура ReciveCom, в которую будет передана принятая строка.

Ну и в конце желательно не забывать останавливать чтение с последовательного порта:

ComStop;

Обработчик для кнопки «отправить» можно оформить следующим образом:

procedure TForm1.Button3Click(Sender: TObject);
var i:Integer;
begin
  for i:=1 to Length(Edit2.text) do
    ComWrite(Ord(Edit1.text[i]));
end;

Здесь запускается цикл по всем символам в текстовом поле, и по очереди отправляются в последовательный порт.

Библиотека работы с последовательным портом на Delphi