ATMBOX金融自助设备技术论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

社区广播台

查看: 7327|回复: 43

ATMC如何来操作硬件

  [复制链接]

23

主题

11

好友

1233

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1233
点券
863
金币
37
发表于 2007-7-10 18:20:08 |显示全部楼层
分享到:
ATMC如何来操作硬件


                  刘永胜      2005年8月于广州洛溪江畔



序言
    在国内ATM行业很多人对ATMC软件是怎样来操作硬件是不熟悉的。但是,无论你是硬件工程师、软件工程师还是业务销售,如果知道软硬件是怎样交互,对于工作是将有很大帮助。很多硬件工程师和业务销售对这方面不熟悉倒是可以想到的,其实绝大部分的软件工程师也一样懵懵懂懂,因为对于象Diebold、NCR这样的国外公司,操作底层硬件的部分都被国外封装起来,所以也不会真正的知道,导致能够同时理解上层应用和底层硬件的人如凤毛麟角,少之又少,这方面确实需要加强了。

    无论如何,要是你知道了ATMC是怎样来操作硬件的,那么对你以后的工作大有帮助,很多人可能也迫切的需要这些知识。本文提到的为普通的Windows平台下的ATMC,其中的流程与你了解的机器可能有所差别,但不会影响你的理解。我们不考虑特殊的硬件,只针对WOSA/XFS里面提到的设备,并且认为ATMC是符合WOSA/XFS标准的。


术语
    硬件指令――指ATMC向硬件发送的指令。我们以读卡器IDC来做例子,对于读卡器厂商来说,它会提供一个硬件手册,里面有一部分涉及到硬件指令编程。读卡器一般通过串口、USB或其他方式连接到主机箱,如果ATMC向USB口发送一串字节流,即可达到操作读卡器的目的。该串字节流有一定的格式,是由硬件来定义的,比如开头为一个起始符、接着是命令的种类、接着是对应命令的传入信息、最后是校验码。只要ATMC按照读卡器的要求,组织好一串字节流发送到USB口,则一个硬件指令就完成了。读卡器硬件收到该串字节流后,会自己解析,然后进行相应的硬件动作。
    SP――下面提到的SP都指符合WOSA/XFS规范的设备驱动程序。

正文
    好了,我们开始转入正题了。我们将从ATM上电启动到进入正常的服务来完整的看一下。

    打开ATM后,机器上电,然后进入Windows操作系统,这个过程跟普通的PC机差别不是很大。一般厂家会将ATMC放到Windows的“自启动”里面,当Windows启动完成后,ATMC就会自动启动了。

    ATMC首先会调用SP的WFPOpen接口,依次打开各个设备,相当于ATMC与各个设备连接起来,同时向各个设备发送初始化的指令字符。你将会在ATM的界面上看到类似画面“系统正在启动,请稍候”,此时你会听到机器的读卡器、机芯等设备在不停的响,这就是硬件在上电启动做初始化动作了。等到所有的机器硬件初始化动作完了后,机器进入下一个流程。

    在ATM的各种硬件设备中,有几个设备被称为“必需设备”,一般是读卡器、流水打印机、键盘,但是可能不同的银行要求的“必需设备”有所不同,或多或少都有可能。到底该ATMC的“必需设备”是哪几种,一般ATMC都会对所有的硬件进行编号,在配置信息里面配置哪几个编号是的,从而不会将“必需设备”写死,只需改动配置信息就可以改动“必需设备”了。

    为什么对“必需设备”特别强调呢?因为ATMC要想进入正常服务的欢迎画面,一般必须满足下列条件:
