Вот несколько примеров того, что я пытаюсь сделать:
- Откройте последовательный порт с мобильного устройства на принтер Bluetooth.
- Отправьте форму EPL/2 на принтер Bluetooth, чтобы он понимал, как обрабатывать данные, которые он собирается получать.
- Как только форма получена, отправьте некоторые данные на принтер, которые будут напечатаны на этикетке.
- Повторите шаг 3 столько раз, сколько необходимо для каждой напечатанной метки.
Шаг 2 выполняется только в первый раз, так как форма не должна предшествовать каждой метке. Моя проблема в том, что когда я отправлю форму, если я отправлю данные метки слишком быстро, она не будет печататься. Иногда я получаю сообщение "Отказ Bluetooth: радио, не действующий", который был напечатан на этикетке вместо отправленных мной данных.
Я нашел способ решить проблему, выполнив следующие действия:
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 и повторить метод записи после ожидания определенного количества времени (три секунды, кажется, работают все время, но все равно, и, похоже, каждая попытка бросает исключение). После трех попыток я просто предполагаю, что у последовательного порта есть что-то неправильное и сообщит пользователю.
Этот способ, похоже, работает нормально, но я уверен, что есть лучший способ справиться с этим. В классе SerialPort есть несколько свойств, которые, я думаю, мне нужно использовать, но я не могу найти хорошую документацию или примеры того, как их использовать. Я пробовал играть с некоторыми из свойств, но никто из них, похоже, не делает то, что я пытаюсь достичь.
Вот список свойств, с которыми я играл:
- CDHolding
- CtsHolding
- DsrHolding
- DtrEnable
- Рукопожатие
- RtsEnable
Я уверен, что некоторая комбинация из них будет обрабатывать то, что я пытаюсь сделать более изящно.
Я использую С# (2.0 framework), принтер Bluetooth Zebra QL 220+ и портативное устройство Windows Mobile 6, если это имеет какое-то значение для решений.
Любые предложения будут оценены.
[ОБНОВЛЕНИЕ]
Следует также отметить, что мобильное устройство использует Bluetooth 2.0, а принтер - только в версии 1.1. Я предполагаю, что разница в скорости - это то, что заставляет принтер отставать в получении данных.