09-00 a通訊地址設定范圍 01~254 出廠設定值:01當系統使用 RS-485 串聯通訊介面控制或監控時,每一臺驅動器必須設定其通訊地址且每一個連結網中每個地址均為””不可重復。
09-01 a通訊傳送速度 Baud Rate
出廠設定值:01
設定范圍 00 Baud rate 4800(傳輸速度,位元∕秒)
01 Baud rate 9600(傳輸速度,位元∕秒)
02 Baud rate 19200(傳輸速度,位元∕秒)
03 Bard rate 38400(傳輸速度,位元∕秒)
09-02 a通訊錯誤處理
出廠設定值:03
設定范圍 00 警告并繼續運轉
01 警告并減速停車
02 警告并自由停車
03 不警告并繼續運轉
09-03 a通訊超時(time-out)檢出 單位:0.1
出廠設定值:0.0
設定范圍 0.0~60.0 秒
0.0 無傳輸超時檢出
09-04 a通訊資料格式
出廠設定值:00
設定范圍 00 7,N,2 for ASCII
01 7,E,1 for ASCII
02 7,0,1 for ASCII
03 8,N,2 for RTU
04 8,E,1 for RTU
05 8,O,1 for RTU
電腦控制 Computer Link使用 RS-485 串聯通訊介面時,每一臺 VFD-B 必須預先在參數 09-00 指定其通訊地址,電腦便根據其個別的地址實施控制
VFD-B 系列交流電機驅動器使用 Modbus networks 通訊協議。而 Modbus 可使用 ASCII (AmericanStandard Code for Information Interchange)或 RTU(Remote Terminal Unit)兩種資料編碼。ASCII編碼是將所要傳送的資料先轉換成相對的 ASCII 碼后再傳送,而 RTU 則是資料直接傳送,不再經過轉換。以下說明 ASCII 資料格式的編碼方式。
每 byte 是由 2 個 ASCII 字符組合而成。例如:數值是 64 Hex,ASCII 的表示方式為‘64’,分別由‘6’(36Hex)、‘4’(34Hex)組合而成。下表為 ASCII 字符‘0’…‘9’,‘A’…‘F’ 的對照表。字符 ‘0’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘7’ASCII code 30H 31H 32H 33H 34H 35H 36H 37H字符 ‘8’ ‘9’ ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘F’ASCII code 38H 39H 41H 42H 43H 44H 45H 46H
通信地址(Address)
00H:所有驅動器廣播(Broadcast)
01H:對第 01 地址驅動器
0FH:對第 15 地址驅動器
10H:對第 16 地址驅動器,以此類推﹒﹒﹒﹒﹒﹒,可到 254( FEH)。
功能碼(Function)與資料內容(Data Characters)
03H:讀出寄存器內容
06H:寫入一筆資料至寄存器
08H:回路偵測
10H:寫入多筆資料至寄存器
功能碼 03H:讀出寄存器內容(最多可同時讀取連續的 20 筆資料)
例如:對驅動器地址 01H,讀出 2 個連續于寄存器內的資料內容如下表示:起始寄存器地址 2102H
檢查碼由 Address 到 Data content 結束。其運算規則如下:
步驟 1:令 16-bit 寄存器 (CRC 寄存器) = FFFFH.
步驟 2:Exclusive OR 第一個 8-bit byte 的訊息指令與低位元 16-bit CRC 寄存器, 做 Exclusive OR ,將
結果存入 CRC 寄存器內。
步驟 3:右移一位 CRC 寄存器,將 0 填入高位元處。
步驟 4:檢查右移的值,如果是 0, 將步驟 3 的新值存入 CRC 寄存器內, 否則 Exclusive OR A001H 與
CRC 寄存器,將結果存入 CRC 寄存器內。
步驟 5:重復步驟 3~步驟 4,將 8-bit 全部運算完成。
步驟 6:重復步驟 2~步驟 5,取下一個 8-bit 的訊息指令,直到所有訊息指令運算完成。最后,得到的 CRC
寄存器的值,即是 CRC 的檢查碼。值得注意的是 CRC 的檢查碼必須交換放置于訊息指令的檢查
碼中。
以下為用C語言所寫的 CRC 檢查碼運算范例:
unsigned char* data ? // 訊息指令指標
unsigned char length ? // 訊息指令的長度
unsigned int crc_chk(unsigned char* data, unsigned char length)
{
int j;
unsigned int reg_crc=0Xffff;
while(length--){
reg_crc ^= *data++;
for(j=0;j<8;j++){
if(reg_crc & 0x01){ /* LSB(b0)=1 */
reg_crc=(reg_crc>>1) ^ 0Xa001;
}else{
reg_crc=reg_crc >>1;
}
}
}
return reg_crc;// 最后回傳 CRC 寄存器的值