1、网络是通的。ATMC会在硬件初始化完后,向主机发送第一个数据包,该数据包可以理解为“网络状态测试包”,如果收到主机的回复,则网络是好的。
2、所有的“必需设备”都是好的。ATMC会在硬件初始化完后,依次调用SPI接口WFSGetInfo,获取“必需设备”的硬件状态,如果所有的“必需设备”都是好的,则ATM可以使用;只要任何一个“必需设备”的硬件状态返回值为不正常,ATM就不能进入正常服务画面。

    如果ATMC程序写的完善些,你可以看到ATMC启动会停在暂停服务状态,画面不停的提示因为网络故障或硬件故障导致不能进入服务。看了上面的,你就知道为什么ATM启动后进入不了正常服务了。当然,不同的ATMC还有其他一些判断条件,不过跟硬件没什么关系。

    当所有的条件都好了后,ATMC会进入正常服务状态,显示“欢迎插卡”画面。一进入该画面,ATMC首先向读卡器发送硬件指令,打开读卡器口的闸门,等待进卡,接着向读卡器上面的指示灯发送指令,让其发亮闪烁,提醒客户插卡。如果打开读卡器闸门失败,则读卡器会在返回信息中填上相应的错误提示,SP发送完开闸门命令后,会等待自己发送命令的返回,分析返回数据来确定本次的硬件操作是否成功。如果发现不成功,ATMC就会转到“暂停服务”。这种处理贯穿于整个ATMC,即如果ATMC向某个硬件发送一条指令后,发现其返回错误,则跟进情况会进行处理,如果是“必需设备”错,就要转到“暂停服务”。

    此时,ATMC一直在欢迎画面循环,等待一个客户插卡。如果有个客户插卡进来后,读卡器传感器检测到了,就会通知SP,有卡进来了。接着SP向读卡器发送一个关闭闸门命令,将闸门关掉,防止其他的卡再插进来。同时SP会发送一个关闭指示灯的指令,将指示灯关闭。接着SP发送一个读卡的指令,读卡器硬件开始读卡,接着将读出的结果放在一串字节流中,返回给SP,SP会分析该返回字节流,因为其格式都是硬件手册里面定义好的,哪一位表示什么都是固定的。SP根据各个位的意思进行分析,从而知道是否成功,并且该字节流里面还包括1、2、3磁道的数据,SP根据字节流的位置可以将磁道依次取出,放到一个变量中存起来,以便ATMC中使用。读完卡后,读卡器就先停下来,卡保留在里面,该其他硬件工作了。

    在没卡插入时,键盘是没有打开的,即你按键是没反应的。当卡插入后,SP向键盘发送命令,通知其打开,等待接收客户的按键。键盘分为两种处理,一种是每按一个键,就向ATMC返回一个按键值;另外一种是一直按几个键后,才一次性返回给AMTC(典型的是输入密码),这些在SP中分别被称为GetData和GetPin。客户按一个键,硬件马上将按键传回SP,也是通过返回字节流的方式,将按键的信息放在字节流中,从而软件才知道客户按了什么键。至于你在功能选择画面,选择是“查询”、“转帐”、“取款”、“存款”还是“改密”,ATMC是怎样知道呢?其实ATM上面的那几个功能键在软件上看,和数字键盘都没有区别,如果客户按了某个功能键,则按键的硬件返回字节流中可能包含一个“F1”,如果客户按了数字键盘1,则按键的硬件返回字节流中可能包含一个“1”,从而软件就可以区分出是按了功能键还是数字键。简单些,就是功能键和数字键都有唯一的编码返回给SP。如果你要是迷惑我按了“F1”,软件是怎么知道我选择了“查询”,而不是“取款”呢?这个问题简单,既然“查询”的按钮是ATMC显示在屏幕上那个位置,ATMC当然会知道哪个功能键对应那个位置的按钮的。

    接着,用户进入功能选择画面,“查询”、“转帐”和“改密”没什么好说的,纯粹跟主机通讯,属于纯软件的事,跟硬件没关系。在所有的交易中,我们要记住流水和凭条打印机是要不停的动作的。如果ATMC觉得需要打印流水了,它只是简单的将要打印的内容按照打印机硬件要求的格式组织一下,形成字节流,然后通过串口发送给流水打印机,流水打印机收到这串字节流,会根据开头的几位知道这是个打印命令,打印的内容在紧接着的后面,从而流水就会移动打印头,不停的来回打印,同时打印机的进纸机械模块会配合向前进纸,以便换行。至于打印头怎样移动这些控制,不是SP的事情,是纯粹打印机硬件的事情,SP只管把打印指令扔给打印机,剩下的工作就是打印机硬件的事情了,要知道打印机里面也有控制板和简单的逻辑处理。SP只关心发送打印命令后,打印机是否返回打印成功给SP。这里面还有个异步和同步打印的概念,不过跟硬件关系不大,可以将异步处理放到打印机硬件中,也可以放在SP中。

    凭条跟流水差不多,一般只是多了个切纸、送纸命令而已。对于象FORM等概念跟打印机硬件没有半点关系。

    我们来看看“取款”和“存款”吧。当客户选择了“取款”后,客户输入取款金额,ATMC会先向主机发送一个报文,将客户的钱扣掉,ATMC等待主机返回报文,如果返回的信息是一切OK,则ATM开始出钞了(我们不考虑是先发报文还是先挖钞的问题,以及逻辑配钞,对于我们讲的内容来说都一样)。

    ATMC先向机芯硬件发送挖钞指令,指令中包括每个钞箱需要挖几张的信息。这些信息是SP算出来的,SP会根据自己保存的钞票信息,象剩余张数、钱箱面额,钱箱币种等,进行相应的配钞算法,即算出哪个钱箱应该出几张钱,接着将这些信息组合成机芯要求的字节流送给机芯。机芯收到指令后,开始在对应的钱箱里面挖钞,至于挖钞过程中发现有不合格钞票,是单张回收还是整叠回收、真空挖钞摩擦挖钞之类的特性,跟SP没关系,纯粹是机芯自己的事情,SP不管这些,它只管机芯最后返回的信息是挖钞成功还是挖钞失败,每个钱箱分别挖了几张,回收了几张。接着SP向机芯发送送钞指令,钞票一般会送到机芯堆叠器先放起来,接着SP发送打开出钞闸门命令,打开出钞闸门,以便客户能够拿到钱,同时SP发送命令将钞票从堆叠器送到门口,等待客户把钱拿走。当钱到门口时,ATMC会有个超时,等待钱被拿走。SP会不断发送硬件指令,该指令用于检测钱是否被拿走,硬件接收到该指令后,会利用传感器检测钱是否还在门口。如果某次SP发送硬件指令后,机芯返回信息表明钱已经被取走了,说明机芯的传感器已经检测到钱不在门口了,这时SP会发送一个事件给上层的ATMC,ATMC会调用关闭出钞闸门的命令,该命令传入到底层的SP中,SP直接通过串口向机芯发送关闭闸门指令,闸门关闭,接着SP发送结束取款指令,机芯就做一些最后扫尾的恢复性动作。这时你会听到机芯各个传动机构要响一阵,恢复到正常的状态。

    如果客户超时没有拿走钞票,结果差不多,只是在关闸门前,SP会先发送回收钞票的指令,然后再关闸门。至此,一个完整的取款交易完成了,如果交易过程中有些硬件异常,其硬件动作也相差不多,只是中途会直接结束取款操作,返回一个错误信息给SP的。

    下面来看看“存款”。当客户选择“存款”后,SP先向机芯发送打开闸门的指令,机芯闸门打开,等待客户放钞。如果客户有钞票放入,按了“确认”键,SP会发送关闭闸门的命令,接着开始发送指令,让机芯验钞模块工作,验钞模块开始验钞。整个验钞过程,SP也是不关心的,SP只管验钞的结果,机芯验完钞后,将钞票放在机芯中间的临时缓冲区内。如果验钞通过,ATMC发送一个报文给主机记帐,收到主机的确认信息后,SP发送指令通知机芯将缓冲区的钞票收到钱箱里面。机芯通过传送机构将钱送到钱箱里面。至于哪些钱箱送到哪个钱箱,这个是机芯硬件自己要判断的,SP并没有指示哪几张钱必需放到哪个钱箱中。当钱都放到钱箱后,机芯返回给SP一个完成信息,SP再通过事件通知上层ATMC,整个存款过程就完成了。

    当客户做完自己想做的交易后,他可以选择结束交易。此时,SP首先向读卡器发送一个退卡指令,读卡器将卡退出。如果在ATMC指定的超时时间内客户没有将卡取走,SP会发送一个回收卡的指令,将卡收到回收槽中。无论是回收卡还是被客户拿走卡,读卡器都会再次打开闸门,同时SP发送指令,让指示灯变亮,又重新进入下一个交易。

    好了,到这里为止,一套完整的交易已经完成了。

    我们最后稍微看看一些常用的维护功能,就是操作员经常做的加钞、清机等。清机比较简单,一般只是将软硬件中的各种计数等信息复位为0。加钞的过程如下:操作员选择加钞,SP发送指令给机芯,通知机芯做些准备动作,比如有些钱箱是上锁的,必需先解锁才可,不然钱箱拔不出来,就没法加钞了。加钞对应着SP里面的StartExchange命令。这时操作员可以把钱箱拿出来了,然后放好钞票重新将钱箱放好,柜门关好。SP接着发送一个类似于机芯复位的命令,使机芯动作,最后让机芯达到一个可以正常使用的状态。

    到这里我们应该对ATM硬件和软件是如何配合,从而完成整个交易比较清楚了,再看ATM就少了些雾里看花的感觉吧。
