QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3502|回复: 11
收起左侧

[已解决] 请问能把电脑做为PLC的显示屏么?

 关闭 [复制链接]
发表于 2009-5-17 21:24:42 | 显示全部楼层 |阅读模式 来自: 中国陕西西安

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
如题,就是说,三菱的PLC能不能直接和电脑通信,将电脑当做人机界面来用?
8 T* p; P9 y6 h" w: m* S8 C只是用做演示,可以吗?+ H  z2 u2 a3 b8 t  `! A/ R" u2 `) ]
如果可以,需要用什么软件呢?
  Y( {) B5 {# ^0 x" x谢谢各位高手
发表于 2009-5-17 22:29:34 | 显示全部楼层 来自: 中国浙江杭州
没听过可以!楼主可以上网上查查看有没
 楼主| 发表于 2009-5-17 22:36:28 | 显示全部楼层 来自: 中国陕西西安
谢谢~& g; t( C/ F% |: W( Y/ D* R: I
我就是没查到什么才上论坛问的~" [9 v6 w. j( a1 |$ L, D- S
请教大家~~
发表于 2009-5-17 23:42:53 | 显示全部楼层 来自: 中国北京
三菱的PLC可以直接和电脑通信,软件要自己设计。7 R. e" y# a8 E3 ~0 _0 e1 U9 S
PC与PLC通讯程序的设计。此部分的开发设计较难,需要掌握PC和PLC的有关通讯硬件驱动和通讯协议的知识。但对于小型控制系统来说,主要通过PC串口来通讯,所以通讯程序设计的关键是如何利用Visual Basic 6.0中的串口通信控件——MSComm控件,并根据PLC的串口通信协议设计出上下位机的数据交换程序。
$ T& A8 I2 G( M& @2 G- @2 DPC与PLC通讯程序设计分析/ W6 I  S: w2 r  j& r  ?
在分析具体的VB通讯程序之前,先要介绍有关VB串口通信控件MSComm的应用知识和三菱PLC 通讯协议。. |6 D2 h2 k8 `9 ], s0 W
1. MSComm控件简介
! g5 a6 ]) H" ^! X; ^如图所示是Mscomm控件的图标。4 t( n) |- N5 n3 y
它可以用来提供简单的串行端口通信功能,也可以用来创建功能完备、事件驱动的高级通信工具。 Mscomm控件提供了一系列标准通信命令的使用界面。使用它可以建立与串行端口的连接,通过串行端口再连接到其它设备(如调制解调器、PLC),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。' {2 W1 F- z2 e( d
2. MSComm控件的基本属性
) l' e# w/ a8 DMSComm 控件有很多重要的属性,基本属性如下:
1 P8 u1 A" }! [! h属性     描述 % J4 k, B2 T% O0 `% ~: i8 M4 c
CommPort    设置并返回通讯端口号。
2 w7 G1 b: z. b8 lSettings     以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。 2 x6 ?+ y# M! [2 z# E9 E
PortOpen    设置并返回通讯端口的状态。也可以打开和关闭端口。
, e, J' I. m% gInput     从接收缓冲区返回和删除字符。
/ k5 j5 }; a8 R5 BOutput     向传输缓冲区写一个字符串。
. D' Z: \5 l3 r8 i$ J  v如下程序打开串行端口COM1) p1 J- l# m8 v6 i2 Z9 E, m7 u( E
MSComm1.CommPort = 1         使用 COM1
# N2 V3 [; Y  P" ^+ P/ qMSComm1.Settings = "9600,N,7,1"   9600波特率,无奇偶校验,7位数据,一个停止位。
  R2 y3 d. U% y) iMSComm1.PortOpen = True   ''打开端口,开始通信。
