Python 二次开发金橙子打印软件:开启高效打印新旅程

news2024/9/24 4:59:01

目录

一、准备工作:搭建系统环境

二、二次开发流程详解

结合一个实例来讲解如何进行二次开发。

三、Python 二次开发关键要素

(一)源码示例与解读

(二)二次开发文档指引

四、问题汇总与解决方案

(一)python 与 dll 位数不统一问题

(二)其他常见问题


一、准备工作:搭建系统环境

在进行 Python 二次开发金橙子打印软件之前,首先需要搭建好合适的系统环境。WIN7 32 位系统为整个开发过程提供了稳定的运行平台。python 3.8.8 32 位版本可以从https://www.python.org/downloads/windows/进行下载安装。

MarkEzd.dll 32 位文件在二次开发中起着至关重要的作用,它是连接 Python 程序与金橙子打印软件的关键桥梁。Ezcad2 软件则是整个打印系统的核心,提供了丰富的打印功能和设置选项。而 lmc1 控制卡更是不可或缺,没有它将无法进行打印,并且会提示无法找到加密狗。

另外,值得一提的是,ctypes 库作为 Python 自带的库,无需额外安装,为开发者省去了不少麻烦。它能够帮助我们在 Python 中调用 C 语言函数,实现与底层硬件的交互,为二次开发提供了强大的支持。总之,搭建好这些系统环境是进行 Python 二次开发金橙子打印软件的基础和前提。

二、二次开发流程详解

下面我们结合一个实例来讲解如何进行二次开发。

客户要求在一个矩形工件中心加工一行文本,每个工件要加工的文本都必须从网络服务器上去在线查询获得。

客户要求在一个矩形工件中心加工一行文本,每个工件要加工的文本都必须从网络服务器上去在线查询获得。

用户进行二次开发的一般步骤如下:

1.先用 ezcad2 创建一个模板文件 test.ezd,接着新建一个文本对象,将其命名为“name”。随后调整文本大小、位置以及加工参数,以达到客户要求的加工效果。此时保存文件并退出 ezcad2。

2.编写专用软件调用 MarkEzd.dll 动态链接库。

  • 第一步:动态加载 MarkEzd.dll。

HINSTANCE hEzdDLL = LoadLibrary(_T("MarkEzd.dll"));

  • 第二步:获取将要调用的 DLL 中函数的指针。

lmc1_Initial = (LMC1_INITIAL)GetProcAddress(hEzdDLL, _T("lmc1_Initial"));

lmc1_Close = (LMC1_CLOSE)GetProcAddress(hEzdDLL, _T("lmc1_Close"));

lmc1_LoadEzdFile = (LMC1_LOADEZDFILE)GetProcAddress(hEzdDLL, _T("lmc1_LoadEzdFile"));

lmc1_Mark = (LMC1_MARK)GetProcAddress(hEzdDLL,_T("lmc1_Mark"));

lmc1_ChangeTextByName = (LMC1_CHANGETEXTBYNAME)GetProcAddress(hEzdDLL, _T("lmc1_ChangeTextByName"));

  • 第三步:使用函数指针调用 DLL 中的函数以实现相应功能。
    • 1)初始化 lmc1 控制卡:lmc1_Initial()
    • 2)打开 test.ezd:lmc1_LoadEzdFile(_T("test.ezd"))
    • 3)从网络服务器上在线查询获取要加工的文本(需用户自行编写此部分程序)。
    • 4)更新并更改指定名称的文本对象的文本内容。
    • 5)调用 lmc1_Mark 进行加工。
    • 6)若还需加工,则返回第 3 步继续。
    • 7)关闭 lmc1 控制卡:lmc1_Close()
  • 第四步:

        调用 Windows API 函数释放动态链接库。

FreeLibrary(hEzdDLL);

