从屏幕到纸带:收银系统的硬件集成实战
从屏幕到纸带:收银系统的硬件集成实战
老张的收银台上有四样东西:电脑、打印机、副屏、扫码枪。
以前,这四样东西各管各的。现在?收银员点一下"确认支付",四样东西同时响应。
01 小票:3秒自动出
支付成功后小票自动打印,支持58mm/80mm热敏打印机。ESC/POS指令直接发送,绕过Windows打印驱动。GBK编码兼容中文热敏打印机。
小票模板可在Web后台自定义(头部/底部/菜品样式/支付样式),实时预览。
跨平台打印策略
- Windows:Win32 Spooler API(P/Invoke
OpenPrinter→WritePrinter) - Linux/macOS:CUPS
lp命令
02 副屏:顾客看得清清楚楚
副屏状态机:Idle → Ordering → Paying → Paid → 自动5秒后回到Idle
| 状态 | 显示内容 |
|---|---|
| 待机 | 店铺名称 + “欢迎您” + 日期时间 |
| 点单中 | 实时菜品列表 + 合计金额 |
| 支付中 | 应付金额(大字体) |
| 支付成功 | “付款成功 ¥XX 元”,3秒后恢复待机 |
双模式:normal(文字信息)和 led(Canvas绘制7段数码管模拟LED)。
03 LED客显:8位数码管
通过SerialPort(COM1, 2400波特率, 8N1)控制物理LED客显。EPSON客显指令集兼容。
指令集:清屏、显示金额(8位右对齐)、亮度控制(4级)、硬件复位、隐藏/显示。
04 语音播报
| 平台 | 命令 | 语音 |
|---|---|---|
| macOS | say -v Tingting {text} |
中文女声 |
| Windows | PowerShell SAPI.SpVoice.Speak() |
系统默认中文语音 |
播报场景:收款成功、混合收款成功、收款失败、核销成功。异步执行,不阻塞UI。
05 技术实现:并行联动
var tasks = new List<Task>
{
_printerService.PrintReceiptAsync(orderId),
_secondaryScreenService.ShowPaidAsync(amount),
_ledDisplayService?.DisplayAmountAsync(amount),
_voiceService.SpeakPaymentSuccess(channel, amount),
};
await Task.WhenAll(tasks);
Task.WhenAll 并行触发所有硬件响应,任何一项失败不影响其他项。
06 总结
收银系统的硬件集成,不是"能不能做"的问题,而是"能不能同时做"的问题。小票、副屏、LED、语音——四个硬件,一个触发点,同时响应。
收银员做最少的操作,系统做最多的响应。
下期预告:《单机也安全:7个中间件守护的收银系统》