QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 3490|回复: 11
收起左侧

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

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

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

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

x
如题,就是说,三菱的PLC能不能直接和电脑通信,将电脑当做人机界面来用?
$ p( m! P! ?: ^! _3 c: N5 m$ U只是用做演示,可以吗?
. |' u  \7 a& x如果可以,需要用什么软件呢?: w9 P5 u$ Y) c& J* V+ v' O3 l
谢谢各位高手
发表于 2009-5-17 22:29:34 | 显示全部楼层 来自: 中国浙江杭州
没听过可以!楼主可以上网上查查看有没
 楼主| 发表于 2009-5-17 22:36:28 | 显示全部楼层 来自: 中国陕西西安
谢谢~
3 @3 N3 p1 B6 o" X* u- Q我就是没查到什么才上论坛问的~
" D$ G& s# o* r, j  o请教大家~~
发表于 2009-5-17 23:42:53 | 显示全部楼层 来自: 中国北京
三菱的PLC可以直接和电脑通信,软件要自己设计。1 L' _) v- I; B3 J0 I) V+ D
PC与PLC通讯程序的设计。此部分的开发设计较难,需要掌握PC和PLC的有关通讯硬件驱动和通讯协议的知识。但对于小型控制系统来说,主要通过PC串口来通讯,所以通讯程序设计的关键是如何利用Visual Basic 6.0中的串口通信控件——MSComm控件,并根据PLC的串口通信协议设计出上下位机的数据交换程序。6 `: G! Q9 X! F6 ]5 u  n' K8 ~6 ~
PC与PLC通讯程序设计分析% E$ r& N" F: y8 ]
在分析具体的VB通讯程序之前,先要介绍有关VB串口通信控件MSComm的应用知识和三菱PLC 通讯协议。$ k1 M$ m1 |/ Q* O( M9 B' E
1. MSComm控件简介
9 o. s4 u8 m, K2 q& X3 J) l' V如图所示是Mscomm控件的图标。1 I7 Z! V) y7 x# f7 {3 c
它可以用来提供简单的串行端口通信功能,也可以用来创建功能完备、事件驱动的高级通信工具。 Mscomm控件提供了一系列标准通信命令的使用界面。使用它可以建立与串行端口的连接,通过串行端口再连接到其它设备(如调制解调器、PLC),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。
/ C9 G9 m3 t% h! B2. MSComm控件的基本属性
/ F, F$ e; m1 Q9 T2 _4 LMSComm 控件有很多重要的属性,基本属性如下:* ]  i4 S; c3 W7 o$ k- l. W- x" A
属性     描述 ( t7 ~( J3 f5 e9 h$ f9 ^
CommPort    设置并返回通讯端口号。
' O+ w4 K, U$ L. R1 O# {" F5 W8 Q; x! |Settings     以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
5 C- D) F" l) V- {PortOpen    设置并返回通讯端口的状态。也可以打开和关闭端口。
) \& ~5 Z7 X( e$ QInput     从接收缓冲区返回和删除字符。 + w4 U: u3 o& Q! w
Output     向传输缓冲区写一个字符串。
$ B' L8 y8 _8 T如下程序打开串行端口COM1. i/ ~* s/ s* a: C) n9 h
MSComm1.CommPort = 1         使用 COM1 / h$ @! b5 ?# ?6 m
MSComm1.Settings = "9600,N,7,1"   9600波特率,无奇偶校验,7位数据,一个停止位。
$ t3 F' U+ Z8 B- I1 k: L/ w$ eMSComm1.PortOpen = True   ''打开端口,开始通信。5 \5 X+ P. x  j/ e
3. MSComm控件的通信方式- T' J+ d. ^" W, j/ [4 v9 d0 b
通信控件有2种不同的方式来处理和解决各类通信软件的开发和设计问题。0 f$ V, T0 r& G6 b# d+ k
(1) 事件驱动7 D' F) v; H" a: m' p
事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如:当线路数据到达本端或CD线和RTS信号线状态发生变化时,要求我们使用相应的事件来跟踪和出理。在这些情况下, Mscomm控件将触发OnComm事件,CommEvent属性值也将被改变。所以在OnComm事件中读取CommEvent属性值就可以检测和处理通信错误等方面的问题。
& U9 \/ i2 p# A$ t(2)查询方式
8 \. X; P" u0 H- ^2 a利用定时器控件Timer,我们可以设计程序每隔一段时间去读取CommEvent的值并处理所发生错误和事件。( K3 s) R3 f6 H" r  x
4. 本实例中采用的通讯方式
: @& J& k9 Z$ L: s8 p6 C# f在本例子中,PC与PLC 采用无握手协议的串行通信,它们只用两根数据线 TD和RD、一根信号地线连接,数据通信采用查询方式。根据系统功能要求,PC需发送两种类型的命令:& p3 |6 Z( k$ j- ?2 }. p
(1) 周期性命令,它由定时器触发引起,每隔0.5秒发送一次。用它来向PLC查询实时显示的数据。如酒、水的瞬时流量,调节阀开度等。
+ O# v& J( h$ n  e% G(2) 非周期性命令,它由操作者按动命令按钮引起,非周期性发送。用它来传送输入参数、操作命令给PLC 。- K/ l2 x) d. J- v' b
在啤酒稀释的人机操作界面中,有运行时不可见的通信控件(MSComm1)一个、定时器控件一个Timer1。通信控件(MSComm1)用于初始化串口数据并打开串口;定时器控件(Timer1)用于每隔0.5秒执行通讯命令,把查询命令从 PC发送到PLC,同时接收PLC返回的应答数据。设计通讯数据的发送和查询功能,必须掌握PLC所遵循的通讯协议。
! O* V4 P$ j/ {; g5. 三菱FX系列PLC通讯协议
0 E5 t9 h7 r. }9 Z三菱FX系列PLC共有四种通信模式,本实例采用的是PLC与计算机专用协议通信方式(无须PLC编程,电脑直接读写操纵PLC),其通讯命令字和通讯格式介绍如下:' O1 d* u7 p2 y( w
PC发送给PLC的通信命令字
3 n; \/ a- T( t  T! f命令字 注释9 ]# _& v8 r" x7 v
BR 以1点为单位,读出位元件的状态+ u7 x5 h  W1 m  Q
WR 以16点为单位,读出位元件的状态,或以1字为单位,读出字元件的值
- F8 C! C# L5 X0 F$ {% IBW 以1点为单位,写入位元件的状态: D, @8 \: ^" m, U/ S% ?$ C
WW 以16点为单位,写入位元件的状态,或以1字为单位,写入值到字元件
; A1 e: e) L3 }: @9 \BT 以1点为单位,设置/复位 位元件0 X2 Y" I9 ~, t. I7 y
WT 以16点为单位,设置/复位 位元件,或以1字为单位,写入值到字元件1 u% C! G$ h! W2 L+ a5 ^0 v
RR 控制PLC运行RUN; ^/ L  D$ z7 P% P% e
RS 控制PLC停止STOP4 Z) R; ]; V$ j' K
PC 读出PLC设备类型! ^/ K0 `: Z4 x" v9 V$ z4 T& K
TT 连接测试* q% F; A/ @; U  r& O7 L$ I3 v4 a
PC发送给PLC的通信命令格式$ h% G" a* z* X6 [: t
约定说明:ENQ为请求标志,ASCII值5,VB中以chr(5)表示;
: h( m5 c* B6 d" ~# i! A$ n8 D0 r& S     ACK为正确标志,ASCII值6,VB中以chr(6)表示;
0 u3 u8 g5 r. X+ G( D. J& {7 |- a     STX为请求标志,ASCII值2,VB中以chr(2)表示;
' M' J0 G% @9 D) m9 L5 ~' o0 P     EXT为请求标志,ASCII值3,VB中以chr(3)表示;
5 ?& m2 c1 d6 G; ~& I/ z     表格中粗体字为需要求和效验的部分;
; k2 l" r/ x# K. C. S     和效验为每一项的ASCII值的总和转换成十六进制后,取其低两位;4 G: y. C9 h3 _
     站号、PLC号、元件数量、和效验都是以十六进制表示;
& @) \1 g" d9 V/ K       等待延时为0-150毫秒,以十六进制0H-FH表示,如100ms为AH。
3 ^  L6 A& n! L$ N3 @% {- g1) 批量读出位元件—BR指令格式1 S+ G" t& k' f* {  H, {
1 2 3 4 5 6 7 8       15 16 177 ~# \1 V4 E8 y- o7 y
PC侧: ENQ 站号 PLC号 BR 延时 首地址 数量 和校验       ACK 站号 PLC号
6 v" X6 [( R& ?; h; nPLC侧:         STX 站号 PLC号 数据 EXT 和校验   
- s0 K" `0 j- {# t3 N/ Z5 d1 j: `6 G# u         9 10 11 12 13 14   
5 R7 h* Q: f2 X, F例如:要读出站号为5的PLC的X40到X44共5点的状态值,延时100毫秒,假设PLC中X40与X43为OFF,其余为ON,则指令数据如下:" f4 B4 Q0 i8 ]6 o2 }* v. r
注释: 请求 站号 PLC号 命令 延时 元件首地址 元件数量 和校验8 `2 G, W" T# z$ t- v
代码: ENQ 0 5 F F B R A X 0 0 4 0 0 5 4 75 }5 ]5 E- x# X- n% p& Z& {. W
ASCII码: 05H 30H 35H 46H 46H 42H 52H 41H 58 30H 30H 34H 30H 30H 35H 34H 37H
" k1 L, e4 q: @, B只要将以上代码以字符串形式(VB中可以表示为chr(5)&”05FFBRAX00400547”)发送到PLC,就会有正确的回应信息,如下:
9 ^6 w" L, Y# b- D) l. Z8 F% C9 l" Z注释: 头 站号 PLC号 位元件状态值 尾 和校验: Z- P/ E) a/ a5 n4 F" D! {: |
代码: STX 0 5 F F 0 1 1 0 1 EXT E 7
0 z( ?* t& E, dASCII码: 02H 30H 35H 46H 46H 30H 31H 31H 30H 31H 03H 45H 37H7 c- Q) H0 K8 d/ ~* f0 x. R) u5 X! f
2) 批量读出字元件—WR指令格式
" {& j, Y& d, y4 B2 D: k  s) ?) k1 2 3 4 5 6 7 8       15 16 17
% J; j2 n/ S  t+ sPC侧: ENQ 站号 PLC号 WR 延时 首地址 数量 和校验       ACK 站号 PLC号
$ |; c" r9 ?9 U% x8 t# SPLC侧:         STX 站号 PLC号 数据 EXT 和校验   + c3 i9 k- |/ k9 v& Y% y. @
         9 10 11 12 13 14   
, M  e0 g( H. J2 R该命令使用与BR命令相同。& g- {, u4 R0 ?0 t: R& _& [' }' R; ?$ |
3) 批量写入位元件—BW指令格式  & Y, a4 N5 Y9 p0 D
1 2 3 4 5 6 7 8 9   
2 _! p: B9 A! t9 FPC侧: ENQ 站号 PLC号 BW 延时 首地址 数量 写入值 和校验   
. z$ J7 E2 z+ ]PLC侧:          ACK 站号 PLC号" j2 C. {* q8 ?
          10 11 12
/ J/ ]& l% g& F4 ]4 O2 Z- [" O4) 批量写入字元件—WW指令格式4 I; U  D! w8 T, Z
1 2 3 4 5 6 7 8 9   
/ _, {9 W- |! p2 |PC侧: ENQ 站号 PLC号 WW 延时 首地址 数量 写入值 和校验   7 a6 F2 B% {9 _. C) e; w( \4 B
PLC侧:          ACK 站号 PLC号8 ~5 _# x) C" K# _4 _
          10 11 12) H% u$ i9 M9 k7 N
6. VB通讯功能块设计分析1 v+ k! D+ g; n+ n# t9 p
根据三菱PLC的通讯指令格式,在PC中编写数据查询功能块RevData( )和数据发送功能块SendData( ),就可以在定时中断处理块TIMER1( )中调用查询功能块RevData( ),实现PC界面数据定时刷新;在每一次操作命令执行时,调用数据发送功能块SendData( ),把控制值写入PLC中,从而实现控制。下面给出这两个功能块的设计程序。) @" V: K- D( O7 o) {) @# K
1) 查询数据函数RevData( )
) Z! O: Q$ m  e, i& Y9 n: B3 ?. T(没有和校验)2 O3 }* ]. W2 w
Sub  RevPLC (iNo As String, iType As String, iAdd As String, iNum As String)$ V! V- _6 l# }
'' iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量* H1 k8 ], F( h5 a2 L# {& a3 g0 g
Dim Stmp As String
5 e/ C0 }0 b) a1 s, b) ^9 Z. P+ Y5 LDim cha, j As Integer
( o; j6 A$ O% V6 k& ]) O6 [Dim ChaCount As Integer; w: w  S1 k' k& n6 [
Dim Comm As String( N* G7 m" M9 s) t! I1 X4 }
Select Case  iType3 U& s# p5 ^) }. i
Case "D"          ''查询数据寄存器的值) ~& \1 j' s4 p# M! j, i
Comm = "WR"       ''命令类型:数据字读6 L* a+ {7 m0 L: _2 i
cha = Val("&H" & iNum) * 4      ''数据寄存器的值为十六进制表示,占4个字符9 O( H# M6 v0 t  Z* V
Case "M", "X", "Y"     ''查询继电器触电的值
3 v+ S' [/ K  Y- m/ P8 FComm = "BR"      ''命令类型:二进制位读9 Z$ O5 z6 P7 Y) X/ B* Z- d
cha = Val("&H" & iNum)' d% `/ R  ^* u  f' `, @9 G" n
End Select
- @0 B6 I- u: H! ^# H8 E3 ziAdd = Right$("000" & iAdd, 4)1 N9 L- \8 f+ I: P- z1 G: d3 {
iNum = Right$("0" & iNum, 2)$ n1 e5 e& j. F& v
Stmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum    ''输出命令格式
1 I* U% }/ y/ A5 \( `8 ZChaCount = 6 + cha  ''要返回字符个数
( ~3 A: [" n; U; @2 D3 ymain.MSComm1.InBufferCount = 0  ''输入缓冲区清零! D. U4 q2 P9 S- u
main.MSComm1.Output = Stmp  ''设传送缓冲区内容为命令格式2 A% B7 ]7 R) B; {7 j. B3 K+ g% Z8 |
Now=Second()+ R" A2 x) g5 n! L/ ^9 |! [
Do7 k9 s; ?5 H% f! h* G- P& M
DoEvents              ''转让控制权,以便让操作系统进行数据传输9 R. M; G$ N8 ~6 K% e4 |: X
If  Second()-Now>1  Then  Exit  Sub
  |8 g# k! P- ZLoop Until main.MSComm1.InBufferCount = ChaCount  ''当接收到规定字符时停止循环( V6 h5 N0 T# o5 Y) [! b. y( [
RevDataTmp = Mid$(main.MSComm1.Input, 6, cha)     ''返回数据字符串保存在全局变量8 t7 q: V( a; C
''RevDataTmp中
; ?3 ^- T5 b$ X- HEnd Sub+ B2 x4 ]4 T- ~$ y8 m7 l5 O: T
2) 发送数据函数SendData( )
& L6 z" n- m) f6 c6 g. E: Q, t(没有和校验)2 N( m" {3 r! g- ?" L4 ^6 }
Sub SendPLC(iNo As String, iType As String, iAdd As String, iNum As String, iValue As String)+ v1 V* ^1 }6 k) G% f  H- i2 P
'' iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量,iValue为写入值# T1 O! R5 Y! s+ q* r
Dim Stmp As String
  b! t0 _- C4 p- f2 j7 \( yDim Comm As String4 W) u* ~1 B- h0 a) U
Select Case  iType
  A! N, D% G" {& E! M+ v: N6 i2 ], jCase "D"          ''写数据寄存器的值
4 P7 V5 n) F4 `9 o9 [! |8 R( tComm = "WW"        ''命令类型:数据字写
& T' j4 K2 L, ~2 j0 t5 t* C* |5 FiValue = Right$("0000" + Hex$(Val(iValue)), 4)  ''写入值转换成十六进制表示+ [& v; P) S' S/ t- d
Case "M"          ''写继电器触点的值: _  l9 O- ~& e, g6 L4 @
Comm = "BW"        ''命令类型:二进制位写
- c) }! r% N6 _9 C( @& `; V- bEnd Select
1 I5 N; F$ E6 N! w% M. miAdd = Right$("000" & iAdd, 4)/ [# n! ~# Y* u* Z  X" A
iNum = Right$("0" & iNum, 2)
! n" {5 V& t7 \1 h8 M3 V( \Stmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum & iValue  ''输出命令格式/ g2 j7 v) ?" Z7 p) b; X0 ^3 o" ~1 l
MSComm1.Output = Stmp                   ''输出命令到传送缓冲区4 m- {/ m( s1 C3 a+ B
Now= Second()
. s( ?' q* _- |. E2 M* \3 _, u. UDo
  Y- Y0 a. y, D9 l% jDoEvents                                ''转让控制权,以便让操作系统进行数据传输: E: V; x% s% i$ z% ?& I: L
If  Second()-Now>1  Then  Exit  Sub
) f" C! Q& L0 o( W7 x6 v1 d8 P* mLoop Until main.MSComm1.OutBufferCount = 0   ''当命令传送完时停止循环
6 ~! T0 T& G: r# q. c% jEnd 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 )

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