CANopen通信之NMT通信

article/2025/8/26 19:32:22

      在介绍NMT通信机制之前,先介绍一下NMT这个通信对象的定义。在以下部分中COB-ID使用的是 CANopen 预定义连接集中已定义的缺省标志符。

1) NMT 模块控制( NMT Module Control

       只有 NMT-Master 节点能够传送 NMT Module Control 报文。 所有从设备必须支持 NMT 模块控制服务。NMT Module Control 消息不需要应答。 NMT 消息格式如下:


    当 Node-ID=0,则所有的 NMT 从设备被寻址(广播)。 CS 是命令字,可以取如下值:


2) NMT 节点保护( NMT Node Guarding)

    通过节点保护服务, NMT 主节点可以检查每个节点的当前状态, 当这些节点没有数据传送时这种服务尤其有意义。

NMT-Master 节点发送远程帧(无数据)如下:


NMT-Slave 节点发送如下报文应答:


数据部分包括一个触发位( bit7),触发位必须在每次节点保护应答中交替置“ 0”或者“ 1 ”。触发位在第一次节点保护请求时置为“ 0”。位 到位 6( bits06)表示节点状态,可为下表中的数值。


注意:带*号的状态只有支持扩展 boot-up 的节点才提供。注意状态 从不在节点保护应答中出现,因为一个节点在这个状态时并不应答节点保护报文。

或者,一个节点可被配置为产生周期性的被称作心跳报文( Heartbeat)的报文。


状态可为下表种的数值:


当一个 Heartbeat 节点启动后它的 Boot-up 报文是其第一个 Heartbeat 报文。 Heartbeat 消费者通常是NMT-Master 节点,它为每个 Heartbeat 节点设定一个超时值,当超时发生时采取相应动作。

一个节点不能够同时支持 Node Guarding 和 Heartbeat 协议。

3) NMT Boot-up

NMT-slave 节点发布 Boot-up 报文通知 NMT-Maste节点它已经从 initialising 状态进入 pre-operational状态。


以上介绍NMT通信的基本原理和机制。下面介绍NMT通信具体的示例:

本示例中硬件采用的是周立功的USB-CAN模块和ARM A8架构的RSB-4210开发板,本次测试程序使用CanFestival中的示例程序修改而成。CanFestival中的各种示例程序适用于多种平台(UnixWin32等),多种场合。本次测试用的程序是examples文件夹中CANOpenShell例程。
具体开发过程如下:

可参考以下步骤修改并编译CANOpenShell应用程序

1. 打开终端”Terminal”

2. 输入命令”cd /CanFestival-3-7740ac6fdedc/examples/CANOpenShell”,切换到CANOpenShell文件夹下;

3. 输入命令”gedit CANOpenShell.c”,可以编辑修改” CANOpenShell.c”文件;

4. 根据第4章中设计的介绍,只需根据需求修改节点处于运行状态时的程序代码,即可实现所需功能。这里修改CANOpenShellOD_operational(CO_Data* d)函数中的内容如下:

void CANOpenShellOD_operational(CO_Data* d)

{

system("cd /tools");

system("echo 177 >/sys/class/gpio/export");

system("echo out >/sys/class/gpio/gpio177/direction");

system("echo 1 >/sys/class/gpio/gpio177/value");

system("sleep 1");

system("echo 0 >/sys/class/gpio/gpio177/value");

system("sleep 1");

system("echo 1 >/sys/class/gpio/gpio177/value");

system("sleep 1");

system("echo 0 >/sys/class/gpio/gpio177/value");

printf("Node_operational\n");

}

程序修改的功能是驱动RSB-4210上的蜂鸣器。蜂鸣器的驱动文件的路径为” /sys/class/gpio/”,可在该文件夹中配置相关文件值,来设定蜂鸣器输入输出的方向和值的大小。

1. 输入2”cd ..”命令,切换到/CanFestival-3-7740ac6fdedc目录;

2. 输入”make”命令编译修改过的文件;

3. 输入”make install”命令把编译好的文件放在install目录下;

4. 输入” CP CANOpenShell /media/rootfs/tools/myinstall/bin/”,把编译生成的CANOpenShell可执行文件拷贝到SD卡上;

