AT32F425-测评报告-CANOpen移植05
<h2>简述</h2><p>本系列是基于雅特力-AT32F425R8T7-7开发板的测评报</p>
<p></p>
<p>目标:</p>
<p>> 移植CANOpen协议</p>
<p cid="n35" mdtype="paragraph">简述:</p>
<blockquote cid="n36" mdtype="blockquote">
<p cid="n39" mdtype="paragraph"><strong>CANopen</strong>是一种架构在控制局域网路(Controller Area Network, <a href="https://baike.baidu.com/item/CAN/4698193" spellcheck="false">CAN</a>)上的高层通讯协定,包括通讯子协定及设备子协定常在<a href="https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F" spellcheck="false">嵌入式系统</a>中使用,也是工业控制常用到的一种<a href="https://baike.baidu.com/item/%E7%8E%B0%E5%9C%BA%E6%80%BB%E7%BA%BF" spellcheck="false">现场总线</a>。</p>
<p cid="n40" mdtype="paragraph">CANopen 实现了<a href="https://baike.baidu.com/item/OSI" spellcheck="false">OSI</a>模型中的网络层以上(包括网络层)的协定。CANopen 标准包括<a href="https://baike.baidu.com/item/%E5%AF%BB%E5%9D%80" spellcheck="false">寻址</a>方案、数个小的通讯子协定及由设备子协定所定义的<a href="https://baike.baidu.com/item/%E5%BA%94%E7%94%A8%E5%B1%82" spellcheck="false">应用层</a>。 CANopen 支持网络管理、设备监控及<a href="https://baike.baidu.com/item/%E8%8A%82%E7%82%B9" spellcheck="false">节点</a>间的通讯,其中包括一个简易的<a href="https://baike.baidu.com/item/%E4%BC%A0%E8%BE%93%E5%B1%82" spellcheck="false">传输层</a>,可处理资料的分段传送及其组合。一般而言数据链结层及<a href="https://baike.baidu.com/item/%E7%89%A9%E7%90%86%E5%B1%82" spellcheck="false">物理层</a>会用CAN来实作。除了 CANopen 外,也有其他的通讯协定(如<a href="https://baike.baidu.com/item/EtherCAT" spellcheck="false">EtherCAT</a>)实</p>
</blockquote>
<p> </p>
<h2 cid="n48" mdtype="heading">教程:</h2>
<blockquote cid="n50" mdtype="blockquote">
<p cid="n52" mdtype="paragraph"><a href="https://www.strongerhuang.com/CANOpen/CANOpen%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8B.html" spellcheck="false">CANOpen系列教程 | EmbeddedDevelop (strongerhuang.com)</a></p>
</blockquote>
<p cid="n52" mdtype="paragraph">NOTE: 我也是按照上面这个教程来移植的,文章写得非常好</p>
<p cid="n52" mdtype="paragraph"> </p>
<div class="parsedown-markdown">
<h2>代码移植后如下所示:</h2>
</div>
<p cid="n52" mdtype="paragraph"> </p>
<div class="parsedown-markdown">
<h2>心跳报文发送情况</h2>
<p>根据上面的教程,移植好代码后,会有一个心跳报文的效果</p>
</div>
<p cid="n52" mdtype="paragraph"> </p>
<h2 cid="n58" mdtype="heading">数据分析</h2>
<blockquote cid="n61" mdtype="blockquote">
<p cid="n63" mdtype="paragraph">截获一个数据帧:</p>
<p cid="n63" mdtype="paragraph">序号 传输方向 时间戳 ID 帧格式 帧类型 长度 数据 <br />
0 接收 18:14:51.977.0 0x00000702 数据帧 标准帧 1 05 </p>
</blockquote>
<blockquote cid="n66" mdtype="blockquote">
<p cid="n72" mdtype="paragraph">上面是其中一个心跳报文,从中我们可以得出:</p>
<p cid="n73" mdtype="paragraph">心跳报文的COB-ID:0x0x00000702</p>
<p cid="n78" mdtype="paragraph">数据类型:标准帧</p>
<p cid="n80" mdtype="paragraph">数据长度:1</p>
<p cid="n82" mdtype="paragraph">数据内容:0x05</p>
</blockquote>
<h2 cid="n94" mdtype="heading">理论分析</h2>
<p cid="n52" mdtype="paragraph"> 想要知道报文的含义,当然我们要看文档了,由上图可知COB-ID是由1792(0x700)+CANOpen设备的Node-ID,由于</p>
<p cid="n52" mdtype="paragraph">我在程序中将node-id写为2,所以报文中可以看到心跳的cob-id最终为0x700+0x02</p>
<p cid="n52" mdtype="paragraph">而数据内容0x05则表示当前设备的状态为Operational(可操作状态),说明整个协议一切正常,设备可以进行正常通信。</p>
<p cid="n52" mdtype="paragraph"> </p>
<p cid="n52" mdtype="paragraph"> </p>
<p> </p>
移植CANOpen协议,又学到新知识,感谢分享,希望可以跟你学习这方面的知识! <p>可以试试 canopen-stack,以前ucos商业化配置的canopen栈,开源了。</p>
freebsder 发表于 2022-4-12 16:21
可以试试 canopen-stack,以前ucos商业化配置的canopen栈,开源了。
<p>感谢大佬,我去看看</p>
页:
[1]