聊一聊 MES系统如何实现多种标签打印并支持不同打印机

在实际生产过程中,同一道工序往往需要打印多种规格的标签,例如彩盒标签与卡通标签。这些标签的格式和纸张规格通常不同,而纸张规格的差异也意味着需要使用不同的打印机。为此,MES 系统通过全局监听打印任务,并支持针对不同打印任务灵活配置对应的打印机,从而实现高度可配置的打印管理。所有打印数据均来源于服务端,模板文件中仅需定义变量即可。

1.制作模板文件,这里需要用到bartender软件,模板做成什么样,MES打印出来就是什么样子,MES负责将真实的数据放进模板里面打印出来。

2.创建打印服务程序,用来监听客户端的打印请求,关键代码如下:

复制代码
using ax_mes_print.Model;

namespace ax_mes_print.Service;

public class CartonPrintService : IPrintService
{
    private readonly HttpHelper _httpHelper;
    private readonly ILogger<CartonPrintService> _logger;
    private readonly BartenderLabelHelper _bartenderLabelHelper;
    private const string folderName = "Carton";

    public CartonPrintService(HttpHelper httpHelper, ILogger<CartonPrintService> logger, BartenderLabelHelper bartenderLabelHelper)
    {
        _httpHelper = httpHelper;
        _logger = logger;
        _bartenderLabelHelper = bartenderLabelHelper;
    }

    public async Task<PrintResponse> ExecutePrintAsync(string printParameter)
    {
        var requestParameter = DeserializePrintRequest(printParameter);

        if (requestParameter == null)
        {
            return PrintResponse.Error("打印参数有误!");
        }
 

        if (string.IsNullOrWhiteSpace(requestParameter.CartonSN))
        {
            return PrintResponse.Error("卡通箱号不能为空!");
        }

        var LabelTemplateInfoList = await QueryLabelTemplateInfoAsync(requestParameter.ProductCode);

        if (LabelTemplateInfoList.Count == 0)
        {
            return PrintResponse.Error("未找卡通模板文件,请先上传!");
        }

        var cartonDataData = await QueryCartonDataAsync(requestParameter.CartonSN);

        if (cartonDataData == null || cartonDataData.Item2.Length == 0)
        {
            return PrintResponse.Error("未找到卡通数据,打印失败!");
        }

        var directory = FileHelper.CreateOrDeleteFolder(folderName);


        foreach (var item in LabelTemplateInfoList)
        {
            await _httpHelper.DownloadFileAsync(item.AccessUrl, folderName, item.FileName);

            var printReuslt = _bartenderLabelHelper.BartenderPrint(SetPrintName(requestParameter.PrintName), Path.Combine(directory, item.FileName), cartonDataData.Item1, cartonDataData.Item2);
            if (printReuslt != string.Empty)
            {
                return PrintResponse.Error(printReuslt);
            }
        }

        return PrintResponse.Success("打印命令发送成功,请查看打印机!");
    }

    private CartonPrintWebSocketRequest? DeserializePrintRequest(string printParameter)
    {
        if (string.IsNullOrWhiteSpace(printParameter))
        {
            return null;
        }

        var request = JsonConvert.DeserializeObject<CartonPrintWebSocketRequest>(printParameter);

        if (request is null)
        {
            return null;
        }

        return request;

    }

    private async Task<CartonDataData> QueryCartonDataAsync(string cartonSN)
    {
        var queryCartonDataResponse = null;

        return queryCartonDataResponse.Data;
    }

    private async Task<List<LabelTemplateInfo>> QueryLabelTemplateInfoAsync(string productCode)
    {
        var queryLabelTemplateInfoResponse = null;

        return queryLabelTemplateInfoResponse.Data;
    }

    
}

3.启动 MES 打印服务,该服务程序会监听客户端的打印请求,然后将打印任务传递给打印机。

4.在 MES 里面启动连接打印机,根据打印内容不同可以选择不同的打印机,如果忘了选择打印机,则系统以默认打印机为准.

如图所示,我们在配置页面根据不同的打印类型设置了不同的打印机,当页面显示已连接的时候,MES通过打印服务将需要打印的内容传递给打印机,完成打印。

大家如有更好的方案,欢迎一起讨论!!

相关推荐
摩尔元数3 天前
2026年汽车内饰工厂选MES,厂商推荐
mes
️公子4 天前
从经验到程序:线束制造数字化的组装工作台、CAD 与轻量 MES 架构拆解
智能制造·cad·数字化转型·mes·线束·工业软件
mesyinjinghan6 天前
半导体 MES 的批次管理与 WIP 在制品追踪:怎么落地才不乱
半导体·mes·半导体mes
长三角智造观察8 天前
汽配零部件工厂上 MES有核心要求?
智能制造·数字化转型·erp·mes
CORNERSTONE3659 天前
物料编码、BOM层级、工艺路线,制造数据到底先建哪个?
bom·mes·制造业数字化·物料编码
CORNERSTONE36510 天前
低代码开发有哪些应用场景?
低代码·excel·erp·mes·企业数字化
m0_6829332113 天前
新能源扁线定子全自动产线:工业 RFID 闭环管控落地实践(附选型与流程设计)
智能制造·mes·自动化产线·工业 rfid·产线追溯·扁线电机·产线数字化
慧都小妮子14 天前
三菱老 PLC 如何接入新 MES?DxpSERVER 统一采集多代 MELSEC 数据
三菱plc·opc ua·mes
优德普ERP数字化17 天前
AI+QMS+MES落地化工设备制造追溯:对象、事件、接口和审核怎么组织
大数据·qms·mes·优德普·针孔检测·化工设备质量追溯·搪玻璃反应釜
BestHeaker19 天前
制造业 MES 开发入门:和互联网业务开发的 5 个本质差异(一)
数据库·经验分享·制造业·mes