首页 > 其他分享 >MDB-RS232控制MDB协议的纸币器以及找零器详解

MDB-RS232控制MDB协议的纸币器以及找零器详解

时间:2024-12-05 21:30:36浏览次数:5  
标签:10 00 01 MDB 纸币 找零 指令 RS232

MDB-RS232控制纸币器/找零器协议指令

指令

HEX 代码

说明

RESET

30H

复位指令

SETUP

31H

读取配置信息指令(重要)

SECURITY

32H

设置纸币器安全模式(一般不需要使用,机器自身有设置)

POLL

33H

纸币器轮询指令(MDB-RS232不需要发送,由适配器自动处理)

BILL TYPE

34H

纸币器的使能和禁止指令(根据配置指令去使能和禁止对应币种)

以及对哪些纸币类型使能暂存器

ESSCROW

35H

VMC发送指令对暂存器里的纸币进行操作(比如接收,退回)

STACKER

36H

指示钱箱满状态,已经纸币数量

EXPANSION

COMMAND

37H

附加扩展指令的操作(Level 1及以上级别的纸币器都必须支持这个指令)

NOTE: 扩展指令必须和子命令一起表示和使用

  1. 对于MDB-RS232适配器,适配器本身将执行POLL(33H)命令来读取纸币器的数据和状态。当纸币机收到纸币或有需要上报的状态时,会在对应的轮询时间段内通过MDB-RS232适配器将相应的数据发送到VMC主机。因此,VMC主机软件工程师不需要考虑POLL命令和具体的时序,只需要在需要时发送RESET命令,SETUP读取配置,然后根据SETUP数据通过BILL type启用相应类型的纸币。然后,只要有纸币被接受,STACKER命令就用于查询钱箱的状态和纸币数量。
  2. 对于找零器(Recycler)的操作可以参考我们另外一个文章“如何使用MDB-RS232® 测试纸币找零器”

接下来,我们将简要介绍纸币器的开发命令序列:

例如,MDB-RS232通电后,我们将收到RESET成功数据(以下测试数据仅连接到纸币器):

MDB-RS232通电后,会主动向纸币器发送30H命令进行复位,如果设备存在,会回复00进行确认。有时候因为设备启动时间较长,会在设备复位时,报告06。因此,当使用MDB-RS232控制支付设备时,我们只需要根据MDB-RS232报告的数据和状态来判断纸币器是否正常工作。

  1. 接下来我们发送配置指令去读取纸币器的配置信息

发送31H(读取配置参数,这些回复字节的参数非常重要,必须理解)

回复示例:02 11 56 00 0A 01 00 C8 00 3F FF 01 05 0A 14 32 64 00 00 00 00 00 00 00 00 00 00 34

(纸币换算参数0A 01,可以接收的纸币类型有:类型0:1元;类型1:5元;类型2:10元;类型3:50元;类型4:100元)

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

回复示例:49 43 54 00 00 00 00 00 00 00 00 00 00 00 00 4E 45 37 37 42 32 42 2D 43 4E 59 36 01 14 F9

  1. 关于纸币器上电一直收到30 09的数据

纸币器和硬币器在上电后都是处于禁止状态。但是硬币器的禁止状态不会主动报告,而纸币器的禁止状态会一直向VMC报告,VMC会一直收到09的状态,直到使用使能指令使能了纸币接收。

现在,我们已经完成了基本配置和阅读

  1. 接下来,我们需要根据我们需要接收的纸币类型发送相应的启用命令(禁止或者接收纸币,以及是否使能暂存器),例如

         34FFFFFFFF    (这个指令就是使能了纸币器所能接收的所有纸币类型,并且全部开启暂存器)

         纸币器回复:00

         3400000000    (如果前面两个红色标记的字节00都设置为00,纸币器就是禁止接收状态)

         纸币器回复:00

接下来,当接收到纸币或纸币器状态状态发生变化时,就会在MDB-RS232轮询的时间段报告对应数据。当然,VMC工程师仍然会每隔几秒钟应用36命令来实时读取钱箱状态。它可以随时了解纸箱中纸币的状态,为找零提供准确的依据。

收到投币数据:            30 82        (30表示纸币器数据   82表示类型2的纸币即10元被压钞进钞箱)

(示例数据具体可以对照MDB协议里33H的纸币接收数据那一段)

         收到状态变化数据:   30 0B(收到一个纸币,但是无法识别,被拒收)

                                                     30 09(纸币器被禁止接收)

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

投币数据是两个字节组成,第一个字节必然是大于80H的。所以我们收到数据,30开头,就确定是纸币器的数据,后面是82,就是投币数据,分解为二进制数据就是1000 0010

(如果收到30 82 按MDB协议截图的解释就是:02类型的纸币,进入钱箱)

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

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

02 11 56 00 0A 01 00 C8 00 3F FF 01 05 0A 14 32 64 00 00 00 00 00 00 00 00 00 00 34

         也就是计算比例是红色的000A 01,币值有01 05 0A 14 32 64

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

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

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

