标签: can-bus

如何编写简单的CANopen层

我们有一个机器人项目,电机控制器使用CANopen进行通信.我需要使用主微控制器与这些电机控制器进行通信.问题是我需要在这个微控制器中开发CANopen层,但我只知道如何在低级别(CAN)发送和接收.

我不太了解CANopen(PDO,SDO,Heartbeat,对象字典等).我试着阅读CiA规范,但它非常复杂.如果有人能指出我正确的方向,或者给我一个很好的教程来编写一个简单的CANopen层,我将不胜感激.

can-bus canopen

18
推荐指数
2
解决办法
3万
查看次数

LPC 2292和LPC1758板之间的CAN通信"帧起始"错误

我正在尝试在几个LPC设备节点之间设置CAN通信.我的设置包括一些写入CAN总线的CAN节点.例如,LPC 2292 CAN控制器可以写入CAN总线,LPC1758可以接收数据.这完全没问题.现在LPC1758有2个CAN控制器,我设置了一个用于接收数据,另一个用于在总线上传输数据作为响应.我还为LPC 1758 CAN 1发送和接收以及CAN 2发送和接收设置了中断处理程序.(我没有LPC 2292的代码.它不在我的控制之下)

我的问题是在LPC1758方面.这里CAN 1接收器能够从其他CAN节点获取数据,因为我可以看到被调用的中断向量处理程序.问题是当LPC 1758 CAN 2 tranmistter写入总线​​时.它会出现总线错误.更具体地说"Start of Frame " error.(我使用Ulink2调试器).现在读取CAN规范,我知道CAN消息的起始帧应该从低(主导)位CAN规范开始; 见第3页

我该如何解决此错误?它不是可配置的寄存器,我可以将第一位设置为0或1.我运行KEIL附带的默认LPC 1758 CAN代码C:\Keil_v5\ARM\Boards\Keil\MCB1700\CAN我认为代码很好,因为当我在KEIL的模拟模式下运行代码时我可以看到CAN通信运行良好.

这个"框架开始"是否是我缺少的其他一些配置的副产品?

Update Code : 
Run Code Online (Sandbox Code Playgroud)

我运行KEIL附带的默认LPC 1758 CAN代码C:\Keil_v5\ARM\Boards\Keil\MCB1700\CAN我认为代码很好,因为当我在KEIL的模拟模式下运行代码时,我可以看到CAN通信工作正常.除了波特率之外,我没有对代码进行任何更改.CAN设置:

/*----------------------------------------------------------------------------
  setup CAN interface.  CAN controller (1..2)
 *----------------------------------------------------------------------------*/
