QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
如题,就是说,三菱的PLC能不能直接和电脑通信,将电脑当做人机界面来用?# U: |. }! u' W
只是用做演示,可以吗?
  U; e3 j, y' b) _8 o0 p3 x如果可以,需要用什么软件呢?
2 ^. {8 I. q0 g谢谢各位高手
发表于 2009-5-17 22:29:34 | 显示全部楼层 来自: 中国浙江杭州
没听过可以!楼主可以上网上查查看有没
 楼主| 发表于 2009-5-17 22:36:28 | 显示全部楼层 来自: 中国陕西西安
谢谢~
" ^4 @! k6 ^* q$ @6 v我就是没查到什么才上论坛问的~" \3 P. l/ X. g/ {; |
请教大家~~
发表于 2009-5-17 23:42:53 | 显示全部楼层 来自: 中国北京
三菱的PLC可以直接和电脑通信,软件要自己设计。
3 Z; `. Q5 z" e0 IPC与PLC通讯程序的设计。此部分的开发设计较难,需要掌握PC和PLC的有关通讯硬件驱动和通讯协议的知识。但对于小型控制系统来说,主要通过PC串口来通讯,所以通讯程序设计的关键是如何利用Visual Basic 6.0中的串口通信控件——MSComm控件,并根据PLC的串口通信协议设计出上下位机的数据交换程序。6 f. I/ P9 `* E. w
PC与PLC通讯程序设计分析
/ `& j# G8 a2 b' k. K3 k在分析具体的VB通讯程序之前,先要介绍有关VB串口通信控件MSComm的应用知识和三菱PLC 通讯协议。" p0 H- y1 W' A. F; B
1. MSComm控件简介
! p7 F3 q/ ?+ g& i2 p- C; q如图所示是Mscomm控件的图标。$ e$ T2 j5 C# G  }
它可以用来提供简单的串行端口通信功能,也可以用来创建功能完备、事件驱动的高级通信工具。 Mscomm控件提供了一系列标准通信命令的使用界面。使用它可以建立与串行端口的连接,通过串行端口再连接到其它设备(如调制解调器、PLC),发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。
* q. G# t0 A7 B2. MSComm控件的基本属性
; M+ ?* e4 l0 n. r" w7 k1 [MSComm 控件有很多重要的属性,基本属性如下:+ Z% ^) X* r2 `1 i; y# l
属性     描述 . Q0 q, ^$ ]# B( o! l/ u
CommPort    设置并返回通讯端口号。
+ R6 j: y$ N. z, ?* `/ @Settings     以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。   \/ M/ c" {4 i1 Y- R
PortOpen    设置并返回通讯端口的状态。也可以打开和关闭端口。 5 e$ [2 w4 F# e$ s
Input     从接收缓冲区返回和删除字符。 . V  |8 P7 ?# b) c
Output     向传输缓冲区写一个字符串。
$ [) X7 z* I; |" R( R7 E如下程序打开串行端口COM17 ?$ j7 ~9 n, h" J# U! g
MSComm1.CommPort = 1         使用 COM1 ) C1 t$ g( ?0 R" l( {* k
MSComm1.Settings = "9600,N,7,1"   9600波特率,无奇偶校验,7位数据,一个停止位。
: w/ b, W# b3 i! q: G* d( nMSComm1.PortOpen = True   ''打开端口,开始通信。% k$ n' `3 l' [
3. MSComm控件的通信方式
8 T3 ^9 c' U+ c9 `$ I5 {通信控件有2种不同的方式来处理和解决各类通信软件的开发和设计问题。
2 P! x) z5 E- x. U. V(1) 事件驱动0 b- J( ]0 B! S6 O
事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如:当线路数据到达本端或CD线和RTS信号线状态发生变化时,要求我们使用相应的事件来跟踪和出理。在这些情况下, Mscomm控件将触发OnComm事件,CommEvent属性值也将被改变。所以在OnComm事件中读取CommEvent属性值就可以检测和处理通信错误等方面的问题。
" v! ~% K, p* W5 ~(2)查询方式  ~1 m$ ~* E0 x- q
利用定时器控件Timer,我们可以设计程序每隔一段时间去读取CommEvent的值并处理所发生错误和事件。
5 d: c' d7 S9 Y& i; x: c4. 本实例中采用的通讯方式. x' K' J4 O& H/ V) a* P
在本例子中,PC与PLC 采用无握手协议的串行通信,它们只用两根数据线 TD和RD、一根信号地线连接,数据通信采用查询方式。根据系统功能要求,PC需发送两种类型的命令:
! F1 U$ `; F6 a/ ^  x(1) 周期性命令,它由定时器触发引起,每隔0.5秒发送一次。用它来向PLC查询实时显示的数据。如酒、水的瞬时流量,调节阀开度等。
+ }* M! h- d6 h" H) E" ?(2) 非周期性命令,它由操作者按动命令按钮引起,非周期性发送。用它来传送输入参数、操作命令给PLC 。) l6 |5 J/ |1 d3 b' `
在啤酒稀释的人机操作界面中,有运行时不可见的通信控件(MSComm1)一个、定时器控件一个Timer1。通信控件(MSComm1)用于初始化串口数据并打开串口;定时器控件(Timer1)用于每隔0.5秒执行通讯命令,把查询命令从 PC发送到PLC,同时接收PLC返回的应答数据。设计通讯数据的发送和查询功能,必须掌握PLC所遵循的通讯协议。- j. F# _2 `- N' A
5. 三菱FX系列PLC通讯协议
* w5 b. {+ g: {- r9 u三菱FX系列PLC共有四种通信模式,本实例采用的是PLC与计算机专用协议通信方式(无须PLC编程,电脑直接读写操纵PLC),其通讯命令字和通讯格式介绍如下:
$ E/ W  ^+ Y# L& }PC发送给PLC的通信命令字  c+ q3 `( V4 R0 ]8 e' b3 I
命令字 注释
5 H  n# @2 y9 Q  g. E9 U% C$ cBR 以1点为单位,读出位元件的状态" z% y  d' r. M5 `# u
WR 以16点为单位,读出位元件的状态,或以1字为单位,读出字元件的值
* S3 x0 C9 e' J0 N0 B! aBW 以1点为单位,写入位元件的状态) X* s5 h- C5 F0 \. R0 l
WW 以16点为单位,写入位元件的状态,或以1字为单位,写入值到字元件1 D3 W* z- M) x
BT 以1点为单位,设置/复位 位元件
! K' r  [1 V0 r* L2 a6 o. Q$ HWT 以16点为单位,设置/复位 位元件,或以1字为单位,写入值到字元件8 s" m- g4 }5 c$ c) L
RR 控制PLC运行RUN/ Z7 E: c/ c- O) D
RS 控制PLC停止STOP
8 s' D/ B" V! \% G& K- P. O1 S* i. YPC 读出PLC设备类型: {, u1 \' _/ C' S. Q0 x
TT 连接测试) S5 f3 a* v4 p) C: Q' j
PC发送给PLC的通信命令格式
/ Y" `1 u. p, Q7 I& H- \7 V约定说明:ENQ为请求标志,ASCII值5,VB中以chr(5)表示;* r+ a/ C$ U+ f  S
     ACK为正确标志,ASCII值6,VB中以chr(6)表示; $ u2 f' t, [5 ?5 y5 z
     STX为请求标志,ASCII值2,VB中以chr(2)表示;
