一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 6287|回复: 1

三菱PLC通信贴

[复制链接]
发表于 2017-3-28 22:40 | 显示全部楼层 |阅读模式
三菱plc串口通信协议与串口初始化
8 W7 N! o* k8 L

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

1、系统硬件构成

三菱fx系列plc自带的编程口是rs-422接口,而pc机的串行通信口则是rs-232c接口,两者之间需要通过sc-09适配电缆才能通信。不同设备上相同类型的通信接口的引脚定义可能存在差异。pc机与三菱fx系列plc上的通信接口引脚定义如图1所示。 ) c& ?) p3 I3 `  G+ Y3 ?
20150905205937724.jpg 7 @5 k% ?, e( P1 [0 ~2 X7 D9 k% Q7 n
( H5 g  @7 g# p4 C
图2 sc-09电缆内部电路

2、通信协议

pc机与plc之间有两种通信方式:一种是pc机具有优先权而plc始终被动响应pc机发来的命令;另一种则是plc具有优先权,将命令发送给pc机,并接收来自pc机的响应。本文采用的是前一种通信方式。 2 D4 }- X, d3 M9 d/ B4 a; \- G
为实现pc机与fx系列plc编程口之间的通信,系统采用的是编程口专用通信协议。

2.1 控制字符

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

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

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

表1 控制字符意义
4 t. a' {7 x8 \& J% G! v5 Z# R# I 20150905205949513.jpg 1 [4 |+ C1 }3 c- F+ ?& \6 S& b

" r7 f) o; o# F) Y) T& M3 I2.2 命令代码

pc机对plc相应软元件的操作是通过"0"、"1"、"7"、"8"四个命令符来实现的,各命令符的含义如表2所示。
% H4 ]: v3 B1 d( u, J表2 命令字符含义
) U; E# s$ E% _6 P 20150905205958547.jpg - T# Y5 ~' ?" Y. Y$ x

4 `1 ~0 }5 F6 N: G. O0 e2.3 命令帧

一个完整的命令帧由控制字符stx(02h)、命令码(cmd)、数据段、控制字符etx(03h)以及和校验码五部分组成。
" n4 U0 r0 b- c1 M- O* F* v其中,和校验码是从命令码到控制字符etx的所有字符的ascii码(十六进制)相加所得结果的最低两位数。

①pc机"读"命令帧
( Q0 I/ G! H& F6 ^$ q9 O"读"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、报文结束标志以及和校验码组成。来自:电工技术之家
; k! v- V) p) [2 l" G% R' s当通信正确时,plc返回的应答帧由报文开始标志、数据段、报文结束标志以及和校验码组成;通信出错时,plc应答"nak"。

②pc机"强制on"命令帧 4 b2 \: x" l9 z
pc机"强制on"命令帧由报文开始标志、命令码(37h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

③pc机"强制off"命令帧
0 G! T. U  E& b2 V; L' Xpc机"强制off"命令帧由报文开始标志、命令码(38h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

④pc机"写"命令帧 $ T' z0 A& v! m' u1 W* p9 K
pc机"写"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、待写入软元件的数据、报文结束标志以及和校验码组成,如图3所示。写入正常时,plc应答"ack";写入出错时,plc应答"nak"。 + i6 C# J; g3 x% j( H( r
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所示。 ; a" J" Q& a0 E& V! G
20150905210023873.jpg
) ]9 I5 H& `" I3 Y2 ?& R8 V, F图5 数据写入plc的程序框图

3.5 关闭串口

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

; I% q, d0 E+ t2 Z1 r2 x

) x/ a/ {$ ~3 [8 H. M

评分

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

查看全部评分

 楼主| 发表于 2017-3-28 22:44 | 显示全部楼层
一、三菱PLC编程口通讯协议' E6 |1 P% ?9 l) p

) Y0 O) y& `. d! v. ^& z1 Q三菱PLC编程口的通讯协议比较简单,只有四个命令,即:
* H. e, ~  U% A% k
9 Y6 p, f3 I% G. {命令                    命令码             目标设备: H! d, n2 f4 t# S, [; @4 y
- ~, X9 b2 [" g! U5 c( f% F
DEVICE READ CMD             "0"                       X,Y,M,S,T,C,D
1 L' P. z" @' Q4 H. G- v* N/ o7 m! Z9 F/ ?
DEVICE WRITE CMD            "1"                       X,Y,M,S,T,C,D8 v* H) h  G/ K9 k5 w) L% v& d( L
2 l- G$ ]7 c& n
FORCE ON CMD                  " 7"                         X,Y,M,S,T,C' ~: W/ l5 U3 o0 C3 e

