【发布时间】:2019-06-22 09:14:37
【问题描述】:
我正在尝试通过串行端口从计算机获取索尼电视型号。 这是一个文档(第 80 页 - 如何构建查询,第 83 页 - 如何获取模型名称)。 https://cdn.cnetcontent.com/d1/9d/d19d926b-bb36-4ed3-bd03-af1cad4069da.pdf
这是我的简单脚本,但不幸的是,总是返回 ERR。 我做错了什么?
$hex = 0x4d,0x4e,0x52,0x44,0x31,0x20,0x20,0x20,0x0d
$com = New-Object System.IO.Ports.Serialport COM4,9600,None,8,one
$com.Open()
$com.Write($hex, 0, $hex.Count)
Start-Sleep -s 2
$read = $com.ReadExisting()
Write-Host "Response: $read" #ERR
$com.Close()
【问题讨论】:
-
该手册说“当输入参数不在可调范围内时,“ERR”返回“:所以你没有发送有效的命令。此外,由于它是以字母而不是十六进制代码记录的,因此使用字符串并与 ASCII 一致(
System.Text.Encoding.ASCII会这样做)。 -
您是否尝试过发送 CR 和 LF,或者 LF 代替 CR,或者省略 0xd 并使用 WriteLine 方法?
-
@Richard Write 函数被 String 和 Byte[] 参数重载,因此只要十六进制字节正确就没有关系,默认情况下,SerialPort 使用 ASCIIEncoding 对字符进行编码。
-
@Remko 尝试但得到相同的响应:(
-
@Remko 我认为不是,但这样可以更轻松地检查根据文档发送的字符(这显然是问题所在)
标签: powershell serial-port sharp