在线客服
  • |
  • 400-821-8800
  • |
  • 手机西域
    手机西域下载二维码

    开发者:西域智慧供应链(上海)股份公司

    版本:4.6.8

    扫一扫,下载西域客户端
    手机采购 移动办公
    iPhone Android
  • |
  • 快速下单
  • |
  • 我的西域
  • 控制DataMax指令打印DPL问题总结

    文/ 发布于2018-06-11 浏览次数:1462

      最近这几天在测试DataMAx-I-4208采用DPL[Developer Programm Language]指令方式进行遇到诸多问题.解决这个问题过程中也是不断打印测试得到验证.今天早上用程序批量打印发先DAtaMax打印出来的条码效果和ZeBar斑马没什么区别.有人也询问很多采用DPL打印细节问题 就此对C#控制DAtaMAx指令DPL打印条码中遇到问题进行总结一下.

      首先在讲遇到问题前搞明白我们要打印一个Code128格式的条码需要具体控制什么因素? 知道我们要在程序中要做什么 这很重要.DataMax发送DPL指令给打印机Code128条码:

      打印一条Code128条码通过串口通信向打印机DataMax发送DPL指令打印. 首先要建立串口连接,同时要知道DPL中关于Code128条码打印指令语法.剩下就是条码位置? 等细节调试问题. 具体总结如下:

      <1>DPL中打印Code128指令语法

      <2>DPL指令中控制BarCode和文本 宽度和高度

      <3>DPL设置条码打印在底板上初始位置X,Y

      <4>采用密尔值控制DPL中条码宽高比例.

      <5>Code128条码格式控制

      分析好问题,我们在项目采用是界面先建立打印模板:

      打印系统条码数据时指定不同的打印模板:

      后台程序自动解析打印模板和打印数据称DataMax支持的DPL指令方式 再发送给打印机批量打印.整个流程:

      在上一篇中C#控制DataMax打印机问题总结中提到.Code128基本打印指令:

      在DPL手册Code128基本能看到基础语法:

      L对应DPL语法特定打印标识头, 如果直接通过串口工具发送给打印机 则不执行 测试发现需要把转换成16进制ACII码格式.

      用来设置设置条码中平均的英寸范围内每个打印点宽度和高度. 类似打印DAtaMAx-i-4208对饮DPI203 则每英寸的打印点DOT 固定为8个,在DPL手册中设置语法:

      在说明我可以看出打印机为203DPI的Dot点设置默认为D22. DWH语法能够设置的值组合总共有6个.来调节条码宽度.

      第三行是核心打印条码的指令:

      如上清晰看出大概分为两部分. 前一部分是打印条码Code128格式字符串, 后面一部分则是条码中指定负载数据.其实如果你进一步深入会问: 不同条码间格式如何定义的?后来我翻遍整个DPL手册终于在一个小角落[150页]找到相关说明:

      对打印整个条码指令进行结构拆解:

      1E0000000150100 这端标识头字符串代表什么意思?继续进行拆解发现:

      这时是否有些彻底明白了吧那一段代码具体代表什么意思.如下我会演示用C#发送DPLCode 128打印条码.整个过程,.在上篇中C#控制DataMax打印机问题总结.提到标识指令头转换16进制问题.

      这时转换后16进制字符串,我们通过ASII16进制修改工具查看一下这个字符16进制码:

      经测试发现对应16进制码为: 3C 53 54 58? 3E? . ok 到此在C#程序把程序拼接时发现 把这些16进制发送给打印机依然无法识别.后来找到串口工具.发现文本中拷贝进入成功打印:

      发现DAtaMAx打印机识别则是转换16进制后指令字符是 ? ,既然有了有了 16进制编码我们进行反编译字符:

      经过对16进制编码进行反编译成字符发现最后一个16进制码3E对应就是打印识别特殊字符 . ok至此第一步让DataMAX打印机识别DPL指令.如下在来解决涉及BArcode 128在打印中涉及具体问题.

      首先来看如何在利用DPL指令方式控制BarCode在打印中初始位置X,Y: 在打印中如果想知道打印元素对应的方位坐标则需要知道目前打印机对坐标系统设置对应关系:

      打印机中不同的坐标系统.同一个元素所在坐标位置值则不同.类似坐标系统A中:条码对应XY坐标也不同:

      根据DPL中说明DAtaMAx坐标为A方案.那么如何来通过DPL指令来控制条码在纸带上初始位置? 在DPL文档中仔细研究发现设置BArCode初始位置属性时Row OffSet和Column OFFset 分别对应语法:

      基本语法为R0015,则设置在纸带上初始X坐标位置15点, 值的范围[0-9999],对应格式必须是4位数作为标识,Column Offset则基本雷同.不在赘述.添加了初始化位置DPL指令如下:

      从上可以看出对应初始坐标为X:y=44:15.程序中控制坐标位置格式000R:

      调用控制XY坐标:

      如下在关注条码宽度设置,在图一中我们对条码设置一个属性值叫密尔 即条码宽度单位.在测试ZeBar打印计算ZPL中计算宽度是每密尔对应0.25CM. 但是在DPL设置则不同,单一单位区域内打印点DOt数量是不变的,只有设置DOt的高度和宽度才能设置条码外在宽度效果.203DPI 对应每英寸8个点Dot. DPL如何来设置每个点的Width和Height:具体语法格式

      D11是默认值,针对300、400 600DPI打印机,DAtaMAx-i-4208的DPi为203,则对应的设置为D22. 在界面中密尔值范围8-17共10个值:

      10值范围对应可以设置的比例关系为6个: 分别为1:1 /1:2/1:3/2:1/2:2/2:3. C#中进行范围指定控制:

      如果采用默认的D11设置发现打印出来效果 总体条码宽度或高度过小.需要对条码宽高进行重新设置.在Code128语法命令有一段说明很重要:

      其中明确提到第四个字符用来设置条码宽度,从第五个字符串到第七位设置条码高度值. Height[0-999] C#则需要凭借字符串方式来组合DPL指令:

      至此从程序发给DAtaMAx最终打印DPL指令为:

      最终控制打印效果[居中设置]:

      最后关于如果在传入条码值时最好去掉 在指令中有时会把CR作为字符串打印条码数据中.

    免责声明:文章仅供学习和交流,如涉及作品版权问题需要我方删除,请联系我们,我们会在第一时间进行处理。
    相关标签:
    相关资讯
    沪公网安备 31011502008645号 | 沪ICP备09003861号 | 增值电信业务经营许可证:合字B2-20200044 | 第二类医疗器械经营备案编号:沪浦药监械经营备20200151号 | 医疗器械经营许可证编号:沪浦药监械经营许20200092号 | 互联网药品信息服务资格证书编号:(沪)-经营性-2020-0028 | 危险化学品经营许可证:沪(浦)应急管危经许[2022]204062(DYS)