一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 5571|回复: 1

三菱PLC通信贴

[复制链接]
发表于 2017-3-28 22:40 | 显示全部楼层 |阅读模式
三菱plc串口通信协议与串口初始化
, S! o! ?( f& l. @7 E

三菱plc串口通信协议与串口初始化

1、系统硬件构成

三菱fx系列plc自带的编程口是rs-422接口,而pc机的串行通信口则是rs-232c接口,两者之间需要通过sc-09适配电缆才能通信。不同设备上相同类型的通信接口的引脚定义可能存在差异。pc机与三菱fx系列plc上的通信接口引脚定义如图1所示。 1 q- X* n- j1 H/ D
20150905205937724.jpg
8 [% |" X" @6 B$ w2 f* U& z1 o   k- j. a8 o. H! ^) a/ l4 o0 F+ G! D
图2 sc-09电缆内部电路

2、通信协议

pc机与plc之间有两种通信方式:一种是pc机具有优先权而plc始终被动响应pc机发来的命令;另一种则是plc具有优先权,将命令发送给pc机,并接收来自pc机的响应。本文采用的是前一种通信方式。 4 D& t" S/ G: Y" i5 s. }
为实现pc机与fx系列plc编程口之间的通信,系统采用的是编程口专用通信协议。

2.1 控制字符

在pc机与fx系列plc的串行通信中,数据是以帧为单位发送和接收的。

其中,控制字符enq(05h)、ack(06h)和nak(15h)可以构成单字符帧心1,其余的字符帧在发送或接收时都必须用控制字符stx(02h)和etx(03h)分别作为该帧的起始标志和结束标志。

各控制字符的意义如表1所示。

表1 控制字符意义
3 B, {2 I8 M1 F3 E2 w 20150905205949513.jpg . I% p# m8 b5 m' n% d7 s
0 @6 u8 V- Y- F  b4 A. t" V0 e
2.2 命令代码

pc机对plc相应软元件的操作是通过"0"、"1"、"7"、"8"四个命令符来实现的,各命令符的含义如表2所示。 $ @/ p3 G" s5 e" g6 \0 a% f
表2 命令字符含义 2 |+ m( b# O: b$ w6 F9 }/ u
20150905205958547.jpg
# ~8 f+ _5 p" S. [ * B, W7 a3 @6 ?. r9 q) m
2.3 命令帧

一个完整的命令帧由控制字符stx(02h)、命令码(cmd)、数据段、控制字符etx(03h)以及和校验码五部分组成。( \; A/ N: `4 _) v& Q% m6 [
其中,和校验码是从命令码到控制字符etx的所有字符的ascii码(十六进制)相加所得结果的最低两位数。

①pc机"读"命令帧 5 U. {9 T1 \* ]: Z3 O& m
"读"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、报文结束标志以及和校验码组成。来自:电工技术之家
' v+ z7 Z* b# p5 C4 v当通信正确时,plc返回的应答帧由报文开始标志、数据段、报文结束标志以及和校验码组成;通信出错时,plc应答"nak"。

②pc机"强制on"命令帧
1 X; `# L$ N& ?' A, ]( upc机"强制on"命令帧由报文开始标志、命令码(37h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

③pc机"强制off"命令帧
$ T" u: o2 C0 y2 ^4 @pc机"强制off"命令帧由报文开始标志、命令码(38h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

④pc机"写"命令帧 - x$ P, [! L9 b1 }: @. Y) J
pc机"写"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、待写入软元件的数据、报文结束标志以及和校验码组成,如图3所示。写入正常时,plc应答"ack";写入出错时,plc应答"nak"。
  }1 v. _) C: W% B 20150905210012131.jpg

图4 串行通信程序流程图

3.1 串口初始化

串口按照fx系列plc的标准通信参数进行配置:①波特率为9 600 bit/s;②数据比特为7位;③奇偶校验方式采用偶校验;④停止位为1位。

3.2 请求通信

