通过CAN总线选择网络层


10

我打算在工业自动化应用中使用CAN总线,但是我很难决定如何实现网络层。这里是否有人对在CAN上使用更高层协议有任何建议,该协议为如何分配消息ID和如何格式化数据包提供了指南?我应该开发自己的专有网络层还是实施CANopen等现有标准?

Answers:


7

您肯定会选择一个标准的网络层。我见过一些情况,人们会自己动手做,而且协议常常效率低下,最终浪费时间。经过验证的网络层可提供基本功能,以解决您与嵌入式设备联网时可能遇到的大多数问题,最终将为您节省宝贵的时间和金钱。

我对CANopen很熟悉,因此在这里我会做一些解释,它可能会帮助您决定是否要这样做。如果它不适合您的需要,我会考虑其他事情。

CANopen以数据为中心。所有CANopen从节点(您可以从主节点控制的事物,例如传感器或电机驱动器)都提供一个词典,其中包含您需要读写才能完成工作的所有配置,控制和数据采集数据。然后,您可以通过SDO(服务数据对象)机制分别读取/写入这些对象,或者通过PDO(生产者数据对象)机制在定时CAN消息传输中定期读取/写入这些对象。NMT服务以及节点ID分配服务(如果您希望使用它)提供了启动,关闭和重置以及心跳/节点故障检测。要使用嵌入式CANOpen库实现设备,您基本上可以设置一个对象字典,设置PDO以定期发送/接收数据更新,并编写根据这些数据条目运行的用户代码。CANopen还提供其他功能,但这只是其中的大部分。 阅读本书以获取更多信息。


这本书讨论了称为MicroCANopen的CANopen的实现。您使用哪种CANopen实现?
mjh2007

1
@ mjh2007-我们推出了自己的,因为它需要与其他协议结合使用。
J. Polfer

“ CANOpen”->“ CANopen”
Peter Mortensen 2012年

7

我编写代码以访问通用汽车上的CAN总线,该汽车使用的是专有网络层。您是否研究过OpenCAN?我会选择一个开放标准,例如CANOpen甚至OpenCAN。这实际上取决于自动化环境中所需的控制级别和灵活性。


7
有OpenCAN和CANOpen吗?啊!可怕的命名。
杰森·S

1
@杰森,我怪微软。
Kortuk

5

有很好的答案。我不知道您使用什么微型芯片,但是这里有一些微型芯片信息的链接。

J1939图书馆

具有CAN的PIC18的DeviceNet™2组从固件

CANopen的

它们每个都有代码和基本数据表,让您知道实现它们所需的内容。


1
实际上,我使用Microchip是非常有帮助的。谢谢!
mjh2007

1
这些都是为了pic18。似乎使用CANopen时,您有一个可以修改其他设置的主机,对于我所使用的canbus包括的大多数功能而言,这非常合适。
Kortuk

您是否使用Microchip库来实现CANopen?
mjh2007

1
在实施它的过程中,这是一个缓慢的过程,因为它需要许多不同的人来帮助我进行系统更改。如果有帮助,我将在实施时向您更新。
Kortuk

1
@ mjh2007,我停止为处理器工作,接手的学生们决定,在不使用以前的硬件之前,他们会买很多他们更喜欢的东西。再次,该教授的项目没有任何进展,但是当一位教授不知道发生了什么而只允许人们每年更改所有内容时,就会发生这种情况。
Kortuk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.