2 t0 j; o, n; \8 j  V0 s# t: b     EXT为请求标志,ASCII值3,VB中以chr(3)表示; & B' n9 D7 u5 U* p. E1 w" v
     表格中粗体字为需要求和效验的部分;
' \6 ^4 r9 p+ j  V8 f6 W/ m     和效验为每一项的ASCII值的总和转换成十六进制后,取其低两位;/ e( ]$ U* H% h
     站号、PLC号、元件数量、和效验都是以十六进制表示;
. }0 U- s" J' v. [) @. S6 V       等待延时为0-150毫秒,以十六进制0H-FH表示,如100ms为AH。
- I% ?8 q9 N& y% @8 I1) 批量读出位元件—BR指令格式# l, A$ ^: {+ y
1 2 3 4 5 6 7 8       15 16 178 L) v) f2 G+ P* I; ?8 s1 t
PC侧: ENQ 站号 PLC号 BR 延时 首地址 数量 和校验       ACK 站号 PLC号
( e9 F. s+ L% k, g/ _: }PLC侧:         STX 站号 PLC号 数据 EXT 和校验   
4 K4 M+ S  m# T( T% O1 g1 [9 G         9 10 11 12 13 14   6 ?/ ?8 E2 {; L0 I) v5 t
例如:要读出站号为5的PLC的X40到X44共5点的状态值,延时100毫秒,假设PLC中X40与X43为OFF,其余为ON,则指令数据如下:
! A( o9 V$ a& B6 b7 [7 Q注释: 请求 站号 PLC号 命令 延时 元件首地址 元件数量 和校验
6 G3 q% b1 T2 k! l0 z" a' F' E( @代码: ENQ 0 5 F F B R A X 0 0 4 0 0 5 4 78 w; F; s$ R0 B
ASCII码: 05H 30H 35H 46H 46H 42H 52H 41H 58 30H 30H 34H 30H 30H 35H 34H 37H
. W: o  |$ f& Q& @只要将以上代码以字符串形式(VB中可以表示为chr(5)&”05FFBRAX00400547”)发送到PLC,就会有正确的回应信息,如下:8 W4 }$ r2 J$ H1 \5 s
注释: 头 站号 PLC号 位元件状态值 尾 和校验
. A8 ~3 w& N" ]3 v# U5 {代码: STX 0 5 F F 0 1 1 0 1 EXT E 70 @0 K8 b8 r) \* W+ V9 \& h6 n
ASCII码: 02H 30H 35H 46H 46H 30H 31H 31H 30H 31H 03H 45H 37H0 v! q- W) `$ u
2) 批量读出字元件—WR指令格式" \, h3 N7 h+ U, c
1 2 3 4 5 6 7 8       15 16 17
7 [& }4 i, i" J$ p  N, V9 d. cPC侧: ENQ 站号 PLC号 WR 延时 首地址 数量 和校验       ACK 站号 PLC号8 n+ @3 B! D1 v5 [8 i
PLC侧:         STX 站号 PLC号 数据 EXT 和校验   
# K! ?9 r4 H. q5 c4 @4 `         9 10 11 12 13 14   : X, Z8 g* x. p
该命令使用与BR命令相同。5 [2 d; f1 Q# k- F8 S
3) 批量写入位元件—BW指令格式  , i5 ^' |# R' @' p4 \
1 2 3 4 5 6 7 8 9   
" m- u; g+ l; b5 M( D7 bPC侧: ENQ 站号 PLC号 BW 延时 首地址 数量 写入值 和校验   3 A! x: o  d, I9 x0 O' ~' v' s
PLC侧:          ACK 站号 PLC号+ T. u( N1 E" H0 Y
          10 11 12
+ z1 L, e6 s0 M+ l3 c) t4) 批量写入字元件—WW指令格式5 r( L! V/ S! C# T  n% A9 Q
1 2 3 4 5 6 7 8 9   " \: N; l, ]  G2 |0 x; J
PC侧: ENQ 站号 PLC号 WW 延时 首地址 数量 写入值 和校验   
$ `1 y" F  [3 v% zPLC侧:          ACK 站号 PLC号  {* U  ~, R* q% ^+ ?6 F' @
          10 11 12
- r' q- M+ S8 d# ~7 }# D6. VB通讯功能块设计分析' L, S' v- O. `$ I% Z
根据三菱PLC的通讯指令格式,在PC中编写数据查询功能块RevData( )和数据发送功能块SendData( ),就可以在定时中断处理块TIMER1( )中调用查询功能块RevData( ),实现PC界面数据定时刷新;在每一次操作命令执行时,调用数据发送功能块SendData( ),把控制值写入PLC中,从而实现控制。下面给出这两个功能块的设计程序。
4 R% a: S) Y/ v% R6 y, y1) 查询数据函数RevData( )- u' }9 U8 a( J2 u! p! n
(没有和校验)0 e9 p3 x" L3 a' J
Sub  RevPLC (iNo As String, iType As String, iAdd As String, iNum As String)+ R+ g+ W8 C! Z' L
'' iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量& C: k! K, K5 O0 h
Dim Stmp As String2 R/ r/ K/ x- @4 R' o4 ^% M
Dim cha, j As Integer) B/ [6 `0 W+ O
Dim ChaCount As Integer1 l4 l; C& A, `5 a! J' x
Dim Comm As String' U2 V$ o/ u) N0 D8 q
Select Case  iType
# u$ W8 x  r1 _3 @2 dCase "D"          ''查询数据寄存器的值' `. s- L0 W8 @) g: ^
Comm = "WR"       ''命令类型:数据字读7 o% ^" V  m0 X3 e
cha = Val("&H" & iNum) * 4      ''数据寄存器的值为十六进制表示,占4个字符, ?" j; y$ Y9 {0 S
Case "M", "X", "Y"     ''查询继电器触电的值
, ]" N5 w* w( b0 WComm = "BR"      ''命令类型:二进制位读
. |3 ?2 |! O( R& u8 V6 [( bcha = Val("&H" & iNum)* ~( B; Y/ F5 B3 B- e7 r
End Select
# b% r& y6 V$ [* ]$ O9 X6 jiAdd = Right$("000" & iAdd, 4)( t! |7 r0 ]6 h  f5 S0 L
iNum = Right$("0" & iNum, 2)9 u9 p' T% D8 u) a
Stmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum    ''输出命令格式
; Y( r  v: X5 x; [$ kChaCount = 6 + cha  ''要返回字符个数) f5 X. F- i) ^1 q% f4 g9 v5 g+ R
main.MSComm1.InBufferCount = 0  ''输入缓冲区清零+ E7 m& h, N" @" t( L+ ], s4 p- z
main.MSComm1.Output = Stmp  ''设传送缓冲区内容为命令格式
( z& T9 r- x' Z5 ~( M# FNow=Second()% T8 P! K6 u6 I. P" f& {7 `# A* h
Do* I' A' }- n* i
DoEvents              ''转让控制权,以便让操作系统进行数据传输1 }% A, G4 r5 L8 B
If  Second()-Now>1  Then  Exit  Sub: k2 O7 V$ }+ T. D
Loop Until main.MSComm1.InBufferCount = ChaCount  ''当接收到规定字符时停止循环
. y% z. C4 K6 {$ D, i: YRevDataTmp = Mid$(main.MSComm1.Input, 6, cha)     ''返回数据字符串保存在全局变量1 X* M% W) v  j0 z. Q
''RevDataTmp中
* H4 p0 e! w! ]* a7 {End Sub
9 G% @, c. L0 ^  [3 f2) 发送数据函数SendData( )9 l- e6 q% s: e3 i
(没有和校验)
1 I. W1 C/ T" d: M" n% M: z. p. oSub SendPLC(iNo As String, iType As String, iAdd As String, iNum As String, iValue As String)2 \& V9 U2 v; |( \, Y
'' iNo为PLC站号,iType为元件类型,iAdd为首地址,iNum为元件数量,iValue为写入值7 c5 G' R! c& ^* }; z
Dim Stmp As String, a" d* ?. s  g' k; P  I
Dim Comm As String+ N4 V: ?# n9 Z# ^. `
Select Case  iType$ M  V9 v; g) {0 Y5 K
Case "D"          ''写数据寄存器的值
0 u4 |1 O1 U2 C( I7 A' xComm = "WW"        ''命令类型:数据字写
% u( m' v% c+ G: XiValue = Right$("0000" + Hex$(Val(iValue)), 4)  ''写入值转换成十六进制表示& @) ^0 K1 N8 z; b# J
Case "M"          ''写继电器触点的值: T0 T' _/ |. n; s) e% ?
Comm = "BW"        ''命令类型:二进制位写
: O; _) V3 q( O; c' z% R% V3 k! fEnd Select
8 L& K3 i9 r3 S( x/ y4 TiAdd = Right$("000" & iAdd, 4)
3 Y) d/ v' d. p; }5 e  _iNum = Right$("0" & iNum, 2)
- N6 @2 m5 g  T5 s, VStmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum & iValue  ''输出命令格式
3 Q- k2 ^3 F9 I4 i) }MSComm1.Output = Stmp                   ''输出命令到传送缓冲区/ c' Y/ a) w+ A  V- _2 D
Now= Second()
8 W4 e# n9 |( TDo% b  b1 S. Z2 z1 H. ?9 J! u
DoEvents                                ''转让控制权,以便让操作系统进行数据传输0 x' h; U* L! [5 |6 x9 ^7 I
If  Second()-Now>1  Then  Exit  Sub
3 o# U5 C0 O4 A; t: F5 j  f! i( \8 H% yLoop Until main.MSComm1.OutBufferCount = 0   ''当命令传送完时停止循环; E& U( n# I# h3 \) J& _
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 )

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