回复帖子:(客人(60.2.*.*))如何重置CAN?

用户名:   *您没有注册?
密码:   *忘记论坛密码?    标题采用“回复:XXX....”
验证码 点击获取验证码
主题标题:  *不得超过 200 个汉字
当前心情
上一页 发帖表情 下一页
内容
  

主题最新回顾(发布时间:2016-4-14 9:26:00)
--  作者:yy
--  
应该是代码处理逻辑问题,延迟几ms最多几十ms是正常的,0.5秒太长,不可能。

之前出现过这样的错误,在接收到event事件后,只读了一帧出来,同时收到的其它帧得等到下次event才接收。

你检查下代码有没有我说的这个问题,按我上个回复里来写“收到接收事件后,需要将BUFFER里的包全部读出来”

主题最新回顾(发布时间:2016-4-14 8:15:00)
--  作者:客人(60.2.*.*)
--  发送周期500ms时能捕捉到数据,发送周期为20ms时大概延时0.5-1s
发送周期500ms时能捕捉到数据,基本上是实时显示,延时时间不长,发送周期为20ms时大概延时0.5-1s,有明显延迟,如果接相关传感器的话是接收不到数据的,难道是协议有问题?但是为什么用CAN口调试工具就可以接收数据啊?

主题最新回顾(发布时间:2016-4-13 16:01:00)
--  作者:yy
--  
因该没有多大延迟的。收到接收事件后,需要将BUFFER里的包全部读出来,你再测试下,你的延迟有多少呢?

主题最新回顾(发布时间:2016-4-13 15:28:00)
--  作者:客人(60.2.*.*)
--  CAN通讯速率问题
就是在接受CAN口调试器发送的数据时,发送周期设置为20ms时,数据有很大的延迟,不知道是什么原因?CAN口发送数据以及读写的速度不是很快的么?

主题最新回顾(发布时间:2016-4-12 11:00:00)
--  作者:yy
--  
如果你用C来编程,看C的例程应该很清晰些。

C例程还封装了一个CAN的类,而动态链接库里是直接调用的CAN驱动接口,没有封装类。

主题最新回顾(发布时间:2016-4-12 10:58:00)
--  作者:yy
--  
可以参考程序中的代码。

我们驱动的接口及注释在can_api.h里面,你可以看到CAN_GetRxEvent这个函数,这个函数就是获得驱动创建的CAN接收事件,当CAN驱动接收到数据后,会激活这个event。

在例程中,我们将CAN又封装了一次,代码在EM9000_CAN.cpp里面,你可以看代码就知道例程是如何调用can_api.h里的接口的。在打开CAN的时候,调用的StartCan里面调用CAN_GetRxEvent获得了CAN接收事件,然后在接收线程ReadThreadFunc里面,调用的WaitForSingleObject去等待这个事件。当等到这个事件时,就能判断有CAN数据接收

CAN错误事件同理,和CAN接收事件原理一样的。



主题最新回顾(发布时间:2016-4-12 10:07:00)
--  作者:客人(60.2.*.*)
--  您好,您说的上层接收到的CAN接收事件是自己定义的还是程序中的m_hRxEvent?
如何判断?多谢了。

主题最新回顾(发布时间:2016-4-12 9:30:00)
--  作者:yy
--  
在CAN没有报错的时候,应该认为通信没有问题。当有CAN数据收到时,上层应用能收到CAN事件,收到事件就表示有数据收到,其它时候表示没有数据通信。

主题最新回顾(发布时间:2016-4-12 7:29:00)
--  作者:客人(60.2.*.*)
--  如何判断CAN什么时候接收到数据,什么时候没有接收到数据呢?
您好?您说的我的逻辑有问题,那您能给我提示下应该用什么标志位或者逻辑来进行判断CAN通讯成功和异常么?或者说想判断什么时候CAN收到数据,什么时候CAN没有收到数据?

主题最新回顾(发布时间:2016-4-11 11:38:00)
--  作者:yy
--  
主要是看程序的逻辑怎么写。

如果是我们的例程,当CAN有数据收到时,会将数据放入驱动的一个BUFFER里,然后会产生一个事件通知上层应用程序,例程接收到这个事件后,会循环调用CAN_GetNextReceivedFrame,将BUFFER里所有的数据都都出来显示,如果按你的改发,读前面包时flagcan被设成1,读完所有包后flagcan被设成0,读包是非常快的,所以flagcan基本一直都是0,所以我认识这个逻辑是不行的。

CAN出错后请调用我们提供的接口,重置下CAN就行了,stopchip和startchip,例程里有。