$port = New-Object System.IO.Ports.SerialPort COM10,600,None,8,one try { $port.Open() [byte[]]$request = 0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20 $port.Write($request, 0, $request.Length) $response = New-Object System.Collections.Generic.List[byte] $timeout = [DateTime]::UtcNow.AddSeconds(2) while ([DateTime]::UtcNow -lt $timeout) { while ($port.BytesToRead -gt 0) { $buffer = New-Object byte[] $port.BytesToRead $count = $port.Read($buffer, 0, $buffer.Length) for ($i = 0; $i -lt $count; $i++) { $response.Add($buffer[$i]) } } # Auf das Startbyte 57 synchronisieren. $start = $response.IndexOf([byte]0x57) if ($start -ge 0 -and ($response.Count - $start) -ge 12) { $response = [System.Collections.Generic.List[byte]]( $response.GetRange($start, 12) ) break } Start-Sleep -Milliseconds 20 } if ($response.Count -eq 12) { $actual = ($response | ForEach-Object { "{0:X2}" -f $_ }) -join " " $expected = "57 07 01 06 00 01 03 06 02 00 01 20" Write-Host "Bytes empfangen: $($response.Count)" Write-Host "Antwort: $actual" if ($actual -eq $expected) { Write-Host "TEST ERFOLGREICH" } else { Write-Host "TEST FEHLGESCHLAGEN" Write-Host "Erwartet: $expected" } } else { Write-Host "Bytes empfangen: $($response.Count)" if ($response.Count -gt 0) { $actual = ($response | ForEach-Object { "{0:X2}" -f $_ }) -join " " Write-Host "Antwort: $actual" } else { Write-Host "Keine Antwort" } Write-Host "TEST FEHLGESCHLAGEN - keine vollstaendige Antwort gefunden" } } finally { if ($port.IsOpen) { $port.Close() } $port.Dispose() $port = $null [GC]::Collect() [GC]::WaitForPendingFinalizers() }