📄 ce_series.pas
字号:
unit CE_Series;
interface
uses
Windows,Classes, SysUtils, LResources, StdCtrls,ExtCtrls;
type
TCE_Series = class(TObject)
private
hComm: THandle;
public
Function OpenPort(Port:LPCWSTR;BaudRate,ByteSize,Parity,StopBits:integer):String;
procedure Send(str:String);
Function Receive():String;
procedure ClosePort();
end;
implementation
//===============================================================================================
// 语法格式:OpenPort(Port:LPCWSTR;BaudRate,ByteSize,Parity,StopBits:integer)
// 实现功能:打开串口
// 参数:port,串口号;例如wince下为从COM1:,COM2:.....win32下为COM1,COM2....... ;其他略,顾名思义哈
// 返回值:错误信息
//===============================================================================================
function TCE_Series.OpenPort(Port:LPCWSTR;BaudRate,ByteSize,Parity,StopBits:integer):String;
var
cc:TCOMMCONFIG;
begin
result:='';
hComm:=CreateFile(port, GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, 0, 0); // 打开COM
if (hComm = INVALID_HANDLE_VALUE) then begin // 如果COM 未打开
result:='CreateFile Error!';
exit;
end;
GetCommState(hComm,cc.dcb); // 得知目前COM 的状态
cc.dcb.BaudRate:=BaudRate; // 设置波特率为BaudRate
cc.dcb.ByteSize:=ByteSize; // 字节为 ByteSize(8 bit)
cc.dcb.Parity:=Parity; // Parity 为 None
cc.dcb.StopBits:=StopBits; // 1 个Stop bit
if not SetCommState(hComm, cc.dcb) then begin// 设置COM 的状态
result:='SetCommState Error!';
CloseHandle(hComm);
exit;
end;
end;
//===============================================================================================
// 语法格式:Send(str:String)
// 实现功能:发送数据
// 参数:str,数据
// 返回值:无
//===============================================================================================
procedure TCE_Series.Send(str:String);
var
lrc:LongWord;
begin
if (hComm=0) then exit; //检查Handle值
WriteFile(hComm,str,Length(str), lrc, nil); // 送出数据
end;
//=====================================================================
//语法格式: Receive()
//实现功能: 接收串口数据
//参数: 无
//返回值: 收到的字符串
//=====================================================================
Function TCE_Series.Receive():String;
var
inbuff: array[0..2047] of Char;
nBytesRead, dwError:LongWORD ;
cs:TCOMSTAT;
begin
ClearCommError(hComm,dwError,@CS); //取得状态
// 数据是否大于我们所准备的Buffer
if cs.cbInQue > sizeof(inbuff) then begin
PurgeComm(hComm, PURGE_RXCLEAR); // 清除COM 数据
exit;
end;
ReadFile(hComm, inbuff,cs.cbInQue,nBytesRead,nil); // 接收COM 的数据
//转移数据到变量中
result:=Copy(inbuff,1,cs.cbInQue);//返回数据
end;
//=====================================================================
//语法格式: ClosePort()
//实现功能:关闭串口
//参数: 无
//返回值: 无
//=====================================================================
procedure TCE_Series.ClosePort();
begin
SetCommMask(hcomm,$0);
CloseHandle(hComm);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -