91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

delphi串口通信怎么編寫

小億
155
2023-10-28 02:49:20
欄目: 編程語言

在Delphi中實現串口通信,可以使用Windows API函數來進行操作。

  1. 首先,在程序的uses部分,添加Windows單元。
uses
  Windows;
  1. 聲明一些常量和變量,用于存儲串口參數。
const
  ReadBufferSize = 1024;

var
  hComm: THandle;       // 串口句柄
  CommPort: string;     // 串口號
  BaudRate: DWORD;      // 波特率
  DataBits: DWORD;      // 數據位
  Parity: DWORD;        // 校驗位
  StopBits: DWORD;      // 停止位
  ReadBuffer: array[0..ReadBufferSize] of Byte;   // 讀取緩沖區
  1. 編寫初始化串口的函數。
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. 編寫讀取串口數據的函數。
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. 編寫發送串口數據的函數。
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. 在程序中調用以上函數進行串口通信操作。
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;   // 設置發送數據內容
  
  if not WriteSerialPort(DataToSend, SizeOf(DataToSend)) then
    ShowMessage('Failed to send data!');
end;

以上是一個簡單的Delphi串口通信示例,你可以根據實際需求進行修改和完善。

0
太康县| 隆昌县| 陆川县| 丘北县| 习水县| 增城市| 阿荣旗| 古浪县| 贵州省| 苍南县| 木兰县| 昌都县| 闵行区| 新宁县| 廊坊市| 舞钢市| 仁寿县| 武川县| 芜湖县| 邛崃市| 家居| 长春市| 龙川县| 尼勒克县| 侯马市| 阳信县| 秭归县| 江永县| 日照市| 浦城县| 辽中县| 陵川县| 女性| 金沙县| 天全县| 乡宁县| 类乌齐县| 鄂州市| 盐池县| 淮阳县| 平遥县|