LabVIEW集成“打印精灵”实现条码打印
LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国National Instruments公司开发的图形化编程环境,广泛应用于测试、测量和控制领域。
在实际工业应用中,常需实时打印产品条码,包装标签,检测结果等各类标签,用于产线的自动控制、物流追踪,质量控制。 但是使用LabView内置打印功能打印条码标签很不方便,技术开发难度大,容易出现文字错位、条码不合规,甚至二维码不能扫描识别等问题,在要求较高的医药、汽车零件生产等领域,集成专业的条码打印工具往往是更好的方案。
因此,有客户问是否可以利用打印精灵专业的标签设计、条码打印能力,开发LabView标签打印程序?
答案是肯定的!
打印精灵(Spirit系列软件) 提供了丰富的API,适合多种业务场景。其中REST API接口和 C DLL 可以用于LabView集成, 将LabVIEW的强大控制能力与专业标签软件的设计能力、标签打印能力结合,实现产业流水线中复杂标签的打印。
该方案的优点显而易见:
- 简化LabVIEW程序开发。将打印精灵的功能封装成LabView的子VI,使用时无需关注细节,直接引用子VI即可。你可以自己封装,也可联系技术支持获取我们的封装。
- 专业合规、支持复杂标签:标签可以包含文字,图标,表格,条形码,二维码等任意元素,支持GS1-128, GS1-Datamatrix等工业界使用的专业条码。无需编码,通过打印精灵的标签设计器,点点鼠标即可设计非常专业的条码标签,详见参考说明。
- 标签与程序解耦。更新标签格式,只需通过打印精灵设计器调整模板布局,无需修改LabVIEW代码,可显著降低人工操作错误。显著提升生产自动化、物流追踪及质量管理等场景的效率。
- 打印机与程序无关。可以支持斑马兼容的ZPL协议打印机, TSC公司兼容的TSPL协议打印机,也可支持windows打印机。更换打印机,无需修改LabView代码。这给业务管理带来了方便,比如开始可以选择廉价打印机,在业务增长后更换高速打印机。
使用前提
- 安装打印精灵软件(任选其一),可以到这里下载:
- 打印精灵桌面版(SpiritDesktop)
- 打印精灵中心版(SpiritCenter)
- 在打印精灵中预先设计好标签模板,并保存。标签中可以包含变量,在LabView调用时送入,实现可变数据打印。
注意:LabVIEW连接方式根据所选打印精灵版本不同而有所区别。
方案一:连接SpiritCenter(REST API方式)
SpiritCenter提供基于HTTP协议的REST API,LabVIEW通过HTTP请求节点调用打印服务。
配置步骤
-
启动SpiritCenter服务
确保SpiritCenter在服务器后台运行,默认监听端口9011
, 获取服务器IP地址。 -
LabVIEW端HTTP请求配置
-
创建HTTP连接 在LabVIEW的后面板中,导航到 数据通信 -> 协议 -> HTTP客户端, 使用 POST VI 打开一个HTTP POST连接。
-
配置POST请求 在 URL 输入框中填写目标地址(
http://服务器IP:9011/print
)。 在 Body 输入框中填写要发送的数据。 -
解析响应数据 通过 Response Body 获取返回值,并使用 JSON解码 VI 解析处理错误。
关键要点
打印精灵的REST API,采用JSON格式传输数据,因此在LabView里调用HTTP服务的核心是如何构建正确的 JSON数据, 以及如何解析JSON返回数据。
JSON格式,详见PrintSpirit HTTP RSET API 文档, 这里不再赘述。
LabView 2019版本以后,内置Json解码,Json编码函数,可以将簇转换为JSON(用于发送数据)或将JSON解析为簇(处理返回数据)。
发送数据=>JSON
发送数据包括labelID, 变量,打印机参数选项。
变量的需要和标签模板匹配,打印参数(打印机名称、纸张、打印方向等,打印机名称必填)也不固定,为此,本方案采用LabView簇数组承载,方便数据传输和转换。簇格式为name-value,可以定义为公共的结构,并保存为kv.ctl,便于不同VI调用时引用.
下图展示了变量和打印参数处理程序。变量可以手工输入,更多情况应该是配合其他LabVIEW流程在生产线上采集数据。
数据通过
Boudle By Name
函数打包成需要的簇格式,然后再通过Flatten To JSON
函数转换为JSON作为 POST VI的输入。
![]()
返回JSON=>错误簇
错误处理非常关键,应检查JSON返回信息,并转换为LabView的标准错误簇。加入LabView 的标准错误处理流程。
返回JSON格式为, {"rc": ERR/OK, "msg": "错误信息"}
, 通过 Unflatten From JSON
节点,将返回数据转换为簇,
再通过Unboudle By Name
, 拆分成单个值。使用一个条件结构,当rc不为OK时,表示错误,设置msg。
方案二:连接SpiritDesktop(DLL方式)
SpiritDesktop提供动态链接库(DLL),LabVIEW通过Call Library Function Node(CLFN)节点调用DLL函数直接驱动本地打印机。
配置步骤
- 获取DLL文件
请联系技术支持,获取libspirit.dll
。
注意:DLL分32位和64位两种版本,务必根据LabView版本选择正确的版本。
-
LabVIEW调用DLL函数
使用 Call Library Function Node 调用以下函数:1int PrintA( 2 const char* tpid, // 模板ID(非文件路径) 3 const unsigned char* vars, // 变量JSON字符串 4 const unsigned char* opts // 选项JSON字符串 5);
返回值处理:
≥0
: 成功,返回任务ID<0
: 失败,需调用CLFN节点调用DLL的GetSpiritErrorGBK()
获取错误详情
-
输入打包和错误处理。
整体上和网络方式类似,不再赘述。直接上图,一看就懂。

最佳实践:建议将打印操作封装为独立子VI,通过
tpid
,vars
,opts
三个输入参数控制打印行为,提高代码复用性。
使用Spirit-LabVIEW-toolkit
根据上面的步骤,我们封装了一个LabView的工具,包括通过SpiritCenter, SpiritDesktop连接打印的VIs, 如有需要可以联系技术支持获取。