紫外工控论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3168|回复: 0

[OPC技术] 基于MX组件的上位计算机与三菱PLC通信

[复制链接]
冰糖 发表于 2010-12-19 22:39:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
原文地址:http://www.gongkong.com/webpage/ ... 33-6304216B8D12.htm

根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX是Micrsoft适应组件对象模型(Component Object Model,COM)开发技术提出的。核心COM允许应用程序之间互相通信和使用彼此的功能,组件对象模型起源于面向对象的编程(Object-oriented programming,OOP)的概念,并把这个模型延伸到操作系统,从而方便任何COM程序对象与其他需要的接口的COM对象通讯。
目前,在工业控制FA领域,实现人机交互和数据备份的一般选择工业计算机及组态软件。笔者在南京虹梅居住区中水处理项目管理计算机中,选用了Visal Basic6.0作为开发工具,结合三菱电机发布的MX-Component 控件,方便的实现了计算机与三菱PLC的通讯。由于采用三菱MX-Component 控件方面的文献资料比较少,笔者茁文,希望大家指正。
SW3D5C-ACT-E软件目前版本3.0,支持OS有98,2000,XP等。平台支持VB,VC,VB.NET,VC.NET ,LABVIEW,BC等开发工具。经过安装SW3D5C-ACT-E,系统OCX控件列表内就有相应的驱动OCX:


一 系统组成构架:

中水处理系统组成
系统描述:由上位计算机,1号从站,2号从站。计算机和PLC之间通过RS-232通讯,直接在PLC编程口读取数据。
1号站配置:
电源模块: Q61P-A2
主基板: Q38B
CPU模块: Q01CPU
CCLINK主站:QJ61BT11
本地输入模块:QX40
本地输出模块:QY40
模拟量模块: Q68ADI 采集PH,浊度等信号
模拟量输出: Q64DA 控制压滤机,风机,提升泵

2号站配置:
电源模块: Q61P-A2
主基板: Q35B
CPU模块: Q01CPU
CCLINK主站:QJ61BT11
本地输入模块:QX40
本地输出模块:QY40
模拟量模块: Q68ADI
3-12号站
远程输入输出:AJ65SBTB1-16D,AJ65SBTB1-16T
分别采集远程水泵运行状态和监视设备。
系统运行登陆画面

编写登陆程序。
标准语法:Open (Communication line opening)
(1) Applicable ACT controls
This function is available for all ACT controls.
(2) Feature
Opens the communication line.
(3) Format
R R
Visual Basic , Visual C++ ,VBA : lRet = object.Open()
LonglRetReturned valueOutput
VBScript : varRet = object.Open()
VARIANTvarRetReturned value (LONG type)Output
(4) Explanation
The line is connected on the basis of the value set to the property for Open
method.
(5) Returned value
Normal termination: 0 is returned.
Abnormal termination: A value other than 0 is returned.
(Refer to Chapter 6 ERROR CODES.)
编写程序:
Dim fLogin As New frmLogin
fLogin.Show vbModal
If Not fLogin.OK Then
登录失败,退出应用程序
End
End If
Unload fLogin
frmSplash.Show
//////////////////////////
Open App.Path & "\wecom.txt" For Append As #1
Print #1, Format(Date) + " " + Format(Time) + "系统开启"
//////////////////////////
frmSplash.Refresh
Load frmMain
IRet = frmMain.Q1.Open
/////////////////////////
Print #1, Format(Date) + " " + Format(Time) + "准备与PLC通信"

/////////////////////////////
If IRet <> 0 Then
Print #1, Format(Date) + " " + Format(Time) + "无法链接到PLC"
Close #1
////////////////////////////
MsgBox "无法链接到PLC,请检查硬件设置!"
ex: End
End If
///////////////////////////
Print #1, Format(Date) + " " + Format(Time) + "与PLC通信成功"
Close #1
Set db = OpenDatabase(App.Path & "\base.mdb")
Set res = db.OpenRecordset("xml")
res.AddNew
res.Fields(0) = "系统开启时间" + Format(Date) + " " + Format(Time)
res.Update
Set fMainForm = New frmMain
Load fMainForm
Unload frmSplash
fMainForm.Show

