QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 3492|回复: 11
收起左侧

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

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

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

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

x
如题,就是说,三菱的PLC能不能直接和电脑通信,将电脑当做人机界面来用?0 n) m# e6 c3 {. L" K: _: X
只是用做演示,可以吗?* F2 t2 d5 V% z+ s0 N* j7 d
如果可以,需要用什么软件呢?
3 z$ p: k' v) d' [谢谢各位高手
发表于 2009-5-17 22:29:34 | 显示全部楼层 来自: 中国浙江杭州
没听过可以!楼主可以上网上查查看有没
 楼主| 发表于 2009-5-17 22:36:28 | 显示全部楼层 来自: 中国陕西西安
谢谢~  p7 F4 u& i& K) {$ T3 m
我就是没查到什么才上论坛问的~* P  t2 `( H8 q) ?& U( P' A% D
请教大家~~
发表于 2009-5-17 23:42:53 | 显示全部楼层 来自: 中国北京
三菱的PLC可以直接和电脑通信,软件要自己设计。5 c' B9 `4 y: `5 \( n
PC与PLC通讯程序的设计。此部分的开发设计较难,需要掌握PC和PLC的有关通讯硬件驱动和通讯协议的知识。但对于小型控制系统来说,主要通过PC串口来通讯,所以通讯程序设计的关键是如何利用Visual Basic 6.0中的串口通信控件——MSComm控件,并根据PLC的串口通信协议设计出上下位机的数据交换程序。
" @, N5 i, V- Y# NPC与PLC通讯程序设计分析" n. M/ g4 j7 T! U, E
在分析具体的VB通讯程序之前,先要介绍有关VB串口通信控件MSComm的应用知识和三菱PLC 通讯协议。( Y$ q  t# R5 Z# T4 p' T
1. MSComm控件简介
' X% U8 n, n1 C. k' M如图所示是Mscomm控件的图标。( w% o6 u! `2 S, ]2 @5 V, h
它可以用来提供简单的串行端口通信功能,也可以用来创建功能完备、事件驱动的高级通信工具。 Mscomm控件提供了一系列标准通信命令的使用界面。使用它可以建立与串行端口的连接,通过串行端口再连接到其它设备(如调制解调器、PLC),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。: y4 R; E; @9 b, L- n* L9 I
2. MSComm控件的基本属性5 E6 I# i+ }; m3 c' D, |
MSComm 控件有很多重要的属性,基本属性如下:
# c, k+ ^) ]/ C2 V属性     描述
1 B: Q/ @3 j3 q1 [% bCommPort    设置并返回通讯端口号。
: C2 ~+ `( k. U; @Settings     以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
& {& M" v  G3 b5 J: |$ C$ S7 N% ePortOpen    设置并返回通讯端口的状态。也可以打开和关闭端口。
. }% R4 A% L- f1 y% |Input     从接收缓冲区返回和删除字符。 / Q% S9 B8 W! p/ i3 s. ]
Output     向传输缓冲区写一个字符串。! X/ h4 r) f7 L" B2 |% O
如下程序打开串行端口COM1
! V) ?+ x( U' WMSComm1.CommPort = 1         使用 COM1
" R2 e# c. U$ vMSComm1.Settings = "9600,N,7,1"   9600波特率,无奇偶校验,7位数据,一个停止位。4 V% n, _( P: [
MSComm1.PortOpen = True   ''打开端口,开始通信。3 G1 C0 q2 c4 g- ?
3. MSComm控件的通信方式+ s* e2 |% x; E/ o$ ~6 Z
通信控件有2种不同的方式来处理和解决各类通信软件的开发和设计问题。
+ ^8 }  s* K6 w& E, a(1) 事件驱动7 J; m+ b) O% {' j7 l
事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如:当线路数据到达本端或CD线和RTS信号线状态发生变化时,要求我们使用相应的事件来跟踪和出理。在这些情况下, Mscomm控件将触发OnComm事件,CommEvent属性值也将被改变。所以在OnComm事件中读取CommEvent属性值就可以检测和处理通信错误等方面的问题。
( }. ^7 |0 ~! }2 t8 z(2)查询方式" l' R9 M1 X. f: d( ~8 ?/ z
利用定时器控件Timer,我们可以设计程序每隔一段时间去读取CommEvent的值并处理所发生错误和事件。
5 c/ Q) w6 c/ C. r6 D# h; D' h4. 本实例中采用的通讯方式
+ `# Y( u. @7 C: y# L2 f( H在本例子中,PC与PLC 采用无握手协议的串行通信,它们只用两根数据线 TD和RD、一根信号地线连接,数据通信采用查询方式。根据系统功能要求,PC需发送两种类型的命令:
1 n. [4 D( \8 D( x(1) 周期性命令,它由定时器触发引起,每隔0.5秒发送一次。用它来向PLC查询实时显示的数据。如酒、水的瞬时流量,调节阀开度等。
& U: F+ H' m3 L. W(2) 非周期性命令,它由操作者按动命令按钮引起,非周期性发送。用它来传送输入参数、操作命令给PLC 。
. Z1 F, `! g  ]: [在啤酒稀释的人机操作界面中,有运行时不可见的通信控件(MSComm1)一个、定时器控件一个Timer1。通信控件(MSComm1)用于初始化串口数据并打开串口;定时器控件(Timer1)用于每隔0.5秒执行通讯命令,把查询命令从 PC发送到PLC,同时接收PLC返回的应答数据。设计通讯数据的发送和查询功能,必须掌握PLC所遵循的通讯协议。
- G; O  y  a+ r5. 三菱FX系列PLC通讯协议$ m* w1 n7 ^+ }7 {9 G- P$ e
三菱FX系列PLC共有四种通信模式,本实例采用的是PLC与计算机专用协议通信方式(无须PLC编程,电脑直接读写操纵PLC),其通讯命令字和通讯格式介绍如下:
, k6 X/ B4 S, W/ X: C+ c. ^2 S/ UPC发送给PLC的通信命令字
  |& P7 h  Q; A5 ]命令字 注释
# W) T4 O7 h- s1 ?* I2 F- s5 G3 OBR 以1点为单位,读出位元件的状态
) r% K4 \! o+ j1 K! z  J2 q3 D0 ~; @WR 以16点为单位,读出位元件的状态,或以1字为单位,读出字元件的值1 c3 {7 F0 ~3 v# x
BW 以1点为单位,写入位元件的状态& K0 R2 N+ l. z
WW 以16点为单位,写入位元件的状态,或以1字为单位,写入值到字元件' |. R; N1 b4 `2 h( C
BT 以1点为单位,设置/复位 位元件
$ w; J; P$ ~4 q$ i5 FWT 以16点为单位,设置/复位 位元件,或以1字为单位,写入值到字元件
# e0 n% Q- b0 bRR 控制PLC运行RUN2 W7 i: b4 Q3 G4 u
RS 控制PLC停止STOP9 y' o1 P( \4 ^# o+ w
PC 读出PLC设备类型* w$ C3 ~8 B9 j3 G/ }/ ~
TT 连接测试
1 e& \( v' x2 o- `2 v; G; o, k- TPC发送给PLC的通信命令格式" d* c2 ~9 }+ c: G( E: k( [
约定说明:ENQ为请求标志,ASCII值5,VB中以chr(5)表示;
  `1 w/ S$ T. v( {$ _) D1 E% n     ACK为正确标志,ASCII值6,VB中以chr(6)表示;
4 o- k, l3 f* ]4 Y- ~     STX为请求标志,ASCII值2,VB中以chr(2)表示;
9 C, [; ^" H% Y5 R5 i' L; b  z     EXT为请求标志,ASCII值3,VB中以chr(3)表示; ; v# N6 x5 [7 D& G
     表格中粗体字为需要求和效验的部分;- }) ~8 p* f- [' O* K
     和效验为每一项的ASCII值的总和转换成十六进制后,取其低两位;5 {5 h4 U  @1 y4 p
     站号、PLC号、元件数量、和效验都是以十六进制表示;
3 ^# W2 d9 j, v# Q& F8 q       等待延时为0-150毫秒,以十六进制0H-FH表示,如100ms为AH。
& g* U: c. h* U$ N+ G6 v3 m8 w) G2 f1) 批量读出位元件—BR指令格式. O( {: J+ t/ K) B# l' b
1 2 3 4 5 6 7 8       15 16 177 X5 L# f  ?5 t" P
PC侧: ENQ 站号 PLC号 BR 延时 首地址 数量 和校验       ACK 站号 PLC号
  F7 x1 u; X* M& {. [: T  A- [PLC侧:         STX 站号 PLC号 数据 EXT 和校验   6 I( t6 K$ ~7 C  C  P" D
         9 10 11 12 13 14   4 R4 i: O5 U# D/ e- y9 [
例如:要读出站号为5的PLC的X40到X44共5点的状态值,延时100毫秒,假设PLC中X40与X43为OFF,其余为ON,则指令数据如下:) P+ Q8 ^# r0 u! O. h+ W1 U0 Y
注释: 请求 站号 PLC号 命令 延时 元件首地址 元件数量 和校验
3 m, q! a6 a" D  V- {/ T& ^代码: ENQ 0 5 F F B R A X 0 0 4 0 0 5 4 7- ?6 V* w# ~2 p9 v
ASCII码: 05H 30H 35H 46H 46H 42H 52H 41H 58 30H 30H 34H 30H 30H 35H 34H 37H
/ c4 n* T/ u) ?8 H* W6 b1 \只要将以上代码以字符串形式(VB中可以表示为chr(5)&”05FFBRAX00400547”)发送到PLC,就会有正确的回应信息,如下:
* y9 \6 B, S. n" ]- Q! k8 k注释: 头 站号 PLC号 位元件状态值 尾 和校验
0 M5 E$ |: X- \7 `2 L# H& E代码: STX 0 5 F F 0 1 1 0 1 EXT E 7) _6 Z; ?) w. H
ASCII码: 02H 30H 35H 46H 46H 30H 31H 31H 30H 31H 03H 45H 37H
$ c# }7 j" a7 q  a4 p! w. F+ F' J2) 批量读出字元件—WR指令格式6 k! Q, D3 n3 \& U5 G# |
1 2 3 4 5 6 7 8       15 16 177 Z) @# c* o2 j
PC侧: ENQ 站号 PLC号 WR 延时 首地址 数量 和校验       ACK 站号 PLC号
; p' L. @5 q' d) p% j! a" s2 i! SPLC侧:         STX 站号 PLC号 数据 EXT 和校验   
5 ^2 {" n- R; X9 G1 G  T+ X         9 10 11 12 13 14   
# P, O! b, A9 U0 ?该命令使用与BR命令相同。
. V! r; t" L# T4 y3) 批量写入位元件—BW指令格式  ( y7 t% ~4 g2 J; I6 Q5 I$ q$ v
1 2 3 4 5 6 7 8 9   / c; {4 L6 ]" X2 e4 K9 I3 t
PC侧: ENQ 站号 PLC号 BW 延时 首地址 数量 写入值 和校验   ! `/ f: m8 j1 }
PLC侧:          ACK 站号 PLC号& k! U0 S) O% h/ F' g
          10 11 12
' {; S0 l* v, H" I2 Q4) 批量写入字元件—WW指令格式8 z; l  p% _; `4 W
1 2 3 4 5 6 7 8 9   4 }8 e8 t4 E5 `. J$ `. U
PC侧: ENQ 站号 PLC号 WW 延时 首地址 数量 写入值 和校验   
9 j4 k8 X3 {3 I$ l# U5 C/ l" A2 aPLC侧:          ACK 站号 PLC号  P( j% J; T5 t9 [  o, N! s1 j
          10 11 122 u. Y. K. a* H, q% o+ S' A# e/ ^
6. VB通讯功能块设计分析
' G. @' c3 @" \0 t, i根据三菱PLC的通讯指令格式,在PC中编写数据查询功能块RevData( )和数据发送功能块SendData( ),就可以在定时中断处理块TIMER1( )中调用查询功能块RevData( ),实现PC界面数据定时刷新;在每一次操作命令执行时,调用数据发送功能块SendData( ),把控制值写入PLC中,从而实现控制。下面给出这两个功能块的设计程序。7 t. h, Y( z% [
1) 查询数据函数RevData( )
: j+ d8 @! `" N; g(没有和校验)# d! p- D  K3 H& z
Sub  RevPLC (iNo As String, iType As String, iAdd As String, iNum As String)& ^* X! I! B0 `) _( m+ n) @
'' iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量/ [2 m; n) p7 U% g  f8 N/ ~0 v
Dim Stmp As String2 x( x1 h, e+ i' _
Dim cha, j As Integer6 m/ |6 ?6 e3 }3 R% U; h% m
Dim ChaCount As Integer& s* [- i4 O; K) w% i' G- `( d
Dim Comm As String" {' g5 P7 I2 V% `+ f1 s- e
Select Case  iType& |% v( M. D5 R
Case "D"          ''查询数据寄存器的值
* m! k4 Z7 o4 f  T2 x8 w  uComm = "WR"       ''命令类型:数据字读
4 o' I5 W3 Q% e' J! s' Pcha = Val("&H" & iNum) * 4      ''数据寄存器的值为十六进制表示,占4个字符
% A) U' h) y5 p$ i$ aCase "M", "X", "Y"     ''查询继电器触电的值
! V/ ~  _& `$ x1 HComm = "BR"      ''命令类型:二进制位读* N5 J( d$ V, C7 [- k( }4 C1 u& {# w
cha = Val("&H" & iNum); h) e! f" u0 k* q" O3 O; O! ?
End Select  e* }' p5 c5 q, E# K0 Q
iAdd = Right$("000" & iAdd, 4)
  y) T% o7 z, ^" qiNum = Right$("0" & iNum, 2)
  u( u& L5 C1 C, O" h+ A! YStmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum    ''输出命令格式7 P9 O7 z9 w1 G2 t0 \5 Z
ChaCount = 6 + cha  ''要返回字符个数. w4 a0 U6 x2 u% j- N$ e
main.MSComm1.InBufferCount = 0  ''输入缓冲区清零
, |* p; m+ M9 }$ Dmain.MSComm1.Output = Stmp  ''设传送缓冲区内容为命令格式
, Y# h$ K: S! F. M9 o( ^Now=Second()' @0 s. u4 C# J9 O
Do& f1 {$ l: y8 r$ k  G7 R# g
DoEvents              ''转让控制权,以便让操作系统进行数据传输% H# B3 X  k$ X0 f0 d3 J3 p8 w
If  Second()-Now>1  Then  Exit  Sub
# K7 Q" b& r) N4 ~9 u  a3 W% _Loop Until main.MSComm1.InBufferCount = ChaCount  ''当接收到规定字符时停止循环. M, f0 j6 N( a% Q+ [$ d
RevDataTmp = Mid$(main.MSComm1.Input, 6, cha)     ''返回数据字符串保存在全局变量
8 _& f  E6 a* h''RevDataTmp中! A. C4 }0 G- g% H: f. T2 }
End Sub# f2 Z( y$ u8 m( V
2) 发送数据函数SendData( )
3 r0 E! ~4 L% T" f7 a(没有和校验)
7 h1 r3 ], T, lSub SendPLC(iNo As String, iType As String, iAdd As String, iNum As String, iValue As String)! {  e1 P7 i5 K" i
'' iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量,iValue为写入值! @0 ~0 {% f( B# {
Dim Stmp As String
7 b' {5 K2 X/ ~% Z5 XDim Comm As String
$ I4 F) k1 o) k# w! s" wSelect Case  iType+ p5 o4 ]0 M+ q
Case "D"          ''写数据寄存器的值
- j2 G  n2 \' s  D; z9 dComm = "WW"        ''命令类型:数据字写8 U" J/ G+ N" K! ?1 y8 P
iValue = Right$("0000" + Hex$(Val(iValue)), 4)  ''写入值转换成十六进制表示
' @9 Y4 T8 n" p; m% w5 yCase "M"          ''写继电器触点的值% |- h) l& x; f" \
Comm = "BW"        ''命令类型:二进制位写! {9 ?  n$ A' Q0 h7 U
End Select
7 Y& R4 Z! ]/ T! ?1 viAdd = Right$("000" & iAdd, 4)
$ L* M0 L3 K9 O9 l$ R3 }! G) NiNum = Right$("0" & iNum, 2)
7 S( b  H/ q3 e; \Stmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum & iValue  ''输出命令格式
5 u. ~0 E  x/ i  J+ ]MSComm1.Output = Stmp                   ''输出命令到传送缓冲区3 ^$ W; r+ }( F
Now= Second()2 O( U8 F( P$ _8 [: H
Do
- n. y2 l; s2 fDoEvents                                ''转让控制权,以便让操作系统进行数据传输+ _) V0 q/ w! A! a' q$ ]9 [
If  Second()-Now>1  Then  Exit  Sub% c$ l8 s6 c0 P: t' u& J/ c
Loop Until main.MSComm1.OutBufferCount = 0   ''当命令传送完时停止循环0 t1 |3 x" A' n, O1 M
End 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 )

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