开始通信时,pc机发送"enq"指令查询plc是否准备好,同时也检查pc机到plc的连接是否正确。(www.dgjs123.com)当接收到字符后,若plc处在run状态,则要等到本次扫描周期结束时才应答;若plc处在stop状态,则马上应答。通信正常时,plc应答"ack";通信出错时,应答"nak"。

3.3 读取plc软元件状态

程序首先通过visa写入节点发送命令字符"0"读取plc相应软元件的状态,然后visa读取节点获得plc返回数据。写入和读取的字符串都是十六进制形式的。通过对读取的字符串的拆分可获得相应软元件每一位的状态,从而起到监视plc的作用。

3.4 数据写入plc软元件

程序首先通过visa写入节点发送命令字符"1"对相应的软元件进行写入操作,然后visa读取节点获得plc返回的应答帧,若写入正确,plc应答"ack";若写入错误,plc应答"nak"。将写入数据传送至plc软元件所对应的地址,即可对软元件的任意位进行实时操作。数据写入plc的程序框图如图5所示。 5 \- C: @& l1 s. E
20150905210023873.jpg / t3 C3 h! @4 W' n$ k
图5 数据写入plc的程序框图

3.5 关闭串口

通信结束后,需使用visa关闭节点关闭串口设备,否则程序会一直占用串口资源,导致其他程序无法访问。


4 d. m+ d9 c8 O# Q5 M6 v; z& Q  m/ C& s' ^: k

评分

参与人数 1一乐金币 +1 收起 理由
snoopy8008 + 1

查看全部评分

 楼主| 发表于 2017-3-28 22:44 | 显示全部楼层
一、三菱PLC编程口通讯协议
' d, Z) c3 M4 |- I, c" L# h4 e5 q6 W0 Y+ z7 v  }  W
三菱PLC编程口的通讯协议比较简单,只有四个命令,即:1 Z+ V6 Y' I# ^# Y, h" @1 X
3 F5 H' v4 T' E1 R. t( a
命令                    命令码             目标设备
) j4 H  V/ [. Q& w( Q9 {& C/ S4 x% g: t2 Q2 Y. C
DEVICE READ CMD             "0"                       X,Y,M,S,T,C,D
+ Q* g( q- u) s" ?( Z5 B. }9 B' _1 G/ m
DEVICE WRITE CMD            "1"                       X,Y,M,S,T,C,D
- B- T) _1 N0 ~  m& K2 x# l+ a
6 f0 |; B4 n8 N1 H+ RFORCE ON CMD                  " 7"                         X,Y,M,S,T,C
" r4 r5 E3 X5 ^2 c' x" t% C) C9 t  l- Z
FORCE OFF CMD                  "8"                        X,Y,M,S,T,C" Q6 N) S4 K& N1 @# G8 B! I
4 h5 @5 [. |( I' [5 [
五个标示:) m7 S& `5 G' Y7 C* F! G

. Q, U8 G! N. H; J+ X6 _ENQ            05H             请求. ^$ b3 _7 T6 x5 Z5 u

/ p" A1 {" |4 R. cACK            06H             PLC正确响应
; A: W4 V- @5 \# ?5 Z  a& C  r" o+ l9 e& w
NAK           15H             PLC错误响应
# R/ X$ z0 f0 B4 e% i+ J) {
. }: `) E( |# O% q5 rSTX             02H             报文开始
+ R# y) V3 S1 k5 c3 J' J3 N4 T  {, N( r# c
ETX             03H             报文结束: e, N. N" I2 q: q
) O) Y  q& r, f" Z$ ?/ o1 f
使用累加方式的和校验,帧格式如下:. u$ S: s/ L+ j5 v
9 P8 I0 m" }' E
STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)9 B5 z" M- V# A( q1 m' s6 F" Y