* O; }9 J* G' e: T8 ?FORCE OFF CMD                  "8"                        X,Y,M,S,T,C
# l& n* q* ]6 w' t0 `/ G) H, V5 k+ n# Z' c
五个标示:
. t, c  W1 k. m# g2 T( t# O+ H/ d
* X4 r8 |" U7 m( \9 c. Q0 {ENQ            05H             请求
2 q1 ?5 ^+ o8 S0 ^+ z. n+ [' m3 ~+ A. D1 X
ACK            06H             PLC正确响应
7 }- P2 l5 @6 I2 H3 X1 u; v: u
) W' e: X1 y! b6 zNAK           15H             PLC错误响应% O: W- z5 \) }) |: T
" l+ ~6 `, `; S$ I- E! z
STX             02H             报文开始" X- S1 J  L- W( Y* G

0 g6 {2 Y: v% Q8 Y: U1 FETX             03H             报文结束
6 e/ y8 ]& D. C1 Y2 F1 ]
% s+ I. _  \8 N* H使用累加方式的和校验,帧格式如下:
, k, h  V& `5 {* e' w% n/ A0 y  s, r2 {9 \' i6 z* \9 a2 P/ l
STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)# A0 E$ V9 S$ U8 v; [

. r! T2 t0 o4 X: R和校验:
, A8 p& y; J) Z' a1 `% s( _. `; U1 _7 y; b8 k! i" C
SUM= CMD+……+ETX。 如SUM=73H,SUM=“73”。
6 B* P2 T" E; j/ Q! y" M7 a- U
4 K4 R  _4 E1 N  p8 I1、DEVICE READ(读出软设备状态值)
5 a( M" {$ z9 V5 Y- P$ _( E" v- M
; v. B# o  h* J5 V9 g- H: I. R( N计算机向PLC发送:
( N2 K5 J! k* n
4 [( X! v; P& X* O始          命令             首地址                        位数             终                 和校验/ S8 K* E: t* G  Y& k( b0 T$ w
2 O- A& x) `9 o8 ^9 d  j$ c
STX       CMD             GROUP ADDRESS       BYTES         ETX              SUM. s1 ]; C$ j& r6 h. k0 O- s

