How to continuously read Serial COM port in Powershell and occasionally write to COM port

时间:2015-07-08 15:38:01

标签: powershell

I need to know how I can continuously read data in from the COM port and dump it to a file using Windows Powershell. While I am reading data in, I also need to monitor the data being read in and, depending on what the last line that was read, write data to the COM port.

To open the COM port in Powershell, I am doing this:

[System.IO.Ports.SerialPort]::getportnames()
$port= new-Object System.IO.Ports.SerialPort COM3,115200,None,8,one
$port.open()

To read data in to the COM port, I am doing this:

$line=$port.ReadLine()

My initial thought was to have the main Powershell script open the COM port. Then it would start a background/child task to continuously read data in from COM port and dump it to a file. While that child task is running, the parent would then continuously monitor the file and write to the COM port when needed.

When I tried to do that, the child could not read data in from the COM port because the parent had it open and the child did not inherit that permission from the parent.

Any ideas on how I can accomplish this?

1 个答案:

答案 0 :(得分:1)

简单回答:while循环。调用函数来决定何时写入数据。使用子任务和脚本来处理/处理/获取数据,但保持通信在同一任务/脚本中。我用这段代码从我的Ardunio中读取:

$COM = [System.IO.Ports.SerialPort]::getportnames()

function read-com {
    $port= new-Object System.IO.Ports.SerialPort $COM,9600,None,8,one
    $port.Open()
    do {
        $line = $port.ReadLine()
        Write-Host $line # Do stuff here
    }
    while ($port.IsOpen)
}