调节激光输出功率。首脉冲抑制输出信号也是 TTL 信号,有两种输出方式,通过 EZCAD 打标软件中参数 “激光器类型” 来设定工作方式。扩展轴控制信号可输出两路方向 / 脉冲信号,用于控制两个扩展轴,可连接步进驱动器或提供方向 / 脉冲信号接口的伺服驱动器。数字输入 / 输出信号中,控制卡提供了 5 路输入信号和 2 路输出信号,其中一路输入信号为 “开始” 信号,可通过脚踏板等外部组件提供,输出端口 0 恒为高电平,输出端口 1 在加工开始时变为高电平,加工结束后变为低电平。

三、Python 二次开发关键要素

(一)源码示例与解读

以下是通过 Python 实现物联网金橙子自动打标案例中的完整代码

import ctypes
import os
# 定义ezcad2 DLL路径和ezd文件路径
script_dir = os.path.dirname(os.path.realpath(__file__))
ezd_dll_path = os.path.join(script_dir, 'MarkEzd.dll')  # 替换为实际的MarkEzd.dll路径
ezd_file_path = os.path.join(script_dir, 'hi.ezd')  # 替换为实际的ezd文件路径
# 加载DLL
try:
    ezd_dll = ctypes.CDLL(ezd_dll_path)
except OSError as e:
    print(f"无法加载DLL: {e}")
    # exit()
# 定义通用错误码
class ErrorCodes:
    LMC1_ERR_SUCCESS = 0
    # ... 其他错误码定义
# 初始化函数指针
lmc1_Initial = ezd_dll.lmc1_Initial
lmc1_Close = ezd_dll.lmc1_Close
lmc1_LoadEzdFile = ezd_dll.lmc1_LoadEzdFile
lmc1_Mark = ezd_dll.lmc1_Mark
lmc1_ChangeTextByName = ezd_dll.lmc1_ChangeTextByName
lmc1_RedLightMarkByEnt = ezd_dll.lmc1_RedLightMarkByEnt
# 设置函数参数类型
lmc1_Initial.argtypes = [ctypes.c_wchar_p, ctypes.c_bool, ctypes.c_void_p]
lmc1_Close.argtypes = []
lmc1_LoadEzdFile.argtypes = [ctypes.c_wchar_p]
lmc1_Mark.argtypes = [ctypes.c_bool]
lmc1_ChangeTextByName.argtypes = [ctypes.c_wchar_p, ctypes.c_wchar_p]
lmc1_RedLightMarkByEnt.argtypes = [ctypes.c_wchar_p, ctypes.c_bool]
# 调用DLL函数的辅助函数
def call_dll_function(func, *args):
    result = func(*args)
    if result != ErrorCodes.LMC1_ERR_SUCCESS:
        print(f"调用失败,错误码:{result}")
    return result
# 主函数
def main():
    # 假设ezcad2的安装路径
    ezcad_path = script_dir  # 替换为ezcad2.exe的实际路径
    # 初始化lmc1控制卡
    call_dll_function(lmc1_Initial, ezcad_path, False, None)
    # 加载ezd模板文件
    call_dll_function(lmc1_LoadEzdFile, ezd_file_path)
    # 从网络服务器获取要加工的文本内容
    # 这里需要您根据实际情况编写代码获取文本
    text_to_mark = "从服务器获取的文本"  # 示例文本
    # 更改ezd文件中名为'name'的文本对象的内容
    call_dll_function(lmc1_ChangeTextByName, "name", text_to_mark)
    # 开始打标加工
    call_dll_function(lmc1_Mark, False)
    # 关闭lmc1控制卡
    call_dll_function(lmc1_Close)
    print("加工完成")
if __name__ == "__main__":
    main()

这段代码首先创建了金橙子连接对象,进行板卡初始化连接。在循环扫描中,根据按钮触发或板卡硬件输入来激活操作流程,加载模板文件、替换对象内容、显示预览图像并进行标刻操作。如果标刻成功则输出相应信息,否则提示标刻异常。最后复位按钮触发标志位并设置系统扫描周期以减少 CPU 占用率。

(二)二次开发文档指引

二次开发文档的来源主要有官方渠道以及一些技术社区,如 CSDN 博客等。文档中详细介绍了二次开发的流程、关键函数的使用方法以及注意事项等重要内容。

