关于通过 USART 上的 MDB 协议与自动售货机通信时 Arduino 的 TX 线的问题
Posted
技术标签:
【中文标题】关于通过 USART 上的 MDB 协议与自动售货机通信时 Arduino 的 TX 线的问题【英文标题】:Issue regarding TX line of Arduino while communicating with Vending machine via MDB Protocol over USART 【发布时间】:2020-04-03 06:08:30 【问题描述】:我正在尝试在 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's 代码。 我想自动化这个手动过程,需要一个简单的解决方案。
【问题讨论】:
***.com/tour 顺便说一句。好问题,只在错误的网站上。你应该问这个electronics.stackexchange.com 我不是电子专家,你为什么要检查两个逆变器? @juraj 他们将使用 3 个逆变器,因为光耦合器也会逆变。另一个方向 (MDB_RX - RX1) 反转一次。这可能是一种假的 RS232toTTLSerial 逆变器。 @Juraj 如果没有两个逆变器,它根本无法工作。也许逆变器增加了有利的延迟,从而使通信发生。 @datafiddler 我使用的光耦合器是同相的。 【参考方案1】:前段时间,我在 PIC18F452 和使用 MDB 协议的自动售货机之间遇到了通信问题。
在那段时间里,我发现自 PIC 到 Machine 的通信对自 Machine 到 PIC 的通信是负面的。这是因为接收数据的电子自动售货机有一个可以反转信号的光电板电路。
我记得我在看MDB协议文档的时候看到,当是电子图VMC的部分。
我建议检查该部分,这可以解释为什么当您连接 A 和 B 线作业时,因为您反转了两次信号。
【讨论】:
【参考方案2】:已解决
问题是由于缺少状态机元素。我的设备是 LEVEL-1 MDB 设备,而我使用的自动售货机需要从属设备(无论它们是在 LEVEL-1 还是 LEVEL-2)甚至响应 LEVEL-2 SETUP 轮询,这不是标准情况MDB 规范文档。 为什么 TX 线拆了还能正常工作? 当 TX 线被移除并且随机的东西导致设备工作时,我的逻辑分析仪显示了一些随机的十六进制值。 通过响应我的自动售货机的额外设置配置投票,我能够使其顺利运行。 下图显示了VMC发送的配置数据,被我的设备丢弃了,让它表现得很奇怪。
【讨论】:
以上是关于关于通过 USART 上的 MDB 协议与自动售货机通信时 Arduino 的 TX 线的问题的主要内容,如果未能解决你的问题,请参考以下文章