PRODUCT SPECIFICATION DVP Series PLC Communication Protocol V1.0 DELTA ELECTRONICS, INC. Responsible Person Signature Date Written By Checked By Application Approved By 林倉億唐琳黛 / 杜俊諺王俊欽翟立文
Item Change Notes Date 1 第㆒版發行 7/1/2003 1
目錄㆒ 簡介...3 ㆓ 軟體規範...3 ㆔ 機能...3 ㆕ 連線方式...4 五 通訊格式介紹 :...5 1. 通訊資料協定...5 2. 通訊資料格式...5 i....5 ii....6 3. 通訊工作方式...6 4. 錯誤訊息回應...7 六 MODBUS 通訊命令格式 :...7 Function 01:Read Coil Status...8 Function 02:Read Input Status...9 Function 03:Read Holding Registers... 10 Function 05:Force Single Coil... 11 Function 06:Preset Single Register...12 Function 0F:Force Multiple Coils...13 Function 10:Preset Multiple Register... 14 七 備註...15 備註 1:CRC 規格...15 備註 2:Exception Code...15 備註 3:DVP-PLC 通訊元件位址... 16 2
㆒ 簡介本手冊說明 DVP-PLC 作為從端 (Slave) 通訊口之通訊協定, 依此通訊方法可存取 PLC 內部元件, 提供給主端 (Master) 或 機介面與 PLC 連線方法之參考 ㆓ 軟體規範㆔ 機能 PLC 型號 DVP-ES/EX/SS/EC DVP-EP DVP-EH 軟體版本 V4.7( 含 ) 以 V1.0( 含 ) 以 V1.0( 含 ) 以 A. 通訊規範 1. 通訊介面 PLC 型號 V4.7( 含 ) 以 DVP-ES/EX/SS/EC V5.1( 含 ) 以 DVP-EP/EH 通訊介面 COM1:RS-232 COM2:RS-485 ㆓選㆒, 亦即不可同時使用 COM1:RS-232 COM2:RS-485 可同時使用 COM1:RS-232 COM2:RS-485/RS-232RS-422( 依擴充卡而定 ) 可同時使用 2. 以 MODBUS ASCII 模式的通訊協定與外界通信 3. 通訊格式 ES 系列 Com port 參數 COM1 COM2 通訊速率 9600 300~19200 bps 資料長度 7bits 7~8bits 同位元檢查碼 Even parity Even/Odd parity 結束字元長度 1 bit 1~2 bits 設定方式 固定 D1120 3
ES 出廠設定值 Com port Protocol COM1 COM2 通訊協定 9600, 7, E, 1 9600, 7, E, 1 EP/EH 的通訊口有兩個, 面以 COM1 COM2 作說明 : Com port 參數 COM1 COM2 通訊速率 9600~115200 bps 300~115200 bps 資料長度 7bits 7~8bits 同位元檢查碼 Even parity Even/Odd parity 結束字元長度 1 bit 1~2 bits 設定方式 WPL D1120 EP/EH 出廠設定值 Com port Protocol COM1 COM2 通訊協定 9600, 7, E, 1 9600, 7, E, 1 ㆕ 連線方式 通訊口 RS-232 連接方法 使用連接線 DVPACAB215, DVPACAB230 或 DVPACAB2A30 主端必須具有 RS-485 介面, 使用雙絞線, 具有隔離被覆網較佳 RS-485 RS-485 Master + - + - RS-485 DVP-PLC 多台連線時, 建議使用外接終端電阻 主端必須具有 RS-422 介面, 使用 2 條雙絞線, 具有隔離被覆網較佳 RS-422 Tx+ Rx+ RS-422 RS-422 Master Tx- Rx+ Rx- Tx+ DVP-PLC Tx- Rx- 多台連線時, 建議使用外接終端電阻 4
五 通訊格式介紹 : 1. 通訊資料協定 :MODBUS Protocol ADU ADDRESS FUNCTION DATA ERROR CHK PDU start bit 圖㆒ data bit parity stop bit 2. 通訊資料格式 : 分為 與 i. ( 接 來資料除有特別說明, 否則皆以 16 進位表示 ) 的通訊格式如 : STX Address Function Data LRC End 1 byte 1 byte 1 byte 1~32 bytes 1 byte 2 bytes 表格㆒ 當資料要傳送時, 除了 STX 與 End 字元外, 其餘資料, 以㆒個字元為單位, 將每個字 元的前㆕個位元與後㆕個位元, 轉換成 ASCII 碼, 例如 :5A 的字元, 就轉換成 5 與 A 兩個 字元 其轉換後格式如 : STX 起始字元 : (3A) ADR high byte ADR low byte 通訊位址 Function high byte Function low byte 通訊命令 Data 1 high byte Data 1 low byte 第㆒個 BYTE 的資料. Data N high byte Data N low byte 第 N 個 BYTE 的資料 LRC high byte LRC low byte 錯誤偵測檢查碼 End1 CR (H) End2 LF (H) 表格㆓ 5
錯誤偵測檢查碼採用 LRC(Longitudinal Redundancy Check) 偵誤值, 計算方式是將資料由表格㆒的 ADR 加總到 LRC, 加總過程當, 是以字元為最小單位, 當加總過程當, 有進位產生時, 忽略掉進位值, 最後把加總的結果取 2 的補數就是 LRC 的值 範例 : STX Address Function Data1 Data2 Data3 Data4 LRC End 3A 01 03 04 01 00 01 Address + Function + Data1 + Data2 + Data3 + Data4 = 01 + 03 + 04 + 01 + 00 + 01 = 將 的值轉換成 2 的補數,2 的補數轉換方式, 是欲轉換的資料每㆒個 BIT 反向 (0 變 1, 1 變 0), 然後再將反向後的資料再加 1 即得到 2 的補數, 的 2 補數 = F6 ii. RTU 的通訊格式如 : Address Function Data CRC 1 byte 1 byte 1~32 bytes 2 bytes 表格㆔ RTU 通訊方式沒有開頭及結尾字元, 改採用時間間隔長度來判斷不同傳送資料的開頭 與結尾, 其方式如 : 封包 1 3.5 字元長度 封包 2 圖㆓ 由圖㆒可看出兩筆資料傳送當, 至少要間隔 3.5 字元長度時間, 接收端每接收到㆒個字元的資料後, 就開始計時, 當計時超過 3.5 字元長度時間時, 就視為此筆資料已經傳送完畢, 字元長度時間會因為傳輸速度不同而有所不同 傳輸資料格式, 直接是以字元方式傳送, 不需再解成 ASCII 再傳送 CRC 是 RTU 偵測錯誤的方式, 採用的 CRC 多項式格式為 X 16 + X 15 + X 2 + 1, 計算方式請參閱備註 1 3. 通訊工作方式 : 採用 MASTER/SLAVE 的方式, 由㆒台 MASTER 機器發送 MODBUS 格式的資料給 SLAVE,SLAVE 接收到 MASTER 資料後, 依據 MASTER 達的命令, 作相對應的動作與回應 MASTER 必須等 SLAVE 作相對應的回應後, 才能再傳送 ㆒筆通訊資料 6
4. 錯誤訊息回應 : 若傳入 PLC 的命令格式有錯誤, 則 PLC 會將 Function 這欄位的 MSB 設定為 1, 然後將 Function 欄位的 ㆒筆資料填入錯誤訊息碼 (Exception Code), 最後傳送出去 例 : 在, 使用命令碼 01 讀取 X000~X017 的狀態 Field Name Example (Hex) Heading 3A Slave Address 01 Function 01 Starting Address Hi 04 Starting Address Lo 00 Number of Points Hi 00 Number of Points Lo 10 Error Check ( LRC ) EA PLC 回應 : Field Name Example (Hex) Heading 3A Slave Address 01 Function 81 Exception Code 02 Error Check ( LRC ) 7C 因為 Address 0400 對 Function 01 是不合法的, 所以回應 Exception code = 0x02, 且 Function 01 被設為 81(b7 被設為 1), 亦即由回應的 Function code 的 MSB 被設為 1 表示 PLC 回應 ERROR MESSAGE, 並且由 Exception code 可得知是何種錯誤,Exception code 請參閱備註 2 六 MODBUS 通訊命令格式 : 可用之命令碼敘述如 :( 每個 device 的 address, 請參考備註 3) Code Name Description 01 Read Coil Status S, Y, M, T, C 02 Read Input Status S, X, Y, M,T, C 03 Read Holding Registers T, C, D 05 Force Single Coil S, Y, M, T, C 06 Preset Single Register T, C, D 0F Force Multiple Coils S, Y, M, T, C 10 Preset Multiple Register T, C, D 7
Function Code : 01, Read Coil Status ( S, Y, M, T, C) Example:Reading Coils T20~T56 from slave device 01 Send Slave Address 01 Function 01 Function 01 Starting Address Hi 06 Starting Address Hi 06 Starting Address Lo 14 Starting Address Lo 14 Number of Points Hi 00 Number of Points Hi 00 Number of Points Lo 25 Number of Points Lo 25 CRC(low byte) BD Error Check ( LRC ) BF CRC(high byte) 5D Receive Slave Address 01 Function 01 Function 01 Bytes Count 05 Bytes Count 05 Data(Coils T27 T20) CD Data(Coils T27 T20) CD Data(Coils T35 T38) 6B Data(Coils T35 T38) 6B Data(Coils T43 T36) B2 Data(Coils T43 T36) B2 Data(Coils T51 T44) 0E Data(Coils T51 T44) 0E Data(Coils T56 T52) 1B Data(Coils T56 T52) 1B CRC(low byte) 44 Error Check(LRC) E6 CRC(high byte) EA 說明 : 讀回來的 Data, 編號最小的 COIL 擺放在第㆒個 Data 的 LSB, 第㆓小的 COIL 擺放 在第㆒個 Data 的 bit1, 若讀取的 COIL 不是 8 的整數, 則最後㆒筆 Data, 無法補滿 8 個 Coil, 無法補滿的部分, 資料不必理會 以 面為例, 最後㆒筆 Data 是 (T56...T52), 資料 的擺放如 圖 Bit 順序 bit 7 bit 6 bit5 bit4 bit3 bit2 bit1 bit0 Coil 順序 NA NA NA T56 T55 T54 T53 T52 值 NA NA NA 1 1 0 1 1 NA : 代表該資料不必理會 8
Function Code:02, Read Input Status ( S, X, Y, M,T, C ) Example:Reading Contact Y024~Y070 from slave device 01 Send Slave Address 01 Function 02 Function 02 Starting Address Hi 05 Starting Address Hi 05 Starting Address Lo 14 Starting Address Lo 14 Number of Points Hi 00 Number of Points Hi 00 Number of Points Lo 25 Number of Points Lo 25 CRC(low byte) F9 Error Check ( LRC ) BF CRC(high byte) 19 Receive Slave Address 01 Function 02 Function 02 Bytes Count 05 Bytes Count 05 Data(Coils T27 T20) CD Data(Coils T27 T20) CD Data(Coils T35 T38) 6B Data(Coils T35 T38) 6B Data(Coils T43 T36) B2 Data(Coils T43 T36) B2 Data(Coils T51 T44) 0E Data(Coils T51 T44) 0E Data(Coils T56 T52) 1B Data(Coils T56 T52) 1B CRC(low byte) 77 Error Check(LRC) E5 CRC(high byte) EA 9
Function Code:03, Read Holding Register ( T, C, D ) Example:Reading Contact T20~T27 from slave device 01 Send Slave Address 01 Function 03 Function 03 Starting Address Hi 06 Starting Address Hi 06 Starting Address Lo 14 Starting Address Lo 14 Number of Points Hi 00 Number of Points Hi 00 Number of Points Lo 08 Number of Points Lo 08 CRC(low byte) 04 Error Check ( LRC ) DA CRC(high byte) 80 Receive Slave Address 01 Function 03 Function 03 Bytes Count 10 Bytes Count 10 Data Hi(T20) 00 Data Hi(T20) 00 Data Lo(T20) 01 Data Lo(T20) 01 Data Hi(T21) 00 Data Hi(T21) 00 Data Lo(T21) 02 Data Lo(T21) 02 Data Hi(T22) 00 Data Hi(T22) 00 Data Lo(T22) 03 Data Lo(T22) 03 Data Hi(T23) 00 Data Hi(T23) 00 Data Lo(T23) 04 Data Lo(T23) 04 Data Hi(T24) 00 Data Hi(T24) 00 Data Lo(T24) 05 Data Lo(T24) 05 Data Hi(T25) 00 Data Hi(T25) 00 Data Lo(T25) 06 Data Lo(T25) 06 Data Hi(T26) 00 Data Hi(T26) 00 Data Lo(T26) 07 Data Lo(T26) 07 Data Hi(T27) 00 Data Hi(T27) 00 Data Lo(T27) 08 Data Lo(T27) 08 CRC(low byte) 72 Error Check(LRC) C8 CRC(high byte) 98 Number Of Points: 讀取 Register 的數目 10
若讀取的 register 為 32 位元型態, 則回傳的 Data 如 :( 以讀取 C200 = 12345678 為例 ) Data1 Hi = 12 Data1 Lo = 34 Data2 Hi = 56 Data Lo = 78 Function Code:05, Force Single Coil ( S, Y, M, T, C ) Example:Forcing Coil Y000 ON Send Slave Address 01 Function 05 Function 05 Coil Address Hi 05 Coil Address Hi 05 Coil Address Lo 00 Coil Address Lo 00 Force Data Hi FF Force Data Hi FF Force Data Lo 00 Force Data Lo 00 CRC(low byte) 8C Error Check ( LRC ) F6 CRC(high byte) F6 Force Data Hi, Lo, 只有兩個值 : FF00:Set Coil 0000:Reset Coil Receive Slave Address 01 Function 05 Function 05 Coil Address Hi 05 Coil Address Hi 05 Coil Address Lo 00 Coil Address Lo 00 Force Data Hi FF Force Data Hi FF Force Data Lo 00 Force Data Lo 00 CRC(low byte) 8C Error Check ( LRC ) F6 CRC(high byte) F6 說明 :T 與 C Contact, 當被 reset 之後, 除了 coil off 之外,register 值也被清除為 0 11
Function Code:06, Preset Single Register ( T, C, D ) Example:Setting Register T0 to 12 34 Send Slave Address 01 Function 06 Function 06 Register Address Hi 06 Register Address Hi 06 Register Address Lo 00 Register Address Lo 00 Preset Data Hi 12 Preset Data Hi 12 Preset Data Lo 34 Preset Data Lo 34 CRC(low byte) 84 Error Check ( LRC ) AD CRC(high byte) 35 Receive Slave Address 01 Function 06 Function 06 Register Address Hi 06 Register Address Hi 06 Register Address Lo 00 Register Address Lo 00 Preset Data Hi 12 Preset Data Hi 12 Preset Data Lo 34 Preset Data Lo 34 CRC(low byte) 84 Error Check ( LRC ) AD CRC(high byte) 35 說明 : 若寫入的 register 為 32 位元型態, 則寫入的 Data 如 : ( 以寫入 C200 = 12345678 為例 ) Data1 Hi = 12 Data1 Lo = 34 Data2 Hi = 56 Data Lo = 78 12
Function Code:0F, Force Multiple Coils ( S, Y, M, T, C ) Example:Setting Coil Y007 Y000 = 1100 1101, Y011 Y010 = 01 Send Slave Address 01 Function 0F Function 0F Coil Address Hi 05 Coil Address Hi 05 Coil Address Lo 00 Coil Address Lo 00 Quantity of Coils Hi 00 Quantity of Coils Hi 00 Quantity of Coils Lo Quantity of Coils Lo Byte Count 02 Byte Count 02 Force Data Hi CD Force Data Hi CD Force Data Lo 01 Force Data Lo 01 CRC(low byte) 25 Error Check (LRC) 11 CRC(high byte) 68 Receive Slave Address 01 Function 0F Function 0F Register T0 Address Hi 05 Register T0 Address Hi 05 Register T0 Address Lo 00 Register T0 Address Lo 00 Preset Data Hi 00 Preset Data Hi 00 Preset Data Lo Preset Data Lo CRC(low byte) D5 Error Check ( LRC ) E1 CRC(high byte) 00 說明 :(1) T 與 C Contact, 當被 reset 之後, 除了 coil off 之外,register 值也被清除為 0 (2) Force Data 由編號小的 Coil 開始擺放, 以 面為例 : Data Hi = Y7~Y0 Data Lo = Y11 ~Y10 13
Function Code:10, Force Multiple Registers ( T, C, D ) Example:Setting Register T0 to 00, T1 to 01 02 Send Slave Address 01 Function 10 Function 10 Starting Address Hi 06 Starting Address Hi 06 Starting Address Lo 00 Starting Address Lo 00 Number of Register Hi 00 Number of Register Hi 00 Number of Register Lo 02 Number of Register Lo 02 Byte Count 04 Byte Count 04 Data Hi 00 Data Hi 00 Data Lo Data Lo Data Hi 01 Data Hi 01 Data Lo 02 Data Lo 02 CRC(low byte) 78 Error Check (LRC) D6 CRC(high byte) 5C Receive Slave Address 01 Function 10 Function 10 Register T0 Address Hi 06 Starting Address Hi 06 Register T0 Address Lo 00 Starting Address Lo 00 Preset Data Hi 00 Number of Registers Hi 00 Preset Data Lo 02 Number of Registers Lo 02 CRC(low byte) 41 Error Check ( LRC ) E7 CRC(high byte) 40 說明 : 若寫入的 register 為 32 位元型態, 則寫入的 Data 如 : ( 以寫入 C200 = 12345678 為例 ) Data1 Hi = 12 Data1 Lo = 34 Data2 Hi = 56 Data Lo = 78 14
備註 1:CRC 計算方式 採用 CRC-16,Preload polynomial = X 16 + X 15 + X 2 + 1 面是以 C 語言撰寫的 CRC 計算函式 // CRC_buf 傳入的通訊字元, BuffLen 通訊字元的長度 unsigned int CRC_Check(unsigned char *CRC_buf,unsigned char BuffLen) { unsigned int CRC_ReturnValue = 0xFFFF; unsigned char i=0,j; } while ( BuffLen -- ) { CRC_ReturnValue ^= CRC_buf[i++]; j = 8; do { if ( CRC_ReturnValue & 0x01 ) { CRC_ReturnValue = ( CRC_ReturnValue >> 1 ) ^ 0xA001; } else { CRC_ReturnValue = CRC_ReturnValue >> 1; } -- j; } while ( j ); } return CRC_ReturnValue; // 回傳 CRC-16 計算結果 備註 2:Exception Code 原因 Exception Code 備註 Command Code Invalid 01 Device Address Invalid 02 要求資料超過範圍 03 寫入資料無效或範圍超過 04 15
備註 3:DVP Series PLC Internal Device Communication Address Device Range Type Address(Hex) S 000~255 bit 0000~00FF S 246~511 bit 0100~01FF S 512~767 bit 0200~02FF S 768~1023 bit 0300~03FF X 000~377 (Octal) bit 0400~04FF Effective ES/EX/SS EP EH 0~127 0~1024 0~1024 0~177 0~177 000~377 Y 000~377 (Octal) bit 0500~05FF T 000~255 bit/word 0600~06FF 0~127 000~255 000~255 M 000~255 bit 0800~08FF M 256~511 bit 0900~09FF M 512~767 bit 00~FF M 768~1023 bit 0B00~0BFF M 1024~1279 bit 0C00~0CFF M 1280~1535 bit 00~FF M 1536~1791 bit B000~B0FF M 1792~2047 bit B100~B1FF M 2048~2303 bit B200~B2FF M 2304~2559 bit B300~B3FF M 2560~2815 bit B400~B4FF M 2816~3071 bit B500~B5FF M 3072~3327 bit B600~B6FF M 3328~3583 bit B700~B7FF M 3584~3839 bit B800~B8FF M 3840~4095 bit B900~B9FF C 0~1279 0~4095 0000~4095 0~199 16-bit bit/word 0E00~0EC7 0~127 0~199 0~199 200~255 32-bit bit/dword 0EC8~0EFF 232~255 200~255 200~255 16
Device Range Type Address D 000~256 word 1000~10FF D 256~511 word 1100~11FF D 512~767 word 1200~12FF D 768~1023 word 1300~13FF D 1024~1279 word 1400~14FF D 1280~1535 word 1500~15FF D 1536~1791 word 1600~16FF D 1792~2047 word 1700~17FF D 2048~2303 word 1800~18FF D 2304~2559 word 1900~19FF D 2560~2815 word 1A00~1AFF D 2816~3071 word 1B00~1BFF D 3072~3327 word 1C00~1CFF D 3328~3583 word 1D00~1DFF D 3584~3839 word 1E00~1EFF D 3840~4095 word 1F00~1FFF D 4096~4351 word 9000~90FF D 4352~4607 word 9100~91FF D 4608~4863 word 9200~92FF D 4864~5119 word 9300~93FF D 5120~5375 word 9400~94FF D 5376~5631 word 9500~95FF D 5632~5887 word 9600~96FF D 5888~6143 word 9700~97FF D 6144~6399 word 9800~98FF D 6400~6655 word 9900~99FF D 6656~6911 word 9A00~9AFF D 6912~7167 word 9B00~9BFF D 7168~7423 word 9C00~9CFF D 7424~7679 word 9D00~9DFF D 7680~7935 word 9E00~9EFF D 7936~8191 word 9F00~9FFF D 8192~8447 word A000~A0FF D 8448~8703 word A100~A1FF D 8704~8959 word A200~A2FF D 8960~9215 word A300~A3FF D 9216~9471 word A400~A4FF D 9472~9727 word A500~A5FF D 9728~9983 word A600~A6FF D 9984~9999 word A700~A70F Effective ES/EX/SS EP EH 0~1311 0~4999 0000~9999 17