发明内容
本发明的目的是提供基于OS/390的大型主机平台的标签打印装置,能将基于EBCDIC编码的中文字符串、中西文混合字符串正确转换为标签打印机可以识别的编程语言,正确打印出中文字符和中西文字符标签。
为了实现上述目的,本发明提供了一种基于大型主机平台的标签打印装置,包括:
命令控制符转换模块,安装于与标签打印机物理连接的PC客户端上,在标签打印机开机时启动,用于将标签打印机指令语言中的命令控制符前缀置换为主机字符,以使标签打印机可以识别主机发送的字符;
打印控制模块,与过程控制机连接,用于在生产过程中最后一个机组的成品产出后、当接收到过程控制机发送的包含有要打印的标签号的生产LOG时,向数据拮取模块发送标签号,接收数据拮取模块返回的此标签号的特征信息和打印信息,通过此标签号的特征信息指定标签打印机终端号并确定与此标签号对应的标签格式模块,向对应的标签格式模块发送标签打印机终端号和打印信息;
数据拮取模块,与打印控制模块连接,用于接收打印控制模块发送的标签号,根据所述标签号获取特征信息和打印信息,同时将所述标签号的特征信息和打印信息返回给打印控制模块;
多个标签格式模块,均与打印控制模块连接,用于接收打印控制模块发送的标签打印机终端号和由多个中文字符串或中西文混合字符串的字段组成的打印信息,对打印信息中的每一个字段,设置起始位置、字体大小、旋转方向,逐个将字段信息及对应设置的起始位置、字体大小、旋转方向发送至中西文转换模块,接收中西文转换模块返回的与每一个字段信息对应的命令格式串,将多个字段对应的多个命令格式串组合成驱动文本,将驱动文本发送给标签打印机;
中西文转换模块,与每一个标签格式模块连接,用于逐个接收标签格式模块发送的字段信息和对应设置的起始位置、字体大小、旋转方向,并对字段内容进行汉字识别,当识别出当前字符为基于EBCDIC编码的汉字时,将该汉字发送至中文转换模块,接收中文转换模块返回的该汉字的区位码,结合设置的起始位置、字体大小、旋转方向将区位码置入命令格式串,当识别出当前字符为西文字符时,结合设置的起始位置、字体大小、旋转方向将西文字符置入命令格式串,字段内容识别完后将命令格式串返回至标签格式模块;
中文转换模块,与中西文转换模块连接,用于接收中西文转换模块发送的中文字符,将基于EBCDIC编码的中文字符转换为汉字区位码,将汉字区位码返回至中西文转换模块。
在本发明的一个实施例中,所述装置还包括:
数据记录模块,与打印控制模块以及标签格式模块连接,在标签格式模块将驱动文本发送给标签打印机后,在打印控制模块的控制下记录所述标签号的打印实绩。
在本发明的另一实施例中,所述中西文转换模块包括:
接收及初始化单元,用于接收标签格式模块转发的打印信息中的字段信息,统计字段信息的长度,接收设置的字段信息的打印起始位置值以及字体大小,将字段信息视为一个字符数组A,初始化此字符数组的下标AI为0,初始化命令格式串,将命令格式串视为一个字符数组B,初始化此字符数组的下标BI为1;
监控单元,用于将字符数组A的下标增加1,判断下标是否超过此字符数组的长度;
读取单元,用于当监控单元检查出下标未超过此字符数组的长度时,读取字符数组A中当前下标的字符;
第一判断单元,用于判断读取的当前字符的EIBDIC编码值是否为中文开始字符;
第二判断单元,用于当第一判断单元判断出读取的当前字符的EIBDIC编码值是中文开始字符时,判断西文打印标识是否被设置;
第一设置单元,用于当第二判断单元判断出西文打印标识被设置时,在命令格式串中置入语句处理结束指令语言,根据该指令语言在命令格式串中的起始位置计算下一指令语言在命令格式串中的起始位置,取消西文打印标识;
第二设置单元,用于当第二判断单元判断出西文打印标识未被设置时、或者当第一设置单元设置完毕后,开始一个新的汉字打印单位的设置:根据打印起始位置的计算公式计算该打印单位的起始位置,在命令格式串中置入中文打印开始控制指令语言、起始打印位置指令语言、旋转方向和字体大小指令语言、中文打印内容开始指令语言,设置中文打印标识,取消西文打印标识,在置入每一指令语言后,根据该指令语言在命令格式串中的起始位置计算下一指令语言在命令格式串中的起始位置,此时监控单元继续将字符数组A的下标增加1,检查下标是否超过字符数组A的长度;
第三判断单元,用于当第一判断单元判断出读取的当前字符的EIBDIC编码值不是中文开始字符时,判断读取的字符的EIBDIC编码值是否为中文结束字符;
第三设置单元,用于当第三判断单元判断出读取的当前字符的EIBDIC编码值是中文结束字符时,在命令格式串中置入语句处理结束指令语言和中文结束打印控制指令语言,根据该指令语言在命令格式串中的起始位置计算下一指令语言在命令格式串中的起始位置,取消中文打印标识,此时监控单元继续将字符数组A的下标增加1,检查下标是否超过字符数组A的长度;
第四判断单元,用于当第三判断单元判断出读取的当前字符的EIBDIC编码值不是中文结束字符时,判断中文打印标识是否被设置;
第四设置单元,用于当第四判断单元判断出中文打印标识被设置时,将当前字符和下一字符发送至中文转换模块,获取中文转换模块转换得到的汉字的区位码,以/XX/XX的格式将区位码置入命令格式串,根据该区位码在命令格式串中的起始位置计算下一指令语言在命令格式串中的起始位置,将字符数组A的下标增加1,此时监控单元继续将字符数组A的下标增加1,检查下标是否超过字符数组A的长度;
第五判断单元,用于当第四判断单元判断出中文打印标识未被设置时,判断西文打印标识是否被设置;
第五设置单元,用于当第五判断单元判断出西文打印标识被设置时,将当前字符置入命令格式串,根据该字符在命令格式串中的起始位置计算下一指令语言在命令格式串中的起始位置,此时监控单元继续将字符数组A的下标增加1,检查下标是否超过字符数组A的长度;
第六设置单元,用于当第五判断单元判断出西文打印标识未被设置时,开始一个新的字符打印单位的设置:根据打印起始位置的计算公式计算该打印单位的起始位置,在命令格式串中置入起始打印位置指令语言、旋转方向和字体大小指令语言、西文打印内容开始指令语言,置入当前字符,设置西文打印标识,在置入每一指令语言或字符后,根据该指令语言或字符在命令格式串中的起始位置计算下一指令语言在命令格式串中的起始位置,此时监控单元继续将字符数组A的下标增加1,检查下标是否超过字符数组A的长度;
第六判断单元,用于当监控单元检查出下标超过此字符数组的长度时,判断中文打印标识是否被设置;
第七设置单元,用于当第六判断单元判断出中文打印标识被设置时,在命令格式串中置入中文结束打印控制指令语言;
命令格式串返回单元,用于第六判断单元判断出中文打印标识未被设置时,或者当第七设置单元设置完毕后,将完整的命令格式串发送至标签格式模块。
在本发明的再一实施例中,所述中文转换模块包括:
第一判断单元,用于判断直接对照表中是否存在中西文转换模块发送的汉字的EBCDIC编码值;
第二判断单元,用于当第一判断单元判断出直接对照表中不存在中西文转换模块发送的汉字的EBCDIC编码值时,判断汉字的EBCDIC编码重定义为二进制值后的二进制重定义值COMP2是否在18952至19045之间;
第一处理单元,用于当第二判断处理单元判断出二进制重定义值COMP2在18952至19045之间时,将二进制重定义值COMP2与18951的差值作为二进制重定义值COMP2的位移量;
第二处理单元,用于当第二判断处理单元判断出二进制重定义值COMP2不在18952至19045之间时,将二进制重定义值COMP2与18952的差值除以256,得到商和余数;
第三判断单元,用于判断汉字的EBCDIC编码的第二位是否大于十六进制‘80’;
第三处理单元,用于当第三判断单元判断出汉字的EBCDIC编码的第二位大于十六进制‘80’时,将第二处理单元得到的余数减去1从而得到修正后的余数,将第二处理单元得到的商与188之积加上94以及余数,得到二进制重定义值COMP2的位移量,且当第三判断单元判断出汉字的EBCDIC编码的第二位不大于十六进制‘80’时,将第二处理单元得到的商与188之积加上94以及第二处理单元得到的余数,得到二进制重定义值COMP2的位移量;
第四处理单元,用于第一处理单元以及第三处理单元得到的二进制重定义值COMP2的位移量除以94,得到商和余数;
第四判断单元,用于判断第四处理单元得到的余数是否大于0;
第五处理单元,用于当余数大于0时,将商加上1从而得到修正后的商;;
第六处理单元,用于当余数等于0时,将94赋给余数从而得到修正后的余数;
区位码确定单元,用于当第一判断单元判断出直接对照表中存在中西文转换模块发送的汉字的EBCDIC编码值时,该汉字的区位码确定为直接对照表中与该汉字的EBCDIC编码值对应的汉字区位码,或者将第五处理单元得到的商作为数组Q12[]的下标,将第六处理单元得到的余数作为数组Q34[]的下标,将Q12[商]确定为汉字的EBCDIC编码对应的汉字区位码前两位,Q34[余数]确定为汉字的EBCDIC编码对应的汉字区位码后两位。
与现有技术相比,本发明基于OS/390的大型主机平台的标签打印装置的打印控制模块通过要打印的标签号的生产LOG启动或者通过人工启动,获得标签号,数据拮取模块获得该标签号的特征信息和打印信息并转发至打印控制模块,标签格式模块将打印信息通过中西文转换模块转换成标签打印机可以识别和接受的以命令格式串组成的驱动文本,其中中文转换模块是将打印信息中的汉字转换成区位码以置入命令格式串,标签格式模块将多个命令格式串组合成驱动文本,发送至标签打印机,此时标签打印机能成功打印标签。本装置能将基于EBCDIC编码的中文字符串、中西文混合字符串正确转换为标签打印机可以识别的编程语言,正确打印出中文字符和中西文字符标签。
另外,打印控制模块能实现打印机终端、标签格式模块的灵活配置。
此外,本发明通过打印记录模块实时记录标签的打印实绩,如打印数据和打印情况,为标签打印的跟踪查询提供了基础资料。
通过以下的描述并结合附图,本发明将变得更加清晰,这些附图用于解释本发明的实施例。
具体实施方式
现在参考附图描述本发明的实施例,附图中类似的元件标号代表类似的元件。
如图1,本发明基于大型主机平台的标签打印装置100包括命令控制符转换模块110、打印控制模块120、数据拮取模块130、多个标签格式模块140、中西文转换模块150、中文转换模块160以及数据记录模块170。
命令控制符转换模块110安装于与标签打印机200物理连接的PC客户端310(见图4)上,在标签打印机200开机时启动,用于将标签打印机200指令语言中的命令控制符前缀(如‘^’)置换为主机字符(如‘#’),这样,标签格式模块产生以‘#’开始的指令语言并发送至标签打印机后,标签打印机就可以识别并打印以“#”开始的指令语言了)。
打印控制模块120与过程控制机连接,用于在生产过程中最后一个机组的成品产出后、当接收到过程控制机发送的包含有要打印的标签号的生产LOG时,向数据拮取模块130发送标签号,接收数据拮取模块130返回的此标签号的特征信息和打印信息,通过此标签号的特征信息指定标签打印机终端号并确定与此标签号对应的标签格式模块140(不同类型的标签有不同的打印格式,一个标签格式模块对应一个特定的标签格式),向对应的标签格式模块140发送标签打印机终端号和打印信息。
数据拮取模块130,与打印控制模块120连接,用于接收打印控制模块120发送的标签号,从产销系统中获取所述标签号的特征信息和基本打印信息,依据所述特征信息获取所述标签号的特殊打印信息(特征信息如产品大类、形态等;基本信息如:钢卷号、标准号、品名、生产日期、钢种、规格、重量、外观使用面等;特殊信息如:硅钢的涂层种类、边缘要求,普冷材的表面组别、冲压级别,镀锡材的表面组别、硬度、镀锡量,外销合同的唛头、到港站、收货单位、外部合同号等),同时将所述标签号的特征信息和打印信息(包括基本打印信息和特殊打印信息)返回给打印控制模块120。
其中,特征信息包括产品大类、产品形态、用途代码、销售类别。通过产品大类可以区分标签号是下列的一种:热轧材、冷轧普冷材、冷轧镀锌材、冷轧镀锡材、冷轧硅钢材、冷轧彩涂材、无取向硅钢、取向硅钢、中厚板。每一种产品大类,其标签格式是不同的;通过产品形态可以区分是此标签号是板、卷、或带,板和卷带的标签格式也是不同的;通过用途代码可以区分此标签号是汽车板,或家电板,或其他。对于汽车板有特殊的标签格式;通过销售类别可以区分此标签号是内销还是外销,外销的标签与内销的标签格式也是不同的。打印控制模块120通过标签号的特征信息确定相关的标签格式,获取相关的标签格式模块。
基本打印信息是所有的标签中都包含的基本内容,有钢卷号、标准号、品名、生产日期、钢种、规格、重量、外观使用面。
特殊打印信息包括特征信息如产品大类、形态等;基本信息如:钢卷号、标准号、品名、生产日期、钢种、规格、重量、外观使用面等;特殊信息如:硅钢的涂层种类、边缘要求,普冷材的表面组别、冲压级别,镀锡材的表面组别、硬度、镀锡量,外销合同的唛头、到港站、收货单位、外部合同号等。
多个标签格式模块140均与打印控制模块120连接,用于接收所述打印控制模块120发送的标签打印机终端号和由多个中文字符串或中西文混合字符串的字段组成的打印信息,对打印信息中的每一个字段,设置起始位置、字体大小、旋转方向(打印方式),逐个将字段信息及对应设置的起始位置、字体大小、旋转方向发送至中西文转换模块,接收中西文转换模块返回的与每一个字段信息对应的命令格式串,将多个字段对应的多个命令格式串组合在一起在开头加上起始指令,在结尾加上结束指令,形成驱动标签打印机200进行标签打印的驱动文本,将驱动文本通过CICS的SEND命令发送给指定的与标签打印机终端号对应的标签打印机200(指定的标签打印机接收驱动文本,直到接收到结束指令(标签格式模块组成驱动文本时加在驱动文本后面的‘#XZ’,标签打印机200收到‘#XZ’意味着这张标签的打印指令全部接收完毕)后,启动打印动作并依据起始指令和结束指令之间的指令语言集合进行标签打印)。
中西文转换模块150,与每一个标签格式模块140连接,用于逐个接收标签格式模块140发送的打印信息中的字段信息和打印方式(起始位置、字体大小、旋转方向),并对字段内容进行汉字识别,当识别出当前字符为基于EBCDIC编码的汉字(中文字符)时,将该汉字发送至中文转换模块,接收中文转换模块返回的该汉字的区位码,结合设置的起始位置、字体大小、旋转方向将区位码动态置入命令格式串,当识别出当前字符为西文字符时,结合设置的起始位置、字体大小、旋转方向直接将西文字符动态置入命令格式串,将字段内容识别完后将命令格式串返回至标签格式模块140。
中文转换模块160,与中西文转换模块150连接,用于接收中西文转换模块发送的汉字,利用基于EIBDIC的汉字编码规律和汉字区位码的编码规律,将基于EBCDIC编码的汉字转换为汉字区位码,将汉字区位码返回至中西文转换模块。
数据记录模块170,与打印控制模块120以及标签格式模块140连接,在标签格式模块140将驱动文本发送给标签打印机后,在打印控制模块120的控制下记录所述标签号的打印实绩(包括打印内容、每一张标签的打印时间、打印机号、打印方式和打印人员、打印份数等),如果所述标签号已经被打印过,在手动打印标签时,打印控制模块120可根据打印的记录进行打印权限的限制。
下面说明所述基于大型主机平台的标签打印装置的工作流程,如图1a,包括如下步骤:
步骤S101,在标签打印机200开机启动时,启动命令控制符替换模块110,控制符替换模块110将标签打印机200指令语言中的命令控制符前缀置换为主机字符(如‘#’),以使当主机发送以#开始的指令语言集时,标签打印机200能够识别,从而启动打印;
步骤S102,在生产过程中最后一个机组的成品产出后、当收到过程控制机发送的生产LOG时,打印控制模块120向数据拮取模块130发送标签号;
步骤S103,数据拮取模块130接收打印控制模块120发送的标签号,从产销系统中获取与所述标签号对应的特征信息和基本打印信息,依据所述特征信息获取所述标签号的特殊打印信息,同时将所述标签号的特征信息和打印信息(包括基本打印信息和特殊打印信息)返回给打印控制模块120;
步骤S104,打印控制模块120接收数据拮取模块130返回的此标签号的特征信息和打印信息,通过此标签号的特征信息指定标签打印机终端号并确定标签格式模块,向对应的标签格式模块140发送标签打印机终端号和打印信息;
步骤S105,判断标签格式模块140对打印控制模块120发送的打印信息中的所有字段是否处理完毕,如果是,转步骤S113,如果否,继续下一步:
步骤S106,对每个字段,对其设置打印方式(起始位置、字体大小、旋转方向),将该字段的字段信息和打印方式发送给中西文转换模块150;
步骤S107,判断中西文转换模块150对字段信息内容中的所有字符是否逐一识别完毕,如果是,转S112;如果否,继续下一步;
步骤S108,读取当前字符,判断当前字符是否是汉字,如果是,继续下一步,如果否,转步骤S111;
步骤S109,中西文转换模块150将汉字发送至中文转换模块160,中文转换模块160将中西文转换模块150发送的汉字转换成汉字区位码,并将汉字区位码发送至中西文转换模块150;
步骤S110,中西文转换模块150结合字段的打印方式将区位码置入到命令格式串中,转步骤S107;
步骤S111,中西文转换模块150结合字段的打印方式将非中文字符置入到命令格式串中,转步骤S107;
步骤S112,中西文转换模块150将最后得到的命令格式串发送到标签格式模块,转步骤S105;
步骤S113,标签格式模块140将多个命令格式串组合成驱动文本,将驱动文本发送给与打印机终端号对应的标签打印机200,启动该标签打印机200,开始标签打印;
步骤S114,在标签格式模块140将驱动文本发送给标签打印机后,标签打印机200启动标签打印,数据记录模块170在打印控制模块120的控制下记录标签号的打印实绩,在手动打印标签时,打印控制模块120可根据打印的记录进行打印权限的限制。
由上可知,本发明标签打印装置100通过中西文转换模块150调用中文转换模块160,中文转换模块160将打印信息中的中文字符串、中西文混合字符串中的汉字转换成汉字区位码,中西文转换模块150进而将中文字符串、中西文混合字符串形式的打印信息转换成命令格式串,标签打印机200能接收此命令格式串中的指令语言,自动打印标签。
另外,本发明通过打印控制模块120实现打印机终端、标签格式模块的灵活配置。
此外,本发明通过打印记录模块170实时记录标签的打印实绩,如打印数据和打印情况,为标签打印的跟踪查询提供了基础资料。
再者,本发明的打印控制模块120利用过程控制机实时发送的生产LOG作为触发时机,实现了生产过程中自动打印成品标签的功能。需要说明的是,所述打印控制模块除了由正确处理生产LOG的上位机触发启动,也可以通过人机界面来启动。
下面对中西文转换模块150进行详细说明。图2a为中西文转换模块150的组成结构图,图2b为中西文转换模块150的工作流程图。如图3a-3b,如图2a-2b,所述中西文转换模块150的工作原理是:
步骤S201,接收及初始化单元151接收标签格式模块转发的打印信息中的字段信息,统计字段信息的长度,接收设置的字段的打印起始位置值以及字体大小、旋转方向,依据字体大小获取宽象素点数、高象素点数、汉字宽度修正值、字符宽度修正值,将字符串视为一个字符数组A,初始化此字符数组的下标AI为0,初始化命令格式串,将命令格式串视为一个字符数组B,初始化此字符数组的下标BI为1;
步骤S202,监控单元152将接收及初始化单元151初始化字符数组A的下标增加1,检查下标是否超过此字符数组的长度,如果是(字符串已读完),转步骤S215,如果否,继续下一步;
步骤S203,读取单元153读取字符数组A中当前下标的字符,继续下一步;
步骤S204,第一判断单元154判断读取单元153读取的当前字符的EIBDI C编码值是否为中文开始字符(X’OE’),如果是,继续下一步,如果否,转步骤S208;
步骤S205,第二判断单元155判断西文打印标识是否被设置,如果是,继续下一步,如果否,转步骤S207;
步骤S206,第一设置单元156置入语句处理结束指令语言,根据此指令语言在命令格式串中的起始位置计算此指令语言置入后,下一指令语言在命令格式串中的起始位置,取消西文打印标识,继续下一步;
步骤S207,第二设置单元157开始一个新的汉字打印单位的设置:置入中文打印开始控制指令语言,根据此指令语言在命令格式串中的起始位置计算此指令语言置入后,下一指令语言在命令格式串中的起始位置;根据打印起始位置的计算公式计算该打印单位的起始位置;根据计算的该打印单位的起始位置置入起始打印位置指令语言,根据此指令语言在命令格式串中的起始位置计算此指令语言置入后,下一指令语言在命令格式串中的起始位置;根据设置的字体大小以及旋转方向置入旋转方向和字体大小指令语言,根据此指令语言在命令格式串中的起始位置计算此指令语言置入后,下一指令语言在命令格式串中的起始位置;置入中文打印内容开始指令语言,根据此指令语言在命令格式串中的起始位置计算此指令语言置入后,下一指令语言在命令格式串中的起始位置;设置中文打印标识,取消西文打印标识,转步骤S202;
步骤S208,第三判断单元158判断读取单元153读取的字符的EIBDIC编码值是否为中文结束字符(X’OF’),如果是,继续下一步,如果否,转步骤S210;
步骤S209,第三设置单元159在命令格式串中置入语句处理结束指令语言和中文结束打印控制指令语言,根据此指令语言在命令格式串中的起始位置计算此指令语言置入后,下一指令语言在命令格式串中的起始位置,取消中文打印标识,转步骤S202;
步骤S210,第四判断单元159a判断中文打印标识是否被设置,如果是(当前字符是中文字符的第一个字节)),继续下一步,如果否(当前字符是西文字符),转步骤S212;
步骤S211,第四设置单元159b将当前字符和下一字符发送至中文转换模块,获取中文转换模块转换得到的汉字的区位码,以/XX/XX的格式将区位码置入命令格式串,根据此区位码在命令格式串中的起始位置计算此区位码置入后,下一指令语言在命令格式串中的起始位置,将字符数组A的下标增加1,转步骤S202;
步骤S212,第五判断单元159c判断西文打印标识是否被设置,如果是,继续下一步,如果否,转步骤S214;
步骤S213,第五设置单元159d将当前字符置入命令格式串,根据此字符在命令格式串中的起始位置计算此字符置入后,下一字符在命令格式串中的起始位置,转步骤S202;
步骤S214,第六设置单元159e开始一个新的字符打印单位的设置:根据打印起始位置的计算公式计算该打印单位的起始位置;根据计算的该打印单位的起始位置置入起始打印位置指令语言,根据此指令语言在命令格式串中的起始位置计算此指令语言置入后,下一指令语言在命令格式串中的起始位置,根据设置的字体大小以及旋转方向置入旋转方向和字体大小指令语言,根据此指令语言在命令格式串中的起始位置计算此指令语言置入后,下一指令语言在命令格式串中的起始位置;置入西文打印内容开始指令语言,根据此指令语言在命令格式串中的起始位置计算此指令语言置入后,下一指令语言在命令格式串中的起始位置;置入当前字符,根据此字符在命令格式串中的起始位置计算此字符置入后,下一字符在命令格式串中的起始位置;设置西文打印标识,转步骤S202;
步骤S215,第六判断单元159f判断中文打印标识是否被设置,如果是,转步骤S217,如果否,转步骤S216;
步骤S216,第七设置单元159g在命令格式串中置入中文结束打印控制指令语言;
步骤S217,命令格式串返回单元159i获得完整的命令串,将它发送给标签格式模块,结束。
其中,步骤S201中统计字段信息的长度涉及到字段信息长度的计算,在主机环境中,字符串的实际存储格式为:每个西文为一个字符长,每个汉字为二个字符长,汉字开始字符(值为十六进制’OE’)为一个字符长,汉字结束字符(值为十六进制’OF’)为一个字符长。
其中,步骤S201中的依据字体大小获取宽象素点数、高象素点数、汉字宽度修正值、字符宽度修正值具体为:
先定义字体的大小等级(字号),根据字号设置宽象素点数、高象素点数,根据经验值以及字号设置汉字宽度修正值和字符厚度修正值(汉字宽度修正值和字符厚度修正值均是经验值,设置这两个值的原因是:虽然在打印指令中定义打印字符的大小,但是在标签打印机的实际的打印中会有偏差,特别是既打印汉字又打印字符时处理又有不同,因此设定这两个值)。表1为示意性地展示了设置的字号,以及与字号对应的宽象素点数、高象素点数、汉字宽度修正值、字符宽度修正值。
字号 |
宽象素点数 |
高象素点数 |
汉字宽度修正值、 |
字符宽度修正值 |
1 |
84 |
84 |
76 |
48 |
2 |
72 |
72 |
66 |
40 |
3 |
60 |
60 |
54 |
36 |
4 |
48 |
48 |
42 |
26 |
... |
... |
... |
... |
... |
表1
上述步骤中涉及本打印单位的打印起始位置的计算公式:
若前一打印单位为汉字:X=前一个打印单位的打印起始位置+前一个打印单位的汉字个数×前一个打印单位的汉字宽度修正值;
若前一打印单位为字符:X=前一个打印单位的打印起始位置+前一个打印单位的字符个数×前一个打印单位的字符宽度修正值。
因此,依据前一个打印单位的打印起始位置、前一个打印单位的汉字个数或字符个数、前一个打印单位的汉字宽度修正值或字符宽度修正值能得到本打印单位在标签中的起始打印位置。
需要注意的是,步骤S213这一步骤是对异常情况的特殊处理,如:按照正常情况,汉字的结尾都会有一个结束符,在中西文转换模块中是根据中文的结束符来将中文结束打印控制指令语言置入命令格式串的,如果在数据获取或传递的过程中出现异常(字符串的最后一位是汉字,却没有汉字结束符),那么就无法正确地将中文结束打印控制指令语言置入到命令格式串中,在命令格式串中有中文开始打印控制指令,却没有中文结束打印控制指令,这样的驱动文本发送到标签打印机后是无法被正确处理的,所以在处理完所有的字符后,要加上一段对中文打印标识的判断,如果中文打印标识还处于被设置状态,就自动将中文结束打印控制指令语言置入到命令格式串中保证数据的完整。
下面举例说明中西文转换模块150将字段转换成命令字符串的过程。假设标签格式模块发送给中西文转换模块150的字段为“中国CHINA武汉WUHAN”,设置该字段的打印起始位置值:X=760,Y=1020,字体大小为字号为3,旋转方向为旋转90度。
中西文转换模块150统计该字段信息的长度:6+5+6+5=22,依据字体大小查找表1,获取宽象素点数为60、高象素点数为60、汉字宽度修正值为54、字符宽度修正值为36;将字段视为一个字符数组A,初始化此字符数组的下标AI为0,初始化命令格式串,将命令格式串看作一个字符数组B,初始化其字符数组的下标BI为1,然后中西文转换模块150继续下述动作:
(一)中西文转换模块150从字符数组A中读取的第一个字符为中文开始字符(X’OE’),此时西文打印标识未被设置,中西文转换模块150的处理如下:
(1)确立为第一个打印单位,置入中文打印开始控制指令语言“#CI14”,其在命令格式串中的起始位置BI=1(为命令格式串字符数组的下标初始值),中文打印开始控制指令语言“#CI14”置入后,下一指令语言在命令格式串中的起始位置为BI=1+5=6;
(2)根据打印起始位置计算公式计算第一个打印单位的起始位置:X=760+0×0=760(前一个单位的打印起始位置初始化为760,前一个单位的字符/汉字个数初始化位0,前一个字符/汉字宽度修正值初始化为0),Y=1020;
(3)、置入起始打印位置指令语言“#FO760,1020”,其在命令格式串中的起始位置BI=6,起始打印位置指令语言“#FO760,1020”置入后,下一指令语言在命令格式串中的起始位置为置入后BI=6+11=17;
(4)、设置的字体大小为字号3,字号3对应的宽象素点数为60,高象素点数为60,设置的旋转方向为旋转90度,置入旋转方向和字体大小指令语言“#AJR,60,60”,其在命令格式串中的起始位置BI=17,旋转方向和字体大小指令语言“#AJR,60,60”置入后,下一指令语言在命令格式串中的起始位置为BI=17+10=27;
(5)、置入中文打印内容开始指令语言“#FH/#FD”,其在命令格式串中的起始位置BI=27,中文打印内容开始指令语言“#FH/#FD”置入后,下一指令语言在命令格式串中的起始位置为BI=27+7=34,
至此,第一个字符即中文开始字符(X’OE’)读取后,中西文转换模块得到的命令格式串的内容为:
“#CI14#FO760,1020#AJR,60,60#FH/#FD”;
(6)、设置中文打印标识,取消西文打印标识。
(二)中西文转换模块150从字符数组A中读取的第二个字符,不是中文开始字符(X’OE’)、不是中文结束字符(X’OF’),中文打印标识被设置,则中西文转换模块150作如下处理:
(1)、将字符数组A中第二个、第三个字符的EBCDIC的值(“中”)发送给中文转换模块(因为中文字符由两个字节组成,第二个字符是中文的第一个字节,第三个字符时中文的第二个字节,所以要将两个字节一起发过去),调用中文转换模块并获取“中”的区位码:“5650;
(2)、以“/56/50”的格式将“中”的区位码“5650”置入到命令格式串,其在命令格式串中的起始位置BI=34,“/56/50”置入后,下一指令语言在命令格式串中的起始位置为BI=34+6=40,
至此,第二、三个字符读取后,命令格式串的内容为:
“#CI 14#FO760,1020#AJR,60,60#FH/#FD/56/50”。
需要注意的是,此时第三个字符也处理完毕。
(三)中西文转换模块150从字符数组A中读取的第四个字符,不是中文开始字符(X’OE’)、不是中文结束字符(X’OF’),中文打印标识被设置,则中西文转换模块150作如下处理:
(1)、将字符数组A中第四个、第五个字符的EBCDIC的值(“国”)发送给中文转换模块,调用中文转换模块并获取“国”的区位码:“397A”;
(12)、以“/39/7A”的格式将“国”的区位码“397A”置入到命令格式串,其在命令格式串中的起始位置BI=40,“/39/7A”置入后,下一指令语言在命令格式串中的起始位置为BI=40+6=46,
至此,第四、五个字符读取后,命令格式串的内容为:
“#CI14#FO760,1020#AJR,60,60#FH/#FD/56/50/39/7A”。
需要注意的是,此时第五个字符也处理完毕。
(四)中西文转换模块150从字符数组A中读取的第六个字符,不是中文开始字符(X’OE’)、是中文结束字符(X’OF’),则中西文转换模块150作如下处理:
(1)、将语句处理结束指令语言“#FS”和中文结束打印控制指令语言“#CIO#FS”置入到命令格式串,其在命令格式串中的起始位置BI=46,语句处理结束指令语言“#FS”和中文结束打印控制指令语言“#CI0#FS”置入后,下一指令语言在命令格式串中的起始位置为BI=46+10=56,
至此,第六个字符((X’OF’))读取后,命令格式串的内容为:
“#CI 14#FO760,1020#AJR,60,60#FH/#FD/56/50/39/7A#FS#CIO#FS”;
(2)、取消中文打印标识。
(五)中西文转换模块150从字符数组A中读取的第七个字符“C”,不是中文开始字符(X’OE’)、不是中文结束字符(X’OF’)、西文打印标识未被设置,则中西文转换模块150作如下处理:
(1)、确定为第二个打印单元,根据打印起始位置计算公式计算第二个打印单位的起始位置:X=X=760+2×54=868,Y=1020;
(2)、置入起始打印位置指令语言“#FO868,1020”,其在命令格式串中的起始位置BI=56,起始打印位置指令语言“#FO868,1020”置入后,下一指令语言在命令格式串中的起始位置为BI=56+11=67;
(3)、置入旋转方向和字体大小指令语言“#AOR,60,60”,其在命令格式串中的起始位置BI=67,旋转方向和字体大小指令语言“#AOR,60,60”置入后,下一指令语言在命令格式串中的起始位置为BI=67+10=77;
(4)、置入西文打印内容开始指令语言“#FD”,其在命令格式串中的起始位置BI=77,西文打印内容开始指令语言“#FD”置入后,下一指令语言在命令格式串中的起始位置为BI=77+3=80;
(5)、置入西文字符“C”,其在命令格式串中的起始位置BI=80,西文字符“C”置入后,下一指令语言在命令格式串中的起始位置为BI=80+1=81,
至此,第七个字符“C”读取后,命令格式串的内容为:
“#CI14#FO760,1020#AJR,60,60#FH/#FD/56/50/39/7A#FS#CI0#FS#FO868,1020#AOR,60,60#FDC”;
(6)、设置西文打印标识。
(六)中西文转换模块150从字符数组A中读取的第八个字符“H”,不是中文开始字符(X’OE’)、不是中文结束字符(X’OF’)、西文打印标识被设置,则中西文转换模块150作如下处理:
(1)、置入西文字符“H”,其在命令格式串中的起始位置BI=81,西文字符“H”置入后,下一指令语言在命令格式串中的起始位置为BI=81+1=82,
至此,第八个字符“H”读取后,命令格式串的内容为:
“#CI14#FO760,1020#AJR,60,60#FH/#FD/56/50/39/7A#FS#CI0#FS#FO868,1020#AOR,60,60#FDCH”。
(七)中西文转换模块150从字符数组A中读取的第九个字符“I”,跟(六)相同的方式,中西文转换模块150作如下处理:
(1)、置入西文字符“I”,置入后,下一指令语言在命令格式串中的起始位置为BI=82+1=83,
至此,第九个字符“H”读取后,命令格式串的内容为:
“#CI14#FO760,1020#AJR,60,60#FH/#FD/56/50/39/7A#FS#CI0#FS#FO868,1020#AOR,60,60#FDCHI”。
(八)中西文转换模块150从字符数组A中读取的第十个字符“N”,跟(六)相同的方式,中西文转换模块150作如下处理:
(1)、置入西文字符“N”,置入后,下一指令语言在命令格式串中的起始位置为BI=83+1=84,
至此,第十个字符“N”读取后,命令格式串的内容为:
“#CI14#FO760,1020#AJR,60,60#FH/#FD/56/50/39/7A#FS#CI0#FS#FO868,1020#AOR,60,60#FDCHIN”。
(九)中西文转换模块150从字符数组A中读取的第十一个字符“A”,跟(六)相同的方式,中西文转换模块150作如下处理:
(1)、置入西文字符“A”,置入后,下一指令语言在命令格式串中的起始位置为BI=84+1=85,
至此,第十一个字符“A”读取后,命令格式串的内容为:
“#CI14#FO760,1020#AJR,60,60#FH/#FD/56/50/39/7A#FS#CI0#FS#FO868,1020#AOR,60,60#FDCHINA”。
(十)中西文转换模块150从字符数组A中读取的第十二个字符为中文开始字符(X’OE’),此时西文打印标识被设置,则中西文转换模块150作如下处理:
(1)将语句处理结束指令语言“#FS”置入命令格式串,计算下一指令语言在命令格式串中的起始位置;
(2)取消西文打印标识;
(3)后续步骤同(一)中对中文开始字符(X’OE’)的处理。
(十一)中西文转换模块150中“武汉WUHAN”的处理同上原理,不再累赘述。
因此,中西文转换模块150将字段“中国CHINA武汉WUHAN”转换得到的命令格式串的完整内容为:
“#CI14#FO760,1020#AJR,60,60#FH/#FD/56/50/39/7A#FS#CI0#FS#FO868,1020#AOR,60,60#FDCHINA#FS#CI14#FO1048,1020#AJR,60,60#FH/#FD/4E/64/3A/3A#FS#CI0#FS#FO1156,1020#AOR,60,60#FDWUHAN#FS”。
当中西文转换模块150对字符数组A读取完毕后,由于中文打印标识未被设置,中西文转换模块150就将上面完整的命令格式串发送给标签格式模块。
在说明本发明中文转换模块160之前,先对标签打印机200可以识别的汉字区位码进行分析。
汉字区位码有四位,其编码大多数非常规律,极少数无规律。
对于极少数编码无规律的汉字区位码,建立其EBCDIC编码值与汉字区位码的直接对照表(EBCDIC编码值为键值)。
对于大多数编码规律的汉字区位码(汉字区位码有四位),如表2,区位码前两位的取值范围为30-77(十六进制),共72个值,将区位码前两位的所有值定义为一个72项的数组QW12[],则QW12[1]=‘30’,QW12[72]=‘77’。
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
3A |
3B |
3C |
3D |
3E |
3F |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
5A |
5B |
5C |
5D |
5E |
5F |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
6A |
6B |
6C |
6D |
6E |
6F |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
|
|
|
|
|
|
|
|
表2
如表3,区位码后两位的取值范围为30-7E(十六进制),共94个值,将区位码后两位的所有值定义为一个94项的数组QW34[],则QW34[1]=‘21’,QW34[72]=‘7E’。
|
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
2A |
2B |
2C |
2D |
2E |
2F |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
3A |
3B |
3C |
3D |
3E |
3F |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
4A |
4B |
4C |
4D |
4E |
4F |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
5A |
5B |
5C |
5D |
5E |
5F |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
6A |
6B |
6C |
6D |
6E |
6F |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
7A |
7B |
7C |
7D |
7E |
|
表3
现在对中文转换模块160进行详细说明。图3a为中文转换模块160的组成结构图,图3b为中文转换模块160的工作流程图。如图3a-3b,所述中文转换模块160的工作原理为:
步骤S301,第一判断单元161根据中西文转换模块发送的中文字符(汉字)的EBCDIC编码值检索直接对照表,判断直接对照表中是否存在该汉字的EBCDIC编码值,如果是,继续下一步,如果否,转步骤S303;
步骤S302,区位码确定单元162使用直接对照表中与该汉字的EBCDIC编码值对应的汉字区位码,结束;
步骤S303,第二判断单元163判断汉字的EBCDIC编码重定义为二进制值后的二进制重定义值COMP2是否在18952至19045之间,如果是,继续下一步,如果否,转步骤S305;
步骤S304,第一处理单元164将二进制重定义值COMP2与18951的差值作为二进制重定义值COMP2的位移量,转步骤S309;
步骤S305,第二处理单元165将二进制重定义值COMP2与18952的差值除以256,得到商和余数;
步骤S306,第三判断单元166判断汉字的EBCDIC编码的第二位是否大于十六进制‘80’,如果是,继续下一步,如果否,转步骤S308;
步骤S307,第三处理单元167将余数减去1从而得到修正后的余数;
步骤S308,第三处理单元167将商与188之积加上94以及余数,得到二进制重定义值COMP2的位移量;
步骤S309,第四处理单元168将二进制重定义值COMP2的位移量除以94,得到商和余数,第四判断单元169判断余数是否大于0,如果是,继续下一步,如果否(即余数等于0),转步骤S311;
步骤S310,第五处理单元169a将商加上1从而得到修正后的商,转步骤S312;
步骤S311,第六处理单元169b将94赋给余数从而得到修正后的余数;
步骤S312,区位码确定单元162将修正后的商作为数组Q12[]的下标,将修正后的余数作为数组Q34[]的下标,Q12[商]就是汉字的EBCDIC编码对应的汉字区位码前两位,Q34[余数]就是汉字的EBCDIC编码对应的汉字区位码后两位,Q12[商]和Q34[余数]即为汉字的EBCDIC编码对应的汉字区位码,结束。
中文转换模块、中西文转换模块将中文字符串和中西文混合字符串形式的打印信息转换成由指令语言(包括汉字的区位编码、命令格式串、每个字符的打印位置、打印大小信息、打印起始位置信息)组成的多个命令格式串、标签格式模块将多个命令格式串组合成驱动文本后,标签打印机根据驱动文本中的指令语言进行打印。标签打印机的设置,如下:
A、在标签打印机上安装汉字区位库,以便根据指令语言中的汉字区位码从汉字区位库中获取中文内容打印信息;
B、标签打印机的打印驱动程序选择文本驱动(Generic Text Only);
C、为每台标签打印机定义一个唯一的打印终端号;
D、将标签打印机物理连接到PC客户端上。
图4为本发明基于大型主机平台的标签打印装置在整体产销资讯管理系统中的位置示意图。整体产销资讯管理系统运行在IBM大型主机平台上(主机机型为IBM Z9,操作系统为z/OS,数据库为DB27.1),在线交易运行在事务处理系统CICS(Customer Information Control System,客户信息控制系统)中间件上。PC客户端通过交换机、企业光纤主干网与大型主机相连,网络通讯协议为TCP/IP。
标签打印机连接在PC客户端上,在PC客户端上对标签打印机进行打印机设置,将标签打印机的驱动方式设为文本驱动,在CICS中间件中为每个标签打印机定义一个唯一的打印机终端号(ID号),在PC客户端的IBM主机仿真系统中专门建立一个打印机会话,在会话中通过设置打印机终端号和标签打印机之间的联系,将在CICS中定义的打印机终端号与连接在PC客户端上的实际标签打印机联系起来。
标签打印装置的命令控制符转换模块运行在PC客户端上,其他模块都运行在CICS中间件上。运行在CICS上的标签格式模块在向指定打印机终端号的标签打印机发送驱动文本时,CICS根据上述设置通过网络将驱动文本正确地发送到标签打印机上。
在图4中,实线为网络链路,标签打印机物理连接在PC客户端上,PC客户端与生产厂的交换机物理连接在一起,生产厂的交换机通过企业光纤主干网与大型主机物理连接在一起。虚线为数据的流向示意,标签打印装置运行在大型主机的CICS中间件上,标签格式模块在执行SEND命令时指定打印机终端号,主机系统根据打印机终端的定义信息和PC客户端的IP地址,将驱动文本从主机通过企业光纤主干网发送给生产厂交换机,生产厂交换机将数据转发给PC客户端,PC客户端再将数据发送给与它物理连接的标签打印机。
以上结合最佳实施例对本发明进行了描述,但本发明并不局限于以上揭示的实施例,而应当涵盖各种根据本发明的本质进行的修改、等效组合。