delphi涓插彛閫氫俊鎬庝箞缂栧啓
鍦―elphi涓疄鐜颁覆鍙i€氫俊锛屽彲浠ヤ娇鐢╓indows API鍑芥暟鏉ヨ繘琛屾搷浣溿€?/p>
- 棣栧厛锛屽湪绋嬪簭鐨剈ses閮ㄥ垎锛屾坊鍔燱indows鍗曞厓銆?/li>
uses
Windows;
- 澹版槑涓€浜涘父閲忓拰鍙橀噺锛岀敤浜庡瓨鍌ㄤ覆鍙e弬鏁般€?/li>
const
ReadBufferSize = 1024;
var
hComm: THandle; // 涓插彛鍙ユ焺
CommPort: string; // 涓插彛鍙?/span>
BaudRate: DWORD; // 娉㈢壒鐜?/span>
DataBits: DWORD; // 鏁版嵁浣?/span>
Parity: DWORD; // 鏍¢獙浣?/span>
StopBits: DWORD; // 鍋滄浣?/span>
ReadBuffer: array[0..ReadBufferSize] of Byte; // 璇诲彇缂撳啿鍖?/span>
- 缂栧啓鍒濆鍖栦覆鍙g殑鍑芥暟銆?/li>
function InitSerialPort: Boolean;
var
DCB: TDCB;
Timeouts: TCommTimeouts;
begin
Result := False;
hComm := CreateFile(PChar(CommPort), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hComm = INVALID_HANDLE_VALUE then
Exit;
if not GetCommState(hComm, DCB) then
Exit;
DCB.BaudRate := BaudRate;
DCB.ByteSize := DataBits;
DCB.Parity := Parity;
DCB.StopBits := StopBits;
if not SetCommState(hComm, DCB) then
Exit;
if not GetCommTimeouts(hComm, Timeouts) then
Exit;
Timeouts.ReadIntervalTimeout := MAXDWORD;
Timeouts.ReadTotalTimeoutMultiplier := 0;
Timeouts.ReadTotalTimeoutConstant := 0;
Timeouts.WriteTotalTimeoutMultiplier := 0;
Timeouts.WriteTotalTimeoutConstant := 0;
if not SetCommTimeouts(hComm, Timeouts) then
Exit;
Result := True;
end;
- 缂栧啓璇诲彇涓插彛鏁版嵁鐨勫嚱鏁般€?/li>
function ReadSerialPort(var Buffer: array of Byte; Count: Integer): Integer;
begin
Result := 0;
if not ReadFile(hComm, Buffer, Count, DWORD(Result), nil) then
Result := 0;
end;
- 缂栧啓鍙戦€佷覆鍙f暟鎹殑鍑芥暟銆?/li>
function WriteSerialPort(const Buffer: array of Byte; Count: Integer): Boolean;
var
BytesWritten: DWORD;
begin
Result := False;
if not WriteFile(hComm, Buffer, Count, BytesWritten, nil) then
Exit;
Result := BytesWritten = DWORD(Count);
end;
- 鍦ㄧ▼搴忎腑璋冪敤浠ヤ笂鍑芥暟杩涜涓插彛閫氫俊鎿嶄綔銆?/li>
procedure TForm1.Button1Click(Sender: TObject);
var
ReadCount: Integer;
begin
if not InitSerialPort then
ShowMessage('Failed to initialize serial port!')
else
begin
ReadCount := ReadSerialPort(ReadBuffer, ReadBufferSize);
if ReadCount > 0 then
begin
// 澶勭悊璇诲彇鍒扮殑鏁版嵁
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
DataToSend: array[0..3] of Byte; // 瑕佸彂閫佺殑鏁版嵁
begin
DataToSend[0] := 0; // 璁剧疆鍙戦€佹暟鎹唴瀹?/span>
if not WriteSerialPort(DataToSend, SizeOf(DataToSend)) then
ShowMessage('Failed to send data!');
end;
浠ヤ笂鏄竴涓畝鍗曠殑Delphi涓插彛閫氫俊绀轰緥锛屼綘鍙互鏍规嵁瀹為檯闇€姹傝繘琛屼慨鏀瑰拰瀹屽杽銆?/p>
相关问答