(这里就可以看出来,我们这个纸币器可以接收1元,5元,10元,20元,50元,100元)

         如果收到投币数据 30 82 这里的82,就是收到类型2的纸币,就是收到一个10元纸币

介绍一下标准的指令序列

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

31                 回复:02 11 56 00 0A 01 00 C8 00 3F FF 01 05 0A 14 32 64 00 00 00 00 00 00 00 00 00 00 34

3700             回复:49 43 54 00 00 00 00 00 00 00 00 00 00 00 00 4E 45 37 37 42 32 42 2D 43 4E 59 36 01 14 F9

34FFFFFFFF 回复:00

36                 回复:00 02 02

具体详细文档以及针对找零器部分的讲解可以后续发布或者下载

标签:10,00,01,MDB,纸币,找零,指令,RS232
From: https://blog.csdn.net/waferstar/article/details/144276439

相关文章

  • 代码随想录算法训练营第二十九天| leetcode134. 加油站、leetcode135.分发糖果、leetc
    1leetcode134.加油站题目链接:134.加油站-力扣(LeetCode)文章链接:代码随想录视频链接:贪心算法,得这么加油才能跑完全程!LeetCode:134.加油站_哔哩哔哩_bilibili思路:其实这道题我有思路了,但是不知道怎么写,感觉太暴力了,就是找到花费最小的那个位置且汽油足够往下走的地方,开始走,......
  • CMDB平台(进阶篇):CMDB的构建指南(三)
    配置管理数据库(ConfigurationManagementDatabase,简称CMDB)是IT服务管理中的关键组件,用于存储和管理IT环境中的配置项及其关系。构建一个高效、可靠的CMDB系统,选择合适的解决方案和工具至关重要。本文将从多个角度详细探讨在选择CMDB解决方案(以乐维MCM为例)和工具时应考虑的因素。......
  • 代码随想录算法训练营第三十四天|134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据
    134.加油站在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的......
  • 为什么MDB-RS232支付适配器一上电,串口会一直收到通信数据,而且MDB转换盒上的PC指示灯一
    MDB-RS232支付通信适配器通电后,RS232端口就会不停地收到数据,而且MDB适配器上的“PC”指示灯也一直在闪烁。MDB协议里有的数据,是报告一次。有的数据是持续报告。比如设备在线状态,硬币器如果不在线,是不是在线,只能靠读取。而纸币器是会一直主动报告这个状态数据。而且如果不使能......
  • error: rpmdb, failed: BDB1507 Thread died in Berkeley DB library,error(-30973) fro
    rpm数据库错误,一般原因:yum更新等rpm软件安装进程被异常终止[root@49bdfccd7f61~]#yuminstall-yxxxerror:rpmdb:BDB0113Thread/process22858/140222685267712failed:BDB1507ThreaddiedinBerkeleyDBlibraryerror:db5error(-30973)fromdbenv->failchk:BDB0......
  • C#编程中的贪心策略:找零钱问题
    C#中的贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法并不保证总是能得到全局最优解,但它通常实现简单,且对于很多问题来说,其解是足够好的,或者可以证明贪心选择能导致全局最优解。下面是一个使......
  • RS232 串口服务器:传统通信的现代升级
    在现代通信技术的快速发展中,RS232串口服务器成为了连接传统设备与现代网络的关键桥梁。尽管RS232是一种较为古老的串行通信标准,但它在某些特定领域仍然发挥着不可替代的作用。本文将探讨RS232串口服务器如何实现传统通信的现代升级。RS232串口服务器是一种将RS232串行端口转换为网......
  • 关于GD32F450ZG系列板卡对RS232发送数据前后不匹配
            先说一下问题,在Keil5开发环境下对板卡上的RS232串口进行配置,要求发送0x5A一笔数据,但实际在串口调试助手中收到0xEC0xF3两笔数据,前后发送的数据不匹配。    针对这个问题,对一下几点重新检查,并确保无误:    1、检查引脚使能情况;    ......
  • 代码随想录训练营day29|134.加油站,135. 分发糖果,860.柠檬水找零,406.根据身高重建队列
    加油站想法:暴力遍历?好吧第一遍写的时候读错题意了,以为是比较gas[i]与cost[i+1]的值,shit。intsum1=0,sum2=0;for(intg:gas)sum1+=g;for(intc:cost)sum2+=c;if(sum1<sum2)return-1;//如果gas没cost多intyouliang=0;intn=gas.size()......
  • 【漫谈C语言和嵌入式004】深入理解RS232、RS422和RS485:嵌入式系统中的串行通信协议
            在嵌入式系统设计中,串行通信协议是设备间数据传输的重要方式。其中,RS232、RS422和RS485是三种常用的标准。这些协议不仅在工业控制、仪器仪表、网络通信等领域得到广泛应用,也在许多嵌入式系统项目中扮演着重要角色。在本文中,我们将深入探讨这三种串行通信标准......