问题标签 [multidrop-bus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded - 任何多点总线开发帮助可用?
并不是说我可以通过谷歌搜索找到任何东西,但是......有人知道自动售货机中常用的Multidrop Bus的任何开源代码/开发框架/测试软件/等吗?
c# - 使用 COM 端口与硬币兑换器交互
我有一个硬币兑换器MEI Cashflow E7900
和一个 MDB 适配器,用于将设备连接到串行端口。卖给我适配器的商店还提供了一个测试应用程序,它是用 Delphi 编写的,用 Borland Delphi v6.0 编译。它工作得很好,但我的代码出于某种原因没有。
当您使用 MDB 时,您必须每 200 毫秒发送POLL
一次命令。如果一切正常,硬币兑换商会发送ACK
. 当我使用 Delphi 应用程序发送它时,会话如下所示:
=> 0x0B* 0x0B(星号表示奇偶校验设置为标记。默认奇偶校验为空格)
<= 0x00
所以一切都很好,这就是我所期待的。当我POLL
使用 C# 应用程序发送时,它就像:
=> 0x0B* 0x0B
<= 0x3F 0x00
有时,硬币兑换商发给我0x3F 0x11
之后POLL
毫无意义,没有像这样的任何有效回复。当我得到这样的响应时,我运行 Delphi 应用程序,它得到了一个有效的ACK
响应。我正在使用 COM 端口嗅探器来确保发送的数据没有任何差异,包括端口配置本身,并且我不断收到不同的响应。
下面是测试应用程序(Delphi)的源代码:
此处提供完整的代码清单,但此处提供的代码应该足够了。
我的代码(C#):
使用 Delphi 应用程序的轮询命令:
使用我的应用程序轮询命令:
收到的数据似乎几乎相同,除了0x3F
在开始时。但是设备的行为也不同,它似乎没有连接到 PC,当我使用 C# 应用程序时显示“机器禁用”,当我使用 Delphi 应用程序时显示“状态正常”。这可能是因为 .NET Framework 而发生的吗?任何用于 COM 端口交互的库名称都可以使用。
我有想法,为什么我得到不同的反应。也许我希望这里有人能帮助我。提前致谢。也感谢您阅读这个巨大的问题。
serial-port - 通过多点总线与串行设备通信
我是串行通信的新手。对于一个项目,我必须为自动售货机开发软件。自动售货机基本上由一台主机(一台windows xp机器)和各种外围设备组成。其中一个外围设备是硬币接收器。根据自动售货机的文档,主机通过串口与投币器进行通信。我唯一的文档是这个名为“Multi-Drop Bus / Internal Communication Protocol”的文档(我的版本可以在这里找到:http: //www.coin-acceptor.com.cn/Upload/EditorFiles/technicalfile/Mdb_version_4 -2.pdf )。
根据文档,我似乎必须使用 9600 的波特率、1 个起始位、1 个停止位、1 个模式位和 8 个数据位(链接文档中的第 29 页)创建一个串行端口连接。自动售货机文档声明硬币接收器在 COM 端口 6 上。我尝试使用 HyperTerminal 和 Putty 创建这样的连接。我的第一个问题是:
- 如何正确创建与支持此 MDB“协议”的设备的连接?Putty 和 HyperTerminal 不允许我设置“模式位”。我在文档中没有找到任何关于流控制和奇偶校验位的信息。这可以使用 Putty 或 HyperTerminal 完成吗?或者我是否需要一些其他工具来通过 MDB 进行通信?
我的第二个问题是关于如何向设备发送命令。我查看了命令并看到了一个 RESET 命令。根据该文档,在收到 RESET 命令后,设备应自行复位并以 ACK 响应。根据文档的第 33 和 63 页,如果我想向硬币接收器发送 RESET 命令,我可以通过串行线发送 HEX 值 08H。第 33 页指出,硬币兑换商会在 10H 之前监听发送到地址 08H 的命令(如果我正确地解释了文档,那就是)。第 63 页说明 RESET 命令是 08H,没有数据字节。那么我可以在 Putty 中输入“08H”并点击“enter”吗 将此命令发送到设备?或者如何通过串行线将此命令发送到设备?这甚至是正确的方法还是我在寻找完全错误的地方?自动售货机文档仅包含硬币接收器的此文档。感谢您的帮助!
亲切的问候
克里斯
serial-port - 9 bits uart emulation with /dev/tty*
I have a uncommon protocol, which requires 9600 baud, 9 bits and one stop bit. I can't find any driver, which can implement this sending/receiving.
Can I send something to /dev/tty*
for emulating these queries? What should I send? How can I emulate a 9600 baud rate?
c# - MDB协议(多点总线)——C#串口通信
我正在用 C# 开发一个 MDB 软件作为支付阅读器媒体,它通过 MDB 协议与自动售货机通信。目前一切正常,我能够与自动售货机通信。阅读 MDB 协议后,通信就像预期的那样,但我无法理解一些命令/响应......
我只有一个关于我应该发回自动售货机的回复的问题,这可能真的很愚蠢,但我真的不明白应该如何发送。
如 MDB 协议所示,当我从 MDB 机器获得 POLL 并且阅读器(我的计算机)的状态为“会话空闲”时,我可以向自动售货机发送“开始会话”命令。命令通过串行端口以字节为单位发送,并在 MDB 协议中显示为 HEX 或 Binary。BEGIN SESSION 命令应包含以下内容:
Z1 开始会话 Z2-Z3 可用资金 Z4-Z7 支付媒体 ID Z8 支付类型 Z9-Z10 支付数据
由于 MDB 协议中有很好的示例,我了解 Z1-Z7,但我无法理解 Z8-Z10(支付类型和支付数据)。这些示例在我的脑海中并没有自我解释。
有人可以告诉我应该如何将 Z8 和 Z9-Z10 发送到自动售货机。现在我一直在发送(十六进制):“0x02(Z8),0x10(Z9)和0x10(Z10)”这只是一个疯狂的猜测,它正在工作。不知道为什么,但它可能不正确。
Z8和Z9-Z10应该怎么寄?
.net - 9 位串行与 .NET
我需要通过 Raspberry Pi 3 在 Windows IoT 上运行的 Multidrop 总线节点和主进程之间建立通信。
我知道如何用 8 位字节交换数据。它的工作代码示例:
在这里,我从远程节点 发送1010 1010
和接收。xxxx xxxx
这个问题。
- 可以说,远程节点发送给我
1010 1010 1
- 可以说我需要发送
1010 1010 1
代码需要是什么样的?
更新
我考虑解决方法:
- 使用UART 的奇偶校验位。但我实际上不明白,如何。
- 使用 COM -> USB 转换器,但实际上第 9 位可能会出现同样的问题。
- 在中间使用 Adruino,它将通过 GPIO 实现 RxTx 9 位,并以我们的内部格式将数据输出到 Raspberry。
python-3.x - 是否可以在不使用硬件适配器的情况下直接使用 UART 与自动售货机(使用 MDB)进行通信?
我正在构建一个基于 linux 的无现金设备,并尝试通过 UART 直接在自动售货机中实现与 VMC 的通信,而无需额外的硬件适配器在 8 位和 9 位帧数据之间进行转换。
我只使用无现金设备,无意将任何其他外围设备连接到 VMC。
我之前读过有关此问题的问题,其中一些强调需要适配器,另一些则建议可能的 hack 来实现 9 位到 8 位的转换,但仍然找不到确认的工作和稳定的解决方案。
我的问题是,是否有可能(并且可靠)使用纯软件解决方案来实现这一目标?如何?
谢谢
arduino - 关于通过 USART 上的 MDB 协议与自动售货机通信时 Arduino 的 TX 线的问题
我正在尝试在 Arduino Mega 的帮助下使用 MDB 协议与自动售货机通信,我在这方面取得了部分成功。
我正在使用的电路附在这里
虽然电路图如下所示
Arduino Mega 通过 Serial 1 与笔记本电脑通信,自动售货机通信通过 Arduino Mega 的 Serial 2 完成。
USART被用于通信。
我面临的奇怪问题是,与自动售货机的通信只有在棕色线 A 和 B 最初未连接时才开始发送数据(它们将 Arduino TX 连接到自动售货机 RX)。一旦我看到来自自动售货机的数据,我将 A 和 B 线短接,Arduino 也开始向自动售货机发送数据。
但是如果 A 线和 B 线在自动售货机的启动处连接,自动售货机不会向 Arduino 发送任何数据,因此不会发生通信。我想让它工作,而无需每次都手动连接 A 线和 B 线。
我已经尝试将光耦 PC817C 替换为
- PC814
- 4N35
- 6N137 高速光耦
我尝试用 Hex Inverter 替换
- 74HC04AP
我尝试在 A 线和 B 线之间放置一个机械继电器,然后是固态继电器,并尝试通过外部输入连接它们,但没有任何反应。
我厌倦了在 A 线和 B 线之间添加一个光耦合器作为开关,并尝试通过固件控制它。
我什至尝试用十六进制缓冲器 HCF4050BE 和一个非门替换十六进制逆变器,但无论提到的组件的任何组合如何,问题都是一样的,只有当导线 A 和 B 最初没有连接,然后一旦数据开始来自自动售货机。
我正在使用MateDealer 的代码。
我想自动化这个手动过程,需要一个简单的解决方案。