5. 拔出SD卡插到RSB-4210开发板上(注意断电插拔SD卡);

6. 打开串口终端软件”AbsoluteTelnet”,按第3章中的相关步骤设置串口;

7. 输入”root”后按回车键;

8. 输入”./br500k.sh”,设置通信波特率为500K;

9. 输入” cd /tools/myinstall/bin/”命令,切换到CANOpenShell所在的目录下;

10. 输入” ./CANOpenShell”命令,执行CANOpenShell文件。但由于没有设置CANID等参数,此时无法执行,可按系统提示进行设置,如图5-1所示:


                                            图5-1 系统设置提示截图

15.按系统提示输入命令” ./CANOpenShell load#../lib/libcanfestival_c

an_socket.so,0,500K,1,0”,如图5-2所示,设置USBCAN-2E-U中的CAN0口通信,通信波特率为500K,把RSB-4210配置成从设备,从设备ID配置成01

执行上述命令后,从节点自动进入预运行状态,如图5-3所示


                                                 图5-2 编译命令截图


                                         图5-3 从节点状态变化截图

16.打开USBCAN-2E-U的测试软件CANTest,配置好波特率等参数后,即可配置帧ID和数据帧的值进行通信。

    在利用NMT通信方式数据帧进行通信时,数据帧的data[0]01时,切换节点状态到运行状态,发送状态和接收状态如图5-4和图5-5所示,同时驱动蜂鸣器发出2次声音;当数据帧的data[0]02时,切换节点状态到停止状态,发送状态和接收状态如图5-6和图5-7所示。

在图5-4中,设置帧ID为:00000001数据帧是8字节数据,从左至右分别为data[0]-data[7]。从1.2.5的介绍可知,ID00000001发送的报文是NMT报文data[0]=01时,表示的意义是启动一个节点,data[1]=01表示的是节点ID,这个ID5-2中设置的从节点ID保持一致。主节点发送后,从节点接收到的数据显示为NMT报文,节点状态由“Node-preOperational”转换为“Node-Operational”状态,正确响应命令请求。


                                     图5-4 CANTest中设置发送数据截图


                                 图5-5 从节点状态变化截图

在图5-6中,从1.2.5的介绍可知,设置帧ID为:00000001,表示发送的是NMT报文。数据帧中data[0]=02,表示的意义是终止一个节点。data[1]=01表示的是节点ID,这个ID5-2中设置的从节点ID保持一致。发送图5-6中所示的数据时,节点状态由“Node-Operational”转换为“Node-stopped”状态,正确响应命令请求。如图5-7所示。


                                    图5-6 CANTest中设置发送数据截图


                               图5-7 从节点状态变化截图






http://chatgpt.dhexx.cn/article/FmLvugAY.shtml

相关文章

NMT:神经网络机器翻译

前言 SMT是在神经网络之前最主流的翻译模式,统计机器翻译;NMT则是基于神经网络的翻译模式,也是当前效果最好的翻译模式。现在基于几篇paper来梳理下神经网络下的翻译模型。 NMT based RNN 1) First End-to-End RNN Trial   2014年&…

神经机器翻译(Neural machine translation, NMT)学习笔记

神经机器翻译(Neural machine translation, NMT)是最近提出的机器翻译方法。与传统的统计机器翻译不同,NMT的目标是建立一个单一的神经网络,可以共同调整以最大化翻译性能。最近提出的用于神经机器翻译的模型经常属于编码器-解码器…

Java本机内存跟踪NMT实战详解

JVM通常会额外分配内存。这些额外的分配,会导致java程序占用的内存,超出-Xmx的限制。让我们使用NMT查看内存的使用情况 NMT 是什么 NMT 是一种 Java Hotspot VM 功能,用于跟踪 HotSpot VM 的内部内存使用情况。您可以使用该jcmd实用程序访问…

fastText模型

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目标一、fastText的模型架构1. N-gram的理解1.1 bag of word 2. fastTex模型中层次化的softmax2.1 哈夫曼树和哈夫曼编码2.1.1 哈夫曼树的定义2.1.2 哈夫曼树的相关…

fastText Python 教程

诸神缄默不语-个人CSDN博文目录 fastText Python官方GitHub文件夹网址:fastText/python at main facebookresearch/fastText 本文介绍fastText Python包的基本教程,包括安装方式和简单的使用方式。 我看gensim也有对fasttext算法的支持(ht…

玩转Fasttext

Fasttext是Facebook AI Research最近推出的文本分类和词训练工具,其源码已经托管在Github上。Fasttext最大的特点是模型简单,只有一层的隐层以及输出层,因此训练速度非常快,在普通的CPU上可以实现分钟级别的训练,比深度…

FastText详解

词向量对比word2vec https://zhuanlan.zhihu.com/p/75391062 0、实战经验 word2vec vs fastText区别? 思想:将整篇文档的词及n-gram向量叠加平均得到文档向量,然后使用文档向量做softmax多分类。 word2vec vs fastText区别? …

FastText原理

一、简介 fasttext是facebook开源的一个词向量与文本分类工具,在2016年开源,典型应用场景是“带监督的文本分类问题”。提供简单而高效的文本分类和表征学习的方法,性能比肩深度学习而且速度更快。 fastText结合了自然语言处理和机器学习中最…

Fasttext

Fasttext Paper Fasttext特点 模型简单,只有一层的隐层以及输出层,因此训练速度非常快不需要训练词向量,Fasttext自己会训练两个优化:Hierarchical Softmax、N-gram Fasttext模型架构 fastText模型架构和word2vec中的CBOW很相…

[NLP]文本分类之fastText详解

Word2vec, Fasttext, Glove, Elmo, Bert, Flair pre-train Word Embedding 一、fastText简介 fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点: 1、fastText在保持高精度的情况下加快了训练速度和测试速度 2、fastText不需要预…

FastText:高效的文本分类工具

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

FastText的简单介绍

0、引言 FastText是facebook开源的一款集word2vec、文本分类等一体的机器学习训练工具。在之前的论文中,作者用FastText和char-CNN、deepCNN等主流的深度学习框架,在同样的公开数据集上进行对比测试,在保证准确率稳定的情况下,Fa…

快速文本分类(FastText)

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

FastText:快速的文本分类器

转载请注明作者和出处:http://blog.csdn.net/john_bh/ 一、简介二、FastText原理 2.1 模型架构2.2 层次SoftMax2.3 N-gram特征 三、 基于fastText实现文本分类 3.1 fastText有监督学习分类3.2 fastText有监督学习分类 三、总结 3.1 fastText和word2vec的区别3.2 小…

DCGAN的PyTorch实现

DCGAN 1.什么是GAN GAN是一个框架,让深度模型可以学习到数据的分布,从而通过数据的分布生成新的数据(服从同一分布)。 其由一个判别器和一个生成器构成,生成器负责生成“仿造数据”,判别器负责判断“仿造数据”的质量。两者一起…

GAN论文阅读——DCGAN

论文标题:Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 论文链接:https://arxiv.org/abs/1511.06434 参考资料:http://blog.csdn.net/liuxiao214/article/details/73500737      …

DCGAN整理总结

DCGAN整理总结 GAN什么是GAN?GAN重要参数及损失函数 DCGAN什么是DCGAN?DCGAN结构TensorFlow版本MINIST手写体生成模型Pytorch版本人脸生成模型 GAN 什么是GAN? GAN是一个教深度学习模型捕捉训练数据的布局来从该布局中生成新数据的框架。最早…

DCGAN论文翻译

UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS (使用DCGAN的无监督表示学习) ABSTRACT(摘要) In recent years, supervised learning with convolutional networks (CNNs) h…

机器学习中的DCGAN-Tensorflow:用于更稳定的训练

https://www.toutiao.com/a6666031263536644621/ 自从Ian Goodfellow的论文以来,GAN已应用于许多领域,但其不稳定性一直存在问题。GAN必须解决极小极大(鞍点)问题,因此这个问题是固有的。 马鞍点的滑稽表示 许多研究人…

DCGAN 源码解析

为什么写Blog现在还没找到理由。不过用心看下去你会觉得更有意义。 我们以生成图片为例子: G就是一个生成图片的网络,它接受一个随机的噪声z,然后通过这个噪声生成图片,生成的数据记做G(z)。D是一个判别网络,判别一张图片是不是…