1

Я подключаюсь через последовательный порт с PowerShell к устройству, и я пытаюсь изменить одно значение, пока другое значение не станет равным 0. Я использую До-До, но он просто бесконечно работает с изменением первого значения снова и снова. Что мне нужно сделать , это, сначала я проверяю Value2 ака $line1 если это не 0, мне нужно проверить Value1 ака 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. Я предполагаю, что у меня что-то не так в заявлении «До» (пока), и я этого не вижу.

$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 ответ1

0

Вы читаете в $string но затем анализируете $string1 . Переименуйте $string1 в $string во второй строке.

$string = $port.ReadLine() $line = [int]($string1 -split ",")[11] #Change this line to $string

Вы бы выиграли от именования ваших переменных более осмысленным образом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .