一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 4861|回复: 1
收起左侧

三菱PLC通信贴

[复制链接]
发表于 2017-3-28 22:40 | 显示全部楼层 |阅读模式
三菱plc串口通信协议与串口初始化; u7 f  d$ h5 I2 _( V, D7 `* T

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

1、系统硬件构成

三菱fx系列plc自带的编程口是rs-422接口,而pc机的串行通信口则是rs-232c接口,两者之间需要通过sc-09适配电缆才能通信。不同设备上相同类型的通信接口的引脚定义可能存在差异。pc机与三菱fx系列plc上的通信接口引脚定义如图1所示。 " g5 h1 R; N5 |$ W
20150905205937724.jpg $ k) F+ k  a* @& W( B$ l" R

; T4 U/ c$ s0 Y$ c6 `图2 sc-09电缆内部电路

2、通信协议

pc机与plc之间有两种通信方式:一种是pc机具有优先权而plc始终被动响应pc机发来的命令;另一种则是plc具有优先权,将命令发送给pc机,并接收来自pc机的响应。本文采用的是前一种通信方式。 6 m1 C' S& V4 Y+ j5 t6 Z" M
为实现pc机与fx系列plc编程口之间的通信,系统采用的是编程口专用通信协议。

2.1 控制字符

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

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

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

表1 控制字符意义 # K5 t" J9 _% \+ W! l% Y7 ^
20150905205949513.jpg
' y6 X' g9 f0 m/ y. F) D
2 B/ k# Y% b/ Z9 ^" h2.2 命令代码

pc机对plc相应软元件的操作是通过"0"、"1"、"7"、"8"四个命令符来实现的,各命令符的含义如表2所示。 8 ~: o3 |, M; u% Y: Q
表2 命令字符含义 ' a( a. h3 x0 `- |9 D0 k
20150905205958547.jpg , [) X( m2 D) g8 J" Q

9 V2 i9 P/ ]! G; l2.3 命令帧

一个完整的命令帧由控制字符stx(02h)、命令码(cmd)、数据段、控制字符etx(03h)以及和校验码五部分组成。# k0 ?- j2 @; F$ i% w. k% r1 K
其中,和校验码是从命令码到控制字符etx的所有字符的ascii码(十六进制)相加所得结果的最低两位数。

①pc机"读"命令帧
# t8 q4 h- z& ^! ?"读"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、报文结束标志以及和校验码组成。来自:电工技术之家
/ w- p7 Q  }1 i6 n* a当通信正确时,plc返回的应答帧由报文开始标志、数据段、报文结束标志以及和校验码组成;通信出错时,plc应答"nak"。

②pc机"强制on"命令帧
! t4 G& @' s* T: I+ opc机"强制on"命令帧由报文开始标志、命令码(37h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

