目录

第一章 FingerPrint条码打印机的指令控制集编程.... 3

1.1 编程说明... 3

1.2 条形码的打印... 3

1.3 汉字的打印... 5

1.3.1 RLL算法规格说明... 5

1.3.2 RLL buffer格式说明... 6

1.4 其他调试经验... 7


第一章 FingerPrint条码打印机的指令控制集编程

1.1 编程说明

1. 详细的编程指南请参阅文档:1-960582-07 Fingerprint PRM 8.70-10.0.pdf;

1.2 条形码的打印

下面给一个VB6实例说明EasyCoder系列条码打印机的FingerPrint指令编程控制条形码的打印:

'设置打印机可以接收DP指令,Statement enabling or disabling the Intermec Direct Protocol.

pCommand = pCommand & "INPUT ON" & vbCrLf

'清空数值内存,Statement clearing strings, variables, and arrays in order to free memoryspace.

pCommand = pCommand & "CLEAR" & vbCrLf

'清空图像内存

pCommand = pCommand & "CLL" & vbCrLf

'设置不允许 Enable/disable direct commands

pCommand = pCommand & "SYSVAR(48) = 0" & vbCrLf

'设置下面的打印机设置命令不保存在打印机的永久内存中

pCommand = pCommand & "SYSVAR(35) = 0" & vbCrLf

'设置纸张类型为传送式(热转移式)

pCommand = pCommand & "SETUP ""MEDIA,PAPER TYPE,TRANSFER""" & vbCrLf

pCommand = pCommand & "SETUP ""MEDIA,PAPER TYPE,TRANSFER,RIBBON CONSTANT,66""" & vbCrLf

'设置色带要素,0-50,设置值越大打印的墨色越深(黑),后面还有一个对墨色深度的微调设置

pCommand = pCommand & "SETUP ""MEDIA,PAPER TYPE,TRANSFER,RIBBON FACTOR,25""" & vbCrLf

pCommand = pCommand & "SETUP ""MEDIA,PAPER TYPE,TRANSFER,LABEL OFFSET,0""" & vbCrLf

'设置标签纸张类型为中间有Gap间距的标签纸

pCommand = pCommand & "SETUP ""MEDIA,MEDIA TYPE,LABEL (w GAPS)""" & vbCrLf

'开始打印和结束打印每个标签时的微调值,例如下面表示开始打印时把标签纸回卷100dot,约12.5mm(这样会影响打印速度,但不回卷就打印错位!)

pCommand = pCommand & "SETUP ""FEEDADJ,STARTADJ,-100""" & vbCrLf

pCommand = pCommand & "SETUP ""FEEDADJ,STOPADJ,0""" & vbCrLf

'设置条码纸卷大小,宽度和高度,以dot为单位,203dpi分辨率下,1mm=8dot

pCommand = pCommand & "SETUP ""MEDIA,MEDIA SIZE,WIDTH,832""" & vbCrLf

pCommand = pCommand & "SETUP ""MEDIA,MEDIA SIZE,LENGTH,160""" & vbCrLf

'微调打印机的墨色深度 -10%|-8%|-6%|-4%|-2%|+0%|+2%|+4%|+6%|+8%|+10%

pCommand = pCommand & "SETUP ""MEDIA,CONTRAST,+10%""" & vbCrLf

'设置打印速度为 100 mm/s 可以设置值:(5~15)*10

pCommand = pCommand & "SETUP ""PRINT DEFS,PRINT SPEED,50""" & vbCrLf

'Statement for enabling or disabling the label taken sensor.(好像是是否打开标签剥离器功能,自动撕下标签)

pCommand = pCommand & "LTS& OFF" & vbCrLf

pCommand = pCommand & "CLIP ON" & vbCrLf

pCommand = pCommand & "CLIP BARCODE ON" & vbCrLf

pCommand = pCommand & "LBLCOND 3,0" & vbCrLf

pCommand = pCommand & "OPTIMIZE ""BATCH"" ON" & vbCrLf

'打印一个条形码

pCommand = pCommand & "DIR 1" & vbCrLf

pCommand = pCommand & "ALIGN 7" & vbCrLf

pCommand = pCommand & "PRPOS 480,70" & vbCrLf

'pCommand = pCommand & "BARFONT ON" & vbCrLf

pCommand = pCommand & "BARFONT ""Swiss 721 BT"",8,0,8,1,1,100,2 ON" & vbCrLf

'pCommand = pCommand & "BARSET ""CODE128"",3,1,1,60" & vbCrLf

pCommand = pCommand & "BARTYPE ""CODE128""" & vbCrLf

pCommand = pCommand & "BARRATIO 3,1" & vbCrLf