例如,文档中强调了在进行二次开发之前,需要了解二次开发的流程原理。ApolloStudio 通过 SDK 直接接管激光打标板卡,与 EzCad2 软件不能同时运行。同时,文档还介绍了如何在 EzCad2 软件中进行编辑模板的操作,通过标记对象的对象名来找到对应对象,并可以对对象名称进行命名。对于图片的处理,文档指出目前不同尺寸格式来源的图片在 EzCad2 里面需要对图像的工艺参数进行定制才可达到令人满意的效果,尚不具备批量自动处理的能力,但可以通过创建多个模板进行替代。

此外,文档还对一些关键函数进行了详细说明,如lmc1_Initial、lmc1_Close、lmc1_SetDevCfg等函数的语法、参数和返回值等都有明确的解释,为开发者在进行二次开发时提供了详细的参考指南。

四、问题汇总与解决方案

(一)python 与 dll 位数不统一问题

当 python 的位数与 MarkEzd.dll 的位数不统一时,会出现诸如 “python 调用 C 程序异常 OSError: [WinError 193] %1 不是有效的 Win32 应用程序” 的错误。这是因为 python 的位数与 dll 的位数不一致,dll 是 32 位的,而把 python 安装成了 64 位。解决方案主要有两种:一是将 dll 编译成与当前 python 一致的位数,但这对于大多数开发者来说可能有一定难度;二是安装与 dll 位数相同的 python 版本。例如,如果 MarkEzd.dll 是 32 位的,那么就安装 32 位的 python。还可以通过创建 anaconda 虚拟环境来匹配 dll 的位数,具体步骤如下:

  1. 打开 Anaconda,填写环境名字,选择与 dll 位数一致的 python 版本,创建虚拟环境。
  2. 在命令行中进入虚拟环境,如 anaconda3 环境下使用conda activate 虚拟环境名称,anaconda2 环境下使用source activate 虚拟环境名称。

(二)其他常见问题

在二次开发过程中,还可能遇到以下常见问题及解决方法:

  1. 初始化 lmc1 控制卡报错:在程序中必须首先调用lmc1_Initial,但有时会出现报错情况。比如,第一次初始化就报错误码,可能是路径问题。如果实际存在文件却报错,可能是路径必须是 unicode 编码,可以使用_T("")进行转换。
  2. 无法加载MarkEzd.dll:可能是目标平台设置错误,处理方式是将目标平台改成 X86。也可能是程序放置位置问题,将自己写的程序直接放在原程序的根目录下可能会解决问题。此外,还可能是因为找不到加密狗,这种情况预示着本地无法调试,只能将程序打包放在打标机的电脑上才能测试。
  3. 提示无法找到指定模块:如 “无法加载 DLL‘MarkEzd.dll’: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)”。可以尝试将MarkEzd.dll这个 dll 放到程序生成的.exe 同级的目录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2159359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HTML5】html5开篇基础(2)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

Spring Boot 学习之路 -- 配置项目

前言 最近因为业务需要,被拉去研究后端的项目,代码基于 Spring Boot,对我来说完全小白,需要重新学习研究…出于个人习惯,会以 Blog 文章的方式做一些记录,文章内容基本来源于「 Spring Boot 从入门到精通&…

【一起学NLP】Chapter2-学习神经网络

目录 学习神经网络损失函数Tip:One-hot向量导数与梯度Tip:严格地说链式法则计算图反向传播其他典型的运算结点乘法结点分支节点Repeat节点Sum节点MatMul节点 Tip:浅拷贝和深拷贝的差异梯度的推导和反向传播的实现Sigmoid层Affine层Softmax with Loss层 权重的更新——随机梯度下…

[PICO VR]Unity如何往PICO VR眼镜里写持久化数据txt/json文本

前言 最近在用PICO VR做用户实验,需要将用户实验的数据记录到PICO头盔的存储空间里,记录一下整个过程 流程 1.开启写入权限 首先开启写入权限:Unity->Edit->Player->安卓小机器人->Other Settings->Configuration->Wri…

大数据毕业设计选题推荐-网络电视剧收视率分析系统-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

数据库主备副本物理复制和逻辑复制对比

