相关疑难解决方法(0)

在发送数据之前,如何强制串口写入方法等待线路清除?

以下是我正在尝试做的一些背景知识:

  1. 打开从移动设备到蓝牙打印机的串行端口.
  2. 将EPL/2表单发送到蓝牙打印机,以便它了解如何处理它将要接收的数据.
  3. 收到表格后,将一些数据发送到打印机,打印机将打印在标签纸上.
  4. 根据需要对每个要打印的标签重复步骤3.

第2步仅在第一次发生,因为表单不需要在每个标签之前.我的问题是,当我发送表单时,如果我发送标签数据太快,它将无法打印.有时我会在标签上打印"Bluetooth Failure:Radio Non-Operational"而不是我发送的数据.

我通过执行以下操作找到了解决问题的方法:

for (int attempt = 0; attempt < 3; attempt++)
{
    try
    {
        serialPort.Write(labelData);
        break;
    }
    catch (TimeoutException ex)
    {
        // Log info or display info based on ex.Message
        Thread.Sleep(3000);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以基本上,我可以捕获一个TimeoutException并在等待一定时间后重试write方法(三秒似乎一直在工作,但是更少,似乎每次尝试都抛出异常).经过三次尝试,我只是假设串口有问题,让用户知道.

这种方式似乎工作正常,但我确信有更好的方法来处理这个问题.我认为我需要使用SerialPort类中的一些属性,但我找不到任何好的文档或如何使用它们的示例.我试过玩一些属性,但它们似乎都没有做我想要达到的目标.

这是我玩过的属性列表:

  • CDHolding
  • CtsHolding
  • DsrHolding
  • DtrEnable
  • 握手
  • RtsEnable

我相信这些的一些组合将处理我想要更优雅地做的事情.

我正在使用C#(2.0框架),Zebra QL 220+蓝牙打印机和Windows Mobile 6手持设备,如果这对解决方案有任何影响.

任何建议,将不胜感激.

[UPDATE]

我还应该注意到移动设备使用的是蓝牙2.0,而打印机只使用1.1版本.我假设速度差异是导致打印机在接收数据时落后的原因.

c# serial-port bluetooth windows-mobile zebra-printers

11
推荐指数
2
解决办法
1万
查看次数