2016年4月29日 星期五

台達DVP PLC 如何使用Modbus功能

在上一篇當中,Modbus介紹
已經知道,傳送的資料格式。

本篇要介紹台達DVP PLC如何使用Modbus來傳送/接收資料。

台達DVP PLC,已支援Modbus的格式,
所以開始碼,CRC、LRC檢查碼、結束碼,系統都會幫加上,不需要特別處理。

接下來看,Modbus的專用指令:
1.讀取指令MODRD:(Modbus功能碼=03)

指令格式:MODRD S1 S2 n
S1=站號
S2=讀取資料的位址
n=讀取資料的長度。限制一次最多6筆。








例:
MODRD K1 H2101 K6
讀取  站號1 位址2101H 開始6筆資料。

實際在發送的資料為:

可以看到我們只給3個資料。站號 、讀取位址、讀取筆數。
系統會自已補上功能碼、LRC檢查碼,並排列好。節省麻煩。

外部裝置回應的數據會存在D1070~D1085,
如果是ASCII格式,會在自動轉成16進制,放在D1050~D1055

如果讀取錯誤,PLC 將錯誤碼儲存於 D1130, 同時, M1141 會 On。

2.寫入指令MODWD:(Modbus功能碼=06)

指令格式:MODWD S1 S2 n
S1=站號
S2=寫入資料的位址
n=欲寫入的資料。

例:MODWR K1 H0100 H1770
寫入 站號1 位址100H 資料 1770

實際在發送的資料為:

外部裝置回應的數據會存在D1070~D1085(不管是RTU或ASCII)

如果寫入錯誤,PLC 將錯誤碼儲存於 D1130, 同時, M1141 會 On。(跟讀取一樣)

3.串列資料傳輸 RS(非Modbus格式用)
指令格式:RS S m D n
S=傳送資料的起始裝置
m=傳送的資料筆數
D=接收資料的起始裝置
n=接收資料的筆數

此種傳送方式,由於是沒有格式,所以開頭碼、結束碼、CRC、LRC檢查碼,都需要自已處理。

8 位元模式(M1161=On) / 16 位元模式(M1161=Off)切換
由於PLC的資料D,都是以16位元在儲存,
但在發送資料時,是以8bit/7bit方式發送,
一個D,會被拆成上下兩個8bit,發送兩次。

如果相同指令:RS D100 K5 D120 K5
在8位元模式,發送順序。
D100低8位元,D101低8位元,D102低8位元、 D103低8位元、D104低8位元 共5筆。

在16位元模式,發送順序。
D100低8位元,D100高8位元,D101低8位元、 D101高8位元、D102低8位元 共5筆。
一個D的發送,低8位元,先送,再送高8位元。

如果只是說明好像沒有差別,但真正在排序資料時,就知道差別很大。

例:要讀取站號1的位址210H,開始6筆資料。

RTU的發送資料應該是:01 03 2101 0006 D4
01=站號
03=讀取
2101=讀取的位址
0006=筆數
D4=LRC檢查碼

如果要把資料放在D100開始的位置
8位元模式應該放成:
D100=0
D101=1
D102=0
D103=3
D104=2
D105=1
D106=0
D107=1
D108=0
D109=0
D110=0
D111=6
D112=D
D113=4

如果是16位元模式,應該放成:
D100=10H <<低8位元會先送,所以先送0 ,再送1
D101=30H
D102=12H
D103=10H
D104=00H
D105=60H
D106=4DH


在資料排序時會用到的指令:
SWAP 高\低8位元,資料互換。

MODRW  MODBUS 資料讀出/寫入

有時候外部裝置,不一定支援全部的Modbus指令,可先從簡單的 03讀/06寫  用起。

LRC 檢查碼產生指令:

CRC檢查碼產生指令:



密技:我們在讀取時,通常都是固定的位置,所以可以把碼寫死,就不需要每次都做計算。

台達DVP PLC 如何使用Modbus功能

(出處: PLC+CNC)



沒有留言:

張貼留言