一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 5341|回复: 1

三菱PLC通信贴

[复制链接]
发表于 2017-3-28 22:40 | 显示全部楼层 |阅读模式
三菱plc串口通信协议与串口初始化
; u4 J% U# w1 U3 F+ w" B

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

1、系统硬件构成

三菱fx系列plc自带的编程口是rs-422接口,而pc机的串行通信口则是rs-232c接口,两者之间需要通过sc-09适配电缆才能通信。不同设备上相同类型的通信接口的引脚定义可能存在差异。pc机与三菱fx系列plc上的通信接口引脚定义如图1所示。 ) R: g/ t& p! ^9 A
20150905205937724.jpg $ Z9 }# W- b* {: L

) e+ l. d( k# G. B; m# n2 k4 U$ o图2 sc-09电缆内部电路

2、通信协议

pc机与plc之间有两种通信方式:一种是pc机具有优先权而plc始终被动响应pc机发来的命令;另一种则是plc具有优先权,将命令发送给pc机,并接收来自pc机的响应。本文采用的是前一种通信方式。
8 `. K: `6 y5 \* [为实现pc机与fx系列plc编程口之间的通信,系统采用的是编程口专用通信协议。

2.1 控制字符

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

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

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

表1 控制字符意义
+ B  g; D# P6 k3 v0 X 20150905205949513.jpg 8 }! b- z3 x- H/ K, H

2 Z9 n  l$ K1 V/ W3 K6 j2.2 命令代码

pc机对plc相应软元件的操作是通过"0"、"1"、"7"、"8"四个命令符来实现的,各命令符的含义如表2所示。 8 J  ~. b) r8 Q$ P. k' D# E0 `
表2 命令字符含义 0 A  \7 [8 O& N8 B6 ?
20150905205958547.jpg
. F- V; }0 P2 c9 k/ [. M0 i, C ) S9 m: f) x; {) [& C( A' B
2.3 命令帧

一个完整的命令帧由控制字符stx(02h)、命令码(cmd)、数据段、控制字符etx(03h)以及和校验码五部分组成。
# w* \5 G- I+ h* j  ~  Y9 o其中,和校验码是从命令码到控制字符etx的所有字符的ascii码(十六进制)相加所得结果的最低两位数。

①pc机"读"命令帧
( U4 A* Y% M, Y% |8 H+ H2 d"读"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、报文结束标志以及和校验码组成。来自:电工技术之家
7 X. m! b6 V1 J2 y3 ]* _& \当通信正确时,plc返回的应答帧由报文开始标志、数据段、报文结束标志以及和校验码组成;通信出错时,plc应答"nak"。

②pc机"强制on"命令帧
% j8 ?& O( c3 j* Ypc机"强制on"命令帧由报文开始标志、命令码(37h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

③pc机"强制off"命令帧
! `& B+ I! {9 K( H2 W4 k  @3 R8 Ipc机"强制off"命令帧由报文开始标志、命令码(38h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

④pc机"写"命令帧 5 \: H9 |) d4 F2 r: E5 h
pc机"写"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、待写入软元件的数据、报文结束标志以及和校验码组成,如图3所示。写入正常时,plc应答"ack";写入出错时,plc应答"nak"。 ' Y* N$ E4 W: J, o5 Y
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所示。 / n- S+ A/ M2 ?  N1 L+ g3 G
20150905210023873.jpg ( I4 }$ g$ z: L3 r2 T. J
图5 数据写入plc的程序框图

3.5 关闭串口

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

  h3 F( D. A7 n* V

: \. J- @5 }; P/ Y4 w7 |& |3 q3 j

评分

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

查看全部评分

 楼主| 发表于 2017-3-28 22:44 | 显示全部楼层
一、三菱PLC编程口通讯协议# e7 ^+ \9 }8 `0 V! M+ U6 l

  d  {' r8 r4 y" c6 T* x5 ?三菱PLC编程口的通讯协议比较简单,只有四个命令,即:9 U8 _8 b, ?% S. e; W
/ c2 r+ c  F. U% Y% u0 l# j
命令                    命令码             目标设备
# B  p. P0 ^; B# `, V# }& }
8 i, R0 A( l7 }5 t% v8 G# @- \9 tDEVICE READ CMD             "0"                       X,Y,M,S,T,C,D
, _0 A; Y: s+ ^) m6 g$ H
, o7 [  t; f3 g! LDEVICE WRITE CMD            "1"                       X,Y,M,S,T,C,D/ j. V4 H) R& h8 _0 ?

$ O/ }$ D' \( FFORCE ON CMD                  " 7"                         X,Y,M,S,T,C1 d$ O+ Z! ]& p8 Q& I# r
; q/ s) ^2 D: _
FORCE OFF CMD                  "8"                        X,Y,M,S,T,C
+ t2 G" D8 t% n7 Z& c0 J6 c( y. k, v9 n; k  ]2 U! f8 c* U; ~
五个标示:
8 ^# n2 v7 N) x( P& {
! {) X  {6 ]/ |; }ENQ            05H             请求3 x5 M7 c3 F9 @& j/ e
. ~% Y  z* ~1 ]( g4 j& Q& l
ACK            06H             PLC正确响应% j( v* Y9 X, O# O
  P& I- _! [+ ^, B, q* X5 V
NAK           15H             PLC错误响应6 @- w' l" X% X9 |
7 u: ~& X( [0 m" s0 G8 `4 v9 m
STX             02H             报文开始  d' @% ~0 k5 q

4 h+ e  p9 D  sETX             03H             报文结束
# w( n) D) d2 w$ ]9 ~0 _! g
7 ~2 K) {+ ?: K2 Z! C: Y1 n8 `使用累加方式的和校验,帧格式如下:
. x" `$ N2 @5 f; B; y% F7 b/ p9 `8 p8 `: `7 j& Z8 x/ R1 O
STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)$ R! B2 l' |, B1 ]
7 {! o3 R( V' ~0 o6 ~: X9 I
和校验:. k0 y4 v7 Z, @* r- J
/ \+ ~9 P2 ?; ]4 N& H/ ]
SUM= CMD+……+ETX。 如SUM=73H,SUM=“73”。9 R$ R, g, R) b3 q
: `5 b0 i# X- m: T# R
1、DEVICE READ(读出软设备状态值)& |; |, i. K  n0 N, g( ~" n' l6 x
( @; E% P( n( ?
计算机向PLC发送:
1 }4 {; [7 `8 ^# v& ]1 V; m8 E  a. Q. u$ ~% ~
始          命令             首地址                        位数             终                 和校验
% Q. T! i7 c4 T# m/ H
- b+ x" [# |% D7 mSTX       CMD             GROUP ADDRESS       BYTES         ETX              SUM
$ T" ]( b* d' a) q
3 t; R( d8 |* f: ZPLC 返回
0 L5 ]* @. Y3 }- _9 l& Y: w) Y, `3 i- Q* n$ V2 S7 X6 B. p" O
STX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM/ |. Q- `" R6 x8 g5 H* g
. ~: d- l/ h0 \0 }
2、DEVICE WRITE(向PLC 软设备写入值)3 p! [3 B$ r# E
  X* n$ Z( r6 r+ ]4 \
计算机向PLC发送:9 Q+ J9 B' }2 ~3 H
0 n8 q3 F- {+ z6 f
始          命令      首地址          位数             数据             终                  和校验/ y; M% T/ x+ A- p) E( p

- j2 H& x( e; |1 h8 `. o/ b/ p9 L; z* qPLC 返回
* {0 T5 C/ m: f: `% @* v3 J' z
" i0 U+ I4 L' h* y/ OACK (06H) 接受正确
0 ]: _' m* R: J3 G: u; b5 I
- }  |6 d$ O4 W, v3 VNAK (15H) 接受错误
) N8 _; T4 c  ^* M" G( n. M" V$ L3 O0 s% I' R' [# o
3、位设备强制置位/复位
9 I( [$ R0 R: ?, Z
- G" b- x5 |3 ~: b" l- ?& TFORCE ON 置位8 Q4 t3 o( `0 I
) Z& m% f0 R" [' }
始                 命令             地址                    终                 和校验
/ L! T5 \' Z5 s% q4 ^* [7 K! M6 f( }* _! d( k5 [* P
STX              CMD             ADDRESS            ETX              SUM
9 o, t  }4 z4 G0 F& Z. P4 u
  M2 B0 {* D2 ~2 F  c3 ]02h               37h               address                 03h             sum. x" b% ?* O5 B# o1 Q0 V! ^
0 F6 V) w: G( B6 O4 w
FORCE OFF 复位& F/ |- L: W1 Y" Z# R

/ `7 u% c) d' q1 M% ?+ Q* J5 T/ g- s始                 命令             地址                    终                 和校验( ^* J; _# `. ^/ ^; A* g8 l  e

2 y. G. R  b" Q$ l* M8 ?) `+ ESTX              CMD             ADDRESS            ETX              SUM
* I& h9 d4 I1 M8 u, e, k$ C: c& G
7 ]( Q, f+ U6 I3 B, X02h               38h               address                 03h               sum
, F! o! d. b: h% V3 O; ~9 f8 V2 [  Z. j+ p5 _3 V# B
PLC 返回- B7 ?. R% U4 k+ D0 t2 q$ b1 Q; V

0 e6 c2 \4 c8 ~1 k% |) m! LACK(06H) 接受正确! Q4 H2 x! j5 `$ p. l
: z/ o; l; f7 }8 T9 {
NAK(15H) 接受错误5 d: m) {0 [: H& u/ R" I) e

! |4 }% \5 B7 D5 O- F6 c7 [以上可以看出,协议非常简单,但是由于没有寄存器类型信息,所以地址的计算十分关键,如D100和M100分别对应哪个地址呢?下面就是三菱Fx系列PLC地址对应表:- H% W* i% l! g9 I' Z3 L6 X' S1 A

- F3 h" u. `9 }6 T+ C. _/ }Public Const PLC_D_Base_AddRess = 40968 j6 h" A* t/ s
; D! p3 ^2 B$ N* G8 @
Public Const PLC_D_Special_Base_AddRess = 3584
& K5 s1 x9 y; j
- R' @$ Z( C$ R- N9 c1 d: v; HPublic Const PLC_Y_Group_Base_AddRess = 160$ I6 E2 w2 [5 Z& B+ T# E

6 o" N- C$ ^- b0 ~: h: ~Public Const PLC_PY_Group_Base_AddRess = 672: E4 ?/ k* a6 ~1 A
# t' w6 ~! w3 n8 B1 n' B
Public Const PLC_T_Group_Base_AddRess = 192
" j+ B9 H/ U. h2 S! }2 b/ B* N
) Q( q9 z9 L! P7 n1 jPublic Const PLC_OT_Group_Base_AddRess = 7047 o- p8 f6 `) l; Q$ S7 J/ ]# a

5 ?* w, Y' S) s/ R+ X3 APublic Const PLC_RT_Group_Base_AddRess = 1216
0 K# I. O9 }$ K
9 u5 C( d) L& z  O0 KPublic Const PLC_M_SINGLE_Base_AddRess = 2048(命令为7或8时)
' W9 _+ a4 u) ]3 s; D6 T( f6 ?! y; J+ _8 d1 O" L& p
Public Const PLC_M_Group_Base_AddRess = 256
! D/ ?- Y5 O7 Y+ y' z; l' U/ r% H
Public Const PLC_PM_Group_Base_AddRess = 768
. b) k7 g" _9 V2 @
% K- B* M+ i+ h2 o, u; {, E: ?( yPublic Const PLC_S_Group_Base_AddRess = 0
  S' W: m4 ], n0 o% g% b2 _1 R4 O* ]' f5 ?) q
Public Const PLC_X_Group_Base_AddRess = 128$ |2 `* }1 l) S. {' ]; p+ R* E

. a, @  u9 c$ B/ {Public Const PLC_C_Group_Base_AddRess = 448  i9 V+ N. s% _/ H( i4 }
( u8 _/ b& p8 {8 F0 V* a+ _
Public Const PLC_OC_Group_Base_AddRess = 960* u; e3 K, O4 P4 {6 V2 p2 e

$ P& k2 d8 i' |Public Const PLC_RC_Group_Base_AddRess = 14722 _* m$ V# t7 a" Z+ s
' i0 Y9 K, S$ n2 r" {
Public Const PLC_TV_Group_Base_AddRess = 2048+ k# X' p4 d* n4 U: w

1 {4 v7 u9 ~- y9 IPublic Const PLC_CV16_Group_Base_AddRess = 2560
+ K: x# D2 j# Q* N/ }! x- y: ]! R: {2 T- C8 r( m" f
Public Const PLC_CV32_Group_Base_AddRess = 3072
+ {' z' Z  d8 l& ]% G
0 k+ a: H4 m8 F当我们用DEVICE READ命令时,D100地址=100*2+4096;M100地址=100+256;不同的是D类型寄存器存放的是字,M寄存器存放的是位,同样是读两个字节,D100返回的就是PLC中D100地址的值,M类型寄存器返回的是M100到M116的值。所以当我们用FORCE ON 命令时,M100寄存器地址=100+2048;3 G5 ~7 E: V% a( P! p

. q' h) r! x5 z6 _1 H4 Q0 O这也没有什么复杂的,不是吗?可是三菱公司好像不甘于如此,FORCE ON/Off命令中地址排列与DEVICE READ/WRITE不同,是低位在前高位在后。如Y20,地址是0510H,代码中4个字节地址表示为:1005。(注意:Y寄存器为八进制,如Y20地址=16+1280=0510H)
/ ~: T! W5 H0 E# F1 [$ ?
  f4 }% I( n$ v4 S9 N% C: Z. Y( G
回复 0 1

使用道具 举报

本版积分规则

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

GMT+8, 2025-8-20 09:02 , Processed in 0.035044 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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