! v$ E8 `1 i/ vPLC 返回0 O! H  K$ D+ r9 ^  x
0 s8 g. h: h) x, S8 D: b
STX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM
# E3 n  w) Y( j# A- `, ]
" u- D6 o, r% C( h; @4 X2、DEVICE WRITE(向PLC 软设备写入值)
+ t9 B! V5 Y) v8 x  V) `, n
4 N+ v- C- e4 T$ C( @8 Z  E0 e! R% i计算机向PLC发送:
1 |  c/ q7 U- A- W5 ?) y" h  m4 k2 f5 {# u  G6 A! R
始          命令      首地址          位数             数据             终                  和校验5 B, [5 L+ f+ `- B/ y' C
6 z0 P& i( X, ?' l& @/ L' V
PLC 返回
" Z2 _) C: S& n$ o: z- I5 o& {& X' ^; W: u( l. V
ACK (06H) 接受正确; n; M1 Z0 _. H- K
3 P) g3 g$ H! P3 k3 ^
NAK (15H) 接受错误
9 J% N$ j! x) ~- j+ B0 v+ a3 {. a4 U4 S6 J+ x" H
3、位设备强制置位/复位: p) q% j. b/ D) T0 L( E0 Q7 s
! P7 L( A  C4 V8 r3 P: l0 w
FORCE ON 置位0 c; k, X( q0 ]. j# w8 c7 i6 K+ o

& f! @6 U/ ^# r% Q; J' o始                 命令             地址                    终                 和校验. I7 j4 y7 J$ n( `: I, u. p1 F
* Q: X3 u4 x0 O3 c+ X' B
STX              CMD             ADDRESS            ETX              SUM! L. t. @1 _4 H: p6 |7 T) m  C
# W2 F1 N% o8 B% h2 T
02h               37h               address                 03h             sum
2 s, E0 k( V* ?& A
0 J* b+ t% z3 XFORCE OFF 复位
# \+ q4 Y) x; T* s7 B9 J  T: `* _1 w/ a6 z! Q$ e5 \; d9 I
始                 命令             地址                    终                 和校验
" h& {9 \5 g! c6 G8 ]$ O, _& M" v. @
STX              CMD             ADDRESS            ETX              SUM! ^2 |; E4 x0 |) S6 h4 b
( Z" I' M" Q6 y
02h               38h               address                 03h               sum
* \: {3 I9 p2 V: O
$ R; c- n1 a& P9 l! c5 P2 Z% }PLC 返回
" Y3 q9 H! b' O2 B' }* p' C) v+ ]) \1 \; T& l9 w2 ?% D& t
ACK(06H) 接受正确  f7 Z& ]! `6 r; x3 V! j

& O5 u3 I$ C6 k; Y# X6 xNAK(15H) 接受错误
' e" O3 Q) h2 f: _: X9 }
3 ^. [& g9 I" |0 G( k以上可以看出,协议非常简单,但是由于没有寄存器类型信息,所以地址的计算十分关键,如D100和M100分别对应哪个地址呢?下面就是三菱Fx系列PLC地址对应表:
. a, G5 h- c$ g+ U6 |2 {! d9 z4 U" N- h4 [& Z# @
Public Const PLC_D_Base_AddRess = 4096
3 @; I! b) C! l" |
! Y$ s: d: R$ h+ N4 nPublic Const PLC_D_Special_Base_AddRess = 3584" K5 S+ ~; \  s* I
- O1 g& J3 O, |/ W
Public Const PLC_Y_Group_Base_AddRess = 160
" _3 x. }# X) b* S9 q' l  P# W
+ H! E  |3 g) k4 _- F- c4 i) z5 `, QPublic Const PLC_PY_Group_Base_AddRess = 672
, `* ?# @, A  K- R1 N1 G# E! j+ b% X/ w9 [2 P
Public Const PLC_T_Group_Base_AddRess = 192
' Z5 E, d" l7 A' f# @+ u' i
% V) K* ^) b4 ]( APublic Const PLC_OT_Group_Base_AddRess = 7047 t9 b% \4 o( @6 U
% I+ _' y2 R) T' r- Z9 o5 b5 E
Public Const PLC_RT_Group_Base_AddRess = 1216* G* E% F) a- ^6 l" J# b& c

0 V  P- C! k( E# ?- O* l: y9 C$ WPublic Const PLC_M_SINGLE_Base_AddRess = 2048(命令为7或8时)5 Z1 t! X" V0 ?$ [; n5 S3 @3 b
& n7 k- B' C( ]; O$ z$ J
Public Const PLC_M_Group_Base_AddRess = 256+ w4 ]5 X2 g" l. o, |" ]

% o8 o4 ?: c% o1 x' C9 w) PPublic Const PLC_PM_Group_Base_AddRess = 768
- \6 t+ y% G' i7 b: i& T  d) f
Public Const PLC_S_Group_Base_AddRess = 0
9 b; R) K! a$ y: r; t! u4 ?
9 U0 p% t- b; p. uPublic Const PLC_X_Group_Base_AddRess = 1283 h$ [, K, X- E" e* b; Q' H

# ^  W3 `) {: O" E* l  cPublic Const PLC_C_Group_Base_AddRess = 4488 H' L5 x! t1 v
: [. y5 F1 t- R0 M/ e2 V' S" ?
Public Const PLC_OC_Group_Base_AddRess = 960
- Y5 B6 @, D; ^- U( _
. y, {: {% I0 ]. \  J8 wPublic Const PLC_RC_Group_Base_AddRess = 1472
1 x, I; S8 O9 x4 P& c  d# Z# x2 ~1 }, O8 m! A8 s2 D4 ~3 i
Public Const PLC_TV_Group_Base_AddRess = 2048
! ^$ K) X/ k2 M( w
. c0 H4 h' w! l5 W/ jPublic Const PLC_CV16_Group_Base_AddRess = 2560
# x! C; u; {9 C  m$ N" h
0 N3 s: a$ ?# o8 I. N; @Public Const PLC_CV32_Group_Base_AddRess = 3072; f. j9 q! X) Y3 x% y
6 Q7 o6 ~7 q% ?9 j
当我们用DEVICE READ命令时,D100地址=100*2+4096;M100地址=100+256;不同的是D类型寄存器存放的是字,M寄存器存放的是位,同样是读两个字节,D100返回的就是PLC中D100地址的值,M类型寄存器返回的是M100到M116的值。所以当我们用FORCE ON 命令时,M100寄存器地址=100+2048;
' P$ B) {  G/ O" |5 [- |# U, }" n5 P- x- h* A
这也没有什么复杂的,不是吗?可是三菱公司好像不甘于如此,FORCE ON/Off命令中地址排列与DEVICE READ/WRITE不同,是低位在前高位在后。如Y20,地址是0510H,代码中4个字节地址表示为:1005。(注意:Y寄存器为八进制,如Y20地址=16+1280=0510H)
' H! k# s5 b' c0 L- i3 T' M. K0 R
回复 0 1

使用道具 举报

本版积分规则

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

GMT+8, 2026-7-13 09:11 , Processed in 0.032892 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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