CANopen | 对象字典OD 03 - 启动CANopen节点的服务数据对象SDO
文章目錄
- 一、前言
- 二、實驗的目的
- 三、對象字典OD
- 3.1、Slave1.od
- 3.2、Slave1.c
- 四、CAN盒子(收發器)
- 4.1、通過SDO方式修改CANopen從站的心跳時間
一、前言
當設計一個CANopen節點(從站)時,必須必須打開SDO服務器功能。只有CANopen從站打開SDO服務器功能后,CANopen主站才能讀寫CANopen從站的對象字典。
為什么CANopen主站要修改CANopen從站的對象字典?以前我調試過一個CANopen伺服驅動器,品牌是德國ELMO。伺服驅動器上電后只發出一個上線報文,接著并沒有定期發送心跳報文。此時,就需要使用SDO指令去修改ELMO伺服驅動器對象字典里的0x1017 Producer Heartbeat Time為0x7D0,讓它每隔2S時間往總線上發送心跳報文。有一些CANopen產品需要在它上電之后,CANopen主站通過SDO指令配置它們的對象字典,讓它們達到控制要求。比如心跳報文的頻率,還有PDO映射對象,PDO的發送參數等(這些知識后續會用實驗講解)。我也調試過上海鳴志的CANopen伺服驅動器,上海鳴志的CANopen產品支持對象字典掉電保存。這樣的好處是CANopen主站不需要每一次在CANopen從站上電后對它們的對象字典進行設置(通過SDO指令),CANopen主站的程序就變得更加簡單了。總之,CANopen從站一定要開啟SDO服務器。
測試的硬件如下:
STM32工程:
鏈接:https://pan.baidu.com/s/1dtuJnqIoSHlPIBpWKJmyhw
提取碼:n1se
二、實驗的目的
使用Objdictedit軟件修改.od對象字典文件,打開CANopen節點的SDO服務器功能。接著,使用CAN盒子發送SDO報文指令修改CANopen從站的0x1017 Producer Heartbeat Time(從0x7D0改為0x3E8)。最后通過CAN盒子觀察CANopen從站發送心跳報文的頻率是不是1秒1次。
三、對象字典OD
3.1、Slave1.od
使用對象字典軟件Objdictedit打開工程上的對象字典文件Slave1.od(在我這個演示工程上的命名)。
從下圖看到,這個對象字典已經打開了SDO服務器功能。
為了演示如何開啟SDO服務器功能,我將當前的SDO服務器刪除。
開始在對象字典文件上創建SDO服務器把。首先,在下面的“添加”欄目上選擇“SDO服務器“。
然后點擊“添加”按鈕,完成SDO服務器的創建。
最后,生成Slave1.c文件。
3.2、Slave1.c
在Slave1.c里,找到“index 0x1200 :Server SDO Parameter"的備注,表示已經打開SDO服務器功能了。
然后編譯代碼,將新的代碼燒錄到STM32里。
四、CAN盒子(收發器)
4.1、通過SDO方式修改CANopen從站的心跳時間
查看心跳時間在對象字典里的位置與信息。
接著,使用CAN盒子充當CANopen主站,使用SDO報文修改CANopen從站的心跳間隔時間。
總結
以上是生活随笔為你收集整理的CANopen | 对象字典OD 03 - 启动CANopen节点的服务数据对象SDO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python读取matlab文件_pyt
- 下一篇: ajax 实时进度_如何做好项目进度管理