Brother RJ3035B蓝牙热敏打印机打印一次后红灯闪烁故障求助
解决Brother RJ3035B打印后红灯闪烁故障的方案
核心问题分析
从代码和故障现象来看,问题主要出在打印流程不规范与参数配置不匹配,触发了打印机的错误保护机制:
- 端口过早关闭:打印任务未完成就调用
closeport,中断打印机内部处理流程 - 纸张尺寸配置与实际不符:代码中设置的100mm宽度可能超出打印机支持范围,触发传感器错误
- 缺少打印后复位/走纸命令:打印完成后未让打印机回到就绪状态
具体修复步骤
调整端口关闭时机,等待打印完成
Brother SDK的打印方法为异步执行,直接关闭端口会中断任务。建议通过SDK回调确认打印完成后再关闭端口,临时方案可添加延迟(优先推荐回调)。匹配实际纸张尺寸
RJ3035B常用热敏纸宽度为80mm,修改setup和sendcommand中的尺寸参数:
// 改为80mm宽度,高度根据实际收据长度调整 lib.setup("80", height: "140", speed: "14", density: "10", sensor: "1", vertical: "1", offset: "0") lib.sendcommand("SIZE 80 mm, 90 mm\r\n");
- 添加打印后走纸与复位命令
打印完成后发送走纸和复位命令,确保打印机回到就绪状态:
// 在printPDFbyFile之后添加 lib.sendcommand("FF\r\n"); // 走纸到页首 lib.sendcommand("ESC @\r\n"); // 复位打印机
- 正确查询打印机状态
将状态查询移到关闭端口之前,才能获取准确的错误信息:
// 调整执行顺序 self.cmd() // 查询状态 NSLog("%@",String.localizedStringWithFormat("%@", lib.printerstatus()! as CVarArg)) let data = lib.printerstatus() print(data?.hexDescription) // 最后关闭端口 lib.closeport(5)
修改后的完整代码示例
func printFinalPDF() { guard let pdfDoc = pdf_document else { let alert = UIAlertController(title: "提示", message: "请选择PDF文件", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "确定", style: .default)) present(alert, animated: true) return } let isOpen = lib.openportMFI("com.issc.datapath") guard isOpen == 1 else { print("端口打开失败") return } parseIndex() cmd() // 先查询状态再关闭端口 if let status = lib.printerstatus() { NSLog("%@", String.localizedStringWithFormat("%@", status as CVarArg)) print(status.hexDescription) } // 临时添加延迟等待打印完成(优先用SDK回调替代) DispatchQueue.main.asyncAfter(deadline: .now() + 2) { lib.closeport(5) print("端口已关闭") } } func parseIndex(){ let numSet = CharacterSet.decimalDigits let inputSet = CharacterSet(charactersIn: PDF_PAGE) if !PDF_PAGE.isEmpty { if numSet.isSuperset(of: inputSet) { PDF_PAGE_INT = Int(PDF_PAGE)! } else { PDF_PAGE = "0" PDF_PAGE_INT = 0 } } else { PDF_PAGE = "0" PDF_PAGE_INT = 0 } } func cmd(){ // 使用80mm宽度匹配常用热敏纸 lib.setup("80", height: "140", speed: "14", density: "10", sensor: "1", vertical: "1", offset: "0") lib.sendcommand("SIZE 80 mm, 90 mm\r\n"); if PDF_PAGE_INT == 0 { lib.printPDFbyFile(pdf_document, x: 0, y: 0, printer_dpi: 100) } else { lib.printPDFbyFile(pdf_document, x:0, y:0, printer_dpi:100, page_index:Int32(PDF_PAGE_INT)) } // 添加打印后走纸和复位命令 lib.sendcommand("FF\r\n") lib.sendcommand("ESC @\r\n") }
额外排查建议
- 检查打印机纸张传感器是否被灰尘遮挡,清洁传感器
- 确认蓝牙连接稳定,打印过程中未出现断连
- 尝试用Brother官方打印工具测试,排除硬件本身问题
内容的提问来源于stack exchange,提问作者arsh94deep
相关产品推荐
相关产品推荐

