Modbus 控制方式 1.寄存器說明 驅(qū)動器可以通過 modbus(RTU 模式)來控制驅(qū)動器。主機可以 通過 modbus 的讀寫寄存器功能來設置驅(qū)動器參數(shù)和控制運行。驅(qū) 動器支持的功能碼為0x3(讀寄存器)、0x6(寫寄存器)、0x78(寫 目標位置)、0x7a(修改設備地址)。 寄存器列表如下: 

2.Modbus 通信格式 a.modbus 主機讀取數(shù)據(jù)及從機應答格式 (功能碼 03) 
串口接收到的數(shù)據(jù)都是無符號數(shù),如果寄存器是有符號數(shù), 發(fā)送的則是二進制補碼的格式,轉(zhuǎn)換成有符號數(shù)的算法如下(VB 代碼): If modbus.data(11) > 32767 Then disp_modbus_data.PU = (modbus.data(11) - 32768) * 65536 + modbus.data(10) disp_modbus_data.PU = -((&H7FFFFFFF - disp_modbus_data. PU) + 1) Else disp_modbus_data.PU = dmodbus.data(11) * 65536 + modbus. data(10) End If 注 : modbus.data(11) 為目標位置高 16 位 modbus.data(10) 為目標位置低 16 位 b.modbus 主機寫數(shù)據(jù)及從機應答格式 ( 功能碼 06) 
c.modbus 主機寫脈沖數(shù) (功能碼 0x10) 
脈沖數(shù)是有符號數(shù),一個負數(shù) ( 假設此數(shù)為 X) 轉(zhuǎn)換成 32 位 16 進制數(shù)的算法如下 (vb 代碼 ): If X < 0 Then X = &H7FFFFFFF + (X + 1) PU24_31 = Fix(X / (256 * 65536)) + &H80 Else PU24_31 = Fix(X / (256 * 65536)) End If PU16_23 = Fix(X / 65536) mod 256 PU8_15 = Fix(X / 256) mod 256 PU0_7 = X mod 256 注:fix() 為取整函數(shù) 
d.modbus 主機寫脈沖數(shù) (特殊功能碼 0x78) 
3.CRC 校驗示例代碼 unsigned short CRC16(puchMsg, usDataLen) unsigned char *puchMsg ; /* 要進行 CRC 校驗的消息 */ unsigned short usDataLen ; /* 消息中字節(jié)數(shù) */ { unsigned char uchCRCHi = 0xFF ; /* 高 CRC 字節(jié)初始化 */ unsigned char uchCRCLo = 0xFF ; /* 低 CRC 字節(jié)初始化 */ unsigned uIndex ; /* CRC 循環(huán)中的索引 */ while (usDataLen--) /* 傳輸消息緩沖區(qū) */ { uIndex = uchCRCHi ^ *puchMsgg++ ; /* 計算 CRC */ uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ; uchCRCLo = auchCRCLo[uIndex] ; } return (uchCRCHi << 8 | uchCRCLo) ; } /* CRC 高位字節(jié)值表 */ static unsigned char auchCRCHi[] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 } ; /* CRC 低位字節(jié)值表 */ static char auchCRCLo[] = { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 } 4.modbus 方式主機控制過程 a:位置模式 (1)寫 設備 1(功能碼 0x06 地址 0 Modbus 使能) 1 (2)讀 設備 1(功能碼 0x03 地址 16 報警代碼) (讀 到 0 時為運行正常) (3)寫 設備 1(功能碼 0x06 地址 3 電機目標速度)2000 (4)寫 設備 1(功能碼 0x78 電機目標位置)1000 (5)讀 設備 1(功能碼 0x03 地址 10 目標位置低 16 位) (6)讀 設備 1(功能碼 0x03 地址 11 目標位置高 16 位) 以上兩個寄存器都為 0 時代表已經(jīng)到了目標位置 (7)重復(4)(5)(6)過程,控制電機位置。 注:電機的目標速度為電機運行的****速度,如果目標位置 較小,電機可能達不到****速度即停止。加速過程寫入的電機目標 位置是在原剩余的位置上加上新的數(shù)值。例如,第一次寫入 1024 代表運行一圈,運行到還剩 256,代表還有 1/4 圈要運行,但此時 又寫入一個 1024,此時電機的目標位置變成 1024+256 而不是 1024 替代 256。這樣不會因為還沒到位又寫入一個數(shù)值而導致出現(xiàn)錯誤。 也可以自己定義誤差范圍,例如到了>-2且<2,就立刻寫入新的數(shù), 這樣在有些定位精度要求低的場合提高定位的速度。 b:速度模式 (1)寫 設備 1(功能碼 0x06 地址 0 Modbus 使能) 1 (2)讀 設備 1(功能碼 0x03 地址 14 報警代碼) (讀到 0 時為運行正常) (3)寫 設備 1(功能碼 0x06 地址 3 電機加速度) 6000 (4)寫 設備 1(功能碼 0x06 地址 2 電機目標速度) 2000 (5)重復(4)過程,控制電機轉(zhuǎn)速。 5. modbus 方式主機控制多個從機 a:位置模式 控制多個從機不同時開始運動 (1)寫 設備 1(功能碼 0x06 地址 0 Modbus 使能) 1 (2)讀 設備 1(功能碼 0x03 地址 14 報警代碼) (讀到 0 時為運行正常) (3)寫 設備 2(功能碼 0x06 地址 0 Modbus 使能) 1 (4)讀 設備 2(功能碼 0x03 地址 14 報警代碼) (讀 到 0 時為運行正常) (5)寫 設備 1(功能碼 0x06 地址 3 電機目標速度) 2000 (6)寫 設備 1(功能碼 0x78 電機目標位置) 1000 (7)讀 設備 1(功能碼 0x03 地址 12 目標位置低 16 位) 8)讀 設備 1(功能碼 0x03 地址 13 目標位置高 16 位) 以上兩個寄存器都為 0 時代表已經(jīng)到了目標位置 (9)寫 設備 2(功能碼 0x06 地址 3 電機目標速度 2000 (10)寫 設備 2(功能碼 0x78 電機目標位置) 1000 (11)讀 設備2(功能碼0x03 地址12 目標位置低16位) (12)讀 設備2(功能碼0x03 地址13 目標位置高16位) 以上兩個寄存器都為 0 時代表已經(jīng)到了目標位置 (13)重復(5)~(12)過程,控制電機位置。 注:驅(qū)動器的地址需要先設置,可以通過提供的上位機設置 驅(qū)動器地址。由于以上方式在寫了目標位置后驅(qū)動器會立刻控制電 機運動,而寫入地址 2 的控制數(shù)據(jù)需要一定時間,所以地址 1 和地 址 2 的電機不會同時運動。如果下一次的運行速度不變,可以不必 多次寫入電機目標速度。 b:位置模式 控制多個從機同時開始運動 (1)寫 設備 1(功能碼 0x06 地址 0 Modbus 使能) 1 (2)讀 設備1(功能碼0x03 地址14 報警代碼) (讀 到 0 時為運行正常) (3)寫 設備 2(功能碼 0x06 地址 0 Modbus 使能) 1 (4)讀 設備 2(功能碼 0x03 地址 14 報警代碼) (讀 到 0 時為運行正常) (5)寫 設備 1(功能碼 0x06 地址 2 電機目標速度) 2000 (6)寫 設備 1(功能碼 0x06 地址 3 目標位置緩存) 1000 (7)寫 設備 2 (功能碼 0x06 地址 2 電機目標速度)2000 (8)寫 設備 2 (功能碼 0x06 地址 3 目標位置緩存) 1000 (9)寫 設備 0(廣播)(功能碼 0x06 地址 1 使能) 1 (10)讀 設備 1(功能碼 0x03 地址 12 目標位置低 16 位) (11)讀 設備 1(功能碼 0x03 地址 13 目標位置高 16 位) 以上兩個寄存器都為 0 時代表已經(jīng)到了目標位置 (12)讀 設備 2(功能碼 0x03 地址 12 目標位置低 16 位) (23)讀 設備 2(功能碼 0x03 地址 13 目標位置高 16 位) 以上兩個寄存器都為 0 時代表已經(jīng)到了目標位置 (13)重復(5)~(13)過程,控制電機位置。 上位機軟件使用說明 本驅(qū)動器提供一個上位機軟件,用于監(jiān)測和測試驅(qū)動器? 以通過軟件查看和設置驅(qū)動器內(nèi)部參數(shù)。 
如上圖所示,軟件分為波形顯示,電機運行參數(shù)等幾個部分。 下面介紹一下各個部分的功能和作用。 波形顯示:一共有 4 個通道,分別用 4 種顏色表示。顏色和 電機運行參數(shù) 內(nèi)的字體顏、色相同。即:藍表示電流,綠表示輸 出的脈寬,紅表示當前轉(zhuǎn)速,黑表示電壓。 電機運行參數(shù):表示電機運行的實時數(shù)據(jù)。 驅(qū)動器設置參數(shù):顯示驅(qū)動器的撥碼開關,和方向使能設置。 如果是 modbus 模式,此欄無效。 驅(qū)動器運行狀態(tài):此欄會顯示驅(qū)動器的報警狀態(tài),如果沒有 報警會顯示運行正常。 Modbus 控制參數(shù):此欄內(nèi)的參數(shù)是驅(qū)動器內(nèi)部的參數(shù),如果 要修改這些參數(shù),必須先對 modbus 使能寫 1。具體的參數(shù)含義參考 寄存器說明。 Modbus 讀。捍藱诳稍O定驅(qū)動器的地址,讀取驅(qū)動器數(shù)據(jù)的 周期,和是否讀取。 Modbus發(fā)送:此欄用于修改驅(qū)動器參數(shù),首先選定參數(shù)類型, 再設定好參數(shù)數(shù)據(jù),然后點發(fā)送即可。 上位機測試如何開始 1. 連接需要的信號
1. 插上電機動力線和編碼器線 2. 驅(qū)動器上+VDC 和 GND接上電源,電源根據(jù)電機的額定電壓來, 電機額定電壓 36V 就接 36V. 3 插入附帶的 USB 轉(zhuǎn) 485 線在電腦的 485 接口上,另外一端插驅(qū)動 器上 2. 安裝驅(qū)動和上位機軟件
1. 安裝 USB 線驅(qū)動程序,在光盤中, 。安裝好后,插入 附帶的 USB 轉(zhuǎn) 485 線在電腦的 485 接口上,另外一端插驅(qū)動器上, 然后在電腦中的設備管理器中查看分配的 COM 口號。如下圖所示為 COM2 
2. 安裝電腦上位機軟件, 安裝好后打開。在驅(qū)動 器運行狀態(tài)中選擇剛剛在設備管理器中看到的 COM 口號,這個是 COM2。正常的話可以讀到數(shù)據(jù)。如下圖所示: 
3. 試運行 重新上電,然后在上位機中如操作 選擇 modbus 使能 參數(shù)數(shù)據(jù)輸入 1 點發(fā)送 選擇 PU 步數(shù) 參數(shù)數(shù)據(jù)輸入 4000 點發(fā)送 (1000 線編碼器,經(jīng)過內(nèi)部倍頻后有 4000 脈沖一圈)上面發(fā)送 4000 電機會轉(zhuǎn)一圈,發(fā)送 -4000 發(fā)轉(zhuǎn)一圈。 這個是試運行,具體 需要什么控制方式,可以查看說明書。 常見問題處理 1. 如果脈沖控制端口 DIR 導通方向和我所需要的方向不同怎 么改? 答:可以通過上位機來設置 DIR 的極性,接上上位機后, modbus 使能寫 1 , DIR 極性 寫 0. 最后參數(shù)保存標志寫 1. 重新 上電即可。 2. 上電驅(qū)動器不報警,給運行脈沖后驅(qū)動器報警,怎么回事? 答:檢查接插件是否松動,電機 UVW 和編碼器線任何一根斷 或順序交換都會無法正常運行。 3. 怎么通過上位機控制運行 答:連接好電機,驅(qū)動器上電,通過提供的 USB 線連接驅(qū)動 器和電腦,根據(jù)“上位機使用說明”設置好,使得上位機能讀取到 數(shù)據(jù)后。 Modbus 使能 發(fā)送 1。然后 PU 步數(shù) 發(fā)送需要走的距離。
|