pCommand = pCommand & "BARHEIGHT 50" & vbCrLf

pCommand = pCommand & "BARMAG 1" & vbCrLf

pCommand = pCommand & "PRBAR ""G110-01-023456-2005""" & vbCrLf

'打印文本字符信息

pCommand = pCommand & "DIR 1" & vbCrLf

pCommand = pCommand & "ALIGN 7" & vbCrLf

pCommand = pCommand & "PRPOS 30, 60" & vbCrLf

pCommand = pCommand & "FONT ""Swiss 721 BT"",8,0,100" & vbCrLf

pCommand = pCommand & "PRTXT ""G110-01-023456_84""" & vbCrLf

pCommand = pCommand & "PRINTFEED" & vbCrLf

i = FreeFile

'打开打印机端口,其中的”LPT1:”可能需要根据你的打印机设置而改变

Open "\\xm\EasyCode" For Binary Access Write As #i

'发送给打印机,注意语句的最后一个参数必须是变量

Put #i, , pCommand

'关闭打印机端口

Close #i

1.3 汉字的打印

汉字的打印需要使用FingerPrint指令集中的位图打印指令PRBUF,该指令只能接收RLL Buffer编码的图像数据,基本思路是把要打印的汉字先生成位图,然后利用该指令进行图像打印。下面着重对RLL图像编码算法进行说明。

1.3.1 RLL算法规格说明

<begin><toggling pixelruns><end> //RLL格式的整体结构由3部分组成

<- total width of RLL pattern ->

//<begin>结构体的内容只能2者选其1:要么重复行,要么小白点

<begin> := <linereps>|<small white pixelrun>

<end> := <begin>|<empty> //2者选其1

//<toggling pixelruns>结构体的内容只能4者选其1:要么白黑点,要么黑白点,要么白点,要么空

<toggling pixelruns> := <whiteAndBlack pixelruns>|<blackAndWhite pixelruns>|

<white pixelrun>|<empty>

//<whiteAndBlack pixelruns>白黑点结构体的内容只能2选1:要么白点接着黑点,要么小白点接着黑点

<whiteAndBlack pixelruns> := <white pixelrun><black pixelrun>|

<small white pixelrun><black pixelrun>

//<blackAndWhite pixelruns>黑白点结构体的内容只能是:黑点接着白点

<blackAndWhite pixelruns> := <black pixelrun><white pixelrun>

//<linereps>重复行结构体的内容是相同行的数量,取值范围:[1,128]

<linereps> := ((-1)-(-128))*-1 number of equal lines

//<small white pixelrun>小白点结构体的内容是连续白点的数量,取值范围:[0,127]

<small white pixelrun> := 0-127, number of white pixels

//<black pixelrun>黑点结构体的内容是连续黑点的数量,取值范围:[0,255]

<black pixelrun> := 0-255, number of black pixels

//<white pixelrun>白点结构体的内容是连续白点的数量,取值范围:[0,255]

<white pixelrun> := 0-255, number of white pixels

//<empty>空结构体的内容是空,当且仅当整行只有1个像素点的极端情况才适用

<empty> := empty, extreme if the entire line fits in one pixelrun.

If there is no line repetion, there does not have to be any line repeat. If the pixelrun is out of range, it must be split into several runs.

Example of RLL format for an eight bit pattern:

-*-*-*-* 1,1,1,1,1,1,1,1,0 Note the last 0 to end with a white pixelrun

*-*-*-*- 0,1,1,1,1,1,1,1,1 begins with a white pixelrun of 0 pixels

--**--** 2,2,2,2,0 repetion, stopped with a white pixelrun of 0 pixels

**--**-- -2,0,2,2,2,2,-2 line and pixel repetions

**--**--

Example of coding a black square of 800 dots to valid RLL format:

-128,0,255,0,255,0,255,0,35,0,-128

-128,0,255,0,255,0,255,0,35,0,-128

-128,0,255,0,255,0,255,0,35,0,-128

-128,0,255,0,255,0,255,0,35,0,-128

-128,0,255,0,255,0,255,0,35,0,-128

-128,0,255,0,255,0,255,0,35,0,-128

-32,0,255,0,255,0,255,0,35,0,-32

算法规格的重要补充说明:

1. RLL图片编码是对位图以象素为单位进行分析,采用8位字节压缩,每个字节的数值表示了位图象素行上连续的黑点或白点的数量;

2. 象素行上的所有字节数值之和必须等于位图的象素宽度,每行的第一个字节必须表示连续白点的数量,第二个字节表示连续黑点的数量,最后一个字节必须是表示连续白点的数量;

3. 如果象素行的第一个点是黑点,那么该象素行的第一个字节值必须为0,表示以0个连续的白点开始(为什么要加这个字节0是因为RLL算法要求每行的第一个字节必须表示连续的白点数量),然后后面就是连续黑点的数量,白点数量...

