首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell串行通信

Powershell串行通信
EN

Stack Overflow用户
提问于 2022-05-24 07:07:52
回答 1查看 109关注 0票数 0

我用powershell编写了一个脚本,用来发送十六进制和从COMS端口接收数据,我发现的主要问题是,我没有从设备中获取所有数据,我只知道这一点,因为我的老板说有丢失的数据。我不能告诉您确切的设备,因为它是一个公司项目,但它是一个I/O板,一旦一个适当的命令被发送(例如0x1b,0x02,0x43,0x20,0xff,0x1b,0x03),一个答案被发送回来(例如,P或A)。当我发送命令'0x1b,0x02,0x50,0x1b,0x03‘时,我能得到的答案是'P’,但显然还有很多其他信息缺失。

另外,为了增加我的问题,命令readexisting工作,但readline冻结了程序,这是唯一的解决办法是断开I/O板,以断开I/O板与笔记本电脑的连接。我遗漏了什么吗?还有其他命令吗?阅兵只给了我一个角色还是什么?博士,我想读一下它的全部答案。

这是我的代码:

代码语言:javascript
复制
#[byte[]] $request = 0x1b,0x02,0x43,0x0C,0xff,0x1b,0x03
#[byte[]] $request2 = 0x1b,0x02,0x43,0x0C,0x00,0x1b,0x03
[byte[]] $request = 0x1b,0x02,0x50,0x1b,0x03
[byte[]] $request2 = 0x1b,0x02,0x50,0x1b,0x03

$counter = 0
$howmany? = 0
$port = new-Object System.IO.Ports.SerialPort COM3,115200,None,8,one
$port.Open()
timeout 1

function read-com {
  try{
    $line = $port.ReadExisting()
    if($line)
    {
        Write-Host $line
    }
  }
  catch [System.Exception]
  {
  }
}


while ($counter++ -lt 6) {

$port.Write($request, 0, $request.Count)
timeout 3
read-com

$port.Write($request2, 0, $request.Count)
timeout 3
read-com

}

$port.Close()

如果你想什么就告诉我,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-05-24 07:29:43

Readline返回输入缓冲区的内容,直到NewLine值的第一次出现为止。如果没有NewLine,它似乎已经停止工作。

您可以使用端口对象上的DataReceived事件和异步读取数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72358570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档