|
串口实现单元代码: - 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.
复制代码 |
|