LabVIEW集成“打印精灵”实现条码打印


LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国National Instruments公司开发的图形化编程环境,广泛应用于测试、测量和控制领域。

在实际工业应用中,常需实时打印产品条码包装标签检测结果等各类标签,用于产线的自动控制、物流追踪,质量控制。 但是使用LabView内置打印功能打印条码标签很不方便,技术开发难度大,容易出现文字错位、条码不合规,甚至二维码不能扫描识别等问题,在要求较高的医药、汽车零件生产等领域,集成专业的条码打印工具往往是更好的方案。

因此,有客户问是否可以利用打印精灵专业的标签设计、条码打印能力,开发LabView标签打印程序?

答案是肯定的!

打印精灵(Spirit系列软件) 提供了丰富的API,适合多种业务场景。其中REST API接口和 C DLL 可以用于LabView集成, 将LabVIEW的强大控制能力与专业标签软件的设计能力、标签打印能力结合,实现产业流水线中复杂标签的打印。

该方案的优点显而易见:

  1. 简化LabVIEW程序开发。将打印精灵的功能封装成LabView的子VI,使用时无需关注细节,直接引用子VI即可。你可以自己封装,也可联系技术支持获取我们的封装。
  2. 专业合规、支持复杂标签:标签可以包含文字,图标,表格,条形码,二维码等任意元素,支持GS1-128, GS1-Datamatrix等工业界使用的专业条码。无需编码,通过打印精灵的标签设计器,点点鼠标即可设计非常专业的条码标签,详见参考说明
  3. 标签与程序解耦。更新标签格式,只需通过打印精灵设计器调整模板布局,无需修改LabVIEW代码,可显著降低人工操作错误。显著提升生产自动化、物流追踪及质量管理等场景的效率。
  4. 打印机与程序无关。可以支持斑马兼容的ZPL协议打印机, TSC公司兼容的TSPL协议打印机,也可支持windows打印机。更换打印机,无需修改LabView代码。这给业务管理带来了方便,比如开始可以选择廉价打印机,在业务增长后更换高速打印机。

使用前提

  1. 安装打印精灵软件(任选其一),可以到这里下载
    • 打印精灵桌面版(SpiritDesktop)
    • 打印精灵中心版(SpiritCenter)
  2. 在打印精灵中预先设计好标签模板,并保存。标签中可以包含变量,在LabView调用时送入,实现可变数据打印。

注意:LabVIEW连接方式根据所选打印精灵版本不同而有所区别。


方案一:连接SpiritCenter(REST API方式)

SpiritCenter提供基于HTTP协议的REST API,LabVIEW通过HTTP请求节点调用打印服务。

配置步骤

  1. 启动SpiritCenter服务
    确保SpiritCenter在服务器后台运行,默认监听端口 9011, 获取服务器IP地址。

  2. 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的输入。

LabVIEW-Spirit-Data LabVIEW-Spirit-Json打包

返回JSON=>错误簇

错误处理非常关键,应检查JSON返回信息,并转换为LabView的标准错误簇。加入LabView 的标准错误处理流程。

返回JSON格式为, {"rc": ERR/OK, "msg": "错误信息"}, 通过 Unflatten From JSON节点,将返回数据转换为簇, 再通过Unboudle By Name, 拆分成单个值。使用一个条件结构,当rc不为OK时,表示错误,设置msg。

LabVIEW-Spirit-Json打包


方案二:连接SpiritDesktop(DLL方式)

SpiritDesktop提供动态链接库(DLL),LabVIEW通过Call Library Function Node(CLFN)节点调用DLL函数直接驱动本地打印机。

配置步骤

  1. 获取DLL文件
    请联系技术支持,获取libspirit.dll

注意:DLL分32位和64位两种版本,务必根据LabView版本选择正确的版本。

  1. 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()获取错误详情
  2. 输入打包和错误处理。

    整体上和网络方式类似,不再赘述。直接上图,一看就懂。

LabVIEW-Spirit-DLL-call

最佳实践:建议将打印操作封装为独立子VI,通过 tpid, vars, opts 三个输入参数控制打印行为,提高代码复用性。


使用Spirit-LabVIEW-toolkit

根据上面的步骤,我们封装了一个LabView的工具,包括通过SpiritCenter, SpiritDesktop连接打印的VIs, 如有需要可以联系技术支持获取。


留言

登录