工控网首页
>

应用设计

>

基于MX组件的上位计算机与三菱PLC通信

基于MX组件的上位计算机与三菱PLC通信

2007/6/5 9:21:00
根据微软权威的软件开发指南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控件构件中小型
投诉建议

提交

查看更多评论