DVP通讯协定.docx
《DVP通讯协定.docx》由会员分享,可在线阅读,更多相关《DVP通讯协定.docx(14页珍藏版)》请在冰豆网上搜索。
DVP通讯协定
PRODUCTSPECIFICATION
DVPSeriesPLCCommunicationProtocol
Signature
Date
WrittenBy
CheckedBy
Application
ApprovedBy
1.簡介
本手冊說明DVP-PLC作為從端(Slave)通訊口之通訊協定,依此通訊方法可存取PLC內部元件,提供給主端(Master)或人機介面與PLC連線方法之參考。
2.軟體規範
A.機能
PLC型號
軟體版本
DVP-ES/EX/SS/EC
V4.7(含)以上
DVP-EP
V1.0(含)以上
DVP-EH
V1.0(含)以上
B.通訊規範
1.通訊介面
PLC型號
通訊介面
DVP-ES/EX/SS/EC
V4.7(含)以上
COM1:
RS-232
COM2:
RS-485
二選一,亦即不可同時使用
V5.1(含)以上
COM1:
RS-232
COM2:
RS-485
可同時使用
DVP-EP/EH
COM1:
RS-232
COM2:
RS-485/RS-232RS-422(依擴充卡而定)
可同時使用
2.以MODBUSASCII模式的通訊協定與外界通信
3.通訊格式
參數
內容
傳輸速度(Baudrate)
9600bps
起始位元
1
資料長度
7
同位元(Parity)
偶同位(Evenparity)
停止位元
1
3.
連線方式
通訊口
連接方法
RS-232
使用連接線DVPACAB215或DVPACAB230
RS-485
主端必須具有RS-485介面,使用雙絞線,具有隔離被覆網較佳
RS-422
主端必須具有RS-422介面,使用2條雙絞線,具有隔離被覆網較佳
4.通訊協定說明
⏹通訊訊息框格式
STX
起始字元‘:
’(3AH)
ADR1
通訊位址:
ADR0
2個ASCII字元共16bits
CMD1
命令碼:
CMD0
2個ASCII字元共16bits
DATA(0)
資料內容:
DATA
(1)
n個ASCII字元共n*16bits
……….
限制n<=74個ASCII碼
DATA(n-1)
LRCCHK1
偵誤值:
LRCCHK0
2個ASCII字元共16bits
END1
結束字元:
END0
END1=CR(0DH),END0=LF(0AH)
⏹ADR(通訊位址)
PLC通訊位址出廠設定值為0x01,因此(ADR1,ADR0)=’0’,’1’’0’=30H,‘1’=31H
⏹LRCCHK(偵誤值)
偵錯方式採用LRC(LongitudinalRedundancyCheck)偵誤值。
LRC偵誤值乃是將ADR1至最後一個資料內容加總,將該值取2補數(2’sComplement)得到之結果即為LRC偵誤值。
例:
STX
‘:
’
01H+03H+04H+01H+00+01H=0AH
0AH的2補數為F6H
註1:
2補數的求法:
(1補數再加1)
0A(H)=00001010,先取1補數(將b0~b7反相)得11110101,再加1為11110110=F6(H)即為0A(H)的2補數。
註2:
判斷的方法
因此在收到一串完整的通訊命令,要檢查這串通訊命令是否有誤,只要將(ADR1,0)至(LRC1,0)加總等於0,則通訊無誤,否則表示命令中資料有些是錯誤的。
ADR1
‘0’
ADR0
‘1’
CMD1
‘0’
CMD0
‘3’
起始資料位址
‘0’
‘4’
‘0’
‘1’
資料數
‘0’
‘0’
‘0’
‘1’
LRCCHK1
‘F’
LRCCHK0
‘6’
END1
CR
END0
LF
◆通訊異常PLC的回應:
PLC收到完整的通訊命令時,會判斷命令是否有效,造成無效的原因有:
原因
Exceptioncode
LRCCHKERROR
07
DeviceAddressInvalid
02
要求的資料超過範圍
03
CommandCodeInvalid
01
通訊命令格式Invalid
07
例:
使用命令碼01讀取X000~X017的狀態
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
01
StartingAddressHi
04
StartingAddressLo
00
NumberofPointsHi
00
NumberofPointsLo
10
ErrorCheck(LRC)
EA
PLC回應:
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
81
ExceptionCode
02
ErrorCheck(LRC)
7C
因為Address0400對Function01是不合法的,所以回應Exceptioncode=0x02,且Function01被設為81(b7被設為1),亦即由回應的Functioncode的MSB被設為1表示PLC回應ErrorMessage,並且由Exceptioncode可得知是何種錯誤。
⏹DATA(資料字元)及CMD(命令指令)
◆可用之命令碼敘述如下:
(其中元件位址請參考文件”DVP-PLC元件通訊位址”)
Code
Name
適用元件
01
ReadCoilStatus
S,Y,M,T,C
02
ReadInputStatus
S,X,Y,M,T,C
03
ReadHoldingRegisters
T,C,D
05
ForceSingleCoil
S,Y,M,T,C
06
PresetSingleRegister
T,C,D
15
ForceMultipleCoils
S,Y,M,T,C
16
PresetMultipleRegister
T,C,D
17
ReportSlaveID
None
◆資料字元之格式依命令碼而定,依可用之命令碼的資料內容分別敘述如下:
FunctionCode:
01,ReadCoilStatus
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
01
StartingAddressHi
06
StartingAddressLo
14
NumberofPointsHi
00
NumberofPointsLo
25
ErrorCheck(LRC)
BF
NumberofPoints(max)=255=0x00FF
Example:
ReadingCoilsT20~T56fromslavedevice01
PC→PLC“:
010106140025BFCRLF”
PLC→PC“:
010105CD6BB20E1BD6CRLF”
FieldName
Contents
SlaveAddress
01
Function
01
BytesCount
05
Data(CoilsT27…T20)
CD
Data(CoilsT35…T28)
6B
Data(CoilsT43…T36)
B2
Data(CoilsT51…T44)
0E
Data(CoilsT56…T52)
1B
ErrorCheck(LRC)
E6
⏹
⏹
FunctionCode:
02,ReadInputStatus
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
02
StartingAddressHi
05
StartingAddressLo
14
NumberofPointsHi
00
NumberofPointsLo
25
ErrorCheck(LRC)
BF
Example:
ReadingContactY024~Y070fromslavedevice01
PC→PLC“:
010205140025BFCRLF”
PLC→PC“:
010105CD6BB20E1BE5CRLF”
FieldName
Contents
SlaveAddress
01
Function
02
BytesCount
05
Data(CoilsY033…Y024)
CD
Data(CoilsY043…Y034)
6B
Data(CoilsY053…Y044)
B2
Data(CoilsY063…Y054)
0E
Data(CoilsY070…Y064)
1B
ErrorCheck(LRC)
E5
⏹FunctionCode:
03,ReadHoldingRegister
HoldingRegister:
T,C,D
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
03
StartingAddressHi
06
StartingAddressLo
14
NumberofPointsHi
00
NumberofPointsLo
08
ErrorCheck(LRC)
DA
NumberofPoints(max)
=18(for16bitregister),=9(for32bitregister)
Example:
ReadingCoilsT20~T27fromslavedevice01
PC→PLC“:
010306140008DACRLF”
PLC→PC“:
01031000010002000300040005000600070008B8CRLF”
FieldName
Contents
SlaveAddress
01
Function
03
BytesCount
10
DataHi(T20)
00
DataLo(T20)
01
DataHi(T21)
00
DataLo(T21)
02
DataHi(T22)
00
DataLo(T22)
03
DataHi(T23)
00
DataLo(T23)
04
DataHi(T24)
00
DataLo(T24)
05
DataHi(T25)
00
DataLo(T25)
06
DataHi(T26)
00
DataLo(T26)
07
DataHi(T27)
00
DataLo(T27)
08
ErrorCheck(LRC)
C8
⏹FunctionCode:
05,ForceSingleCoil
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
05
CoilAddressHi
05
CoilAddressLo
00
ForceDataHi
FF
ForceDataLo
00
ErrorCheck(LRC)
F6
MMNN=0xFF00….CoilON
MMNN=0x0000….CoilOFF
Example:
ForcingCoilY000ON
PC→PLC“:
01050500FF00F6CRLF”
PLC→PC“:
01050500FF00F6CRLF”
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
05
CoilAddressHi
05
CoilAddressLo
00
ForceDataHi
FF
ForceDataLo
00
ErrorCheck(LRC)
F6
⏹FunctionCode:
06,PresetSingleRegister
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
06
RegisterAddressHi
06
RegisterAddressLo
00
PresetDataHi
12
PresetDataLo
34
ErrorCheck(LRC)
AD
Example:
SettingRegisterT0to0003
PC→PLC“:
010606001234ADCRLF”
PLC→PC“:
010606001234ADCRLF”
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
06
RegisterT0AddressHi
06
RegisterT0AddressLo
00
PresetDataHi
12
PresetDataLo
34
ErrorCheck(LRC)
AD
Switch(c)
Case0:
T0
Q→:
010606001234ADCRLF
Case1:
C0
Q→:
01060E001234AFCRLF
Case2:
C232
Q→:
01060EE812345678EFCRLF
Case3:
D10
Q→:
0106100A123499CRLF
Case4:
D1000
Q→:
010613E81234BACRLF
⏹FunctionCode:
15,ForceMultipleCoils
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
0F
CoilAddressHi
05
CoilAddressLo
00
QuantityofCoilsHi
00
QuantityofCoilsLo
0A
ByteCount
02
ForceDataHi
CD
ForceDataLo
01
ErrorCheck(LRC)
11
QuantityofCoils(max)=255
Example:
SettingCoilY007…Y000=11001101,Y011…Y010=01.
PC→PLC“:
010F0500000A02CD0111CRLF”
PLC→PC“:
010F0500000AE1CRLF”
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
0F
RegisterT0AddressHi
05
RegisterT0AddressLo
00
PresetDataHi
00
PresetDataLo
0A
ErrorCheck(LRC)
E1
⏹FunctionCode:
16,PresetMultipleRegister
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
10
StartingAddressHi
06
StartingAddressLo
00
NumberofRegisterHi
00
NumberofRegisterLo
02
ByteCount
04
DataHi
00
DataLo
0A
DataHi
01
DataLo
02
ErrorCheck(LRC)
C6
NumberofRegister(max)
=16(for16bitregister)
=8(for8bitregister)
Example:
SettingRegisterT0to000A,T1to0102.
PC→PLC“:
01100600020004000A0102D6CRLF”
PLC→PC“:
011006000002E7CRLF”
FieldName
Example(Hex)
Heading
3A
SlaveAddress
01
Function
10
StartingAddressHi
06
StartingAddressLo
00
NumberofRegistersHi
00
NumberofRegistersLo
02
ErrorCheck(LRC)
E7