惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
Malwarebytes
Malwarebytes
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
F
Future of Privacy Forum
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
A
Arctic Wolf
S
Securelist
K
Kaspersky official blog
S
Schneier on Security
T
ThreatConnect
T
Tenable Blog
Spread Privacy
Spread Privacy
T
True Tiger Recordings
AWS News Blog
AWS News Blog
F
Fox-IT International blog
量子位
T
Threatpost
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
U
Unit 42
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
小众软件
小众软件
A
About on SuperTechFans
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
美团技术团队
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog

博客园_首页

2026第四届LitCTF网络安全挑战赛Pwn的wp 断尺问题:戴德金分割现实悖论 给句子做个“语义审计”:从词向量到句子向量的方法论 当AI“卡壳”在生产环境:MCP Server 如何帮我们破局 ofdkit-harmony 0.2.0 发布:鸿蒙原生 OFD 阅读库,已上架 ohpm 有了AI测试工具,还需要掌握Playwright、Pytest、Selenium这些框架吗? 组织转型实录——我把传统研发团队改成AI驱动,踩了无数坑 为什么 AI Coding 难进生产环境?深入了解 Everything-Claude-Code ! 到底 TMD 用哪个: npm, pnpm, Yarn, Bun, Deno? 傻瓜, 当然用 npm 啦 上周热点回顾(5.18-5.24) [对比学习LangChain和MAF-04]针对消息的设计 TrueAsync Server 为 PHP 带来了原生的高性能 HTTP 服务器 规则漂移 帆软市场部为什么能成为高人效增长系统? 22. LangChain LCEL,用 | 串联AI的魔法语言 - 老陈说编程 完整学习LLM(二):大模型到底是什么 洛谷-P11942 [KTSC 2025] 重塑矩阵 题解 哈哈哈哈哈打不过我吧,没有办法我(vllm)就是这么强大! Hermes Edu Skills 从 170 到 188:一次中文教育 Agent Skill Pack 的工程化升级 一个外行,半年搞定机械臂:我的从0到1踩坑实录 新写了个直播录制工具,可录制抖音快手斗鱼直播 15天学会AI应用开发(一)搭建AI大模型应用开发环境 Childhood,23款童年卡牌游戏复刻 Github Copilot配置GPT5.5报错:'temperature' does not support 0.1 with this model. Only the default (1) value is supported. - Eric zhou 单曲循环 ClassIn 在 Linux 下无法播放音频 把 TeXstudio / LaTeX 工程交给 AI:texstudio-mcp 功能详解 .NET 8 Web开发入门(六):Blazor 全栈开发——告别 JavaScript 焦虑 别让 LLM 写文件:一套 Agent 进度跟踪的工程化范式 - BurningFish Qt Bridges for C# 深度技术解析 Multus 多网卡方案:IPVLAN 模式 被流量逼出来的架构:从一台服务器到云原生的 17 次蜕变 —— 集群、缓存、MQ、微服务、Docker、K8S 的前世今生 Claude Code安装全流程 Windows保姆级教程 awk 命令练习(从入门到进阶) Java + Spring实现Hermes Agent之龙虾、Skills、Mcp和沙箱代码执行环境思路 轨迹的蓝图:方程求解与交点计算 Agent新技术分享-Forge论文已被ACM接受 PowerMem 记忆系统的遗忘设计,从神经元到代码工程 我用了FastApiAdmin后,连夜把踩过的坑都整理出来了 一个程序员眼中的 AI 核心概念,讲透 LLM 、Agent 、MCP 、Skill 、RAG... 网络安全在线就能打的内网靶场推荐 & Dawn Breaker 单域靶场 WP CTF 中如何用提示词发挥大模型的最大实力:从聊天助手到大手子 PyTorch KernelAgent 源码解读 ---(6)--- Composer 高光谱拼接算法(一)扫推式成像和航带拼接算法 一文看懂fofa常用语法,告别混淆,精准打击! 从零搭建量化投资系统:用 Qlib 一行代码搞定均线分析 企业 AI 落地,第一件事不是买模型,而是建好企业知识库 如何在Oracle Agent Factory中配置国内厂商的LLM? Codex 换模型太麻烦?这个开源桌面工具帮你一键切换 Avalonia中的动画 2026软考|十大管理超全通俗笔记,备考闭眼记! rv1126b内置phy接hub交换机芯片 React 可拖拽列宽 + 点击行选中 ProTable 封装笔记 五大实锤证据:AI不会终结低代码,只会倒逼技术进化 【硬核脑洞】16位实模式最后的疯狂:我们能否在 640KB 常规内存里手搓一个 MD 模拟器? 基于.Net的NetCoreKevin框架中AgentFramework实现AI智能体Skill和工具动态管理和加载 PostgreSQL 高可用集群 patroni 自动故障转移测试 自己使用C++开发的仿OpenClaw、Hermes智能体工具 记一次 .NET 某集群管理软件 内存暴涨分析 StarBlog番外(5) 从1.6到1.10,基于Avalonia AOT 开发的 Publisher 半年进化之路 Anthropic 把 SOC 误报率从 33% 砍到 7%,真正在干活的不是 Claude SM2演示所有 PEM 功能(生成、加解密、签名/验签) 用 Solon AI 从零构建 MCP 工具服务:让 AI Agent 拥有真实世界的能力 完整学习LLM(一):为什么我要系统学习大模型 Agent Harness Runtime 架构深度解析:工具循环、状态外置与长程任务调度 [对比学习LangChain和MAF-03]完全不同的Agent设计哲学 毫不夸张地说,这将是目前最全的AI测试教程!测试必看! AI Coding 为什么选择 TUI ,前端的新机会在哪里? 无需安装cc switch,10行命令帮你配置Claude Code+deepseek Context Engineering 到 Harness Engineering —— 大模型时代软件工程的新范式 OpenClaw.NET 兼容性目录指南(Compatibility Catalog) Nginx 上游健康检查插件 nginx-healthcheck-module 三角形数 AScript异步执行与await关键字 - rockey627 Vector Quantization for Recommendation 笔记 21. “|”不只是按位或,90%的人不知道 这 3 年做教育相关项目,我把一些经验整理成了一个开源 Agent Skills 项目 2026 西安本土 GEO 测评:灵怡云凭差异化站稳第一梯队 PortSwigger SQL注入LAB7 & LAB8 & LAB9 Splay 学习笔记 这款爆款激光粒度仪凭何全球狂销5000台?揭秘百特Bettersize2600“常青树”背后的硬核实力 十分钟学习 TypeScript 【学习笔记】《Python编程 从入门到实践》第1章学习笔记:Python环境搭建与Hello World(完整版) 初试 vibe coding:Tauri + React + Rust 构建的 windows 本地番茄钟 从 Vibecoding 入门,到 Agent 差点入土 IDEA Maven 手动替换第三方Jar包完整教程 填充与积累:积分与面积的可视化 告别 Django Admin!这个 NodeJS 全栈框架让你在 DTO 中直接配置 Table/Form 渲染 重建 AI 认知第 1 篇:基础认知——一张地图看懂 AI Landscape VAPD AgentKit:可组合 Agent 前端通用库实践 SolonCode v2026.5.21 发布,Web 能看项目,IM 能找队友 从 LangGraph 回到 Model-Tool Loop:更聪明的模型,正在让 Agent 架构重新变简单 从人工同步到自动闭环:跨 Java/.NET 代码转换工具的工程化实践 你的显卡能跑多少算子?用 55 个检查项,给 PyTorch GPU 环境做一次冒烟测试 Claude Code 快速开始 2分钟搞定全网巡检:一个脚本+五大必备 Python 库,让你一天干别人一周的活 最近面完 30 个想转 AI 测试的人,我麻了:80% 都踩了这 4 个坑! 4.3、多体交叉存储器、Cache的基本原理、相联存储器、 Cache地址映射与变换方法 简译项目的项目落地 OpenClaw Dreaming 记忆流水线底层架构:状态分层、证据留痕与检索回流
聊一聊 MES系统如何实现多种标签打印并支持不同打印机
AX-MES · 2026-05-25 · via 博客园_首页

主页

在实际生产过程中,同一道工序往往需要打印多种规格的标签,例如彩盒标签与卡通标签。这些标签的格式和纸张规格通常不同,而纸张规格的差异也意味着需要使用不同的打印机。为此,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<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通过打印服务将需要打印的内容传递给打印机,完成打印。

 112233

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