数据库主从节点的数据一致性是保证数据库高可用的基本要求,各个数据库在实现方式上也各有异同。而主备复制的方式无外乎两种:物理复制和逻辑复制,本文简要对比下两种方式的不同,并分析下国产数据库是如何实现的。 1、数据库复制基…

中国中车在线测评考的啥?大易题库如何通过|附真题型国企题库通关秘籍和攻略

言语理解题目:这类题目主要考察你的语言理解和表达能力,例如,给你一个段落,让你根据段落内容选择最合适的答案。要点是快速捕捉文段中的关键信息,理解作者的意图和观点 逻辑推理题目:这类题目需要你从一组…

Java面试篇基础部分- 锁详解

可重入锁 可重入锁也叫作递归锁,是指在同一个线程中,在外层函数获取到该锁之后,内存的递归函数还可以获取到该锁。在Java语言环境下,ReentrantLock和Synchroinzed都是可重入锁的代表。 公平锁与非公平锁 公平锁(Fair Lock)是指在分配锁之前检查是否有线程在排队等待获取…

CICD从无到会

一 CICD是什么 CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery) 1.1 持续集成(Continuous Integration) 持续集成是…

【每天学个新注解】Day 4 Lombok注解简解(三)—@NonNull

我们在之前的三天学了Lombok常用的注解: 【每天学个新注解】Day 1 Lombok注解简解(〇)—Getter、Setter、ToString、EqualsAndHashCode、Constructor 【每天学个新注解】Day 2 Lombok注解简解(一)—Data、Build、Value…

【威领,德新,中达安】9.23复盘

威领这次的底部是4个月 所以这种跳空高开,远离5日均线的,如果不是近期的利好板块,那么第二天可能要回调5日均线。所以按照我的收益准则,吃一个板可以出一半了。 到顶部十字剩下一半也出掉了。 如果做长期,我依旧认为威…

git学习报告

文章目录 git学习报告如何配置vscode终端安装PowerShell安装 Microsoft.Powershell.Preview使用 git的使用关于团队合作 git指令本地命令:云端指令 git学习报告 如何配置vscode 安装powershell调教window终端,使其像Linux一样,通过Linux命令…

C语言初识(一)

目录 前言 一、什么是C语言? 二、第一个C语言程序 (1)创建新项目 (2)编写代码 (3)main函数 三、数据类型 四、变量、常量 (1)变量的命名 (2&#x…

mysql复合查询 -- 合并查询(union,union all)

目录 合并查询 介绍 表数据 union 使用场景 ​编辑 示例 union all 合并查询 介绍 它不像笛卡尔积那种,将行信息做乘法 合并只是单纯地合在一起求的是两个结果集的并集,并且会自动去掉并集中的重复行 注意,因为是求并集,会将两个结果进行拼接 所以要保证列信息相同 表…

13.第二阶段x86游戏实战2-动态模块地址

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要…

基于Python+SQLServer实现(界面)书店销售管理管理子系统

书店销售管理管理子系统 一、设 计 总 说 明 现在社会随着计算机技术迅速发展与技术的逐渐成熟,信息技术已经使人们的生活发生深刻的变化。生活中的各种服务系统也使人们在生活中的联系日常销售活动方式发生了很大的变化,让效率较低的手工操作成为过去…

大数据新视界 --大数据大厂之 Reactjs 在大数据应用开发中的优势与实践

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【Perf调测】

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 Perf为性能分析工具,依赖PMU(Per…

UE学习篇ContentExample解读-----------Blueprint_Mouse_Interaction

文章目录 总览描述(Blueprint_Mouse_Interaction)阅览解析1、PlayerControler分析2、拖拽球蓝图分析:3、移动的立方体分析: 新概念总结致谢: 总览描述(Blueprint_Mouse_Interaction) 打开关卡后…

MySQL tinyint(1)类型数据在经过flink cdc同步到doris后只有0/1问题定位与解决

背景: 近期在负责公司数据仓库搭建事宜,踩了一些坑后,终于通了,目标报表也成功迁移到了新方案上,可在数据验收的时候发现,同一个订单查询出了多条记录,原本以为只是简单的left join出多条记录问…