自动售货机MDB协议中文解析(六)MDB-RS232控制硬币器的流程和解析

描述

MDB-RS232控制硬币器的指令说明及流程解析

MDB硬币器的控制指令列表如下:

MDBMDB-RS232与自动售货机MDB硬币器测试
  • 对于MDB-RS232适配器,适配器自身会进行POLL指令,分时读取硬币器的数据和状态。硬币器有接收到硬币或者有状态需要报告的时候,会在对应的时段把相应的数据通过MDB-RS232适配器发送给主机。因此主板开发工程师不需要考虑POLL指令和具体时序,只需要在需要的时候:发送 RESET复位指令,SETUP读取配置,然后根据SETUP的数据通过COIN TYPE使能对应类型的硬币。然后只要在有硬币变化或者找零后,通过TUBE STATUS指令去查询硬币器数量状态(为后续找零指令做数据准备)
  • 找零指令,一般只要适用0F02指令即可,一般不适用0DH指令。具体需要用到的指令,可以参考后面的指令列表,产品具体测试的过程中,也可以和我们的工程师讨论,会提供更多的技术支持。

 

 

 

 

 

 

 

 

指令 HEX代码 指令说明
RESET 08H 复位指令
SETUP 09H 读取配置信息
TUBE STATUS 0AH 读取钱管信息
POLL 0BH 轮询指令(不需要发送,由MDB-RS232适配器完成)
COIN TYPE 0CH

设定哪些硬币类型可以被接收以及可以被手动取出

(这个指令根据SETUP指令读取的硬币类型去设置适用)

DISPENSE 0DH 找零某个指定的硬币类型
EXPANSION 0FH

扩展指令(仅列出重要指令,其余可以咨询技术支持工程师)

0F 00   读取设备ID信息以及可选功能信息

0F 01   使能可选功能指令

0F 02   找零指令(按金额找零)

0F 03   找零状态查询

0F 04   找零金额查询

0F 05   状态查询

接下来我们简单介绍一下硬币器的开发指令序列及适用:

比如MDB-RS232通电后,我们会收到复位成功数据(以下测试数据为仅连接硬币器):

MDB-RS232在上电后,会主动向硬币器发送08H指令去复位,如果设备存在,会回复00确认。设备复位后,会报告0B。因此适用MDB-RS232控制支付设备时,我们只需要根据MDB-RS232报告的数据和状态就可以判断硬币器是否正常工作。

 

比如上面通电后串口收到的数据:

08 00 :表示硬币器响应了复位指令,接下来收到的08 0B :表示复位成功

  • 接下来,就要读取配置

发送09H(读取配置参数,这个字节的参数都是相当重要的,必须要理解)

回复示例:031156050100030102000000000000000000000000000076

发送0F00(读取设备ID,这些参数和计算价格等无关,包括了设备代码,版本,厂家型号等,我们做DEX数据报告的时候一般都会向服务器报告这些参数,便于管理)

回复示例:49435430303031323334353637383943434D362D545741204D444201000000000366

发送0F01(完整指令示例: 0F0100000001)使能0F00参数说明里的Optional Features

回复示例:00

  • 运行过程中和硬币数据发生变化时候通过0AH指令去不断检测钱管里数量的变化

0A

         回复示例:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

前面两个字节16个位表示哪个管子是满的,后面16个字节表示16个管子里硬币的数量

到这里,其实我们已经完成了基本的配置和读取

  • 接下来,我们就要根据需要接收硬币种类(或者禁止收币),发出对应的使能指令,比如

         0CFFFFFFFF      (发出这个指令后,硬币器就可以收钱了)

         回复示例:00

         0C00000000    (如果正在找零中,或者机器维护中,我们就需要暂停收币指令)

         回复示例:00

下面等待MDB-RS232在有硬币投入或者投币状态发生变化时报告数据即可。当然一般设计工程师还是会每隔几秒适用一次0A指令实时读取钱管状态。能随时知道钱管里硬币的状态,为找零提供准确的依据。

         收到投币数据:            08 51 01 (示例数据,我们可以看MDB协议里0BH的回复那一段)

         收到状态变化数据:   08 01(投币杆被按下)

                                                     08 02(找零BUSY)

如果区别是投币数据,还是状态数据呢?

投币数据是两个字节组成,第一个字节必然是大于40H的。所以我们收到数据,08开头,就确定是硬币器的数据,后面是51,就是投币数据,分解为二进制数据就是 0101 0001 00000001

 

(按MDB协议截图的解释就是:01类型的硬币,进入钱管,钱管里现在这个类型硬币有1个)

  • 接下来介绍以下找零周期

比如 0F0206  (0F02 是固定的找零指令,后面的06就是要找的币值,当然这个币值是换算后的数值)

         回复示例:00

         硬币器找零过程中,会不断报告状态,比如找零BUSY,出口堵币等异常

         以下列出找零时候标准的指令序列:

0A                          回复:00000002000000000000000000000000000002读取钱管状态,判断是否有找零数量

0C00000000           回复:00       先禁止投币器收钱

0F0206                   回复:00        开始发送找零指令

0F04                       回复:0000    读取已经找零的数量,如果还没有找出去,就是00 00

0F04                  回复:00        只回复了一个00,就表示找零已经结束

0F03                  回复:00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03        最后再次查询找零个数

0CFFFFFFFF            回复:00       重新使能硬币器

  • 接下来我们介绍根据配置进行币值计算

比如 09H指令,我们读到的配置:031156050100030102000000000000000000000000000076 

         也就是计算比例是红色的0501,币值有0102  (0003表示最后两个位的硬币可以接收进钱管)

         因此币类型0值是01:币值就是 01*5=5,然后除以10(小数点左移1位),也就是币金额为0.5

币类型1值是02:币值就是 02*5=10,然后除以10(小数点左移1位),也就是币金额为1

(这里就可以看出来,我们的硬币器接收一个0.5元,一个1元硬币)

         找零指令 0F0206  这里的06,同样换算 06*5=30,然后除以10,就是找零3元

 

更多的技术,可以在产品具体测试的时候,咨询我们的专业技术人员

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分