powershell - 使用 PowerShell 进行串行端口通信
问题描述
我正在尝试使用 PowerShell 设置与 ViewSonic Display 的串行端口通信。我发送打开或关闭显示状态的请求,应该得到 9 位回复 56 48 49 114 108 48 48 49 13 回复开启或 56 48 49 114 108 48 48 48 13 回复关闭 当我运行代码时,我只得到一个数字的回复当我添加第二次读取时,我得到了剩下的 8 个但是当我添加一个断点并使用调试器单步执行它时,我在第一次读取时得到了所有 9 个。任何想法可能导致这种奇怪的行为?关于更好的方法来做到这一点的任何建议?请参阅下面的代码和结果。
PS C:\Users\james\Desktop> [Byte[]] $request = 0x38, 0x30, 0x31, 0x67, 0x6C, 0x30, 0x30, 0x30, 0x0D
$portreturn = [System.Byte[]]::CreateInstance([System.Byte], 9)
$port = new-Object System.IO.Ports.SerialPort COM3, 9600, None, 8, one
$port.Open()
$port.Write($request, 0, $request.Count)
$port.Read($portreturn, 0, $portreturn.Length)
Write-Host "portreturn1" $portreturn -foreground black -BackgroundColor white
$port.Read($portreturn, 0, $portreturn.Length)
Write-Host "portreturn2" $portreturn -foreground black -BackgroundColor white
$port.Close()
1个端口返回1 56 0 0 0 0 0 0 0 0
8 端口返回2 48 49 114 108 48 48 49 13 0
PS C:\Users\james\Desktop> C:\Users\james\Desktop\VStest2a.ps1
在 'C:\Users\james\Desktop\VStest2a.ps1:4' [DBG] 上点击行断点:PS C:\Users\james\Desktop>>
[DBG]: PS C:\Users\james\Desktop>>
[DBG]:PS C:\Users\james\Desktop>> 9
[DBG]: PS C:\Users\james\Desktop>> portreturn1 56 48 49 114 108 48 48 49 13
[DBG]: PS C:\Users\james\Desktop>>
为了清楚起见,链接到图片。 截屏
解决方案
这不是奇怪的行为,如果您在串行端口上使用Read() 方法,它可以正常发生。
串行端口至少以 1 字节为单位进行通信。没有像 TCP/IP 这样的数据包的概念。
您需要获取并保存 Read() 结果的数据和大小,并添加一个进程来检查是否所有数据都正常接收。
也许通过调整ReadTimeout 属性的值,有可能在接收到所有数据后完成 Read()。
但是,由于初始值应该是InfiniteTimeout,因此无法期望更改该值会产生任何影响。
或者,如果您收到的所有数据都是一个字符串,以 13(carriage return= \r
) 结尾并且它没有出现在数据中间,您可以使用ReadTo() 方法。
或者,您可以通过以类似方式调用ReadLine() 方法并将NewLine 属性设置为 13(carriage return= \r
) 来获得类似的结果。
请尝试各种事情。
例如,如果数据的结尾是 10(line feed= \n
),你可以像这篇文章那样调用它。
从串行端口写入和读取信息
推荐阅读
- opencv - SURF_CUDA 每次执行计算不同的关键点
- haskell - 如何告诉haskell堆栈使用已安装的包?
- swift - 我们如何从 UITextView 中的选定文本中获取整个文本?
- java - 发送消息后如何发送客户端自动响应?
- javascript - 密钥未在 javascript 对象中设置
- amazon-web-services - 是否可以在 AWS 上使用 hostgator 域
- google-cloud-platform - 限制 GCE 中的可用实例类型?
- drools - 来自 kie-server 的 FAILURE 回答(使用 kie-server-showcase 和 business-central-workbench-showcase)
- javascript - NodeJS 写流
- python - 尝试通过 Anaconda Navigator 启动 Jupyter Notebook 时出现 DLL 错误