8 ^6 e  Y- |" M$ o) C和校验:  Y) C. z/ v# g  i) C' V- s9 Z
) N$ v$ x  E! s/ ^+ Y- z6 Y7 W
SUM= CMD+……+ETX。 如SUM=73H,SUM=“73”。$ ?) }: W, _7 x1 r8 ^' s  J
6 m) K2 ^5 T3 U) d& G
1、DEVICE READ(读出软设备状态值)8 R0 O! X" [; Z7 n
$ [1 S* X  X4 y4 e
计算机向PLC发送:) Y1 R5 K( V+ a+ Q8 u4 N

& D1 M4 t( n+ f2 C始          命令             首地址                        位数             终                 和校验
. P2 W/ W8 X' _  T* K' Z% ]- y2 p9 ~3 R
STX       CMD             GROUP ADDRESS       BYTES         ETX              SUM( ?" Z7 p. m' x6 L& n, H- y4 p* a

' {1 m! H$ F  TPLC 返回2 e( [& A% ^' S+ I

; C+ P0 p8 Q$ T7 V' j( y' iSTX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM
5 k2 m; g. ^. J% C7 }9 V
: p4 @9 R+ o. O: f3 s- o2、DEVICE WRITE(向PLC 软设备写入值)
" n, m8 N0 |4 a% W' ?8 u. d. o* Z9 `0 b" u  E& _6 ?4 s5 j
计算机向PLC发送:! k& i# F1 J& O

! q7 }4 Q* _  n# \2 ]( j# {始          命令      首地址          位数             数据             终                  和校验
- d, m1 Q6 Y6 S+ C$ I2 a9 q1 ]; f8 D) W. N* }# y9 i
PLC 返回
" g% r0 t* J# K* o1 Y, b1 M
1 y4 J1 x& g4 M" EACK (06H) 接受正确- Y  B7 s% L3 y% b
" J3 S. U, e! P9 }6 J' G2 D& i1 S
NAK (15H) 接受错误1 d# K5 j! |! p8 |/ x6 d+ j! |
: I# }' x% W4 T* \
3、位设备强制置位/复位) o5 Z1 P' X# A0 n( X

