【问题标题】:How to send hexadecimal commands to a monitor over a Serial Port with PowerShell如何使用 PowerShell 通过串行端口向监视器发送十六进制命令
【发布时间】:2020-01-03 16:51:46
【问题描述】:

好吧,这有点奇怪,但由于我完全不知道如何使用串行端口或 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,但据我所知,它们都没有成功。

【问题讨论】:

    标签: powershell serial-port


    【解决方案1】:

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

    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 参数是包含要写入端口的数据的数组,offset 是缓冲区数组中开始将字节复制到端口的从零开始的字节偏移量,count 是字节数写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2013-08-08
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多