- V2 n9 e8 Q9 I, `3 a3. MSComm控件的通信方式7 d4 i' S2 S, H6 A2 [: O
通信控件有2种不同的方式来处理和解决各类通信软件的开发和设计问题。8 `, s9 v; E& U  z" K1 Q
(1) 事件驱动" z# {9 N& ]' H5 r% o7 k
事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如:当线路数据到达本端或CD线和RTS信号线状态发生变化时,要求我们使用相应的事件来跟踪和出理。在这些情况下, Mscomm控件将触发OnComm事件,CommEvent属性值也将被改变。所以在OnComm事件中读取CommEvent属性值就可以检测和处理通信错误等方面的问题。7 T- v+ z9 M0 [& y
(2)查询方式
& W7 l+ N% W7 ~: ~8 }; [利用定时器控件Timer,我们可以设计程序每隔一段时间去读取CommEvent的值并处理所发生错误和事件。
5 K: B9 d& V* o2 _4. 本实例中采用的通讯方式
  M- q+ ?' k3 {: B& f; ^. E& J+ u在本例子中,PC与PLC 采用无握手协议的串行通信,它们只用两根数据线 TD和RD、一根信号地线连接,数据通信采用查询方式。根据系统功能要求,PC需发送两种类型的命令:: P; b8 @. O, M  m
(1) 周期性命令,它由定时器触发引起,每隔0.5秒发送一次。用它来向PLC查询实时显示的数据。如酒、水的瞬时流量,调节阀开度等。- Y5 b5 i/ y% G( e: u
(2) 非周期性命令,它由操作者按动命令按钮引起,非周期性发送。用它来传送输入参数、操作命令给PLC 。
, P- t4 b' M" t8 F4 V( @- \在啤酒稀释的人机操作界面中,有运行时不可见的通信控件(MSComm1)一个、定时器控件一个Timer1。通信控件(MSComm1)用于初始化串口数据并打开串口;定时器控件(Timer1)用于每隔0.5秒执行通讯命令,把查询命令从 PC发送到PLC,同时接收PLC返回的应答数据。设计通讯数据的发送和查询功能,必须掌握PLC所遵循的通讯协议。. W+ S8 U/ H3 `3 S# B! c
5. 三菱FX系列PLC通讯协议
+ A: Y+ \# d: N& |0 ^; c% p三菱FX系列PLC共有四种通信模式,本实例采用的是PLC与计算机专用协议通信方式(无须PLC编程,电脑直接读写操纵PLC),其通讯命令字和通讯格式介绍如下:
5 m; i) O# A/ pPC发送给PLC的通信命令字8 ~4 t$ t  L8 L. M9 G
命令字 注释& @! f+ x( |& I& r( D5 q7 Z3 U# D& {
BR 以1点为单位,读出位元件的状态
' ]0 R7 I/ e3 A4 r0 tWR 以16点为单位,读出位元件的状态,或以1字为单位,读出字元件的值
6 E* m  W$ j! s# u$ {1 {BW 以1点为单位,写入位元件的状态
+ @( [# E$ H  W( [) ]* nWW 以16点为单位,写入位元件的状态,或以1字为单位,写入值到字元件* ^/ P; _5 q: _# B4 g0 S5 t
BT 以1点为单位,设置/复位 位元件$ q/ d+ }+ O" z4 S  q9 A
WT 以16点为单位,设置/复位 位元件,或以1字为单位,写入值到字元件
( l, s" |' k2 y8 |/ h- t2 LRR 控制PLC运行RUN3 ?; P0 j: \/ _; Z2 h
RS 控制PLC停止STOP4 R+ R$ W+ U/ A* X% C
PC 读出PLC设备类型
7 r: B0 u) C3 k& j) `TT 连接测试
' x* o2 d) l' O. e( R' Y+ o0 `( PPC发送给PLC的通信命令格式
8 @5 N6 M  F- W3 i( a# m  W约定说明:ENQ为请求标志,ASCII值5,VB中以chr(5)表示;9 B6 Z# \6 V$ ~4 A
     ACK为正确标志,ASCII值6,VB中以chr(6)表示; % |. }' X8 |" e. E
     STX为请求标志,ASCII值2,VB中以chr(2)表示;
9 o- O: ~8 P+ c     EXT为请求标志,ASCII值3,VB中以chr(3)表示;
* i& i" v7 _$ N1 V3 a) m' I     表格中粗体字为需要求和效验的部分;0 \8 T3 {9 X: _+ T* H" W7 E) |$ o
     和效验为每一项的ASCII值的总和转换成十六进制后,取其低两位;. U" G8 z! W. @8 Q5 O; H
     站号、PLC号、元件数量、和效验都是以十六进制表示;
0 d. a+ r/ F: G( _. R9 r       等待延时为0-150毫秒,以十六进制0H-FH表示,如100ms为AH。, s, D6 q0 s6 i/ i) o8 X
1) 批量读出位元件—BR指令格式  Q/ N1 [" O0 K5 W6 q- f
1 2 3 4 5 6 7 8       15 16 17
9 Y; T: x$ ]6 NPC侧: ENQ 站号 PLC号 BR 延时 首地址 数量 和校验       ACK 站号 PLC号
1 u( u. ]) o; U  A1 e# I0 j5 @: ~PLC侧:         STX 站号 PLC号 数据 EXT 和校验   . R$ H, o$ W; i; v: Z
         9 10 11 12 13 14   
) s3 V- x: v5 w3 j' ^例如:要读出站号为5的PLC的X40到X44共5点的状态值,延时100毫秒,假设PLC中X40与X43为OFF,其余为ON,则指令数据如下:
' s8 w0 a# b: f) Z5 f* q注释: 请求 站号 PLC号 命令 延时 元件首地址 元件数量 和校验
& Z, a& U/ m# J, [' P代码: ENQ 0 5 F F B R A X 0 0 4 0 0 5 4 7& [1 j0 J5 o1 Z# j$ L
ASCII码: 05H 30H 35H 46H 46H 42H 52H 41H 58 30H 30H 34H 30H 30H 35H 34H 37H+ a2 H1 a/ E0 x+ f! C7 c
只要将以上代码以字符串形式(VB中可以表示为chr(5)&”05FFBRAX00400547”)发送到PLC,就会有正确的回应信息,如下:0 C. j& z2 f$ F* e( I" P
注释: 头 站号 PLC号 位元件状态值 尾 和校验, g5 u0 g! V5 j$ v) w8 Y& i
代码: STX 0 5 F F 0 1 1 0 1 EXT E 7
: x3 T: }& W% V5 b2 z& K8 QASCII码: 02H 30H 35H 46H 46H 30H 31H 31H 30H 31H 03H 45H 37H
/ M0 R2 Z( \0 Q2) 批量读出字元件—WR指令格式
0 h6 v# w: H/ O* O! l0 r; }1 2 3 4 5 6 7 8       15 16 17* _" e0 k1 X4 E
PC侧: ENQ 站号 PLC号 WR 延时 首地址 数量 和校验       ACK 站号 PLC号5 y2 h- a' \& B: M4 T. M
PLC侧:         STX 站号 PLC号 数据 EXT 和校验   
9 r8 u  B; L  e. M8 B         9 10 11 12 13 14   1 d6 F+ o' R+ ~" }$ m
该命令使用与BR命令相同。
- a( B# e3 H0 W% E3 |2 k3) 批量写入位元件—BW指令格式  
1 @% {  b" I3 T% y$ p1 2 3 4 5 6 7 8 9   
+ y7 a4 e. N8 N) R7 \; Y: v8 a( _) RPC侧: ENQ 站号 PLC号 BW 延时 首地址 数量 写入值 和校验   8 {6 c0 y- U5 z0 M  ^5 l$ e
PLC侧:          ACK 站号 PLC号
/ r) L! w4 P: C          10 11 12; v. r  e+ f0 A! @) F
4) 批量写入字元件—WW指令格式
5 e$ S/ \6 W: s0 e& @( r1 2 3 4 5 6 7 8 9   
4 o$ A  j- \% Y, m: WPC侧: ENQ 站号 PLC号 WW 延时 首地址 数量 写入值 和校验   
" e- @1 f2 V- Y1 IPLC侧:          ACK 站号 PLC号
8 n1 R5 m0 w' C, D          10 11 12
* F+ G5 W; J/ v6. VB通讯功能块设计分析- i% b4 h0 [; s7 E/ M
根据三菱PLC的通讯指令格式,在PC中编写数据查询功能块RevData( )和数据发送功能块SendData( ),就可以在定时中断处理块TIMER1( )中调用查询功能块RevData( ),实现PC界面数据定时刷新;在每一次操作命令执行时,调用数据发送功能块SendData( ),把控制值写入PLC中,从而实现控制。下面给出这两个功能块的设计程序。
6 {) n; J; j: v8 m$ `5 [1) 查询数据函数RevData( ), D6 A% I2 c& D1 w
(没有和校验)
/ B) R, w8 f( h. NSub  RevPLC (iNo As String, iType As String, iAdd As String, iNum As String)6 P. x+ y) `) x. b+ W) d+ B' o4 N( A& K0 L
'' iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量
1 v3 E1 a2 s0 s0 a, H# MDim Stmp As String/ J$ L) R- t( m- \; l4 E8 R0 u
Dim cha, j As Integer
* R' J4 v/ Y* K2 R2 \Dim ChaCount As Integer" r6 v* P" n- D. L+ V' G7 g. Z
Dim Comm As String: U+ [! e- ~# [" c3 [
Select Case  iType) T! s& J; B) }# d4 w
Case "D"          ''查询数据寄存器的值$ H. X: e' E3 L; W
Comm = "WR"       ''命令类型:数据字读
( Y( t# s, g, ]8 J, @cha = Val("&H" & iNum) * 4      ''数据寄存器的值为十六进制表示,占4个字符& b& R/ k- D' m* ?2 A6 V1 h1 R
Case "M", "X", "Y"     ''查询继电器触电的值/ t# B9 L3 [4 k- H1 D' `
Comm = "BR"      ''命令类型:二进制位读  q' F0 E! z' B& I
cha = Val("&H" & iNum)4 U7 c) D) ]/ x$ W5 K3 Q( O5 d6 P
End Select8 U5 r; ^8 b7 l- N6 Q' G% Q5 h+ K
iAdd = Right$("000" & iAdd, 4), Z2 l+ _) x2 j2 i! e6 {/ C
iNum = Right$("0" & iNum, 2)
( g/ b6 Y) Z( a# M( |' C/ d9 vStmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum    ''输出命令格式% R8 m; i" x1 w3 ~: {" g) e0 d2 y/ P
ChaCount = 6 + cha  ''要返回字符个数
0 g3 }  P" O5 G1 |8 @4 A8 n) cmain.MSComm1.InBufferCount = 0  ''输入缓冲区清零
' h) E5 ]6 ~8 \main.MSComm1.Output = Stmp  ''设传送缓冲区内容为命令格式! h1 o3 w, G9 u* w. Z
Now=Second(): n; J2 M' ~: l. t
Do: x3 `) T5 E( \+ c3 y& c' o% y
DoEvents              ''转让控制权,以便让操作系统进行数据传输
5 N& }4 \6 w$ m  ZIf  Second()-Now>1  Then  Exit  Sub
4 R! y- d/ x( _2 K1 O! Q" i3 ULoop Until main.MSComm1.InBufferCount = ChaCount  ''当接收到规定字符时停止循环
3 ?' ~$ X0 X' k; IRevDataTmp = Mid$(main.MSComm1.Input, 6, cha)     ''返回数据字符串保存在全局变量6 V& G9 C7 `+ }! w/ }
''RevDataTmp中6 o) m! m# m. P# B! Z; s, F
End Sub, K" ^5 P" X. V: i
2) 发送数据函数SendData( )' y+ |) D( @2 L4 J
(没有和校验)9 {1 B2 s8 M1 n) \# x
Sub SendPLC(iNo As String, iType As String, iAdd As String, iNum As String, iValue As String)& e# n( U! E: S0 d$ s( G
'' iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量,iValue为写入值5 B+ N' w; [+ c' ~  X$ W+ o
Dim Stmp As String
  }$ n- T0 K9 @Dim Comm As String/ G, \9 h" R  I3 C; t; o6 i. X/ F
