一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 5576|回复: 1

三菱PLC通信贴

[复制链接]
发表于 2017-3-28 22:40 | 显示全部楼层 |阅读模式
三菱plc串口通信协议与串口初始化
8 ]% I. i; H! [# T) z' {, k

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

1、系统硬件构成

三菱fx系列plc自带的编程口是rs-422接口,而pc机的串行通信口则是rs-232c接口,两者之间需要通过sc-09适配电缆才能通信。不同设备上相同类型的通信接口的引脚定义可能存在差异。pc机与三菱fx系列plc上的通信接口引脚定义如图1所示。 $ |( |4 F; K# x& c
20150905205937724.jpg 7 e, G, E( _/ R, G
# D+ X7 w( |; G# ~0 K. @
图2 sc-09电缆内部电路

2、通信协议

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

2.1 控制字符

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

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

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

表1 控制字符意义
9 q+ T. ?3 q+ h9 x 20150905205949513.jpg 2 t& q2 Z5 D: |
4 n  g, G- p/ D0 p% Y) m
2.2 命令代码

pc机对plc相应软元件的操作是通过"0"、"1"、"7"、"8"四个命令符来实现的,各命令符的含义如表2所示。
1 L, I; n( n: A" i: x' h表2 命令字符含义
. f! r& y$ C% K; @' \ 20150905205958547.jpg ! o$ R$ [& L" q" |
3 G# Y9 w# D4 \; J
2.3 命令帧

一个完整的命令帧由控制字符stx(02h)、命令码(cmd)、数据段、控制字符etx(03h)以及和校验码五部分组成。2 Q7 B$ b1 I8 Y- w  C2 ?
其中,和校验码是从命令码到控制字符etx的所有字符的ascii码(十六进制)相加所得结果的最低两位数。

①pc机"读"命令帧 1 J; U) W. t( x. \
"读"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、报文结束标志以及和校验码组成。来自:电工技术之家& D9 F2 K- s# v
当通信正确时,plc返回的应答帧由报文开始标志、数据段、报文结束标志以及和校验码组成;通信出错时,plc应答"nak"。

②pc机"强制on"命令帧
$ e& b2 r* x1 r$ R3 s* r3 Gpc机"强制on"命令帧由报文开始标志、命令码(37h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

③pc机"强制off"命令帧
! l( o6 }. s0 \7 [; D; ppc机"强制off"命令帧由报文开始标志、命令码(38h)、软元件地址、报文结束标志以及和校验码组成。接收命令正常时,plc应答"ack";接收出错时,plc应答"nak"。

④pc机"写"命令帧
: U! K. N, J6 J" C1 _pc机"写"命令帧由报文开始标志、命令码、软元件首地址、软元件数据长度(字节数)、待写入软元件的数据、报文结束标志以及和校验码组成,如图3所示。写入正常时,plc应答"ack";写入出错时,plc应答"nak"。
2 ?' P$ S" e  v7 }0 P 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所示。
0 s9 s% l6 ~9 ?9 r 20150905210023873.jpg
( `5 W& {. ~+ }, m3 t. T4 |3 h6 m图5 数据写入plc的程序框图

3.5 关闭串口

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


0 O# e2 X$ Q1 x9 G, o/ O. l+ r  ~' ?( [) }) Q+ a0 d. `8 V, R6 A

评分

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

查看全部评分

 楼主| 发表于 2017-3-28 22:44 | 显示全部楼层
一、三菱PLC编程口通讯协议
; p7 q5 E7 y) t! B
0 I8 i/ E4 U5 y三菱PLC编程口的通讯协议比较简单,只有四个命令,即:! D8 a+ ]3 }  b9 ]. e

0 }+ W& @& R. @9 o9 r% b  K# u8 S, S命令                    命令码             目标设备
, ]  [; e& {$ q" s
1 G2 N: K. T# \# {" FDEVICE READ CMD             "0"                       X,Y,M,S,T,C,D+ A- T2 Y( ]: |+ R* [5 V- W: r# i6 |

/ }( V; [7 i: f3 q: A6 DDEVICE WRITE CMD            "1"                       X,Y,M,S,T,C,D
- l' C, ~, I4 U8 d3 c2 d" I1 V' a- m( N5 ^
FORCE ON CMD                  " 7"                         X,Y,M,S,T,C
# r- `5 [1 f7 r  d. T) o% `5 m& m! o( ?" [" V5 V) z# I
FORCE OFF CMD                  "8"                        X,Y,M,S,T,C+ P* n/ T7 C/ F, ]( O
6 w: R! x6 V: ~6 N3 \; }$ T$ c
五个标示:
2 P3 o) K# U+ i/ [# I9 b0 O$ T$ |/ @/ }, }( Q8 O. T
ENQ            05H             请求
: _" L7 U- U+ w& S( l  Z% h+ G, G; `
  c! \0 \1 b0 z6 }ACK            06H             PLC正确响应- i9 B% W( e1 Y( q1 Q( w

- [- b# Y$ a! C$ kNAK           15H             PLC错误响应
8 @! k9 E6 ^: @: v9 G3 h; L4 ^& C, C+ {* K
STX             02H             报文开始
* m/ j! B9 V6 k3 c  b* Q
; y7 i8 c$ C1 a7 k& ~ETX             03H             报文结束
5 {5 h# o5 a& h1 d! o+ [
1 ?" h4 \7 P4 D  o9 w/ v( `* r使用累加方式的和校验,帧格式如下:
9 Z# J7 X  X+ n( N3 a1 U' A6 n1 s- [: K
STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)5 U2 d& i5 `$ z. B7 F4 t( ^3 \; g
1 ]& E7 [3 R4 |3 W% v! g" [
和校验:
+ o7 N* d3 x9 X3 e; ^) _( l4 \& z' k3 w( K# @! g
SUM= CMD+……+ETX。 如SUM=73H,SUM=“73”。4 @! D8 @* K. i; o

, k  z- Y5 M# o0 j; c/ n8 J1、DEVICE READ(读出软设备状态值)1 |8 D5 w, P+ t+ j3 M' y1 ?8 n) H

6 g! q  F2 D# _0 a( R计算机向PLC发送:6 o6 q" }2 @8 y0 y+ T* S

* l! u+ Q9 X# Q始          命令             首地址                        位数             终                 和校验
8 h/ Y  s- ?6 t$ O6 s( }* U3 A+ W$ p0 N+ ?
STX       CMD             GROUP ADDRESS       BYTES         ETX              SUM
7 w- ^' G) w0 [0 F4 N) K+ e0 i  e: W0 I( ]
PLC 返回
. N6 l9 U0 Q/ ?9 O& c3 ^; Y
7 I# }% f4 k2 ASTX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM4 P1 d' Z. [/ X; S8 q9 j$ r/ I

. L% N3 f2 p0 J+ `7 y2、DEVICE WRITE(向PLC 软设备写入值)
$ X) r+ i$ Y0 B) \9 d; u% Z2 `  G8 C- g
计算机向PLC发送:
5 N% T( D1 o1 b1 T3 x+ u* ]" X% E5 ?6 N" ~4 Z
始          命令      首地址          位数             数据             终                  和校验
% r0 c" \9 z0 }0 H, n1 L" g7 ]
: u5 J7 y+ B9 s) P7 U( W# Y! Z! KPLC 返回
& ^$ m  h0 m( W4 q9 ?3 Z8 S' R# k, t7 Y  }3 U9 k( u
ACK (06H) 接受正确
3 m% b& I0 \- E
# N$ m  d: {+ x3 e+ B% dNAK (15H) 接受错误
- |  J* u. f, F. y0 Y% x3 o! y2 P: L, S0 [; m
3、位设备强制置位/复位
. P8 n) s# c9 e( v3 R+ z
/ z. l7 {+ Z: S8 q0 z6 f! IFORCE ON 置位8 }3 `/ I% B& M; R' d

; ?* O7 m2 {4 r9 p始                 命令             地址                    终                 和校验) h  v, W! H- Q/ X' M$ R" C

3 d, I1 I. i  ~' f' P0 kSTX              CMD             ADDRESS            ETX              SUM
8 X) l, c  y& b% y4 I2 d5 X+ c$ d
. G/ K+ S9 n; q; x6 q$ q& N02h               37h               address                 03h             sum
* s, A) J# L3 m* `. M$ T) ]/ `8 `9 ]- ?- k+ H
FORCE OFF 复位
( m+ E% d5 u3 F5 v1 B$ v7 R' d# A1 \/ ]- n7 w
始                 命令             地址                    终                 和校验' ^5 I, r* N1 C# s* y9 k6 ~  l( _* z
- X: i6 ?9 o$ E; e
STX              CMD             ADDRESS            ETX              SUM
/ d9 {2 z& w, U0 ?4 N' `: ]6 C2 h9 t
2 S3 o. O% k$ ^/ f. ^3 J7 ?02h               38h               address                 03h               sum* O) [1 k4 N3 ~2 N' e- O' I
* p; U! S+ W$ k) c& d$ [
PLC 返回/ J( ]  v1 I* L4 w* U9 V, ?
# Q+ E3 t+ `* N9 K  k8 X# N
ACK(06H) 接受正确& u1 m8 |9 r) _9 h

; L, v4 J, m' I1 g: kNAK(15H) 接受错误, h" F# u$ s/ F. h2 W. m
- V* ^. [; L8 \/ x( x2 A- H
以上可以看出,协议非常简单,但是由于没有寄存器类型信息,所以地址的计算十分关键,如D100和M100分别对应哪个地址呢?下面就是三菱Fx系列PLC地址对应表:; y: C- h" J! `; O
( H. @. j+ p: M+ D2 B% O
Public Const PLC_D_Base_AddRess = 4096
! D, \3 U3 a) Y  f+ R- q1 E+ Q' W) F0 u" _
Public Const PLC_D_Special_Base_AddRess = 3584; Y* S) j2 F# w0 n

) X: ?% Y4 ~( n) J1 s9 l, fPublic Const PLC_Y_Group_Base_AddRess = 1609 [4 Q: a, Z' Z% i4 i- g, [" L/ O

+ z  C' u6 q' r7 x) N) KPublic Const PLC_PY_Group_Base_AddRess = 6724 s4 [5 Z, g9 H- v* N; M% ~6 B" t* D5 M/ p

" u7 j# \; K) i! s' o, SPublic Const PLC_T_Group_Base_AddRess = 192
6 w9 _1 P# g+ N! B5 O3 w4 K3 x1 q5 i( A; {6 I$ V
Public Const PLC_OT_Group_Base_AddRess = 704  ?7 ]- s8 M( b  S( O
) U+ Y* C$ }8 |0 T9 N" e
Public Const PLC_RT_Group_Base_AddRess = 1216
, M9 e! t8 F' l# [# V$ g" U8 }) Y  g' R. ]5 z
Public Const PLC_M_SINGLE_Base_AddRess = 2048(命令为7或8时)4 Y# d  e& e9 m# g

6 Y- k. Y/ O9 D- fPublic Const PLC_M_Group_Base_AddRess = 256
& C) Y& G; n& d# g9 @
/ O8 @5 {! R; W/ y5 E, GPublic Const PLC_PM_Group_Base_AddRess = 768
" |$ G$ ^7 m6 d' A, z  v  T+ L. ~1 ?7 L# T  o0 K1 o
Public Const PLC_S_Group_Base_AddRess = 0& L7 e. c. @) u/ b5 p( e7 r
% }8 |/ s  ]% j* N8 d
Public Const PLC_X_Group_Base_AddRess = 128
- T4 ?, ^+ d. c+ q4 {1 g
# O! p' J* {% ^/ |1 t, `Public Const PLC_C_Group_Base_AddRess = 448" w7 H' Z" r5 L/ t

1 h% {" {  F+ l3 JPublic Const PLC_OC_Group_Base_AddRess = 960
' _# @$ O# Q6 w0 K4 k3 G# K3 e& B1 O; P% m2 ?! |/ n7 D
Public Const PLC_RC_Group_Base_AddRess = 1472& d2 C* c3 |+ z/ U3 Z

% D( w9 U/ a1 t: E8 PPublic Const PLC_TV_Group_Base_AddRess = 20483 E! g7 F4 l8 U7 h/ j
( L) v$ B  E4 A6 u
Public Const PLC_CV16_Group_Base_AddRess = 2560
/ ?. s. T& G0 @# m8 }* J5 z, U! ]' Z; D1 ]1 s: J1 m4 z6 L
Public Const PLC_CV32_Group_Base_AddRess = 3072
8 n' g0 K8 c0 N' G6 s
* ?$ K8 g- T4 y当我们用DEVICE READ命令时,D100地址=100*2+4096;M100地址=100+256;不同的是D类型寄存器存放的是字,M寄存器存放的是位,同样是读两个字节,D100返回的就是PLC中D100地址的值,M类型寄存器返回的是M100到M116的值。所以当我们用FORCE ON 命令时,M100寄存器地址=100+2048;
7 }! M/ {" }, |- m( n! ^, T7 n" i/ \) g
这也没有什么复杂的,不是吗?可是三菱公司好像不甘于如此,FORCE ON/Off命令中地址排列与DEVICE READ/WRITE不同,是低位在前高位在后。如Y20,地址是0510H,代码中4个字节地址表示为:1005。(注意:Y寄存器为八进制,如Y20地址=16+1280=0510H)! S$ y$ l) e( j, [
& O, D7 p% @5 _& \/ d6 n& z
回复 0 1

使用道具 举报

本版积分规则

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

GMT+8, 2025-10-28 16:56 , Processed in 0.035228 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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