2017-07-09 374 views
0

我有一台电脑(即用作服务器)和几个板与Atmega微控制器是这样的:广播获取数据在UART

computer and board

将计算机连接到UART & RS485(板带USBRS485转换器)(我有导致我不能采用MODBUS)的限制。我想从广播服务器通过总线消息并从每个板的取ID(板ID是4位)。

当单板收到广播消息并尝试发送自己的ID并且服务器收到一些伪造的ID时,我认为它与所有单板想发送一次中的数据时碰撞问题有关。

之后我搜索一下这个问题找到了一种方法是把一个不断在每个省一个特殊的延迟发送数据,并在董事会收到广播消息与延迟发送ID板......这样它的工作很好,我没有看到碰撞,但有一些问题:

  1. 可能是2板的延迟数相同。
  2. 用于电路板的小型计数的好方法。
  3. 额外的过程要当上巴士安装板。

有人知道这个问题,可以帮助我如何解决这个问题更好的解决方案

+2

具有共享总线上的多个站点同时回答广播是一个坏主意。客户端主板上是否有一些逻辑尝试检测总线是否已被占用,然后尝试访问它作为答案(这将是CSMA/CD的“CSMA”部分) – tofro

+0

*“...和服务器收到一些虚假的ID“* - 听起来像你需要实现更好的消息完整性检查。 *“但总的来说,它工作得很好”* - 然后你的期望很低,你应该完成,对吗? – sawdust

+0

@sawdust _and服务器接收一些假ID_:我觉得在发现假身份证的错误,但我的问题是**如何防止客户端发送假身份证** ..._但作为整体工作fine_是的,它的工作,但有我有问题说问题。主要问题是_May被2板的延迟数same._,并导致冲突再次... –

回答

1

您在提到的问题中提到了Modbus,尽管您的其他一些陈述的事实似乎偏离了那里(如4位设备号,而Modbus只有1-255)。此外,Modbus 不支持支持对广播消息的响应。因此我怀疑你实际使用的是Modbus。

你可以使用(这是经典的MA网络中使用)将是一个方案:

  1. 一旦广播接收,具有根据其站上的客户端扫描总线为一个时间框架响应ID。如果您的客户端可以看到一个,请等待最短的总线时间(模块需要根据当前总线时间应答广播消息的时间+主站确认广播应答的往返时间)以及基于其模块的额外时间ID,然后返回(1)
  2. 如果客户端在指定的时间内看到总线未占用,请发回广播答案。
  3. 让主人以最短的可能消息确认来自此客户端的广播响应。
  4. 如果已发送广播响应客户端没有收到正确的ACK,返回到(1)

这不是100%安全的,完全不按Modbus规范,但可以工作。

* is a transmission, - is a "wait" 

**** (Bus master broadcast) 

    --------- station 100 waits 100ms 
    ------------------ station 200 waits 200ms 
      **** Station 100 sends broadcast response 
       ------------------ station 200 sees bus active and waits another 200ms 
       *** master acknowledges broadcast response of 100 
        ------------------ station 200 sees bus active again and waits 200ms from last seen activity 
             **** Station 200 has seen bus quiet for 200ms and sends broadcast response 
              *** master acks brc response of 200 

这可能需要相当多的时间和所需要的等待时间针对的广播响应和响应的ACK传输时间微调,但可以工作,实际上是实现这种方式在很多CSMA/CD的网络。

+0

哦,对不起,我想我不能在modbus部分中正确解释我的问题...我不能使用modbus,正如我所说的我使用rs485。 –

+0

Modbus *是*物理RS-485。 – tofro

+0

是的,但使用2 MAX485,但我用commnicuation –

0

它可能会需要更长的时间,但这里是另一种方式来做到这一点。首先,设计你的协议,以便每个命令都包含(或可以包含)一个ID,而电路板只响应命令的ID。然后,在您的主机上,您将遍历每个可能的ID并向它们中的每一个发送简单的命令。如果你得到回复,你知道有一个有这个ID的董事会。如果在一段时间后你没有得到回应,那么你知道那里没有董事会。

+0

但该设备有randome ID ..你知道一个特殊的框架,为此共振设计protokol? –

+0

我不明白你的评论或问题的重点。 –

+0

你说在你的答案中,我可以发送一个委员会的ID命令..但我不知道他们的身份证..无论如何..有一个ID随机生成并存储在..你的接近是好的,当我有ID列表董事会...另一件事是我想**广播**消息董事会..不单播 –