Select Case  iType: a7 Q( J. U/ k5 t9 F2 _
Case "D"          ''写数据寄存器的值$ `/ E# j* o& h
Comm = "WW"        ''命令类型:数据字写6 W0 u! ]  R! |$ t8 \
iValue = Right$("0000" + Hex$(Val(iValue)), 4)  ''写入值转换成十六进制表示
! G/ ]4 Q; n  E% H' K! ~1 A$ b( LCase "M"          ''写继电器触点的值) G4 g' S6 s6 s8 |: f
Comm = "BW"        ''命令类型:二进制位写, f9 d- G. Q% T, r* G
End Select4 s1 N- r" b" n6 B' y# m
iAdd = Right$("000" & iAdd, 4)/ W* X  m& @! B* r! l
iNum = Right$("0" & iNum, 2)
2 D5 |+ k% ^( m1 I6 K. KStmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum & iValue  ''输出命令格式
( U2 b: {1 l2 r9 A# }MSComm1.Output = Stmp                   ''输出命令到传送缓冲区
4 d4 A  m4 ~3 ZNow= Second()
3 s) E& h% P: G* WDo
/ x  P; v5 ^, u* b2 HDoEvents                                ''转让控制权,以便让操作系统进行数据传输; @- Z' D) L$ H9 G& l" V
If  Second()-Now>1  Then  Exit  Sub
, |0 g" I- j+ L: z' O" xLoop Until main.MSComm1.OutBufferCount = 0   ''当命令传送完时停止循环
5 }) S* w& F% d/ Z; \. mEnd Sub

评分

参与人数 1三维币 +3 收起 理由
yqwfk + 3 正解

查看全部评分

发表于 2009-5-18 14:52:03 | 显示全部楼层 来自: 中国湖北武汉
三菱的PLC和电脑之间是肯定可以互相通讯的,因为我用过电脑对三菱的PLC进行编程。但如何显示,我就不知道了。
发表于 2009-5-19 09:54:57 | 显示全部楼层 来自: 中国广东广州
可以,但不是很容易。
发表于 2009-5-19 16:49:25 | 显示全部楼层 来自: 中国广东佛山
利用软件VB和delphi语言都可以,也不是很难的
发表于 2009-5-19 20:42:06 | 显示全部楼层 来自: 中国福建龙岩
海泰克的SoftPanel,要软件狗,否则只能运行半小时
发表于 2009-5-19 21:57:12 | 显示全部楼层 来自: 中国浙江宁波
可以,我们公司就是用日本三菱的FX-1N-24MR的PLC,先用电脑编程好,然后转入PLC,没有错误可以直接进行扫描,测试!
发表于 2009-5-20 07:48:26 | 显示全部楼层 来自: 中国广东江门
主要要谢谢毛毛的解释。你真是不错。
发表于 2009-5-20 08:01:34 | 显示全部楼层 来自: 中国河南南阳
有种屏与232口连接,用手在屏上可以当做鼠标来用,不知道合适不?
发表于 2009-5-20 20:57:06 | 显示全部楼层 来自: 中国北京
没看明白
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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