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

2.Modbus 通信格式 a.modbus 主機讀取數據及從機應答格式 (功能碼 03) 
串口接收到的數據都是無符號數,如果寄存器是有符號數, 發送的則是二進制補碼的格式,轉換成有符號數的算法如下(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 主機寫數據及從機應答格式 ( 功能碼 06) 
c.modbus 主機寫脈沖數 (功能碼 0x10) 
脈沖數是有符號數,一個負數 ( 假設此數為 X) 轉換成 32 位 16 進制數的算法如下 (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() 為取整函數 
d.modbus 主機寫脈沖數 (特殊功能碼 0x78) 
3.CRC 校驗示例代碼 unsigned short CRC16(puchMsg, usDataLen) unsigned char *puchMsg ; /* 要進行 CRC 校驗的消息 */ unsigned short usDataLen ; /* 消息中字節數 */ { unsigned char uchCRCHi = 0xFF ; /* 高 CRC 字節初始化 */ unsigned char uchCRCLo = 0xFF ; /* 低 CRC 字節初始化 */ unsigned uIndex ; /* CRC 循環中的索引 */ while (usDataLen--) /* 傳輸消息緩沖區 */ { uIndex = uchCRCHi ^ *puchMsgg++ ; /* 計算 CRC */ uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ; uchCRCLo = auchCRCLo[uIndex] ; } return (uchCRCHi << 8 | uchCRCLo) ; } /* CRC 高位字節值表 */ 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 低位字節值表 */ 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 時代表已經到了目標位置 (7)重復(4)(5)(6)過程,控制電機位置。 注:電機的目標速度為電機運行的****速度,如果目標位置 較小,電機可能達不到****速度即停止。加速過程寫入的電機目標 位置是在原剩余的位置上加上新的數值。例如,第一次寫入 1024 代表運行一圈,運行到還剩 256,代表還有 1/4 圈要運行,但此時 又寫入一個 1024,此時電機的目標位置變成 1024+256 而不是 1024 替代 256。這樣不會因為還沒到位又寫入一個數值而導致出現錯誤。 也可以自己定義誤差范圍,例如到了>-2且<2,就立刻寫入新的數, 這樣在有些定位精度要求低的場合提高定位的速度。 b:速度模式 (1)寫 設備 1(功能碼 0x06 地址 0 Modbus 使能) 1 (2)讀 設備 1(功能碼 0x03 地址 14 報警代碼) (讀到 0 時為運行正常) (3)寫 設備 1(功能碼 0x06 地址 3 電機加速度) 6000 (4)寫 設備 1(功能碼 0x06 地址 2 電機目標速度) 2000 (5)重復(4)過程,控制電機轉速。 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 時代表已經到了目標位置 (9)寫 設備 2(功能碼 0x06 地址 3 電機目標速度 2000 (10)寫 設備 2(功能碼 0x78 電機目標位置) 1000 (11)讀 設備2(功能碼0x03 地址12 目標位置低16位) (12)讀 設備2(功能碼0x03 地址13 目標位置高16位) 以上兩個寄存器都為 0 時代表已經到了目標位置 (13)重復(5)~(12)過程,控制電機位置。 注:驅動器的地址需要先設置,可以通過提供的上位機設置 驅動器地址。由于以上方式在寫了目標位置后驅動器會立刻控制電 機運動,而寫入地址 2 的控制數據需要一定時間,所以地址 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 時代表已經到了目標位置 (12)讀 設備 2(功能碼 0x03 地址 12 目標位置低 16 位) (23)讀 設備 2(功能碼 0x03 地址 13 目標位置高 16 位) 以上兩個寄存器都為 0 時代表已經到了目標位置 (13)重復(5)~(13)過程,控制電機位置。 上位機軟件使用說明 本驅動器提供一個上位機軟件,用于監測和測試驅動器。可 以通過軟件查看和設置驅動器內部參數。 
如上圖所示,軟件分為波形顯示,電機運行參數等幾個部分。 下面介紹一下各個部分的功能和作用。 波形顯示:一共有 4 個通道,分別用 4 種顏色表示。顏色和 電機運行參數 內的字體顏、色相同。即:藍表示電流,綠表示輸 出的脈寬,紅表示當前轉速,黑表示電壓。 電機運行參數:表示電機運行的實時數據。 驅動器設置參數:顯示驅動器的撥碼開關,和方向使能設置。 如果是 modbus 模式,此欄無效。 驅動器運行狀態:此欄會顯示驅動器的報警狀態,如果沒有 報警會顯示運行正常。 Modbus 控制參數:此欄內的參數是驅動器內部的參數,如果 要修改這些參數,必須先對 modbus 使能寫 1。具體的參數含義參考 寄存器說明。 Modbus 讀取:此欄可設定驅動器的地址,讀取驅動器數據的 周期,和是否讀取。 Modbus發送:此欄用于修改驅動器參數,首先選定參數類型, 再設定好參數數據,然后點發送即可。 上位機測試如何開始 1. 連接需要的信號
1. 插上電機動力線和編碼器線 2. 驅動器上+VDC 和 GND接上電源,電源根據電機的額定電壓來, 電機額定電壓 36V 就接 36V. 3 插入附帶的 USB 轉 485 線在電腦的 485 接口上,另外一端插驅動 器上 2. 安裝驅動和上位機軟件
1. 安裝 USB 線驅動程序,在光盤中, 。安裝好后,插入 附帶的 USB 轉 485 線在電腦的 485 接口上,另外一端插驅動器上, 然后在電腦中的設備管理器中查看分配的 COM 口號。如下圖所示為 COM2 
2. 安裝電腦上位機軟件, 安裝好后打開。在驅動 器運行狀態中選擇剛剛在設備管理器中看到的 COM 口號,這個是 COM2。正常的話可以讀到數據。如下圖所示: 
3. 試運行 重新上電,然后在上位機中如操作 選擇 modbus 使能 參數數據輸入 1 點發送 選擇 PU 步數 參數數據輸入 4000 點發送 (1000 線編碼器,經過內部倍頻后有 4000 脈沖一圈)上面發送 4000 電機會轉一圈,發送 -4000 發轉一圈。 這個是試運行,具體 需要什么控制方式,可以查看說明書。 常見問題處理 1. 如果脈沖控制端口 DIR 導通方向和我所需要的方向不同怎 么改? 答:可以通過上位機來設置 DIR 的極性,接上上位機后, modbus 使能寫 1 , DIR 極性 寫 0. 最后參數保存標志寫 1. 重新 上電即可。 2. 上電驅動器不報警,給運行脈沖后驅動器報警,怎么回事? 答:檢查接插件是否松動,電機 UVW 和編碼器線任何一根斷 或順序交換都會無法正常運行。 3. 怎么通過上位機控制運行 答:連接好電機,驅動器上電,通過提供的 USB 線連接驅動 器和電腦,根據“上位機使用說明”設置好,使得上位機能讀取到 數據后。 Modbus 使能 發送 1。然后 PU 步數 發送需要走的距離。
|