- D5 I% p  m; W, ?  FFORCE ON 置位& J; y% o2 a$ l0 y4 C6 J
/ U' ?+ m& M$ O8 V- ?7 T
始                 命令             地址                    终                 和校验
. M$ `/ a" O5 ]6 k7 f
6 o& c- W: X+ n0 L; mSTX              CMD             ADDRESS            ETX              SUM' p3 u! J5 K; ]) m+ f9 m
  E: d/ w* Q: R; U( M
02h               37h               address                 03h             sum5 h2 f+ d2 Q. ^' a8 X! D4 o
1 \4 H  C$ V' n5 y& c# d9 h! c  U
FORCE OFF 复位7 e% |5 [% Q9 U7 e8 {; n; P: G0 v

: b' w/ `4 _# I2 a5 Y# q% D( n始                 命令             地址                    终                 和校验( k1 B$ o* V5 p: I$ T/ i3 |" @
) k  F0 C& g( H
STX              CMD             ADDRESS            ETX              SUM6 s7 s9 a7 r* g6 Q4 l
, K; f9 _4 F* Z: ?$ Y+ J
02h               38h               address                 03h               sum9 K# W) z" C5 _; b# ?8 s
' Z& \5 g0 B7 {$ u
PLC 返回
# ~: D" R' t; G* c! N: B, H: S$ |+ u; r
ACK(06H) 接受正确6 J0 g; C* C6 Y' y0 q% r1 _

9 @% g: r7 ?2 U* w  w% ^+ `NAK(15H) 接受错误0 l- M7 `" ]; C6 Q$ `# ^1 }

% F- [9 h- q" w, Z/ ^- S以上可以看出,协议非常简单,但是由于没有寄存器类型信息,所以地址的计算十分关键,如D100和M100分别对应哪个地址呢?下面就是三菱Fx系列PLC地址对应表:8 h5 K: e4 h, q+ h

2 b- L* O# f' ?+ [2 k5 l7 ]Public Const PLC_D_Base_AddRess = 4096
7 J' }& K) H( u- \
6 e( k; n& y' b( y4 G8 x# ]5 NPublic Const PLC_D_Special_Base_AddRess = 3584
# r, N: k$ \1 b
4 l8 t$ S- r: g* N. yPublic Const PLC_Y_Group_Base_AddRess = 160
' |" L  Z/ u; I! g
) x1 q/ c( i3 z$ c# yPublic Const PLC_PY_Group_Base_AddRess = 672
: B: u8 o9 ?, P9 K/ ~) ~2 _- \) }& W2 G# N
Public Const PLC_T_Group_Base_AddRess = 192
/ ?+ O' o$ `1 a; e2 K8 n' m1 R- U3 D6 U
Public Const PLC_OT_Group_Base_AddRess = 7049 D: Q5 x" x/ S
: _0 R: `0 ~8 f3 ^
Public Const PLC_RT_Group_Base_AddRess = 12161 A! J% K1 v1 ]7 D
4 b% p3 b: C+ M7 Z) b: E
Public Const PLC_M_SINGLE_Base_AddRess = 2048(命令为7或8时)! ^% ^' k9 H& l2 S& k: h+ {  D
/ b2 f( ]- h% V! O+ K' l" l
Public Const PLC_M_Group_Base_AddRess = 256
5 Q/ e& i2 ]5 R* L5 {
2 Q6 [& i9 I1 t# W4 w. GPublic Const PLC_PM_Group_Base_AddRess = 768% m" g; r( I( n- C. w1 }6 h

/ P4 j' G1 W; x: wPublic Const PLC_S_Group_Base_AddRess = 0
5 I: H+ w$ o( a; D/ ~8 C
: M# z/ e( J7 f- DPublic Const PLC_X_Group_Base_AddRess = 128
! @7 G9 Y$ [& l- Y6 W0 d! S7 [; N( X1 x, X6 v5 o3 U0 M
Public Const PLC_C_Group_Base_AddRess = 448
5 q! w9 f# X" Z# v! a) U4 U4 c3 v4 y+ B/ Z0 \. @
Public Const PLC_OC_Group_Base_AddRess = 9604 j, m# e3 V  A2 _2 F$ }# \) C* G# t
; e% d/ e; T& {4 i7 z! t3 [
Public Const PLC_RC_Group_Base_AddRess = 1472: C* B7 \8 }3 M) B
/ X4 A+ Q7 S) L' y/ v; @# }9 k
Public Const PLC_TV_Group_Base_AddRess = 2048! @! ]/ g1 s+ V' M9 T+ @

$ T  {( j4 R2 {+ IPublic Const PLC_CV16_Group_Base_AddRess = 2560
7 G% z) D3 M( @9 e2 i- j9 I3 {$ J# s" j
Public Const PLC_CV32_Group_Base_AddRess = 3072
* v, F0 q+ r9 Y4 M9 l
  r) u* u  S8 j2 \0 E0 t' H  c当我们用DEVICE READ命令时,D100地址=100*2+4096;M100地址=100+256;不同的是D类型寄存器存放的是字,M寄存器存放的是位,同样是读两个字节,D100返回的就是PLC中D100地址的值,M类型寄存器返回的是M100到M116的值。所以当我们用FORCE ON 命令时,M100寄存器地址=100+2048;
: y4 B  a- G8 g7 ?6 [$ O; i- E% V+ H/ S8 W8 L* u" e8 t1 C
这也没有什么复杂的,不是吗?可是三菱公司好像不甘于如此,FORCE ON/Off命令中地址排列与DEVICE READ/WRITE不同,是低位在前高位在后。如Y20,地址是0510H,代码中4个字节地址表示为:1005。(注意:Y寄存器为八进制,如Y20地址=16+1280=0510H)& Q0 T7 u; ~6 }

3 h3 i5 t) s  i* F2 F
回复 0 1

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-10-27 12:31 , Processed in 0.034752 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表