在powershell脚本中连续读取串口数据

问题描述

我正在尝试编写一个 powershell 脚本,该脚本将命令发送到串行设备,然后继续读取来自设备的数据。

[System.IO.Ports.SerialPort]::GetPortNames()
Write-Host "Select Serial Port"
$portName = Read-Host -Prompt 'Input Serial Device Name'
Write-Host "Using $portName..."

$port= new-Object System.IO.Ports.SerialPort $portName,115200,None,8,one
$port.ReadTimeout = 1000
$port.open()

$port.WriteLine("start\n\r")
Start-Sleep -Milliseconds 1000
while ($x = $port.ReadExisting())
{
    Write-Host $x
    Start-Sleep -Milliseconds 300
}
$port.Close()

上述脚本在收到设备的第一行后立即退出。我尝试在 while 循环中更改睡眠时间,但行为是相同的。

解决方法

在这里回答我自己的问题... 以下代码使我能够从串行端口连续读取

Write-Host "Select Serial Port"
$portName = Read-Host -Prompt 'Input Serial Device Name'
Write-Host "Using $portName..."

$port= new-Object System.IO.Ports.SerialPort $portName,115200,None,8,one
$port.Open()

Write-Output $port

for(;;)
{
    if ($port.IsOpen)
    {
        $data = $port.ReadLine()
        Write-Output $data
    }
}