我正在通过串行端口使用 powershell 连接到一个设备,并且我试图改变一个值,直到另一个值变为 0。我正在使用 Do-Until,但它只是无休止运行,第一个值被一遍又一遍地更改。我需要做的是,首先我检查Value2
aka $line1
,如果它不是 0,我需要检查Value1
aka V45
,将它加 10,发送命令来更改它并重置设备,然后再次检查Value2
,如果它不是 0,则重复。我试过Do-While($line -ne 0)
,Do-Until($line -le 0)
结果相同。当我尝试时Do-Until($line -ne 0)
,它在第一次运行后停止,Value1(较高)和 Value2(较低)发生了变化。我运行了脚本 3-4 次,最终 Value2 达到了 0。我猜我在 Do-Until(While) 语句中出了问题,但我没有看到它。
$port.WriteLine("R?`r")
$string1 = $port.ReadLine()
$line1 = [int]($string1 -split ",")[11]
if($line1 -ne 0){
do{
$port.WriteLine("V45?`r")
$v45 = [int]$port.ReadLine()+10
$port.WriteLine("V45,${v45}`r")
$port.ReadLine()
$port.WriteLine("RST`r")
$port.ReadLine()
$port.ReadLine()
$port.WriteLine("R?`r")
$string = $port.ReadLine()
$line = [int]($string1 -split ",")[11]
}until($line -eq 0)
}
答案1
您正在阅读$string
但随后解析$string1
。在第二行将其重命名$string1
为。$string
$string = $port.ReadLine() $line = [int]($string1 -split ",")[11] #Change this line to $string
以更有意义的方式命名变量会对您有益。