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


     

    主页

     

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

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

    模板1

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

    复制代码
    using ax_mes_print.Model;
    
    namespace ax_mes_print.Service;
    
    public class CartonPrintService : IPrintService
    {
        private readonly HttpHelper _httpHelper;
        private readonly ILogger _logger;
        private readonly BartenderLabelHelper _bartenderLabelHelper;
        private const string folderName = "Carton";
    
        public CartonPrintService(HttpHelper httpHelper, ILogger logger, BartenderLabelHelper bartenderLabelHelper)
        {
            _httpHelper = httpHelper;
            _logger = logger;
            _bartenderLabelHelper = bartenderLabelHelper;
        }
    
        public async Task 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(printParameter);
    
            if (request is null)
            {
                return null;
            }
    
            return request;
    
        }
    
        private async Task QueryCartonDataAsync(string cartonSN)
        {
            var queryCartonDataResponse = null;
    
            return queryCartonDataResponse.Data;
        }
    
        private async Task> QueryLabelTemplateInfoAsync(string productCode)
        {
            var queryLabelTemplateInfoResponse = null;
    
            return queryLabelTemplateInfoResponse.Data;
        }
    
        
    }
    复制代码

      

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

    打印服务

     

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

    打印服务关闭

    打印服务连接失败

    打印服务已连接

     

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

     112233

     

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

     

  • 相关阅读:
    单元测试实战(四)MyBatis-Plus 的测试
    重生奇迹MU召唤术师攻略(重生奇迹MU召唤技能)
    动态规划:背包问题
    cpu的指令重排,禁用办法
    POE 供电iP网络音箱2*15W 教学广播音箱 办公室背景音乐广播音箱SV-7041
    Maxon Cinema 4D 2024:打造独一无二的视觉效果 模拟模块大更新
    Roson的Qt之旅 #135 在Qt中使用ActiveX控件和COM对象
    vue源码分析(一)——源码目录说明
    Apisix网关-使用Grafana可视化Apisix的Prometheus数据
    18——Swing程序设计
  • 原文地址:https://www.cnblogs.com/axmes/p/20153782