一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 6053|回复: 1

三菱PLC通信贴

[复制链接]
发表于 2017-3-28 22:40 | 显示全部楼层 |阅读模式
三菱plc串口通信协议与串口初始化- E/ u6 k" a! _/ o7 C6 r7 W1 W7 P

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

1、系统硬件构成

三菱fx系列plc自带的编程口是rs-422接口,而pc机的串行通信口则是rs-232c接口,两者之间需要通过sc-09适配电缆才能通信。不同设备上相同类型的通信接口的引脚定义可能存在差异。pc机与三菱fx系列plc上的通信接口引脚定义如图1所示。
+ R7 g, C% u8 v: x 20150905205937724.jpg
+ Z! m) J' t) F- K
' L! u" V: T& f" o图2 sc-09电缆内部电路

2、通信协议

pc机与plc之间有两种通信方式:一种是pc机具有优先权而plc始终被动响应pc机发来的命令;另一种则是plc具有优先权,将命令发送给pc机,并接收来自pc机的响应。本文采用的是前一种通信方式。 ' j0 a& N' T# ]: W, i
为实现pc机与fx系列plc编程口之间的通信,系统采用的是编程口专用通信协议。

2.1 控制字符

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

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

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

表1 控制字符意义
( ~- x8 y5 z; S8 L$ }5 q8 w 20150905205949513.jpg
+ z! C# ~6 t0 p' I/ V1 e
; Z0 z; G2 [9 o* K2.2 命令代码

pc机对plc相应软元件的操作是通过"0"、"1"、"7"、"8"四个命令符来实现的,各命令符的含义如表2所示。 - k' K' O2 f4 M
表2 命令字符含义
; @$ G2 V: @! g' ` 20150905205958547.jpg
% V) d3 a8 I6 N % D2 p9 M- ~% E6 O# U8 X# @" \
2.3 命令帧