③pc机"强制off"命令帧 4 ]( ]. H% [4 B% n% }8 Q7 Q" L$ z
pc机"强制off"命令帧由报文开始标志、命令码(38h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

④pc机"写"命令帧 + X  O8 |) p: F' U1 m- P3 q
pc机"写"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、待写入软元件的数据、报文结束标志以及和校验码组成,如图3所示。写入正常时,plc应答"ack";写入出错时,plc应答"nak"。
6 t3 d' L3 Q5 n+ M$ E 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所示。 ' f1 E4 \& r3 V6 {" a5 `
20150905210023873.jpg
% H6 f: F2 I% g$ {4 F图5 数据写入plc的程序框图

3.5 关闭串口

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

, y$ `+ h  z  m
7 }# \3 h0 d$ {" u; {, h# }

评分

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

查看全部评分

 楼主| 发表于 2017-3-28 22:44 | 显示全部楼层
一、三菱PLC编程口通讯协议
1 U( W& k  D0 V' S3 m% d
( N' m" ^- v8 v) K) p) a' y三菱PLC编程口的通讯协议比较简单,只有四个命令,即:7 |; K6 M* l- B6 ]+ ]
; E: X1 J; I+ \  E# |
命令                    命令码             目标设备
; J7 E/ A/ [( L9 F8 _( u6 P* g* |3 R8 n5 o
DEVICE READ CMD             "0"                       X,Y,M,S,T,C,D& }2 C3 v* l0 q  T) M, p6 ^

9 {8 E9 d( |, C  E2 tDEVICE WRITE CMD            "1"                       X,Y,M,S,T,C,D3 \% n" ]: _$ F' @- i. p! }" V! `
* P7 H5 A# p. i% U! g! N/ p! R4 a
FORCE ON CMD                  " 7"                         X,Y,M,S,T,C  R9 A# U5 r/ e. C5 {3 o, y& X8 {
. {' ~" ]0 H, l' _$ }
FORCE OFF CMD                  "8"                        X,Y,M,S,T,C
  n- `; y' V) {5 n. b
. _8 N* ^6 y! M1 k8 w: g五个标示:, r9 ~& \1 }: {, {( m$ o/ ?
: y+ [; [0 P6 ?. J# T+ @$ W
ENQ            05H             请求
  G7 p" O: M) B2 N- B! e
9 |0 I2 j5 Y& s  \ACK            06H             PLC正确响应4 S* T; q1 X( g) e2 E: A! }3 Q
% U( `, M: T1 m% U. e5 l0 r
NAK           15H             PLC错误响应. E5 O# ]8 j% B' @- e0 p
* x! T& B" U; h
STX             02H             报文开始
. T& S) \1 b+ F9 U
; ^7 E: z5 ]8 O& X, `ETX             03H             报文结束
+ [/ M. l  ?4 c' F/ X7 m3 y) L; l1 g* i% |$ C
使用累加方式的和校验,帧格式如下:, }# V( x# i6 J$ f5 E. n, Z
. U# l9 d% ^  j  R, o
STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)
& d5 N8 E; o& ~3 I+ L  W
' E* s8 q% P5 N3 t和校验:
. m3 ?: ]' a3 Z
0 G; R" x  E* I7 m3 R( LSUM= CMD+……+ETX。 如SUM=73H,SUM=“73”。+ }0 x) @7 k; Z/ A

( o* X1 C* V; ]9 |1 c1、DEVICE READ(读出软设备状态值)
+ I2 D- ~* ^( t" `+ u8 B% \
) |* z0 H) _+ u! c+ A计算机向PLC发送:
, e$ t8 u8 ]- u& B( ?( r2 ^3 V1 [& L& D% H8 {, ?7 K
始          命令             首地址                        位数             终                 和校验- l) k# ~2 i7 d3 s5 J0 k& ~

6 P' A& u) f/ F8 z. [8 j: KSTX       CMD             GROUP ADDRESS       BYTES         ETX              SUM
  {" Z5 ^. [3 m" n. _0 G
' N6 n. G4 b6 s# ?9 q7 H( w2 RPLC 返回
% E$ k! Y$ F$ }6 g# Z6 ?, V$ d9 \5 B( Y& N# r0 \7 Q
STX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM
/ v3 u/ h; L3 g, u; I# z: s
9 J: U4 V8 C( r1 p. R6 o2、DEVICE WRITE(向PLC 软设备写入值)
& E$ H9 L1 B# D' S  s6 J% h) i2 u% D; D1 ?' u8 k
计算机向PLC发送:) S/ H) \( h& N; d) a

6 f/ N9 G  E3 {" A始          命令      首地址          位数             数据             终                  和校验5 `8 c5 T% @9 s7 l8 p, j
' D4 J1 f$ k: U& E' [) D; ]6 c
PLC 返回
. h8 y5 m  |: ^- q% p
  w  B# J* z7 hACK (06H) 接受正确
( |% r4 c, A' f$ n* k
8 ?1 P" p8 X. o+ W  P9 WNAK (15H) 接受错误
; W$ j) g( o* u% G
7 e9 }3 @5 P; v: l, j8 @3、位设备强制置位/复位7 z. O+ N6 u" n3 L5 d) ^$ l9 ?9 [
& l. k# F3 s1 [
FORCE ON 置位+ j% i5 c3 ~% N) z5 B9 i$ `
8 @6 R% E2 J: a4 ^
始                 命令             地址                    终                 和校验; E4 K: O: i) H" F
; R3 b; \/ t' @
STX              CMD             ADDRESS            ETX              SUM
1 r7 \" w7 Z6 k/ a$ J; k2 H* h
! f+ i+ }9 @6 L: g6 t  L, w# W* _! ]- T02h               37h               address                 03h             sum  v* J) d( P4 x

  G" E0 N0 y" ]' AFORCE OFF 复位( B5 m4 D# p6 N" y/ ~

- E; P8 l' C/ z* e3 }- q0 d& Y* J4 c& B始                 命令             地址                    终                 和校验
6 n" _. r' ?- v5 k
6 Z, M2 B" G1 ?/ r6 ^( \5 b9 nSTX              CMD             ADDRESS            ETX              SUM/ l9 l6 _+ i. g5 w9 c( N! Y/ Y' H
( u! X2 ^, Y/ ?, e+ n7 H
02h               38h               address                 03h               sum
' I( Q! I6 n& P; X$ g0 N4 R1 c& R* C7 S) r7 q
PLC 返回
5 P) T. q+ G/ [! g4 ^
* D' m3 p8 l7 |+ w0 l( iACK(06H) 接受正确' @7 h9 z" P4 @4 w

) m$ L6 y1 Z! Z& ?# yNAK(15H) 接受错误4 A+ O- M) R  i. e) o

& k* b) m2 O1 P) m, v, {' `8 B: p, Z以上可以看出,协议非常简单,但是由于没有寄存器类型信息,所以地址的计算十分关键,如D100和M100分别对应哪个地址呢?下面就是三菱Fx系列PLC地址对应表:# R7 o. M& v5 A$ o& m& y

6 ^6 \& \1 A3 S; Z9 _2 ?7 M: e; JPublic Const PLC_D_Base_AddRess = 4096
7 f5 ^, u0 T+ K, V5 H' ?/ J' |' Q
Public Const PLC_D_Special_Base_AddRess = 3584. p6 w+ d. o* B- X
# R- H9 `3 G& P% e- `& T- E0 O# w8 o7 a
Public Const PLC_Y_Group_Base_AddRess = 160
( N  t' R  r% o. W  |8 F8 |
; S( b3 L( ^$ x- \: m9 C  bPublic Const PLC_PY_Group_Base_AddRess = 672  U9 o7 e# ?+ P  Y# t$ P; b

: |' v# s3 S, H- F* l. l3 ^* p8 g4 WPublic Const PLC_T_Group_Base_AddRess = 192
! Z- V) l$ A! j* v
9 o/ J# d. y; q2 aPublic Const PLC_OT_Group_Base_AddRess = 704
: S% _7 ^' Z9 s, J  W- A/ [. f* a
# O" r3 ^" y2 {; u: B/ {1 ^Public Const PLC_RT_Group_Base_AddRess = 1216
1 e: M* G: P( l; k- R
; x: \4 {, H8 O$ jPublic Const PLC_M_SINGLE_Base_AddRess = 2048(命令为7或8时)
$ w7 F' m8 g8 W8 O, d8 s0 T, ]5 Z( n' u7 Y1 O! {7 s# [
Public Const PLC_M_Group_Base_AddRess = 256% l# D& {* p* E+ D+ t* a: |
; d" U. e( x, _  x
Public Const PLC_PM_Group_Base_AddRess = 768
. }# a* P9 z4 E; x. y! y
; p" M( C3 P& f  gPublic Const PLC_S_Group_Base_AddRess = 02 k" q, j6 K, A0 s

  V  f: a2 U* fPublic Const PLC_X_Group_Base_AddRess = 128
0 `9 }( T' P- h# S' N  P7 W9 S& v5 _% p' |) J6 W2 y- k
Public Const PLC_C_Group_Base_AddRess = 448# w9 w. T2 t8 B
2 b0 U" U7 s4 i2 T8 V
Public Const PLC_OC_Group_Base_AddRess = 960
) @9 |! N: H) Z. [$ z7 X8 {  M: P- j$ ^& K  C4 s& m% ?% U% D# P
Public Const PLC_RC_Group_Base_AddRess = 1472" E% w& G/ `. A/ P3 Z
0 p$ K6 Z: @! f8 Y! R  ]
Public Const PLC_TV_Group_Base_AddRess = 2048
( {. X7 _8 R( j0 x9 F8 p; g; r1 B
Public Const PLC_CV16_Group_Base_AddRess = 2560
1 ]1 k/ ^- N6 Q% L1 T/ L5 [9 p
9 o) z$ u- b: W3 f: r  x2 [) UPublic Const PLC_CV32_Group_Base_AddRess = 3072( a, E. a) m# m$ \4 L

. k5 X: I: G2 k' K6 z) V$ F! p当我们用DEVICE READ命令时,D100地址=100*2+4096;M100地址=100+256;不同的是D类型寄存器存放的是字,M寄存器存放的是位,同样是读两个字节,D100返回的就是PLC中D100地址的值,M类型寄存器返回的是M100到M116的值。所以当我们用FORCE ON 命令时,M100寄存器地址=100+2048;
% z: c1 S: l1 S( I& e
$ f; i. g  V( y' |' p0 T4 s0 C这也没有什么复杂的,不是吗?可是三菱公司好像不甘于如此,FORCE ON/Off命令中地址排列与DEVICE READ/WRITE不同,是低位在前高位在后。如Y20,地址是0510H,代码中4个字节地址表示为:1005。(注意:Y寄存器为八进制,如Y20地址=16+1280=0510H)
* q7 y# X; m2 X1 _' V  e3 q% Z; n3 }- M$ g

本版积分规则

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

GMT+8, 2025-4-28 03:40 , Processed in 0.050787 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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