我用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板与笔记本电脑的连接。我遗漏了什么吗?还有其他命令吗?阅兵只给了我一个角色还是什么?博士,我想读一下它的全部答案。
这是我的代码:
#[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()如果你想什么就告诉我,谢谢!
发布于 2022-05-24 07:29:43
Readline返回输入缓冲区的内容,直到NewLine值的第一次出现为止。如果没有NewLine,它似乎已经停止工作。
您可以使用端口对象上的DataReceived事件和异步读取数据。
https://stackoverflow.com/questions/72358570
复制相似问题