Lazarus研究:TLazSerial控件安装及使用

TLazSerial是一个跨平台的Lazarus串行通讯控件,非常好用。
一、下载地址:
TLazSerial控件最新版本是0.2,下面是下载地址:
https://github.com/JurassicPork/TLazSerial

二、安装
1 下载后,把包解压至下面的文件夹
/usr/lib/lazarus/1.8.4/components/LazSerial
2 用Lazarus开发环境打开LazSerialPort.lpk,编译会成功,但在安装时不通过,提示Lazcontroldsgn.ppu找不到,咋办?看下一步。
3 打开/usr/lib/lazarus/1.8.4/components/lazcontrols/design/Lazcontroldsgn.lpk,重新编译即可安装成功。
三、示例
下面的程序通过串口发送1、3控制1号灯打开与关闭,发送2、4控制2号灯打开和关闭。

unit main;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
  StdCtrls, ExtCtrls,  LazSerial;

type

  { TMainForm }

  TMainForm = class(TForm)
    BtnOpenLed2: TBitBtn;
    BtnCloseLed2: TBitBtn;
    BtnCloseLed1: TBitBtn;
    BtnOpenLed1: TBitBtn;
    BtnOpenSerial: TButton;
    ComboBoxDevice: TComboBox;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    ImageLedClose: TImage;
    ImageLedOpen: TImage;
    ImgLed2State: TImage;
    ImgLed1State: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    LabelMessage: TLabel;
    SdpoSerial1: TLazSerial;
    MemoInfo: TMemo;
    procedure BtnCloseLed1Click(Sender: TObject);
    procedure BtnCloseLed2Click(Sender: TObject);
    procedure BtnOpenLed1Click(Sender: TObject);
    procedure BtnOpenLed2Click(Sender: TObject);
    procedure BtnOpenSerialClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SdpoSerial1RxData(Sender: TObject);
  private

  public

  end;

var
  MainForm: TMainForm;

implementation

{$R *.lfm}

{ TMainForm }

//初始化灯的状态及串串口
procedure Init;
begin
   With MainForm do begin
      MemoInfo.Clear ;
      ImgLed1State.Picture.Assign(ImageLedClose.Picture);
      ImgLed2State.Picture.Assign(ImageLedClose.Picture );

      SdpoSerial1.BaudRate:=br__9600;    // 波特率
      SdpoSerial1.Parity:=pNone;         // 没有寄偶校验
      SdpoSerial1.StopBits:=sbOne;       // 一位停止位
      SdpoSerial1.DataBits:=db8bits;     // 8个数据位
   end;

end;


procedure OpenSerial;
begin
   with MainForm do begin
      SdpoSerial1.Device:=ComboBoxDevice.Text;
      SdpoSerial1.Active:=True;
   end;
end;

procedure CloseSerial;
begin
   with MainForm do begin
      SdpoSerial1.Active:=False;


   end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
    Init;
end;

procedure TMainForm.SdpoSerial1RxData(Sender: TObject);
var
  S:String;
begin
  S:=SdpoSerial1.ReadData;
  MemoInfo.Lines.Add(s);
  if S[1]='1' then
     ImgLed1State.Picture.Assign(ImageLedOpen.Picture)
  else if S[1]='3' then
     ImgLed1State.Picture.Assign(ImageLedClose.Picture)
  else if S[1]='2' then
     ImgLed2State.Picture.Assign(ImageLedOpen.Picture)
  else if S[1]='4' THEN
     ImgLed2State.Picture.Assign(ImageLedClose.Picture);
end;

procedure TMainForm.BtnOpenSerialClick(Sender: TObject);
begin
  if BtnOpenSerial.Caption='打开串口' then
     begin
          OpenSerial;
          btnOpenSerial.Caption:='关闭串口';
     end
  else
      begin
           CloseSerial;
           btnOpenSerial.Caption:='打开串口';
      end;

  if SdpoSerial1.Active then
    LabelMessage.Caption:=SdpoSerial1.Device+'开启'
  else
     LabelMessage.Caption:=SdpoSerial1.Device+'关闭';
end;

procedure TMainForm.BtnOpenLed1Click(Sender: TObject);
begin
  SdpoSerial1.WriteData('1');

end;

procedure TMainForm.BtnOpenLed2Click(Sender: TObject);
begin
  SdpoSerial1.WriteData('2');

end;

procedure TMainForm.BtnCloseLed1Click(Sender: TObject);
begin
  SdpoSerial1.WriteData('3');

end;

procedure TMainForm.BtnCloseLed2Click(Sender: TObject);
begin
  SdpoSerial1.WriteData('4');

end;

end.

程序界面如下:
Lazarus研究:TLazSerial控件安装及使用_第1张图片
注意先用如下命令创建一对虚拟串口:
socat -d -d pty,raw,echo=0 pty,raw,echo=0

本次测试环境为Deepin Linux 15.6+Lazarus 1.8

你可能感兴趣的:(Lazarus,Serial,Lazarus)