问题描述
我正在尝试编写一个 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
}
}