如何在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。
提前感谢您的帮助!
答案 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}} - 分隔值。