CANopen版本控制產(chǎn)品修改映射PDO對象方法
CANopen版本控制產(chǎn)品修改映射PDO對象方法
CANopen驅(qū)動控制器默認可使用8個通道的PDO,每個通道最大支持8個Byte的數(shù)據(jù),標準
出廠配置了默認4個通道的數(shù)據(jù),另外4個通道為空,為了方便用戶自行修改PDO配置或者重新整合PDO通道數(shù)據(jù),現(xiàn)將修改配置方案簡單介紹如下:
?
需要用到的硬件工具和軟件如下:
一、一體化電機或者驅(qū)動控制器(CANopen版本的)
二、CANOPEN-USB轉(zhuǎn)換器/,確保能正常通訊連接
三、對應(yīng)版本的PNDS軟件或者直接用SDO讀寫
Note:?以下介紹的操作為用我們自帶的PNDS軟件修改對象字典列表來完成。當(dāng)然用SDO讀寫同樣可行,方法仍然是對對應(yīng)的對象做賦值操作。并且保存。
修改RPO步驟說明
一、正確連接PNDS軟件,讀取刷新Object dictionary數(shù)據(jù)列表
二、1400配置1600(RPDO);1800配置1A00(T-PDO)
Note:1400的子索引01用于控制RPDO-1是否允許修改,1401的子索引01用于控制RPDO-2是否允許修改。
1800的子索引01用于控制TPDO-1是否允許修改,1801子索引01用于控制RPDO-2是否允許修改。依次類推
?
三、修改配置R-PDO-1,先把1400:01最高位置1,即把對象字典列表中的最高位修改為8(16進制)
Note:如果用SDO修改,先將1400:01的數(shù)據(jù)讀回來,然后寫入最高位修改為8(16進制)(二進制最高位置1)的數(shù)據(jù)
?
四、1600:00中的子索引個數(shù)先設(shè)置為0,
Note:如果用SDO修改,寫入1600:00的數(shù)據(jù)為0
?
五、配置需要的RPDO-1對象,本例以6040,6081,607a配置到第一PDO通道,步驟如下:
1600:01=0x60600008???
1600:02=0x60400010? ?
1600:03=0?
1600:04及以后的子索引都為0
Note:對象本身的長度查詢手冊了解。32位數(shù)據(jù)用20? 16位數(shù)據(jù)用10? 8位長度用08
?
六、1600:00的子索引個數(shù)置為實際個數(shù),本例子為2個
Note:如果用SDO修改,寫入1600:00的數(shù)據(jù)為2
?
七、修改配置R-PDO-2,先把1401:01最高位置1
將1601:00清零
將1601:01?設(shè)置為需要的對象(以607A和6081為例)
1601:01 = 0x607A0020
1601:02 = 0x60810020
1601:03=0? ? 1601:04及以后均需要清零,否則會造成數(shù)據(jù)溢出
1601:00=2? ?//實際有效子索引個數(shù)
最后把1401:01最高位置0? 結(jié)束修改
?
依次方法配置RPDO-3
?
八、保存1010:01=1702257011、1010:02=1702257011,斷電重啟,重新連接軟件并切換到Object dictionary
確認是否修改成功
SDO保存指令:如下
保存:600+ID? 23 10 10 02 73 61 76 65 //通訊參數(shù)保存
保存所有參數(shù):600+ID? 23 10 10 01 73 61 76 65 //通訊參數(shù)保存
查詢:600+ID 40? 10 10 02 00 00 00 00? //查詢1010:02等于1時,保存成功
?
斷電重啟,檢查。用SDO直接查詢1600:01? 1600:02? 1600:03是否準確
?
針對以上案例的是使用過程數(shù)據(jù)舉例:
200+ID? 01 06 00? ?//意思等同于6060=1? 6040=6
300+ID E8 03 00 00 32 00 00 00? ?//意思等同于607a=0x3E8? 6081=0x32
?
修改TPO步驟說明
一、正確連接PNDS軟件,讀取刷新Object dictionary數(shù)據(jù)列表
二、1800配置1A00(TPDO) //允許修改的配置內(nèi)部對應(yīng)關(guān)系
1801配置1A01
1802配置1A02
三、修改配置T-PDO-1,先把1800:01最高位置1,即把對象字典列表中的最高位修改為8(16進制)(二進制最高位置1)
四、1A00:00中的子索引個數(shù)置為0
五、配置需要的PDO對象,本例606C(真實速度),6064(真實位置)配置到第一PDO通道,
步驟如下:
1A00:01=0x60640020 //32位數(shù)據(jù)
1A00:02=0x606C0010 //16位數(shù)據(jù)
1A00:03=0x60410010
六、1A00:00的子索引個數(shù)置為實際個數(shù),本例子為3個
七、把1A00:00最高位置0,即把對象字典列表中的最高位修改為0
八、保存(1010:01=1702257011) 、(1010:02=1702257011)),斷電重啟,重新連接軟件并切換到Object dictionary
確認是否修改成功
?
?
總結(jié),如果用戶希望做以下配置
PLC_TO_電機 | ||||
RX-PDO | 字節(jié)數(shù) | 名稱 | 數(shù)據(jù)類型 | 備注 |
PDO1 | byte1 | 工作模式 6060 |
INTEGER8 | 1:定位模式 2:速度模式 3:PV模式 等 |
byte2-3 | 控制字 6040 |
UNSIGNED16 | 控制字 | |
PDO2 | byte1-4 | 目標位置 | INTEGER32 | Target positon?? |
byte5-8 | 目標速度 | UNSIGNED32 | Target velocity |
電機_TO_PLC | ||||
TX-PDO | 字節(jié)數(shù) | 名稱 | 數(shù)據(jù)類型 | 備注 |
PDO1 | byte1-4 | 馬達位置 6064 |
INTEGER32 | 電機當(dāng)前位置 |
byte5 | 實時速度 606C |
INTEGER32 | 606C為當(dāng)前實時速度,因為數(shù)據(jù)不會特別大,因此映射低16位即可 | |
byte6 | 狀態(tài)字 6041 |
UNSIGNED16 | ? |
?
完整SDO發(fā)送過程
SDO發(fā)送過程: | 注解 | ? |
600+ID? 23 00 14 01 01 02 00 80??????? | 1400:01=0x80000200+ID(前面ID舉例為1) | ? |
600+ID? 2F 00 16 00 00 00 00 00? | 1600:00=0 | ? |
600+ID? 23 00 16 01 08 00 60 60 | 1600:01=0x60600008 | ? |
600+ID? 23 00 16 02 10 00 40 60 | 1600:02=0x60400010 | ? |
600+ID? 23 00 16 03 00 00 00 00 | 1600:03=0 | ? |
600+ID? 23 00 16 04 00 00 00 00 | 1600:04=0 | ? |
600+ID? 2F 00 16 00 02 00 00 00? | 1600:00=2 | ? |
600+ID? 23 00 14 01 01 02 00 00??????? | 1400:01=0x00000200+ID (前面ID舉例為1) | ? |
? | ? | ? |
600+ID? 23 01 14 01 01 02 00 80??????? | 1401:01=0x80000300+ID | ? |
600+ID? 2F 01 16 00 00 00 00 00? | 1601:00=0 | ? |
600+ID? 23 01 16 01 20 00 7A 60 | 1601:01=0x607A0020 | ? |
600+ID? 23 01 16 02 20 00 81 60 | 1601:02=0x60810020 | ? |
600+ID? 23 01 16 03 00 00 00 00 | 1601:03=0 | ? |
600+ID? 23 01 16 04 00 00 00 00 | 1601:04=0 | ? |
600+ID? 2F 01 16 00 02 00 00 00? | 1600:00=2 | ? |
600+ID? 23 01 14 01 01 03 00 00??????? | 1400:01=0x00000200+ID (前面ID舉例為1) | ? |
? | ? | ? |
600+ID? 23 02 14 01 01 02 00 80??????? | 1402:01=0x80000400+ID | 清空第三個通道 |
600+ID? 2F 02 16 00 00 00 00 00? | 1602:00=0 | |
600+ID? 23 02 16 01 00 00 00 00 | 1602:01=0 | |
600+ID? 23 02 16 02 00 00 00 00 | 1602:02=0 | |
600+ID? 23 02 16 03 00 00 00 00 | 1602:02=0 | |
600+ID? 23 02 16 04 00 00 00 00 | 1602:03=0 | |
600+ID? 23 02 14 01 01 04 00 00??????? | 1402:01=0x00000400+ID(前面ID舉例為1) | |
? | ? | 依次清空第四個通道 |
600+ID? 23 03 14 01 01 02 00 80??????? | 1403:01=0x80000500+ID | |
600+ID? 2F 03 16 00 00 00 00 00? | 1603:00=0 | |
600+ID? 23 03 16 01 00 00 00 00 | 1603:01=0 | |
600+ID? 23 03 16 02 00 00 00 00 | 1603:02=0 | |
600+ID? 23 03 16 03 00 00 00 00 | 1603:02=0 | |
600+ID? 23 03 16 04 00 00 00 00 | 1603:03=0 | |
600+ID? 23 03 14 01 01 05 00 00??????? | 1403:01=0x00000500+ID(前面ID舉例為1) | ? |
? | ? | ? |
600+ID? 23 10 10 02 73 61 76 65 | 1010:02=1702257011 | 保存通訊參數(shù) |
600+ID? 23 10 10 01 73 61 76 65 | 1010:01=1702257011 | 保存所有參數(shù) |
?
修改T-PDO
600+ID? 23 00 18 01 01 18 00 80??????? | 1800:01=0x80000180+ID(前面ID舉例為1) | 配置T-PDO第一通道 |
600+ID? 2F 00 1A 00 00 00 00 00? | 1A00:00=0 | |
600+ID? 23 00 1A 01 20 00 64 60 | 1A00:01=0x60640020 | |
600+ID? 23 00 1A 02 10 00 6C 60 | 1A00:02=0x606C0010 | |
600+ID? 23 00 1A 03 10 00 41 00 | 1A00:03=0x60410010 | |
600+ID? 23 00 1A 04 00 00 00 00 | 1A00:04=0 | |
600+ID? 2F 00 1A 00 02 00 00 00? | 1A00:00=3 | |
600+ID? 23 00 18 01 01 18 00 00??????? | 1800:01=0x00000200+ID (前面ID舉例為1) | |
? | ? | 依次配置T-PDO第二通道 |
600+ID? 23 10 10 02 73 61 76 65 | 1010:02=1702257011 | 保存通訊參數(shù) |
600+ID? 23 10 10 01 73 61 76 65 | 1010:01=1702257011 | 保存所有參數(shù) |