1

查看全部评分

67

主题

0

好友

712

积分

高级会员

Rank: 4

积分
712
点券
692
金币
2
发表于 2007-7-11 15:39:43 |显示全部楼层
顶~版主的帖子即使对一线硬件工程师的综合技能也有很好的提升作用啦!
收藏!感谢!

4

主题

0

好友

33

积分

新手上路

Rank: 1

积分
33
点券
23
金币
1
发表于 2007-7-30 10:48:13 |显示全部楼层
版主的文章很详细,受益匪浅,谢谢!

0

主题

0

好友

16

积分

新手上路

Rank: 1

积分
16
点券
6
金币
1
发表于 2007-8-31 16:02:35 |显示全部楼层
其实一个部件就是一个打印一样,应用程序告诉驱动怎么做,驱动程序会指挥硬件做什么的。

0

主题

0

好友

12

积分

新手上路

Rank: 1

积分
12
点券
2
金币
1
发表于 2007-9-28 18:52:30 |显示全部楼层
哈哈哈,多大人,在这能遇到多大人,真是难得啊~~~~~:victory:
无效楼层,该帖已经被删除

0

主题

0

好友

22

积分

新手上路

Rank: 1

积分
22
点券
22
金币
0
发表于 2008-8-23 21:36:33 |显示全部楼层
恰可以參考運用,也可以讓我有所進步。

