APP下载

微型热敏打印机在立体车库存取车中的应用

2015-02-07北方民族大学电气信息工程学院

电子世界 2015年16期
关键词:存车立体车库打印机

北方民族大学电气信息工程学院 刘 超 刘 炜 赵 强

微型热敏打印机在立体车库存取车中的应用

北方民族大学电气信息工程学院 刘 超 刘 炜 赵 强

本文介绍了一种利用可编程控制器(PLC)驱动微型热敏打印机的方法。作者通过PLC的RS-485接口与热敏打印机相连,利用串口直接驱动打印机的方法,运用软件编程实现了PLC对热敏打印机的驱动。该方法成功的实现了立体车库存取车密码的打印。

PLC驱动;热敏打印机

1 引言

随着信息通信技术与经济的迅猛发展,做为信息输出终端的打印机,其应用已经涉及到商品流通、交通运输、工业控制等领域,成为各种智能仪器仪表的重要数据输出手段。其中热敏打印机凭借其打印速度快、噪声小、打印质量高、小型化、结构简单、维护方便、高性价比等特点,在商场、医疗、电信、邮政等各个领域得到了广泛的应用。本文利用PLC驱动热敏微型打印机,实现了在立体车库存取车的密码打印输出。

2 硬件设计

系统框图如图1所示,包括上位机,微型热敏打印机。当有人存车时,PLC与上位机通过串口得到存车的车位以及密码等信息。PLC将获得的信息进行相应的处理,用RS-485串口直接驱动微型热敏打印机。

图1 系统框图

本设计采用北京荣达创新科技有限公司的RD-E32-S5热敏嵌入式微型打印机,其采用RS-485通信接口。本设计的通讯参数设置为:波特率9600BPS,8位数据位,1个停止位,无奇偶校验,无握手方式。打印机的通讯参数可通过打印机后边的DIP开关实现。具体拨码如图2所示,在程序中设定PLC的P0口进行通信,利用PLC编程中的STL指令进行程序编程。对P0口具体设置程序如下:

LD SM0.1

MOVB 16#49, SMB30

如图2所示,本设计采用的是串口直接打印的方式。在这种方式下,不使用驱动程序,将字符直接输出到端口,由打印机内部的字库来实现字符的转换并打印。这种方式可以减少将字符转换为图形点阵的时间,速度更快,打印控制更加方便。

图2 通讯设置

图3 打印子程序流程图

3 打印程序设计

打印程序的主要任务是:(1)接收上位机发来的数据、命令,并存入相应的缓冲区。(2)将缓冲区的数据进行处理。如果是执行命令,则进行相应的操作;如果是数据则进行打印。(3)将缓冲区的数据传输至打印机进行打印。设计采用的热敏打印机,最大缓存可达20K,由于传输的数据量较小,不会出现打印过程中数据未打印完毕而造成数据丢失的情况。

当有人存车的时候,按下存车键,上位机产生随机6位密码,PLC接收上位机传送的车位信息和密码信息,将这些数据信息转换成相应的ASCII码并放入一个规定字符串内。当允许打印时,程序调用处理好的数据直接传输至串口,驱动热敏打印机,打印出存车的时间、车位、密码,以及注意事项等。

本设计根据实际需求,统一设置格式为选用16*16的汉字点阵,10点行间距,横向放大两倍,左右限宽度根据实际情况进行设置。打印机中一个字符的宽度为12点,打印时间左右限宽度分别为12点;打印注意信息设置为26点;打印密码设置为28点;打印车位时左限设置为30点,右限设置为27点;打印欢迎信息左右限宽度分别为36点。图3为打印子程序流程图。

下面为PLC驱动打印机打印时间的程序。PLC先读取系统时间,将读取的系统时间转换成打印机可识别的ASCII码,把转换后的年月日的信息,以及需要打印的汉字“年”、“月”、“日”相对应的汉字机内码填放到VW3500-VW3514 的15字节字符串里。然后将数据放到统一规定的打印地址进行打印操作。程序清单如下:

LD SM0.0

LPS

TODR VB120 //读取PLC的系统时间,数据为BCD码

FILL 0, VW3500, 15

AENO

HTA VB120, VB2200, 12 //将读取的BCD码转换为ASCII码

LRD

MOVB 15, VB3500 //定义以VB3500开头的15个字节的字符串

LRD

MOVW VW2200, VW3503//存放年的ASCII码

LRD

MOVW 16#C4EA, VW3505//存放汉字“年”的汉字机内码

LRD

AW> VW210, 9//如果月份大于9,将月份的高位和低位分别存放

MOVB VB2204, VB3506

MOVB VB2203, VB3507

LRD

LPS

AW<= VW210, 9//如果月分小于等于9,直接存放

MOVB VB2203, VB3507

LPP

MOVW 16#D4C2, VW3509//存放汉字“月”的汉字机内码

LRD

AW> VW212, 9//如果日期大于9,将日期的高位和低位分别存放

MOVB VB2206, VB3511

MOVB VB2205, VB3512

LPP

LPS

AW<= VW212, 9//如果日期小于等于9,直接存放

MOVB VB2205, VB3511

LPP

MOVW 16#C8D5, VW3513//存放汉字“日”汉字机内码

通过上述程序进行处理之后的时间信息,调用图3中打印时间的打印程序。打印出的时间效果如图4所示:

图4 打印时间效果图

在现实情况中存车的时候,由于存取车辆需要一定的时间,用户在进行存车操作的时候,可能上一个用户存车还未完成,下一用户已经选择了存车。此时就存在上一次的存车信息没有打印完毕,下一存车信息已经产生,打印机在打印的过程中不能接受新的数据,否则会造成数据的丢失。那么就需要加入数据保存序列,将新产生的数据进行保存,做为一个打印序列。当前打印内容打印完毕之后,将当前缓冲区的数据清除,同时将下一序列的数据转入缓冲区进行打印,并将清空数据保存寄存器。

由于在实际情况中,打印机打印信息所需时间为5秒左右,我们的立体车库有五个停车位,有很小的可能性几个用户同时进行存车操作,为了防止特殊情况的发生,本系统设计三个数据保存序列,用以保存数据。三个序列足以应对特殊情况。下面是有多组数据需打印时的处理程序:

LD T104

EU

R M11.0, 1

DECB VB90 //将存放数据的序列数减1

FILL +0, VW4200, 20 //VW4200为第一个序列的数据存放起始地址

SCPY VB4400, VB4200 //将第二个序列的数据前移至第一个序列内

FILL +0, VW4400, 20 //VW4400为第一个序列的数据存放起始地址

SCPY VB4600, VB4400 //将第三个序列的数据前移至第二个序列内

FILL +0, VW4600, 20 //存放新产生的数据

4 调试与结果

在调试初期,调取系统时间之后,打印出的时间之间有很大的间隔,图5所示。在打印机初始化程序里,对字间距等方面进行处理,依然无法解决这个问题。后来将所需要处理的时间数据和所需要打印的汉字的机内码,存入一个表内,在需要打印时直接调用这个表进行打印,解决了这个问题。

猜你喜欢

存车立体车库打印机
集中联锁车站动车存车线信号工程设计方案
中间站动车组存车设施应用条件研究
动车组列车存车线有效长度研究
广州地铁五号线应急情况下滘口存车线折返策略研究
轿厢式垂直升降立体车库的研制及应用
智能旋转立体车库设计
另类3D打印机
打印机基板大型注塑模具设计
基于PLC的升降横移式立体车库控制系统设计
FDM型混色3D打印机的设计