📄 uspcomm.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 + -