Powershell将值写入串口

时间:2018-02-04 17:45:51

标签: powershell

如何在Powershell中将值255写入串口?

$port= new-Object System.IO.Ports.SerialPort COM6,4800,None,8,one
$port.open()
$port.Write([char]255)
$port.Close()

上一个脚本的输出为63(使用串口监视器查看)。

$port.Write([char]127)结果为127。如果该值高于127,则输出始终为63。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

$port1 = new-Object System.IO.Ports.SerialPort COM1,4800,None,8,one
$port1.Open()
$data = [System.Text.Encoding]::UTF32.GetBytes([char]255)
$port1.Write( $data )
$port1.ReadExisting()
$port1
$port1.Close()

应该工作。

答案 1 :(得分:1)

尽管您尝试使用[char]您的参数被视为[string] ,因为PowerShell会选择Write方法的以下重载,因为您'只传递单个参数:

void Write(string text)

documentation for this particular overload州(强调补充):

  

默认情况下,SerialPort使用ASCIIEncoding对字符进行编码。 ASCIIEncoding将大于127的所有字符编码为(char)63或'?'。要支持该范围内的其他字符,请将“编码”设置为UTF8Encoding,UTF32Encoding或UnicodeEncoding。

要发送字节值,,您必须使用以下重载:

void Write(byte[] buffer, int offset, int count)

这要求你:

  • 使用强制转换[byte[]]投射您的字节值
  • 并指定offset的值 - 起始字节位置以及`count,从起始字节位置复制的字节数。

在你的情况下:

$port.Write([byte[]] (255), 0, 1)

注意:值不需要(...) 255,但必须指定 multiple ,{ {1}} - 分隔值。