扫描二维码下载沐宇APP

沐宇

微信扫码使用沐宇小程序

沐宇

delphi涓插彛閫氫俊鎬庝箞缂栧啓

扬州沐宇科技
2023-10-28 02:49:20
delphi

鍦―elphi涓疄鐜颁覆鍙i€氫俊锛屽彲浠ヤ娇鐢╓indows API鍑芥暟鏉ヨ繘琛屾搷浣溿€?/p>

  1. 棣栧厛锛屽湪绋嬪簭鐨剈ses閮ㄥ垎锛屾坊鍔燱indows鍗曞厓銆?/li>
uses
  Windows;
  1. 澹版槑涓€浜涘父閲忓拰鍙橀噺锛岀敤浜庡瓨鍌ㄤ覆鍙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>
  1. 缂栧啓鍒濆鍖栦覆鍙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;
  1. 缂栧啓璇诲彇涓插彛鏁版嵁鐨勫嚱鏁般€?/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;
  1. 缂栧啓鍙戦€佷覆鍙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;
  1. 鍦ㄧ▼搴忎腑璋冪敤浠ヤ笂鍑芥暟杩涜涓插彛閫氫俊鎿嶄綔銆?/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>

扫码添加客服微信