打印
[CAN-bus/DeviceNet]

强烈**在技术论坛区打广告恳请斑竹删除tsic广告帖子

[复制链接]
4437|20
手机看帖
扫描二维码
随时随地手机跟帖
沙发
zlgCAN| | 2007-8-3 17:09 | 只看该作者

双滤波方式可以设置2个范围内的ID接收。只有ARM-CAN可以

设置离散ID的接收范围,比如LPC2119等ARM7,建议查找《LPC系列ARM微控制器的CAN接收过滤设置》文档。

使用特权

评论回复
板凳
river2008|  楼主 | 2007-8-3 21:30 | 只看该作者

谢谢,我去找找

使用特权

评论回复
地板
jdwang| | 2007-8-4 07:17 | 只看该作者

MCP2515可以实现对多个ID的滤波,详细见数据手册

使用特权

评论回复
5
wxj1952| | 2007-8-4 22:09 | 只看该作者

其实SJA1000就可以

  单节点SJA1000可以实现“报文组”过滤,每个组可以多达2的11次方个报文!
举例:假定把本节点视为一个报文组的名字——例如“北京青年报”(像是局域网上的网关/路由器组地址名字一样的概念),这个组地址下有多个报文ID,例如:今日要闻/每日评论/本市新闻/国内新闻/国际要闻/财经证券/体育/每日指南/天天副刊/...等等,多个报文ID也就是经过仲裁域的11位ID。

    那么组地址过滤在哪?且看“双过滤器标准帧”的设置:——如果选择标准帧格式,被定义的两个过滤器是不一样的。第一个过滤器过滤包括RTR位的整个整个标准识别码(注:经仲裁域的11位ID)“和”信息的第一个数据字节。它由验收代码寄存器ACR0、ACR1、ACR3的低4位和对应的验收屏蔽寄存器AMR构成。......
    这样,报文第一个数据字节也成为过滤器的一部分,它的内容就是报文组ID——北京青年报。这样的设计真是精彩,它既不影响仲裁域上的操作进程,又扩展了过滤器。......

    我没理解错楼主的题意吧,希望能有质疑论点。

使用特权

评论回复
6
river2008|  楼主 | 2007-8-8 10:28 | 只看该作者

我需要的是精确接收

    我的意思是在一个节点一开始就初始化多个ID,比如说任意的10个,且只考虑11位的ID号。当总线上面数据帧ID与设定的10个ID相同的时候才接收。
    比如说“北京青年报”下面的“今日要闻/每日评论/本市新闻/国内新闻/国际要闻/财经证券/体育/每日指南/天天副刊”这几个栏目。我拿到青年报就要求上面只有这几个栏目,其他的都是空白。
    在sja1000上面没有提供这样的功能。它的滤波还是要通过屏蔽码来设置。而屏蔽码无法做到精确接收。LPC系列是可以的。
    很高兴楼上的解答。

使用特权

评论回复
7
wxj1952| | 2007-8-8 19:58 | 只看该作者

对呀!

《北京青年报》这个ID组只可能精确接收到你初始设置的10个ID。虽然好像是2的11次方,但是网络上其他的、你的10个ID设置以外的报文ID不可能通过本节点的过滤器,因为它不属于《北京青年报》ID组。

所谓精确接收,不过是把你要精确接收的各个报文多加了一个组ID。具体接收到“今日要闻/每日评论/本市新闻/......”哪个分栏,当然是
switch( )
case:今日要闻.....
case:每日评论.....
.......

LPC系列确实是有多个过滤器可以实现精确滤波。我的疑问:当一个你所设置的10个ID之一(例如“今日要闻”)到达的时候,它是不是可以不需要
switch( )
case:今日要闻.....
case:每日评论.....
.......
这样的分辨,直接到达自己的ID中断例程?

如果是,那么真棒,LPC用硬件简化了SJA1000的分辨软件。
如果不是,那么两者应用概念上其实一样。

使用特权

评论回复
8
wxj1952| | 2007-8-8 20:19 | 只看该作者

举一个实际应用例子

DeviceNet网络中的一个节点设备肯定是要接收多个ID报文的,SJA1000就是为DN设计的,DN是如何用SJA1000实现多个ID精确过滤的?

我一直也想用LPC,就是没找到理想的仿真器。借此问一下众网友,推荐一款好用的LPC开发设备。它能像8051(接SJA1000)那样实现完全仿真吗?

使用特权

评论回复
9
river2008|  楼主 | 2007-8-15 20:47 | 只看该作者

LPC2000的原理

