⚠️ Важно: Эта проблема специфична для TSPL (TSC Printer Language). Если вы используете ZPL (Zebra) принтеры - у них нет этой проблемы, так как ZPL автоматически определяет конец этикетки через датчик GAP. См.ZPL_VS_TSPL_SIZE_DIFFERENCE.mdдля подробностей.
- ✋ Принтер начинает печатать, но останавливается с ошибкой
- ❌ Этикетка выходит частично, не до конца
⚠️ Принтер "не может найти gap (зазор между этикетками)"- 🔴 Светодиод ошибки мигает/горит
Несоответствие между указанным размером в команде SIZE и реальным размером этикетки.
Когда вы пишете:
SIZE 60 mm, 40 mm
Принтер ожидает, что этикетка имеет высоту 40mm. Он печатает содержимое и начинает искать GAP (зазор) после 40mm.
Если реальная этикетка 60mm или 80mm по высоте, принтер не найдёт зазор в ожидаемом месте и выдаст ошибку позиционирования.
💡 Почему ZPL не имеет этой проблемы? ZPL использует автоматический поиск GAP датчиком вместо команды SIZE. Команда
^LL(Label Length) в ZPL опциональна и нужна только для оптимизации скорости.
Возьмите линейку и измерьте вашу этикетку:
┌─────────────┐ ↑
│ │ │
│ Этикетка │ │ Высота (Height)
│ │ │ например, 60mm
│ │ │
└─────────────┘ ↓
←──────────→
Ширина (Width)
например, 58mm
Зазор (GAP) - это расстояние между этикетками:
└─────────────┘ ← Конец этикетки
↕ GAP (обычно 2-3mm)
┌─────────────┐ ← Начало следующей
| Размер (мм) | Применение | Пример |
|---|---|---|
| 40 x 30 | Маленькие ценники | Ювелирные изделия |
| 58 x 40 | Стандартные маленькие | Артикулы товаров |
| 58 x 60 | Средние этикетки | Самый популярный |
| 60 x 80 | Большие вертикальные | Доставка, адреса |
| 80 x 50 | Горизонтальные | Штрих-коды товаров |
| 100 x 100 | Квадратные большие | Транспортные этикетки |
| 100 x 150 | Почтовые | Посылки, грузы |
Неправильно (40mm высота, а реальная 60mm):
SIZE 60 mm, 40 mm ❌ Ошибка позиционирования!
GAP 2 mm, 0 mm
CLS
TEXT 50,50,"3",0,1,1,"Hello"
PRINT 1
Правильно (60mm высота совпадает с реальной):
SIZE 58 mm, 60 mm ✅ Работает!
GAP 2 mm, 0 mm
CLS
TEXT 50,50,"3",0,1,1,"Hello"
PRINT 1
Большинство TSPL принтеров имеют кнопку FEED для калибровки:
- Выключите принтер
- Зажмите кнопку FEED
- Включите принтер, продолжая держать FEED
- Отпустите через 3-5 секунд
- Принтер прогонит несколько этикеток для автоопределения размера
После калибровки принтер "запомнит" размер этикетки.
Попробуйте распространённые размеры по очереди:
// Тест 1: 58x40mm
SIZE 58 mm, 40 mm
GAP 2 mm, 0 mm
CLS
TEXT 50,20,"3",0,1,1,"Test: 58x40mm"
PRINT 1
// Тест 2: 58x60mm (самый популярный)
SIZE 58 mm, 60 mm
GAP 2 mm, 0 mm
CLS
TEXT 50,20,"3",0,1,1,"Test: 58x60mm"
PRINT 1
// Тест 3: 60x80mm
SIZE 60 mm, 80 mm
GAP 2 mm, 0 mm
CLS
TEXT 50,20,"3",0,1,1,"Test: 60x80mm"
PRINT 1
Какой из тестов напечатается без ошибки и полностью - тот размер и правильный!
Отправьте команду самодиагностики - она покажет конфигурацию:
SELFTEST
Принтер напечатает лист с информацией о размерах, DPI, версии прошивки и т.д.
Если используете рулон без зазоров (сплошная лента):
SIZE 58 mm, 60 mm
GAP 0 mm, 0 mm // Зазор = 0
Некоторые этикетки имеют чёрную метку на обратной стороне:
SIZE 58 mm, 60 mm
BLINE 3 mm, 0 mm // Вместо GAP используем BLINE
Обычные этикетки с прозрачным промежутком:
SIZE 58 mm, 60 mm
GAP 2 mm, 0 mm // 2mm стандартный зазор
Если зазор больше (например, 3-4mm):
SIZE 58 mm, 60 mm
GAP 3 mm, 0 mm // Укажите реальный зазор
SIZE 40 mm, 30 mm
GAP 2 mm, 0 mm
DIRECTION 0
CLS
TEXT 20,10,"2",0,1,1,"SKU-123"
BARCODE 20,40,"128",40,0,0,2,2,"123456"
PRINT 1
SIZE 58 mm, 60 mm
GAP 2 mm, 0 mm
DIRECTION 0
CLS
TEXT 50,20,"3",0,1,1,"Product Name"
BARCODE 50,60,"128",80,1,0,2,2,"1234567890"
TEXT 50,160,"2",0,1,1,"SKU: 1234567890"
QRCODE 200,60,H,4,A,0,"https://example.com"
PRINT 1
SIZE 100 mm, 150 mm
GAP 3 mm, 0 mm
DIRECTION 0
CLS
TEXT 50,20,"4",0,1,1,"TRANSPORT LABEL"
TEXT 50,80,"3",0,1,1,"From: Warehouse A"
TEXT 50,120,"3",0,1,1,"To: Store B"
BARCODE 50,180,"128",100,1,0,3,3,"TRACK123456"
QRCODE 350,180,H,6,A,0,"TRACK123456"
PRINT 1
Используйте метод getTSPLPrinterStatus() для диагностики:
final status = await manager.getTSPLPrinterStatus(printer);
if (status.success) {
print('Код статуса: ${status.code}');
print('Описание: ${status.description}');
} else {
print('Ошибка: ${status.errorMessage}');
}| Код | Описание | Решение |
|---|---|---|
| 0x00 | Норма | Всё OK |
| 0x01 | Head Open | Закройте головку принтера |
| 0x02 | Paper Jam | Извлеките замятую бумагу |
| 0x04 | Paper Out | Загрузите этикетки |
| 0x08 | Ribbon Out | Загрузите риббон (для термотрансфера) |
| 0x10 | Pause | Нажмите кнопку продолжения |
| 0x20 | Printing | Идёт печать |
| 0x40 | Label not found | Проверьте SIZE и GAP! |
| 0x80 | Cutter Error | Проблема с резчиком |
SIZE указан неправильно.
- Измерьте этикетку линейкой (ширина x высота в мм)
- Измерьте зазор между этикетками (обычно 2-3mm)
- Обновите команду SIZE в коде:
SIZE <ширина> mm, <высота> mm GAP <зазор> mm, 0 mm - Сделайте калибровку принтера (зажмите FEED при включении)
- Проверьте печать - этикетка должна выйти полностью
В example/lib/main.dart теперь используется 58x60mm вместо неправильного 60x40mm:
Future<void> _printTsplSimpleText() async {
// Измените размер под ВАШУ этикетку!
const tsplCommands = '''
SIZE 58 mm, 60 mm // ← Укажите реальный размер
GAP 2 mm, 0 mm // ← Укажите реальный зазор
DIRECTION 0
CLS
TEXT 50,50,"3",0,1,1,"Hello TSPL!"
TEXT 50,100,"3",0,1,1,"Test Print"
TEXT 50,150,"2",0,1,1,"Size: 58x60mm"
PRINT 1
''';
await _printersManager.printTsplRawData(
_selectedPrinter!,
Uint8List.fromList(tsplCommands.codeUnits),
203, // 203 DPI
);
}A: Большинство TSPL принтеров - 203 DPI. Проверьте в характеристиках или отправьте команду SELFTEST.
A: TSPL требует одинакового размера. Используйте рулоны с одним размером этикетки.
A: Да, выполните калибровку принтера (зажмите FEED при включении). Но в коде всё равно нужно указать правильный SIZE.
A: Проверьте:
- Датчик GAP чистый и не закрыт
- Этикетки установлены правильной стороной
- Направляющие плотно прижаты к краям этикетки
- Выполнена калибровка принтера
✅ Главное правило: Размер в команде SIZE должен точно совпадать с физическим размером этикетки
✅ Самый популярный размер: 58mm x 60mm с зазором 2mm
✅ Проверка: Если принтер останавливается с ошибкой - скорее всего неправильный SIZE
✅ Калибровка: Зажмите FEED при включении для автоопределения размера
✅ Тестирование: Попробуйте стандартные размеры (40x30, 58x40, 58x60, 60x80, 100x100)