⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uspcomm.pas

📁 一个串口通讯的封装
💻 PAS
字号:
unit USpComm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, SPComm;

type
  TspComFrm = class(TForm)
    spComm: TComm;
    procedure spCommReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
  private
    { Private declarations }
  public
      function portread(recv:pchar):integer;
      function portwrite(send:pchar; len:integer):boolean;
      function openCom(comPort:integer; baudRate:integer; byteSize:integer; stopBit:integer; parity:integer):integer;
      function closeCom():integer;
    { Public declarations }
  end;

var
    spComFrm: TspComFrm;

    bResponse:boolean = false;
    aResponse:array of char;
    lResponse:integer = 0;

implementation

{$R *.dfm}

procedure TspComFrm.spCommReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
begin
    SetLength(aResponse,BufferLength);
    Move(Buffer^,aResponse[0],BufferLength);
    lResponse:=BufferLength;
    bResponse:=true;
end;

//TByteSize = ( _5, _6, _7, _8 );
function parseByteSize(iByte:integer):TByteSize;
begin
    result:=_8;
    if(iByte=5) then
    begin
        result:=_5;
    end;
    if(iByte=6) then
    begin
        result:=_6;
    end;
    if(iByte=7) then
    begin
        result:=_7;
    end;
    if(iByte=8) then
    begin
        result:=_8;
    end;
end;

// TStopBits = ( _1, _1_5, _2 );
function parseStopBits(iStop:integer):TStopBits;
begin
    result:=_1;
    if(iStop=1) then
    begin
        result:=_1;
    end;
    if(iStop=2) then
    begin
        result:=_2;
    end;
end;

//TParity = ( None, Odd, Even, Mark, Space );
function parseParity(iParity:integer):TParity;
begin
    result:=None;
    if(iParity=0) then
    begin
        result:=None;
    end;
    if(iParity=1) then
    begin
        result:=Odd;
    end;
    if(iParity=2) then
    begin
        result:=Even;
    end;
    if(iParity=3) then
    begin
        result:=Mark;
    end;
    if(iParity=4) then
    begin
        result:=Space;
    end;
end;

function TspComFrm.portwrite(send:pchar; len:integer):boolean;
begin
    bResponse:=false;
    lResponse:=0;
    SetLength(aResponse,0);
    if (len=0) then exit;
    result:=spComFrm.spComm.WriteCommData(send,len);
end;

function TspComFrm.portread(recv:pchar):integer;
var k:integer;
begin
    result:=0;
    if (lResponse<=0) then exit;
    for k:=0 to lResponse-1 do recv[k]:=aResponse[k];
    result:=lResponse;
end;

//返回 0 打开成功 -1 打开失败
function TspComFrm.openCom(comPort:integer; baudRate:integer;
                       byteSize:integer; stopBit:integer; parity:integer):integer;
var iResult:integer;
begin
    try
        iResult:=0;
        spComFrm.spComm.CommName:='com'+inttostr(ComPort); //串口
        spComFrm.spComm.BaudRate:=BaudRate; //波特率
        spComFrm.spComm.ByteSize:=parseByteSize(ByteSize); //数据位
        spComFrm.spComm.StopBits:=parseStopBits(StopBit); //停止位
        spComFrm.spComm.Parity:=parseParity(parity);
        spComFrm.spComm.StartComm;                        //打开串口
        sleep(200);
    except
        on e:exception do
        begin
            iResult:=-1;
        end;
    end;
    result:=iResult;
end;

//返回 0 关闭成功 -1 关闭失败
function TspComFrm.closeCom():integer;
var iResult:integer;
begin
    try
        iResult:=0;
        sleep(200);
        spComFrm.spComm.StopComm; //关闭串口
    except
        on e:exception do
        begin
            iResult:=-1;
        end;
    end;
    result:=iResult;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -