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



好吧,这有点奇怪,但由于我完全缺乏如何使用串行端口或PowerShell的知识,我想不出其他任何地方可以去。

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

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

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

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

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

这是一个非常好的问题。也许我可以帮忙。

SerialPort.WriteLine(( 方法接收一个字符串以写入输出缓冲区,因此使用它,您实际上是在发送字符串参数。

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

您还需要向它发送三个参数,分别是buffer Byte[]offset Int32count Int32。因此,在您的情况下,您可以执行以下操作:

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

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

最新更新