LPC2000相当于sja1000加了块内存和一个微处理器,内存里可以存放1024个标准帧ID,通过总线上数据帧的ID和内存里初始化ID对比来识别要接收的帧。具体也没用过。
至于sja1000,似乎不是
switch( )
case:今日要闻.....
case:每日评论.....
而是通过验收屏蔽码来进行滤波的。
例如只接收ID为001,010,111,这时设验收码为000,屏蔽码为111,这时也会接收110等ID了,所以说它不是精确的。

使用特权

评论回复
10
wxj1952| | 2007-8-15 21:54 | 只看该作者

为什么还是没理解分组过滤?

没错,是可能收到“110等ID了”,但是那是《人民日报》组的分栏ID。
    再次强调:每11位ID都具有一个附加字节的组ID同时参与过滤,也就是真正的过滤器是20位。这时验收码“附加”组ID为《北青报》,“附加”组屏蔽码为00。
    《北京青年报》组ID确实可能过滤“110—— 一个根本不存在的分栏ID”,但是在这个网络上,没有任何一个节点会发出属于《北青报》分组的110 报文ID。或许《人民日报》组有110报文ID,但不会被《北青报》过滤。因为两者分组ID不同。这个分组ID在每帧报文的第一个字节,由发送端设置,接收端配置。
当然组ID过滤之后,要软件区分一下分栏ID,所以要用
switch( )
case:今日要闻.....
case:每日评论.....
......

LPC2000确实可以精确过滤1024个标准帧ID,但是过滤之后,相对每个ID,是否都有对应的转移向量/中断向量表?否则如何区分当前接收帧是1024个ID中的哪一个?如果有,(像8086CPU那样)当然不用再进一步的区分。一切都是硬件自动的。如果没有,不用软件switch( )case:用什么?当然应该有更好的方法,只是我没用过且不知道,希望能了解更多以开眼界,诚心求教。






使用特权

评论回复
11
stars_txx| | 2007-8-15 22:51 | 只看该作者

强烈**在技术论坛区打广告恳请斑竹删除tsic广告帖子

使用特权

评论回复
12
stars_txx| | 2007-8-15 23:08 | 只看该作者

river2008和wxj1952讨论的应用目的不同

river2008和wxj1952讨论的都不在同一个假设前提下。
river2008要求CAN控制器支持任何离散帧精确的验收,wxj1952提的是制定合理的应用协议来配合SJA1000达到精确滤波的目的。

使用特权

评论回复
13
wxj1952| | 2007-8-16 08:51 | 只看该作者

说得好,赞同!

如果river2008真的是要求CAN控制器支持“任何离散帧”精确的验收,那么确实应该用LPC2000系列,因为那属于一种路由器功能,是不是可以说LPC2000系列是为路由器/网桥一类多端**换应用领域而设计的。当然也可以把它用在单链路上的节点,就象把一个服务器搬到家里当PC用一样。(比喻错了请原谅)。

但是river2008的要求讲得很清楚,“SJA1000验收屏蔽码设置不能滤波多个离散的帧ID。能不能初始设置多个ID号,与这几个ID号相同就接收,不同就屏蔽?”

也就是说,他这多个ID是“已知的”,初始预先设置好的。不是“任何”未知任意的。可以理解,他的应用要求和DeviceNet一样。决不是要设计个路由器功能的结点。

另外,DeviceNet也许只支持16个(4位)以下的离散ID,我说得分组ID方案支持11位离散的帧ID。应该说也是任何离散帧了(初始分配好的)。

使用特权

评论回复
14
river2008|  楼主 | 2007-8-16 15:08 | 只看该作者

我们的理解还是有所不同

    我说的“能不能初始设置多个ID号”是指我这个节点上需要接收的ID,而不是说总线上所有的ID是已经知道的。“SJA1000验收屏蔽码设置不能滤波多个离散的帧ID”应改为SJA1000验收屏蔽码设置不能滤波多个“未知”的离散的帧ID。
    通过具体协议是可以通过组ID来进行滤波,但是在比较复杂的系统里,协议能否满足要求就不太清楚了,不知哪位兄弟做过?
    SJA1000与微处理器通过与非门等硬件实现验收屏蔽的,而不是switch( )case。DeviceNet不太清楚,我有空去看看:)

使用特权

评论回复
15
wxj1952| | 2007-8-16 21:03 | 只看该作者

我的疑问。

对一个节点来说,如果收到“未知的”ID报文,它除了废弃之外,还能干什么?“在比较复杂的系统里”,一个节点能处理离散未知ID报文吗?
   
   路由器有对未知信息帧的默认转发功能,你是要设计多端口CAN路由器吗 ?

所以在你设计的系统里,并不存在未知ID的报文,除非系统异常。
参考一下《IP地址的管理与分配》。

看了一下LPC2000过滤器原理,印象最深的是用到了switch() case :能告诉我它
是否可以不用?

