Открытый последовательный порт с переменной - PullRequest
0 голосов
/ 29 октября 2018

Я хочу открыть COM-порт в моем скрипте powershell:

function openComPort($number, $baud) {
    $port = New-Object System.IO.Ports.SerialPort("COM$number", $baud, "None", 8, "One")
    $port.Open()
    return $port
}
$myOpenedPort = openComPort(1, 9600)

Это не с

New-Object : Exception calling ".ctor" with "5" argument(s): "Positive number required.
Parameter name: BaudRate"
At line:9 char:20
+     $port = New-Object <<<<  System.IO.Ports.SerialPort("COM$number", $baud, "None", 8, "One")
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

You cannot call a method on a null-valued expression.
At line:11 char:12
+     $port.Open <<<< ()
    + CategoryInfo          : InvalidOperation: (Open:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Что я делаю не так?

1 Ответ

0 голосов
/ 29 октября 2018

Вы неправильно вызываете свою функцию, Powershell (в отличие от других языков) не требует скобок при вызове функции, см. about_functions для получения дополнительной информации.

Используя их таким образом, вы группируете все, что в скобках, в один элемент, это отправляется первому параметру $number, оставляя $baud пустым, что вызывает ваши ошибки.

Правильный синтаксис:

openComPort 1 9600

РЕДАКТИРОВАТЬ: Хорошей практикой является размещение параметров в блоке param() (это шаг к использованию расширенных функций .

И также установить тип параметра, чтобы убедиться, что вы получаете правильный тип ввода. Они оба int в этом случае - так как вам нужно только положительное целое число.

Это обновит вашу функцию до:

function openComPort {
    Param(
        [int]$number,
        [int]$baud
    )

    $port = New-Object System.IO.Ports.SerialPort("COM$number", $baud, 'None', 8, 'One')
    $port.Open()
    return $port
}
$myOpenedPort = openComPort -number 1 -baud 9600
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...