我得从蓝牙SPP扫描仪上捕捉条形码。我可以打开com端口并捕捉所有扫描,但是2分钟后扫描仪就会休眠。当扫描器醒来时,它不再连接,但com端口仍然打开。我需要一种方法来找出,如果扫描器仍然连接,或去睡觉和关闭/重新打开com端口时,扫描仪再次醒来。
我将扫描仪与win10中的pc配对,这将创建一个输入com端口(com4)。我可以打开那个端口听留言。问题是,扫描仪只使用单向通信,似乎它没有发送任何东西说“我现在断开”,它只是去睡觉和断开连接。有没有任何方法可以看到扫描仪仍然连接,或去睡觉,或有什么可连接的东西?扫描仪是WASP WWS550i。
_serialPort = New SerialPort(PortName, BaudRate, Parity.None, 8, StopBits.One)
_serialPort.PortName = PortName
_serialPort.Parity = Parity.None
_serialPort.DataBits = 8
_serialPort.BaudRate = BaudRate
_serialPort.StopBits = StopBits.One
AddHandler _serialPort.DataReceived, AddressOf sp_DataReceived
_serialPort.Open()
Private Sub sp_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)
_LastDataReceived = _serialPort.ReadLine()
End Sub发布于 2020-04-30 12:13:06
我对Pos平板扫描仪也有同样的问题。ASP.CORE 3员工服务
我在醒来后重新打开串口解决了这个问题。另外,如果我试图重新打开端口,端口会说端口不可用,因为端口没有正确关闭(dispose)。
我的解决方案
我写了1秒的检查程序,检查端口是否仍然打开。如果不是,则对前一个串口实例调用close(),然后重新打开端口。
现在我可以在醒来后扫描了。
public class Worker : BackgroundService
{
private static SerialPort SERIAL_PORT;
// constructor DI
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
}
public override Task StartAsync(CancellationToken cancellationToken)
{
// create serial port connection
_logger.LogInformation($"-- open serial port {PORT_NAME}");
SERIAL_PORT = SerialPortFactory.Create(PORT_NAME);
SERIAL_PORT.Open();
_logger.LogInformation($"-- serial port {PORT_NAME} opened");
Task.Run(() => Checker(_logger)); // run port checker on another thread
return base.StartAsync(cancellationToken);
}
public override Task StopAsync(CancellationToken cancellationToken)
{
SERIAL_PORT.Close();
return base.StopAsync(cancellationToken);
}
public static void Checker(ILogger<Worker> _logger)
{
for (;;)
{
_logger.LogInformation("Sleep for 1 second!");
Thread.Sleep(1000);
try
{
_logger.LogInformation(SERIAL_PORT.IsOpen.ToString());
if(!SERIAL_PORT.IsOpen)
{
SERIAL_PORT.Close();
Thread.Sleep(100); // is not necessary but ...
SERIAL_PORT = SerialPortFactory.Create(PORT_NAME);
SERIAL_PORT.Open();
_logger.LogInformation($"-- serial port {PORT_NAME} opened");
}
} catch(Exception e)
{
_logger.LogError(e.Message);
}
}
}
}SerialPortFactory
https://stackoverflow.com/questions/57907084
复制相似问题