运行界面
数据采集,读取位元件,由于采样上来的16个位元件组成一个字读取的,必须在VB程序编写相应的程序,便于在界面反映每个阀门,泵的运行状态。
标准语法;读数据块
ReadDeviceBlock (Device batch-read)
(1) Applicable ACT controls
This function is available for all ACT controls.
(2) Feature
Batch-reads data from devices.
(3) Format
Visual Basic , VBA :
lRet = object.ReadDeviceBlock(szDevice, lSize, lData(0))
LonglRetReturned valueOutput
StringszDeviceDevice nameInput
LonglSizeNumber of read pointsInput
实际采集输入状态子程序模块
Dim jy As Integer
Dim jx As Integer
Dim jz As Integer
将读出的数据分配给数组,注意,这里从Y(1)开始
----OUTPUT Y
------READ X SATU
IRet = Q1.ReadDeviceBlock("X0", 5, Wordx(1))
------READ Y SATU
IRet = Q1.ReadDeviceBlock("Y30", 8, Wordy(1))
On Error Resume Next
ky = 0
For YI = 1 To 7
Call DecBinX(Wordy(YI), OTY(YI))
For jy = 1 To Len(OTY(YI))
Y(ky + jy - 1) = CBool(Mid$(OTY(YI), 17 - jy, 1))
Next jy
ky = ky + 16
Next YI
-----INPUT X
For i = 1 To 5
Wordx(i) = Int(Rnd * 32766)
Next
kx = 0
For xi = 1 To 5
Call DecBinX(Wordx(xi), OTX(xi))
For jx = 1 To 16
x(kx + jx - 1) = CBool(Mid$(OTX(xi), 17 - jx, 1))
Next jx
kx = kx + 16
Next xi
For i = 0 To 7
Bar1(i).Value = Rnd * i + 60
Next
LED1.LEDSTRING = Format(Date) + " " + Format(Time)
---------------------------显示处理----------
--------------------------------------------
向PLC写数据块
标准语法:WriteDeviceBlock (Device batch-write)
(1) Applicable ACT controls
This function is available for all ACT controls.
(2) Feature
Batch-writes data to devices.
(3) Format
Visual Basic , VBA : lRet = object.WriteDeviceBlock(szDevice, lSize, lData(0))
LonglRetReturned valueOutput
StringszDeviceDevice nameInput
LonglSizeNumber of write pointsInput
LonglData(n)Device values to be writtenInput
Visual C++ : lRet = object.WriteDeviceBlock(szDevice, lSize, lplData)
LonglRetReturned valueOutput
CStringszDeviceDevice nameInput
LonglSizeNumber of write pointsInput
lplDataDevice values to be writtenInput
Long
VBScript : varRet = object.WriteDeviceBlock(varDevice, varSize, varData)
VARIANTvarRetReturned value(LONG type)Output
VARIANTvarDeviceDevice name(character string type)Input
VARIANTvarSizeNumber of write points(LONG type)Input
Device values to be written
VARIANTvarData Input
(LONG array type)
(4) Explanation
* The device values for lSize(varSize) are batch-written to the devices, beginning
with the device specified in szDevice(varDevice).
* Store the device values to be written in lData (lplData or varData).
* Reserve an array of lSize (varSize) or more for lData (lplData or varData).
样例程序:
For i = 0 To 5
If Val(Text1(i + 4)) = 0 Then
MsgBox "参数错误!请重新输入"
Else
IData(220 + i) = Val(Text1(i + 4))
End If
Next i
IRet = frmMain.Q1.WriteDeviceBlock("D220", 6, IData(220))
Text1(10) = Val(Text1(4)) / Val(Text1(5))
Text1(11) = Val(Text1(6)) / Val(Text1(7))
Text1(12) = Val(Text1(8)) / Val(Text1(9))
生成数据报表。


由于生成报表个性化等特点,更适合中小型监控设备。
结束语:目前系统已经运行稳定2年多。采用了三菱提供的控件编写上位机器程序,省去了烦琐冗长的通讯部分,开发人员只编写流程处理和工艺过程模块。
我们可以说,用VB+MX-Component控件构件中小型监控系统是一种经济实用的方案。
参考文献:1.《MX Component Programming Manual》
------------------------三菱电机
2.《Visal Basic6 数据库开发》-----E.winemiller,J.Roff
-----------------------清华大学出版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


--------------------------------------------------------------------------------------------------------------------
本站是工控技术交流站点,论坛内容均为网络收集或会员所发表,并不代表本站立场,会员拥有该内容的所有权力及责任!
本站内容如有侵犯您的版权,请按下面方式联系本站管理员,我们将及时删除处理
管理员:冰糖 QQ:5483695(请直击主题), Mail:admin#ziwai.net(#改成@) 其它非本人.
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!

QQ|Archiver|手机版|小黑屋|紫外工控论坛. ( 苏ICP备11032118号-1 )

GMT+8, 2024-5-4 08:57 , Processed in 0.328125 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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