void CAN_setup (uint32_t ctrl)  {
  LPC_CAN_TypeDef *pCAN = (ctrl == 1) ? LPC_CAN1 : LPC_CAN2;

  if (ctrl == 1) {
    LPC_SC->PCONP       |=  (1 << 13);           /* Enable power to CAN1 block */
    LPC_PINCON->PINSEL0 |=  (1 << …
Run Code Online (Sandbox Code Playgroud)

embedded microcontroller arm can-bus

15
推荐指数
1
解决办法
894
查看次数

如何在linux上创建虚拟CAN端口?(C++)

我想创建一个程序来模拟CAN端口,以便为另一个大型应用程序进行测试.程序应通过此虚拟CAN发送先前记录的数据.有人有这方面的经验吗?

我正在考虑建立虚拟COM,并通过它发送包含在CAN帧中的数据.可以吗?我怎么能在linux上建立虚拟COM?发现这个线程的虚拟串口Linux, 但遗憾的是我不知道如何将它实现到程序的源代码(linux下的初学linux用户和程序员).

很乐意阅读您的经验和建议.

c++ linux port virtual can-bus

14
推荐指数
1
解决办法
2万
查看次数

Java和CANopen

背景

我需要在笔记本电脑上创建一个Java程序来接收/发送CANopen消息.

选择RJ45作为网络的物理介质.我是CANopen和Java通信编程的新手.

请原谅我,如果我似乎不知情.事实是,我已经阅读了很多,但我仍然不知道如何开始.

问题

  1. 除了将PC连接到CANbus网络外,CAN-PC适配器还能做什么?
  2. 是否可以在没有CAN-PC适配器的情况下将笔记本电脑连接到CANbus网络?
  3. 如果需要CAN-PC适配器,我应该使用哪种适配器?PCMCIA,并行,串口,USB等?
  4. 如何开始编写java程序来监听/写入CANopen消息?
  5. 我应该使用哪些库?
  6. 我需要创建自己的驱动程序吗?
  7. 我的程序应该处理心跳监控,错误检测等吗?或者这些由CAN-PC适配器处理?
  8. 如何从CANbus节点检索特定信息?
  9. 如何创建EDS文件和对象字典?每个节点都需要它们吗?
    1. 如何在不购买CAN硬件的情况下模拟CAN网络来测试我的Java程序?

java automation network-protocols can-bus canopen

12
推荐指数
1
解决办法
5902
查看次数

通过SocketCAN提升:: asio

我正在考虑利用Boost AsioSocket CAN读取数据.在linux/can.h中没有任何花哨的东西,设备应该像loopback接口一样,并与原始套接字一起使用.

看一下basic_raw_socket界面,似乎我可以利用 basic_raw_socket :: assign来分配用它创建的本机套接字

socket( PF_CAN, SOCK_RAW, CAN_RAW );
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所拥有的

namespace can {
       class CanSocket {
       public:
               typedef boost::asio::ip::basic_endpoint<CanSocket> endpoint;
               typedef boost::asio::ip::basic_resolver_query<CanSocket> resolver_query;
               typedef boost::asio::ip::basic_resolver_iterator<CanSocket> resolver_iterator;
               typedef boost::asio::basic_raw_socket<CanSocket> socket;
               typedef boost::asio::ip::basic_resolver<CanSocket> resolver;

               CanSocket()
                       : _protocol( CAN_RAW )
                       , _family( PF_CAN )
               {
               }

               static CanSocket v4()
               {
                       return CanSocket();
               }
               static CanSocket v6();
               int type() const;
               int protocol() const;
               int family() const;

               friend bool operator==(const CanSocket& p1, const …
Run Code Online (Sandbox Code Playgroud)

c++ sockets boost can-bus boost-asio

9
推荐指数
2
解决办法
3175
查看次数

CAN 总线上传输的 CAN 消息如何被其他节点确认?

我知道显性确认位是由另一个节点传输的消息的接收者发送的。

我无法理解的是,接收器在接收到整个消息后是否发送了单个显性位,或者接收器发送了相同的消息,其中 ACK 位字段作为显性?

或者是在发送器传输数据帧时接收器将 ACK 字段驱动到不同的电压电平?

另外,两个 CAN 节点可以确认同一消息吗?如果是,那么如何?如果不是,那为什么?

我需要澄清这一点。

embedded can-bus

8
推荐指数
1
解决办法
9787
查看次数

如何让 CAN 总线在 docker 容器内运行?

我成功地对在 Beaglebone black 上运行的 Nodejs 应用程序进行了 docker 化。但现在我想从 docker 容器内访问 CAN,但它不起作用。

\n

请注意,我成功地在主机中配置了 CAN 端口,并且 candump 显示它可以工作。

\n
$ candump can1\n  can1  18FF30D0   [8]  00 00 00 00 00 00 00 00\n  can1  18FF02D0   [4]  00 00 00 00\n  can1  18FF21D0   [3]  00 00 00\n  can1  18FF3CD0   [4]  00 7D 28 7D\n  can1  18FF30D0   [8]  00 03 00 00 00 00 00 00\n  can1  18FF02D0   [4]  00 00 00 00\n
Run Code Online (Sandbox Code Playgroud)\n

我在 Dockerfile 中构建了 socketcan 节点模块,如下所示:

\n
 #If you don't …
Run Code Online (Sandbox Code Playgroud)

can-bus node.js docker beagleboneblack

7
推荐指数
1
解决办法
4589
查看次数

Socket-CAN虚拟总线

如何创建多个虚拟套接字并将它们链接在一起以创建虚拟总线?

我想模拟一个应用程序,其中许多节点通过CAN相互通信.

can-bus socketcan

6
推荐指数
1
解决办法
1515
查看次数

在c ++中将struct转换为int

我有一个结构来表示具有位字段的29位CAN标识符如下.

struct canId
{
    u8 priority         :3; 
    u8 reserved         :1; 
    u8 dataPage         :1;     
    u8 pduFormat        :8;     
    u8 pduSpecific      :8;     
    u8 sourceAddress    :8;     
} iD;
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我想将此结构复制到整数变量.就像是:

int newId = iD; 
Run Code Online (Sandbox Code Playgroud)

但是我不确定这是否正确.有人可以对此发表评论吗?

编辑:我可以在每个字段上使用shift运算符,然后使用按位OR将它们放在正确的位置.但这首先使得位域结构的使用毫无用处.

c++ can-bus

6
推荐指数
1
解决办法
1504
查看次数

写:没有可用的缓冲区空间 socket-can/linux-can

我正在运行一个带有两个 CAN 通道的程序(使用 TowerTech CAN Cape TT3201)。

两个通道是 can0 (500k) 和 can1 (125k)。can0 通道工作正常,但 can1 运行写入:无可用缓冲区空间错误。

我正在使用 ValueCAN3/VehicleSpy 来检查消息。

这是在我运行程序之前。can0 和 can1 似乎都发送,但在 VehicleSpy 中只显示 can0。

root@cantool:~# cansend can0 100#00 
root@cantool:~# cansend can1 100#20
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这是在我尝试运行程序之后

root@cantool:~# cansend can1 100#20 
write: No buffer space available 
root@cantool:~# cansend can0 111#10
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

当我的程序正在运行时:对于要在 can1 上发送的所有消息,我收到此错误

2016-11-02 15:36:03,052 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f83018    010    1    00 
2016-11-02 15:36:03,131 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    0af81118    010    6 …
Run Code Online (Sandbox Code Playgroud)

can-bus beagleboneblack socketcan

6
推荐指数
1
解决办法
2万
查看次数