一个完整的命令帧由控制字符stx(02h)、命令码(cmd)、数据段、控制字符etx(03h)以及和校验码五部分组成。9 P/ s0 e/ g) G& j  @  H( @+ [
其中,和校验码是从命令码到控制字符etx的所有字符的ascii码(十六进制)相加所得结果的最低两位数。

①pc机"读"命令帧   f$ g! ], ^& [: u5 [7 ?' V
"读"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、报文结束标志以及和校验码组成。来自:电工技术之家. Z% v" a: x: @% V  A. Z/ }! y
当通信正确时,plc返回的应答帧由报文开始标志、数据段、报文结束标志以及和校验码组成;通信出错时,plc应答"nak"。

②pc机"强制on"命令帧
. i! [9 S; I3 _* hpc机"强制on"命令帧由报文开始标志、命令码(37h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

③pc机"强制off"命令帧 % T" _' {( X3 b, v9 m9 G7 m
pc机"强制off"命令帧由报文开始标志、命令码(38h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

④pc机"写"命令帧
1 g* w! M( ~# ]( Spc机"写"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、待写入软元件的数据、报文结束标志以及和校验码组成,如图3所示。写入正常时,plc应答"ack";写入出错时,plc应答"nak"。 . _% p# g- [( o* b8 l
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所示。 # h% l) ~2 I- V# G& z
20150905210023873.jpg   n0 k1 E. N& ~2 i" N8 M
图5 数据写入plc的程序框图

3.5 关闭串口

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

: M2 @/ d# l9 ~2 |5 C# a
2 ~8 X# Q" k( a4 P9 ?" d

评分

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

查看全部评分

 楼主| 发表于 2017-3-28 22:44 | 显示全部楼层
一、三菱PLC编程口通讯协议
) t6 d$ }& o( x6 h: A" j# ]& @, ~: E6 @$ s( H% t; o6 B$ N
三菱PLC编程口的通讯协议比较简单,只有四个命令,即:
  I- E, E' f7 y7 H9 h  r6 \( f% |
命令                    命令码             目标设备' N# V% I- N/ l0 {
" U- b: [% T$ ], [
DEVICE READ CMD             "0"                       X,Y,M,S,T,C,D
9 @: l6 g, t0 U0 l# q+ b4 D9 G% `4 @+ o$ K/ r; R; S6 z
DEVICE WRITE CMD            "1"                       X,Y,M,S,T,C,D
5 T) H* V! C: _) U
- K! x6 Y  [# b' S% F: aFORCE ON CMD                  " 7"                         X,Y,M,S,T,C
8 M3 t! w1 f) `/ s( Z. C  ?6 n# F  Z( X, f) N/ b, w$ B. G
FORCE OFF CMD                  "8"                        X,Y,M,S,T,C
& V9 r; E4 e7 G& F6 J# R
, o  C1 J6 T+ P! ^3 V9 S! P% o五个标示:( J* K4 x7 ~" ?0 {1 t( G
5 w# _5 t) t6 b% ~
ENQ            05H             请求
! F: T5 F: `  |: i( K1 \8 s" J* y) u
ACK            06H             PLC正确响应& b  @3 ^: L# @) I, t: |* Y

. H7 c" J0 ~- j2 n  {. _) mNAK           15H             PLC错误响应; ], D: p, ~! u$ s: {
# a, g# Z! l! T/ B% ?
STX             02H             报文开始5 h% d/ r, T5 T$ ?  n, A4 k2 p  @

& r* Q* w+ a$ U. r* E8 OETX             03H             报文结束
2 a9 u. j: H6 o; T
; f+ k2 ?+ ~$ k. ?, t- l使用累加方式的和校验,帧格式如下:
  z/ Q, M8 B2 X/ e, [( W, V' b
" {; C' a6 z" Y6 @* H' o2 XSTX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)3 n$ a9 X# z! x6 `9 _
3 H' x2 `2 A7 I; z0 B
和校验:
! G4 Z& v: H  P/ V* z' K. a2 R% R# Z: A8 `4 v
SUM= CMD+……+ETX。 如SUM=73H,SUM=“73”。
* {" b+ [1 @5 k' ~" z: y* {
/ n& {+ v% s& T+ I1、DEVICE READ(读出软设备状态值)
6 d# @- N2 x+ e& V8 R) F$ t7 a9 W! n7 s0 s4 D; _$ I
计算机向PLC发送:
% z3 G- y1 B- n" t; ?
3 e! O" Z+ V+ ?* m) Z4 T始          命令             首地址                        位数             终                 和校验1 g' T7 q* {% S3 a+ Y5 b
/ z4 u& K7 h! h
STX       CMD             GROUP ADDRESS       BYTES         ETX              SUM
7 q7 P5 H0 W/ h$ V" @, i% n
' ]2 P- \8 ^( \( ?PLC 返回
  I9 ]0 A) i# S) a5 s  X: h) p3 ?) z6 l9 ^1 a* u8 h' \) ?
STX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM
' L8 T. e, U$ n. m8 C2 B! ]* ~2 ]2 n
2 t- d4 `/ u) d2、DEVICE WRITE(向PLC 软设备写入值)6 ]7 S, O& T4 }% L# S
# ~3 g8 w% [8 o' y" t9 O
计算机向PLC发送:- G" ?: Q% f! \4 ^) S

( K$ ?  D* W# L2 h9 @; y始          命令      首地址          位数             数据             终                  和校验
. [0 Z* x6 C. Y  u7 v. L' v
$ d; C1 S9 P' f, [  J: EPLC 返回1 w" D1 z- n/ u5 e# q! y8 j" M* f7 v
  q# ]$ X$ u( z9 }
ACK (06H) 接受正确, u4 I+ l4 G& m9 S' E

2 x& d1 D- ?- l: ~$ h0 {# YNAK (15H) 接受错误4 q) ?6 e: o9 m  `! m2 z
* R( H  H0 r4 p* a* q. [
3、位设备强制置位/复位3 d8 Z+ t+ f: R
' V: y# ?, ^. {! R7 x  t
FORCE ON 置位8 g- a2 u6 U+ i, k; |9 I

7 g, I& K5 G9 S- u+ G$ _) v- c: h始                 命令             地址                    终                 和校验
* E# G7 i# C0 Y! o' S/ b2 ^
* P8 u! K, a) j+ \4 ]+ w/ kSTX              CMD             ADDRESS            ETX              SUM. h' ]+ b- F9 O9 V, Q
" X5 A, b# n% [, m& Z% Z+ t
02h               37h               address                 03h             sum- i/ l, k: r& Q& @
# l( d3 t. D+ v5 o0 Y' G4 V
FORCE OFF 复位
/ ~9 O( U! U- V: X  u' |' o& V4 l; C
始                 命令             地址                    终                 和校验  b% ?& E$ s. M) t; u
$ T/ g& [$ o$ J, |
STX              CMD             ADDRESS            ETX              SUM) E0 r" p  d% ~  t, V7 G3 M/ w
3 ~; h2 W  N7 A' n% m
02h               38h               address                 03h               sum
3 l; M' {8 y6 w6 j
4 R1 q; k* r) [PLC 返回
- Y& \# M) e# w0 h8 P) x2 A, W" \1 a2 w6 M7 b
ACK(06H) 接受正确
3 j1 [$ m& W& r. W0 f
3 e! X8 ?7 T# h! Z" u  R5 yNAK(15H) 接受错误
& Y% [3 R' T( {6 y0 A- H# L  p
$ ]1 P  ?( R% |/ V以上可以看出,协议非常简单,但是由于没有寄存器类型信息,所以地址的计算十分关键,如D100和M100分别对应哪个地址呢?下面就是三菱Fx系列PLC地址对应表:* Z7 j$ H4 l# u8 ]6 H3 ?
' E+ b, i; w6 u7 Q4 h
Public Const PLC_D_Base_AddRess = 4096
: i8 r3 k" d; i: F3 J. ]/ u+ @+ H; L  k5 p5 W
Public Const PLC_D_Special_Base_AddRess = 3584; {( y3 C4 s8 J8 a& J5 S/ b

; B3 c5 @4 g! {5 y5 kPublic Const PLC_Y_Group_Base_AddRess = 160
  p$ }0 T0 o% x6 V
* |. ~1 Q1 Q! V9 @/ G/ v8 w2 nPublic Const PLC_PY_Group_Base_AddRess = 672  U6 g8 f7 k* W8 d4 X0 n

! ?, I6 u/ Q1 ^/ g5 p* U  pPublic Const PLC_T_Group_Base_AddRess = 192
, G# b1 k8 F3 w" b  Q# p- {5 Q9 M/ M1 ]
Public Const PLC_OT_Group_Base_AddRess = 7041 ~4 |) |' m: \2 M8 |" X

& y! J: e) {9 u7 y  @+ f7 C; BPublic Const PLC_RT_Group_Base_AddRess = 1216
# h  v# w) S* ?- O" V& |( `  I$ v/ L+ z% X9 b, [* Y- \9 d
Public Const PLC_M_SINGLE_Base_AddRess = 2048(命令为7或8时); W+ T4 S1 C. M, l2 c5 d5 `0 Z

4 L7 I% B* h3 L" l, [7 d8 q% nPublic Const PLC_M_Group_Base_AddRess = 256* `# K# M+ T. f/ }2 v) P
: x; s" D7 X$ z7 w8 ]4 i8 k* t# V
Public Const PLC_PM_Group_Base_AddRess = 768
" f( J/ q- B( M2 A
2 l: a$ g2 X& M. E* S  x. M2 pPublic Const PLC_S_Group_Base_AddRess = 0
; a" i% \" J( _, }5 O5 `9 z' Y- T# `0 T$ w/ s% F
Public Const PLC_X_Group_Base_AddRess = 128
' M8 S6 J3 q4 I( [$ O; H
+ c5 E7 y  x7 f- Z9 cPublic Const PLC_C_Group_Base_AddRess = 448
" @; J) O( B2 P; L1 l4 \6 u7 Q6 y
5 v+ B% r  A: t# NPublic Const PLC_OC_Group_Base_AddRess = 960! p0 S  T' {9 ^7 W+ [0 n7 @& y! f2 O

* }" p9 p3 k& C: v9 j3 i3 rPublic Const PLC_RC_Group_Base_AddRess = 1472" L7 S! r+ O2 U7 S
' P* v& Q* e* F! B% |
Public Const PLC_TV_Group_Base_AddRess = 20488 E) `# A1 S/ m" q
/ b3 j5 I. c9 `$ B
Public Const PLC_CV16_Group_Base_AddRess = 2560
# P9 e+ t3 {( ?1 g# X. }( K  T* J4 P2 Q7 l+ i! q. a; c
Public Const PLC_CV32_Group_Base_AddRess = 3072
+ E8 L7 @# G& \' _% z
8 j0 S3 v' u) Q3 ?当我们用DEVICE READ命令时,D100地址=100*2+4096;M100地址=100+256;不同的是D类型寄存器存放的是字,M寄存器存放的是位,同样是读两个字节,D100返回的就是PLC中D100地址的值,M类型寄存器返回的是M100到M116的值。所以当我们用FORCE ON 命令时,M100寄存器地址=100+2048;
1 F7 ~5 z) o' I' G+ z4 i, ]0 _4 M0 X  w8 C, u
这也没有什么复杂的,不是吗?可是三菱公司好像不甘于如此,FORCE ON/Off命令中地址排列与DEVICE READ/WRITE不同,是低位在前高位在后。如Y20,地址是0510H,代码中4个字节地址表示为:1005。(注意:Y寄存器为八进制,如Y20地址=16+1280=0510H)
7 F& k& G) X5 w4 b( P4 S
$ R) s% }! M+ k4 r' I: v
回复 0 1

使用道具 举报

本版积分规则

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

GMT+8, 2026-4-17 16:28 , Processed in 0.042112 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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