“SJA1000验收屏蔽码设置不能滤波多个“未知”的离散的帧ID。”
我说的方法,不就是“SJA1000通过20位验收屏蔽码的设置能够过滤1024个已知/未知个离散帧ID”么?LPC与之不同的是,SJA单个节点只能过滤一组1024,而LPC单结点能够过滤多组1024.因为那是路由器功能,多个端口所必需的功能。你好象只是要设计单链路吧。

我不再**什么SJA1000,本来就是没人想得到的概念,要不书上早有了。讲起来怪累的。其实IP地址分配原理和计算机网络互连原理中都讲过了,没有谁的设计是新颖突破的。

使用特权

评论回复
16
river2008|  楼主 | 2007-8-16 22:47 | 只看该作者

还是没理解我的意思

“没错,是可能收到“110等ID了”,但是那是《人民日报》组的分栏ID。”我的要求恰恰就是不能有110,所以组过滤不符合我的要求。

我做的只是四个系统之间的通讯。sja1000就能满足我的要求了。但是我想知道的是,在一个比较复杂的系统里面,比如总线上帧非常多的时候,制定协议来实现组过滤一定能实现么?

使用特权

评论回复
17
wxj1952| | 2007-8-16 23:00 | 只看该作者

抄了一段PLC2000过滤器功能原文

    不能显示图表,你可以去看原文,我的意思SJA功能和它所述一样。不过只能设一个分组范围。PLC可以设多个分组。

原文如下:
标准标识符范围表格包含标识符的一对上边界、下边界,一对范围占用一个cell,每一个cell表示的UINT32数值按升序排列。

 表5:标准识别符组表格内的一个cell 31 29 26 16 15 13 10 0 控制器# 禁能 保留 11bit标识符下边界控制器# 禁能保留11bit标识符上边界标识符

上、下边界均为闭区间即包含边界值。例如当标识符下边界=0x50、标识符上边界=0x100时,所有在0x50到0x100之间(包含边界)的报文ID均能触发接收中断,通知用户接收数据。

这个cell的定义及初始化如下: _AF_SFF_CELL sffGrpTab[1] = {{0x100,0,0,1,0x50,0,0,1}}; 

在编程设计时根据需要可以指定多个不同的接收范围(组)。



我要说的是:在这个0x5~0x100=176个ID中并不是所有ID报文都存在的,它可能只包含了10个有效的/也就是你要接收的报文ID,其它ID都是冗余的,或者叫保留/备用的,目前不会出现的。如果出现,那就是“未知”的/异常的。本节点程序没有编制处理这个ID的函数!
系统总线上的其它ID帧不会进入到这个设置范围。它们的ID没有设置在0x50~0x100这个边界范围里。
我讲清楚了吗?

使用特权

评论回复
18
wxj1952| | 2007-8-16 23:25 | 只看该作者

110不会被本节点过滤。

“我的要求恰恰就是不能有110,所以组过滤不符合我的要求。”

计算机网络上的“组”比喻为专家组,例如本节点属于物理专家组,只接收杨振宁、丁肇中、爱因斯坦这些物理专家的邮件。你说的110分配属于数学专家组,本节点收不到/通不过过滤器。

你一定要说物理专家组里有个110会过滤进来,可是那是谁发出来的邮件?黑客/未知名冒充物理专家?

SJA1000可以为254个节点配置不同的“每节点单个分组”范围。
LPC2000的意思是一个单个节点就可以获得几个/几十个分组。

使用特权

评论回复
19
wxj1952| | 2007-8-17 10:08 | 只看该作者

又及

“没错,是可能收到“110等ID了”,但是那是《人民日报》组的分栏ID。”我的要求恰恰就是不能有110,所以组过滤不符合我的要求。

我弄不懂,我发给《人民日报》的稿件,怎么会被《北青报》的编辑收到?北青报110-ID专栏还没开设,或者还在筹划当中。

“我说的“能不能初始设置多个ID号”是指我这个节点上需要接收的ID,而不是说总线上所有的ID是已经知道的。”

对的。《北青报》节点只关心自己的10个分栏ID,从不关心/也不会接收到网络上的其他的、不属于自己分组的任何ID稿件。


参考书应该是《IP地址管理与子网划分》

使用特权

评论回复
20
ourdoctor| | 2007-8-19 21:43 | 只看该作者

re

强烈建议采用lpc2294里面有4路CAN控制器,每个都可以做到精确控制,用起来非常方便,如果觉得4路不够,可以采用mcp2515来扩展,它也可以实现精确过滤的,总的成本还更低一些。

使用特权

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

本版积分规则

1

主题

7

帖子

1

粉丝