4. 如果象素行是以黑点结束,那么好最后一个字节表示的是连续黑点的数量,此时就需要再加上一个字节值0,表示该行以0个连续白点结束(为什么要加这个字节0是因为RLL算法要求每行的最后一个字节必须表示连续白点的数量)

5. 因为字节8位最大可以表示0-255,所以如果连续的黑点或白点超过了255,那么需要分成若干字节表示,中间使用字节值0分开,例如表示连续259个点可以使用三个连续字节值表示:255 0 4;

6. RLL算法可以压缩重复的象素行,就是行的象素序列完全一样,只需在象素行的RLL字节行的首尾都加一个字节值,该字节表示重复的行数,该字节最大可以表示128个重复行(如果有1个重复行要使用字节值255表示,字节值的计算公式:256-重复行);假设有N个重复行(N<=128),那么该字节值为:256-N(由于N<=128,那么该字节值必定>127)

7. 如果没有重复行,并且像素行以白点开始,其连续白点的数量超过了127个,那么这种情况下就不能够适用规则5来赋予连续白点数量字节值,如果这样表示那么该字节值必定>127,那么打印机cpu就会把该字节值识别为重复行数的字节值,而不会把他识别为连续白点的数量字节值。故当且仅当这种情况出现时,我们在表示这个行第一个字节(连续白点数量)的时候需要使用小白点规则,其连续点数量字节值最大只能够表示到127,如果超出127需要采用中间增加字节值0的方式来实现分隔;目的是避开与重复行字节值的定义,重复行字节值必定是>127的,如此一来,打印机cpu就不会把这个<127的字节值识别为重复行字节值了,只会识别为连续白点的数量。注意只需要第一个字节使用小白点规则,后续字节仍然使用规则5。例如没有重复行,并且像素行第一个点是白点,其连续的数量达到500个,那么表示该连续白点数量的字节值按顺序分别应该为:127 0 255 0 128,特别注意:除此之外(没有重复行并且白点开始连续超过127个),其他情况仍然适用规则5,每个字节值可以最大保存255,超出255个点需要增加字节值0进行分隔,例如存在重复行,并且像素行第一个点是白点,其连续的数量达到500个,那么表示该连续白点数量的字节值按顺序分别应该为: 255 0 255

8.表示重复行的字节值最大可以表示到0-127,如果超出127个重复行,那么需要使用多个行累加表示,他们的象素字节行数据都一样,只是首尾的重复行字节值不一样而已;

1.3.2 RLL buffer格式说明

该格式主要用于打印机的PRBUF指令,该指令目前只能接收RLL格式的图像数据,它在RLL基础上增加了一些头信息,描述如下:

(一) 头信息总共有6个字节组成:

1) 第一个字节使用固定字符@,用16进制表示就是40,用10进制表示该字符就是60;

2) 第二个字节使用数值2,表示PRBUF Protecol采用的是RLL buffer format格式;

3) 第三、四个字节使用16进制表示图像的象素宽度,其中第三个字节表示高位字节,第四个自己表示低位字节,例如图像象素宽度为515,那么这两个字节值为 2和3,表示16进制的0203,等于10进制的515=(2*16*16+3)

4) 第五、六个字节使用16进制表示图像的象素高度,同上;

(二) 注意PRBUF指令中的数据大小字节数需要包括RLL Buffer格式头信息的6个字节和图像所有象素行数据字节长度;

1.4 其他调试经验

(一) SETUP ""MEDIA,PAPER TYPE,TRANSFER,RIBBON FACTOR,25 (0-50)可以改变打印的墨色深度;

(二) SETUP ""MEDIA,CONTRAST,+10%" (-10% ~ +10%) 可以微调打印的墨色深度;

(三) SETUP ""FEEDADJ,STARTADJ,-100""打印每个标签必须回滚100dot才能确保打印不错位;

(四) CODE128下,如果BARRATIO设置为3:1,BARMAG值设置为1,那么打印出来的条形码可能不会很清晰,可以尝试增大打印头的压力(顺时钟扭动打印头上的两个螺冒),并且设置打印的墨色深度值,再加上微调值基本就比较清晰了。

(五) 在熟悉指令集的过程中,比较快捷的办法是使用厂商自带的条码打印机软件LabelShop,并且在安装的驱动程序设置中启用打印日志记录,将所有打印任务都生成指令集文件,然后通过LabelShop打印出来的条码都会生成一个指令集文件,结合分析查看就可以比较快速的掌握指令的用法了。

夏妙 ToTop@163.com

