|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 风吹过后 于 2022-8-8 15:22 编辑 9 B3 ~" Z2 V/ j2 ?/ D0 J! V- b' N
* S4 @7 j' s1 _9 S) f# Q
01H-读线圈状态( P" E9 @0 r7 W0 f, f- A3 h
1)描述:读从机线圈寄存器,位操作,可读单个或者多个; & n o1 B' B1 i. H9 [1 U4 m
2)发送指令:
( H7 C+ ?/ {6 `1 z$ c) ?' Z0 m假设从机地址位0x01,寄存器开始地址0x0023,寄存器结束抵制0x0038,总共读取21个线圈。协议图如下: + s3 M7 J; p3 h- w" L
$ g3 N9 X+ }; T, y) K" H% h3 O7 f
3)响应:
- V& Z7 f- h5 |! ]6 Y6 T. l$ e返回数据的每一位对应线圈状态,1-ON,0-OFF,如下图; 9 T; l8 O& ?- U
2 B* W7 w) V7 A2 H0 [: P' Y( H
6 o. o3 i) ^) T, Z0 x
上表中data1表示0x0023-0x002a的线圈状态,data1的最低位代表最低地址的线圈状态,可以理解为小端模式;
6 |# J7 L) v- }( ~' F0 U; p/ f( J" F H5 B$ D
% Y9 O$ P4 x6 Z0 `' V. S7 |
, L% Z' k8 r! Q0 K Z3 D* I2 t1 ~data2表示地址0x002b-0x0033的线圈状态,如下表:) l1 i0 T I* j# b) m
4 j; m% o9 _, [- e7 V
4 a7 Y# |8 b- Idata3表示地址0x0034-0x0038的线圈状态,不够8位,字节高位填充为0,如下表:" _3 U8 l# L& | b
$ r# A) w, J7 y; \7 Y3 {% P( U
" d, E* L, X& k) e: `. l/ t* ~6 J: A% F6 ]
02H-读离散输入状态
# x+ f1 V' f+ w# f6 J& O1):读离散输入寄存器,位操作,可读单个或多个,协议类似功能码0X01协议,此处省;' c) x8 Y: q) Y1 I+ I! I
/ v2 Z" u1 j- `, d! N I- h" w 03H-读保持寄存器* x8 I' y0 ^9 y, [) [9 E6 `
1)描述:读保持寄存器,字节指令操作,可读单个或者多个; ' S2 l+ X& E& {; L* y, D
2)发送指令: 3 g# h5 j7 L0 ?# f A2 k2 d
从机地址0x01,保持寄存器起始地址0x0032,读2个保持寄存器" ^6 r: N# L0 U7 }5 a0 p) |
7 F2 n& Z6 ~+ R5 t* w
6 e& g# a& O8 k+ k S
5 {/ B$ p2 Q" |1 e" Y' S3)响应:4 O3 h7 \# @- P* ]1 a
8 u& e& J) F, g
& C' j$ j. Y; X }
3 V. o) d# x& F0 _数据存储顺序
! P, H5 F/ Y$ N) K6 P% A3 W
. o0 ^! k. A' s$ M/ h/ L8 B
! C* m+ i: k, ~ n+ t
' c; M! L6 h/ N2 ?4 @) Y 04H-读输入寄存器- Y: x! D; @* Y+ K
1)描述:读输入寄存器,字节指令操作,可读单个或者多个; & v2 M \. d" m G: w
2)发送指令:同03H; # T4 x Q( Z. d L- l' l
3)响应:同03H;/ ]' w" q5 r' ~
. o1 X* L; _: X$ } ]- j8 w
05H-写单个线圈$ W0 I1 l; Y% P( q9 K/ n
1)描述:写单个线圈,位操作,只能写一个,写0xff00表示设置线圈状态为ON,写0x0000表示设置线圈状态为OFF
$ K/ F0 E* P* I9 V& S; M n. G$ n2 T2)发送指令: $ k% W t0 m" ^: R1 s$ h
设置0x0032线圈为ON;# M9 p* ]: o- a! b7 R' j. g+ u
$ p, t$ j. A, U( O
. N$ K/ {/ } a8 c- _0 j
0 M/ A" ~0 k7 _9 c3)响应: ; K) k* S% R3 H$ y
同发送指令;
* @- u# V. @0 f7 b& `+ n Z; t
2 r$ r9 N" ] j4 y v 06H-写单个保持寄存器
, b3 j7 {# G9 D% X7 j( F1)描述:写单个保持寄存器,字节指令操作,只能写一个; $ L3 H3 ]5 U u
2)发送指令:
& _* i0 f, Q: b写0x0032保持寄存器为0x1232;
" `5 Z* u3 n+ s; ^! j* G/ ?: T$ v' G4 ~) \$ K$ F
7 o4 a" v9 Z9 m& r1 y3 \" j! G0 u2 i9 t7 M+ S
3)响应:同发送指令;& P5 a. J4 d5 ]( @* ^3 O7 }; y, s- ]
3 \' \( s6 Q, r8 X% n) V$ I- c
0FH-写多个线圈
$ s& ?# o2 f/ [ K4 j( d1)描述:写多个线圈寄存器。若数据区的某位值为“1”表示被请求的相应线圈状态为ON,若某位值为“0”,则为状态为OFF。
4 P0 ]8 [1 p. n6 [) S2)发送指令: " Y& {+ c3 z, F$ m( z
线圈地址为0x04a5,写12个线圈,
: @9 A( I M( D$ T' o
# y/ V. Z9 E+ E) ^. Y1 H0 a5 [9 v: P! ~# Y ~# W- h$ J) p3 O
上图中DATA1为0x0c,表示: 6 F3 Y3 i8 b4 e
" @: C7 T1 Z, v! Z6 g/ \' t" wDATA2为0x02,不够8位,字节高位填充0:; V* [2 g, f, A3 ^! @
" j! a, ^8 J) @% L% S6 Y/ N
* r( l) t7 P# G2 z* J3 {, B( S
0 y! I1 g! i, s+ x3)响应:
1 [$ s& Z9 J- Z7 G
2 D4 J7 E6 s: N/ D% \) ^
- M7 @8 Z; }4 U8 n! f2 h# K2 L" l; Y5 y3 g2 C' A7 }2 s
10H-写多个保持寄存器
- P7 b2 t2 B0 t0 }/ g8 f1)描述:写多个保持寄存器,字节指令操作,可写多个; 2 b* x1 _+ @) W. i5 N, x
2)发送指令:
4 {* b( @. r. y6 H( P保持寄存器起始地址为0x0034,写2个寄存器4个字节的数据;! ?! D8 h8 d) G, U* X
# w/ K0 d2 h& T8 m
7 r o2 d4 X* T$ Y7 k$ ]" v3)响应:
9 V- d; C" S7 [' A9 \
, O( K- H% g8 ]3 E A6 H
0 Z' F" [3 U$ I2 s. ]8 `
-2 v6 ^8 T Z% i
5 C, R" V# D% k
* P* K, I: ~ F5 e5 [9 A; ^4 q* p |
|