这里的一些背景上是我想要做的:

  1. 打开一个串口从移动设备蓝牙打印机。
  2. 发送一EPL/2形式的蓝牙打印机,所以它理解如何对待数据是有关接受。
  3. 一旦形式已被接收、发送的一些数据打印机,这将是印刷上标签的股票。
  4. 重复步骤3,根据需要多次的每个标签打印。

步骤2只有发生第一次,因为形式并不需要之前,每一标签。我的问题是,当我发送的形式,如果我送的标数据太快也不会打印。有时候我得到"蓝牙故障:无线电非业务性的"印上标签而不是该数据发送。

我已经找到一种方法围绕这一问题通过以下:

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);
    }
}

所以基本上,我可以抓住一个TimeoutException,并重新编写方法后等待一定时间(三秒钟的时间似乎所有的工作时间,但是任何不那么它似乎把异常每次尝试).三次尝试之后我只是假设串口拥有的东西是错误的,并让用户所知。

这种方法似乎对工作确定,但我肯定有一个更好的办法来处理这个问题。有几个属性串口类,我认为我需要来使用,但是我真的不能找到任何好的文件或例子如何使用它们。我已经试过玩弄一些的性质,但他们似乎做什么,我试图来实现。

这里有一个名单的性质,我已经打了:

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

我肯定有一些的组合这些将处理什么我想要做的更多优雅。

我使用的C#(2.0框架),一斑马QL220+牙打印机和移动6的手持装置,如果让任何差异的解决方案。

任何建议,将不胜感激。

[新]

我还应该注意到,《移动设备是使用蓝牙2.0,而打印机只是在1.1版。我假定速度的差异是什么引起的打印机方面落后在接收的数据。

有帮助吗?

解决方案

流动的控制是正确的答案在这里,它可能不存在/实施/适用于你的蓝牙连接。

检查了斑马规格,看看他们是否实现,或者如果你可以打开,控制软件流程(依相,xoff)它将让你看到当时的各种缓冲区越来越全面。

另外,蓝牙,无线电是不太可能传送速度比250k在最大。你可能会考虑人为地限制在9 600人bps-这将允许该电台的一个很大的喘息空间,用于重,错误校正,检测、及其自己的流动的控制。

如果一切都失败了,哈克你正在使用权利现在是不是坏的,但我会打电话斑马的技术支持,并找出他们的建议之前放弃的。

-亚当

其他提示

嗯,我已经找到了一种方法来这样做基于的两个建议已经给出。我需要设置我的序列港口对象如下:

serialPort.Handshake = Handshake.RequestToSendXOnXOff;
serialPort.WriteTimeout = 10000; // Could use a lower value here.

然后我只是需要做的写呼吁:

serialPort.Write(labelData);

由于斑马打印机支持的软件流程控制,它将发送一个XOff价值移动设备在缓冲区几乎是满的。这将导致移动装置等待一个依相值被送来的打印机、有效地通知移动装置,它可继续发射。

通过设置的编写时间酒店,我给一个总时间允许传送之前写入超异常被抛出。你仍然想要赶上写的时间超时,作为我做了在我的代码样本在这个问题。然而,它不会是必要的环3(或任意数量的)时间,试图写的每一个时间,由于控制软件流程将开始,并停止串口写传输。

问题是不可能的序列港口码的,但与潜在的蓝牙堆。港口你用的是纯粹的虚拟的,它是不可能的,任何的握手是即使实现(因为它将基本上是无意义的).CTS/RTS数/DSR只是不适用的,为什么你的工作。

根本的问题是,当你创造的虚拟口,它下面设有以结合到蓝牙连接到配对序列的设备。港口本身不知道多长时间可能会采取它可能是设立了做到这一异步(尽管这将是纯粹的装置OEM如何这样做),以防止的呼叫者从锁起来很长一段时期,如果没有配对的设备或设备配对的范围。

而你的代码可以感觉像一个黑客,这是可能的最佳、最便携式方法做你在做什么。

你可以使用蓝牙堆API以尝试看看如果设备和有活着的连接之前,但没有标准化的堆Api,因此Widcom和微软Api不同于你如何做到这一点,并Widcom是专有的和昂贵的。你会怎么结束是一个混乱的尝试发现的堆的类型、动态加载有适当验证程序的类,它具有呼叠,并寻找的设备。为此,简单的调查似乎更清洁,你不要掏出几$k Widcom SDK。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top