Intermecnbsp;EasyCodernbsp;PD41条码打印…相关推荐

  1. sql 插入新数据 如何处理等字符_条码打印软件之如何在条码数据插入字符而不被扫描...

    有的客户在制作条形码的时候可能会想在条码内容中插入字符,但是,又希望插入的字符不被扫描出来,那么在条码打印软件中是如何设置的呢?接下来小编就给大家简单介绍下,条码打印软件中如何在条码内容插入字符,而又 ...

  2. 生成打印条码_条码打印软件如何生成跳号条形码

    所谓跳号就是1跳到2然后再跳到3这样的流水码,有些人会把这种的流水数据称为跳号,今天就给大家介绍一下如何用中琅条码打印软件生成跳号条形码. 在条码打印软件中新建一个空白标签,选择打印机并自定义设置标签 ...

  3. bootstraptable设置行高度_条码打印软件中不干胶卷纸的标签设置方法

    条码打印软件中的标签设置是根据打印机中的实际标签纸的情况进行设置的,不同的标签纸有不同的设置方法(如A4的平张纸,或者单排.双排.多排的不干胶卷纸都有相对的设置方法).今天就用中琅条码打印软件给大家演 ...

  4. 128条形码计算,利用Code 128字体实现条码打印

    此方法利用Code 128字体实现条码打印,所以需要提前安装Code 128字体,下载地址如下: http://pan.baidu.com/share/link?shareid=1787017019& ...

  5. excel数据库_中琅条码打印软件数据库连接详解

    用过中琅条码打印软件的小伙伴都知道软件多种数据库类型,比如TXT.Excel,MySQL,Access,SQLServer,MySQL,Oracle,CSV,Sybase,DB2,SQLite,DBF ...

  6. SAP Smartforms 条码打印

    SAP 条码打印有 新旧 两种技术方法: 1.传统的(旧):将数据发送到打印机上,由打印机将数据转换成 条码图案,然后进行打印. 2.新方法:数据在SAP系统中生成条码图案,然后直接发送到打印机 进行 ...

  7. 如何条码打印软件工具箱窗格进行重新定位

    2019独角兽企业重金招聘Python工程师标准>>> 有时为了更加方便设计师设计条码标签.符合他们一贯的操作习惯,会将BarTender工具箱窗格进行重新定位:自动隐藏,或者放置在 ...

  8. if condition 大于_条码打印软件之脚本编程的应用(if语句)

    今天给大家介绍中琅条码打印软件中脚本编码的其中一个应用(if语句判断),根据已知的数据判断输出新的数据,如下:给出Excel表两列数据(数据1列和数据2列), 1.数据1为Y时,无论数据2是什么都输出 ...

  9. 打印页面横向怎么设置_条码打印软件标签纸页面设置的方法

    在条码打印软件中,设置纸张是打开软件后的第一步,首先我们需要先将标签纸张尺寸设置好,才可以在后期打印过程中少出现错误,节省打印调试时间.那么对于多排多列的标签纸该如何进行页面设置呢,下面我们来详细看一 ...

最新文章

  1. ubuntu下SVN服务器安装配置
  2. MySQL数据库Keepalived双主
  3. ios7中让程序使用统一的status bar风格
  4. mysql my includedir_MySQL:读取my.cnf的顺序问题
  5. Python 列表 sort( )方法
  6. 破解class文件的第一步:深入理解JAVA Class文件
  7. Linux下使用Nginx端口转发出现502错误的一种解决办法
  8. PHP学习笔记--函数
  9. MMA7660传感器使用心得
  10. Atlas 200 DK登录密码 制卡安装DDK和lib
  11. Uber Go 语言编程规范:使用 go.uber.org/atomic
  12. PyTorch载入预训练权重方法和冻结权重方法
  13. Excel自定义排序(可按某一列排序)
  14. Cypress系列(43)- visit() 命令详解
  15. 360下载win2003
  16. 如何让女性乳房更具吸引力?整形医生可以用眼动追踪技术大显神通吗?
  17. 优秀项目经理的六个习惯
  18. android图片识别代码,android orc 图片文档识别源代码 - 下载 - 搜珍网
  19. win7资源管理器老是停止工作解决方法
  20. 基于ssm框架的汽车出租管理系统源码

热门文章

  1. Arduino与Proteus仿真实例-简单信号频率计数仿真
  2. 新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼
  3. python全栈学习笔记
  4. 5个需程序员自清的学习绊脚石!
  5. python中符号的用法_python中的@符号的作用
  6. CListCtrl 灰白相间实现
  7. 牙膏不只可刷牙——32不寻常用途!!
  8. ERP中配额生单的简单了解
  9. Terraria及tModloader开服教程
  10. 24 个常见的 Docker 疑难杂症处理技巧