68

主题

0

好友

161

积分

注册会员

Rank: 2

积分
161
点券
161
金币
0
发表于 2009-2-3 11:54:48 |显示全部楼层

30

主题

0

好友

6145

积分

论坛元老

Rank: 8Rank: 8

积分
6145
点券
6145
金币
0
发表于 2009-3-27 15:40:56 |显示全部楼层

0

主题

0

好友

265

积分

中级会员

Rank: 3Rank: 3

积分
265
点券
265
金币
0
发表于 2009-7-23 22:43:49 |显示全部楼层

2

主题

0

好友

467

积分

中级会员

Rank: 3Rank: 3

积分
467
点券
467
金币
0
发表于 2009-7-29 21:15:54 |显示全部楼层

0

主题

0

好友

12

积分

新手上路

Rank: 1

积分
12
点券
12
金币
0
发表于 2009-12-8 13:25:29 |显示全部楼层

36

主题

3

好友

1470

积分

金牌会员

Rank: 6Rank: 6

积分
1470
点券
1470
金币
0
发表于 2010-1-6 00:34:47 |显示全部楼层

9

主题

7

好友

1124

积分

金牌会员

Rank: 6Rank: 6

积分
1124
点券
1124
金币
0
发表于 2010-1-6 18:43:06 |显示全部楼层

0

主题

0

好友

37

积分

新手上路

Rank: 1

积分
37
点券
37
金币
0
发表于 2010-4-1 21:53:29 |显示全部楼层

发表回复

您需要登录后才可以回帖 登录 | 会员注册

  

  
您需要 登录 后才可以回复,没有帐号?立即注册 使用QQ帐号登录
高级模式最新招聘精华资料投稿联系
回顶部