维尔瓦 发表于 2022-4-10 18:30

AT32F425-测评报告-CANOpen移植05

<h2>简述</h2>

<p>本系列是基于雅特力-AT32F425R8T7-7开发板的测评报</p>

<p></p>

<p>目标:</p>

<p>&gt; 移植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>&nbsp;</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">&nbsp;</p>

<div class="parsedown-markdown">
<h2>代码移植后如下所示:</h2>
</div>

<p cid="n52" mdtype="paragraph"> &nbsp;</p>

<div class="parsedown-markdown">
<h2>心跳报文发送情况</h2>

<p>根据上面的教程,移植好代码后,会有一个心跳报文的效果</p>
</div>

<p cid="n52" mdtype="paragraph"> &nbsp;</p>

<h2 cid="n58" mdtype="heading">数据分析</h2>

<blockquote cid="n61" mdtype="blockquote">
<p cid="n63" mdtype="paragraph">截获一个数据帧:</p>

<p cid="n63" mdtype="paragraph">序号&nbsp;&nbsp; &nbsp;传输方向&nbsp; &nbsp; &nbsp;时间戳&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ID&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;帧格式&nbsp;&nbsp; &nbsp;帧类型&nbsp;&nbsp; &nbsp;长度&nbsp;&nbsp; &nbsp;数据&nbsp;&nbsp; &nbsp;<br />
0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;接收&nbsp; &nbsp; &nbsp; &nbsp;18:14:51.977.0&nbsp;&nbsp; &nbsp;0x00000702&nbsp;&nbsp; &nbsp;数据帧&nbsp;&nbsp; &nbsp;标准帧&nbsp;&nbsp; &nbsp;1&nbsp;&nbsp; &nbsp;05&nbsp;</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">&nbsp;想要知道报文的含义,当然我们要看文档了,由上图可知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">&nbsp;</p>

<p cid="n52" mdtype="paragraph">&nbsp;</p>

<p>&nbsp;</p>

lugl4313820 发表于 2022-4-10 21:50

移植CANOpen协议,又学到新知识,感谢分享,希望可以跟你学习这方面的知识!

freebsder 发表于 2022-4-12 16:21

<p>可以试试 canopen-stack,以前ucos商业化配置的canopen栈,开源了。</p>

维尔瓦 发表于 2022-4-17 18:53

freebsder 发表于 2022-4-12 16:21
可以试试 canopen-stack,以前ucos商业化配置的canopen栈,开源了。

<p>感谢大佬,我去看看</p>
页: [1]
查看完整版本: AT32F425-测评报告-CANOpen移植05