如何使用 PowerShell 通过串行端口向监视器发送十六进制命令

How to send hexadecimal commands to a monitor over a Serial Port with PowerShell

好吧,这有点奇怪,但由于我完全不了解如何使用串行端口或 PowerShell,我想不出还有什么地方可以去。

我想做的是向带有 RS232 端口的显示器发送基本命令,该端口可用于控制显示器的属性,即亮度、对比度、背光等。

出于测试目的,我正在尝试使用 PowerShell 执行此操作。我可以在 PowerShell 中创建 $port 并将其分配给监视器所连接的相关 COM#,但我不知道如何实际向它发送命令,因为监视器上的控制器必须是十六进制的了解它。 监视器能够使用相同的十六进制布局返回确认,但我无法找到在 Powershell 控制台上显示该响应的方法。 这是我到目前为止能够得到的。

PS C:\Users\Kingdel> [System.IO.Ports.SerialPort]::getportnames()
COM1
COM2
COM3
COM4
COM5
COM6
PS C:\Users\Kingdel> $port= new-Object System.IO.Ports.SerialPort COM1,9600,None,8,one
PS C:\Users\Kingdel> $port.open()
PS C:\Users\Kingdel> $port.WriteLine("0xA6,0x01,0x00,0x00,0x00,0x03,0x01,0x31,0x94")
PS C:\Users\Kingdel>

任何人都可以指出我如何将此命令发送到监视器并查看返回的确认的正确方向。

我愿意尝试不同的终端,我已经尝试过 PuTTy 和 Termite,据我所知,它们都没有成功。

这真是个好问题。也许我可以帮忙。

SerialPort.WriteLine()方法接受一个字符串写入输出缓冲区,所以使用这个,你实际上是在发送一个字符串参数。

要将某些内容发送到 [System.IO.Ports.SerialPort] 对象,您需要使用带有 Byte[] 参数的 SerialPort.Write()Write() 方法可以使用缓冲区中的数据将多个字节传入串行端口。

您还需要向它发送三个参数,即 buffer Byte[]offset Int32 和一个 count Int32。因此,对于您的情况,您可以执行以下操作:

[Byte[]] $hex = 0xA6,0x01,0x00,0x00,0x00,0x03,0x01,0x31,0x94
$port.Write($hex, 0, $hex.Count)

buffer 参数是包含要写入端口的数据的数组,offset 是缓冲区数组中从零开始的字节偏移量,从此处开始将字节复制到端口,count 是数量要写入的字节数。