打印
[VHDL]

有谁研究过【V5】的【组播报文】接收问题?

[复制链接]
1658|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
miaz|  楼主 | 2013-1-4 22:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 miaz 于 2013-1-4 22:08 编辑

做项目过程中用到Genesys-V5的板子,与PC机通信的时候发现V5不能接收组播报文。
用的开发工具是ISE12.3,mac核是lltemac,嵌入式操作系统是petalinux,
google发现有人也遇到过:
forums.xilinx.com/t5/Embedded-Linux/LLTEMAC-multi-cast-support-yet/m-p/62014#M1953

但是3楼提到的解决方法不知道具体怎么操作,在 xlltemac_main.c文件里也没有找到 IFF_PROMISC这一项。关于IFF_MULTICAST的是ndev->flags &= ~IFF_MULTICAST;
是不是应该修改成ndev->flags &= IFF_MULTICAST;

不知道坛里有没有人遇到过同样的问题,又是怎么解决的呢?或者大家讨论一下,找找解决思路。






相关帖子

沙发
hawksabre| | 2013-1-5 07:53 | 只看该作者
使用组播连接时要注意那些问题?如何对这些连接进行组646人阅读 | 0条评论 发布于:2008-10-23 20:24:00
多点传输是一种特殊的连接方式,只有工业以太网CP支持该方式,并只能通过UDP连接(UDP是指用户数据包协议)对它进行组态。通常希望能从一个站发送消息到多个伙伴站,这时重要的是能同时发送这些消息,而伙伴站也能同时接收到这些消息。因此就需要发送和接收广播的消息,在这种情况下,网络上的所有站都能接收到该消息。同时也需要通过广播消息,例如来找到MAC地址到IP地址的转换(地址解析协议(ARP)请求)。所以通讯模块必须能接受广播报文并通过合适的软件对其进行评估。如果网络中的广播消息太多,则会使网络性能下降。这是因为每个模块都要对所有广播报文进行处理来确定这些报文是不是发给自己的。
考虑工业以太网CP的广播时要注意下面两点:
在所有工业以太网CP中,一收到广播消息就要以最高优先级滤出。所有不能使用的消息(如ARP请求),都要立即丢弃,这样可以防止广播给其它连接造成的负面影响。
无法接收任何广播消息的模块可用来向网络发送广播消息。
为确保同时向多个站发送消息,需要引入连接选项“Multicast”。通过定义(通过和SIMATIC STEP7/ NCM V5.1 + SP2一样进行组态),可激活预留的组播方向一定数量的通讯伙伴发送消息。
通讯处理器的性能:
除时间外,通常通讯处理器对其它组播消息是封锁的。如果在组态中激活一个多播组,那么在LAN控制器中它也是激活的。此时只有该特定组是激活的,并且通讯处理器仍然继续封锁网络的其它广播消息进入。在LAN控制器中标记了每个已组态的多播组。
以下是向伙伴站组发送消息时,为什么组播是更好解决办法的原因。
在一个通讯处理器中能组态多达48个组播组。
对于UDP而言,数据长度不能超过2048字节。
通讯处理器继续封锁广播负载进入。
当然要求所有伙伴站都支持组播。
发送消息时没有任何安全机制(确认)。
由于UDP协议不提供应答机制,所以发送消息没有应答。例如如果将一个消息发送给100个伙伴,那么100个确认(一个伙伴一个确认)会同时到达,这时就会出现问题。发送模块无法评估如此大量的数据。
组态多点传输连接:
在NETPRO中建立一个连接:
通常可以使用标准对话框来建立多点传输连接。选中UDP连接作为连接类型并把“All multicast stations”作为连接伙伴(参见下图):

图1:加入新连接
填写“Addresses”对话框:
在对话框中,将从224.0.1.0到239.255.255.255的IP地址作为组播地址范围。每个块都将该地址范围当作一个组播帧,而且通过标准通讯连接无法将该地址用于通讯。
可以不受限制地分配本地和远程端口,保留的小号码的端口(公认端口)用于一些特殊任务。在创建第一个组播环路时,将在默认情况下将224.0.1.0分配给它。

图2:UDP连接的属性
3在NETPRO中建立的连接应该如下:
在NETPRO中,以常见过程显示连接。可以通过“ Partner”域将它与普通传输连接相区分。如果是多点传输连接,输入“All Multicast Nodes”。


图3:UDP连接的属性
在建立项目时推荐如下:
要保证平稳的通讯,必须遵守以下的说明:
本地和远程的组播连接的端口要相同。
在LAN控制器上要注册组态的组播环路组。这样受到的报文不会被丢弃,而会被CP所处理。报文一旦传送给LAN控制器,仅剩下的相应的信息就是使用的端口号。
例子:
两个站之间,组态一个组播连接。


  Station: 1 Station: 2
IP address 140.90.36.1 140.90.37.1
MC circuit 224.0.1.0 224.0.1.0
local port 2000 8000
remote port 8000 8000

案例 1: Station 1 从组播环路224.0.1.0发送数据.
station 1的远程端口号8000对应Station 2的本地端口号8000。

案例 2: Station 2 发送数据到组播环路224.0.1.0.
Station 1不会接收报文,即使它是组播环路组中的一个节点。因为Station 1的本地端口号2000不与Station 2的远程端口号8000一致。

要满足上述两个案例, 远程和本地的端口号必须保持一致。
关于组播地址的特殊选择问题
在本例中, 组播报文从Station 1发送到Station 2 。


  Station: 1 Station: 2 Station: 3
IP-address 140.90.36.1 140.90.37.1 140.90.38.1
MC circuit 224.0.1.0 224.0.1.0 225.0.1.0
local port 8000 8000 8000
remote port 8000 8000 8000

在此案例中,所有的端口号是相同的。两个站之间的数据的双向传输是没有限制的。
但这里很有意思的是, Station 3可以接收所有的组播报文。 乍一看, 这是不会工作的,因为Station 3 不是组播环路224.0.1.0中的节点。
要理解这一点,需要看一下组播地址的结构:

在LAN上显示的组播地址:

对于组播, IP地址的后3个字节复制到MAC 地址01.00.5E.00.00.00的后3个字节。这样的MAC地址在LAN控制器中用于注册不同的组播环路。 以这种方式你可以保证报文可以到达各自的LAN控制器中。另外,复制的第一个字节的最高位被忽略而且经常为0。
在LAN中,所生成的MAC地址可以在数据报文中的目标地址可见。

结果:
下列3个组播环路地址在LAN控制器上有相同的入口。即相同的MAC地址。
224.0.1.0
225.0.1.0
226.128.1.0
MAC address = 01.00.5E.00.01.00
·         这显示不同的组播IP地址实际代表相同的组播环路。所以需要考虑的是,当分配组播环路时,避免不想要的报文传播到未被寻址的站上。
这是遵循RFC(Internet标准)的一个说明。

使用特权

评论回复
板凳
hawksabre| | 2013-1-5 07:54 | 只看该作者
这是网址http://home.gongkong.com/profile ... 2011042823220200006    希望对你有帮助

使用特权

评论回复
地板
miaz|  楼主 | 2013-1-5 16:41 | 只看该作者
hawksabre 发表于 2013-1-5 07:54
这是网址http://home.gongkong.com/profile/blogdetail.aspx?id=2011042823220200006    希望对你有帮助 ...

谢谢你,看了一下,貌似和我要解决的问题关联度不大

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