1.VB实现PLC与上位机通信
可利用OPC服务器来完成,比较方便。
可适用于各类PLC。 下面以西门子PLC为例说下实现方法: 一、通过STEP7软件建立一个新项目OPC,在项目中添加SIMATIC 300站和一个PC 站,其中PLC站中第四个槽安装的CP343模块。
PC站的第一个槽 为OPC SERVER ,第三个槽为 IE GENERAL,然后在NETPRO下配置PLC和PC站的网络连接:(注意:是在PC站上新建的网络连接,连接类型选的S7连接) 二、通过station configurator软件 配置本机的PC站(要和STEP7中配置的相同),然后把PLC和PC站都下载下去(注意:下载PC站的时候要把S7ONLINE (STEP7)--->;PC internal(local))。 三、打开OPC Scout,(Start>;SIMATIC>;SIMATICNet>;OPC Scout), 双击“OPC SimaticNet”在随之弹出的“ADD Group”对话框中输入组名,本例命名为“OPC”。
点击OK 确认 ; ;双击已添加的连接组(OPC),即弹出“OPC Navigator”对话框,此窗口中显示 所有的连接协议。双击“S7”,在PC Station 组态NetPro 中所建的连接名会被显示(S7 connection_1)。
双击此连接,即可出现有可能被访问的对象树(objects tree),在PLC CPU 中已存在的DB 块也会出现 以上完成的OPC SERVER部分的配置。 四、用VB编写了OPC客户端应用程序。
主要程序代码如下: 在VB中引在VB中还要引用 siemens opc daautomation 2.0 (1) 连接OPC服务器 Dim WithEvents MyOPCServer As OPCServer '定义服务器对象变量MyOPCServer Dim WithEvents MyOPCGroup As OPCGroup '定义OPC组对象变量MyOPCGroup Set MyOPCServer = New OPCServer MyOPCServer.Connect " OPC.SimaticNET" '连接SIMATICNET 的OPC服务器 (2) 添加OPC组对象 Set MyOPCGroup=MyOPCServer.OPCGroups.Add("Group1") '添加OPC组对象 MyOPCGroup.IsSubscribed= True '设置该组数据为后台刷新 MyOPCGroup.IsActive = True '设置该组为激活状态 MyOPCGroup.UpdateRate=1000 '设置数据刷新时间为1000 (3) 添加数据项 Dim abItemIDs() As String '项标识符 Dim abClientHandles() As Long '客户端句柄 Dim abServerHandles() As Long '服务器端句柄 Dim abErrors() As Long Dim i As Long ItemCount=3 abItemIDs(1) = " S7:【S7 connection_1】IB1" abItemIDs(2) = " S7:【S7 connection_1】MB1" abItemIDs(3) = " S7:【S7 connection_1】QB1" for i=1 to 3 abClientHandles(i) = i '给客户端句柄赋值 Next MyOPCGroup.OPCItems.AddItems ItemCount, abItemIDs, abClientHandles, abServerHandles, abErrors '添加数据项操作 (4) 同步数据读写 OPC数据存取有同步方式和异步方式两种。异步读写数据复杂,需要与事件结合使用,与同步相比速度慢但准确性高。
同步读写数据简单,直接使用OPCItem的方法即可。 Dim One As OPCItem Dim Index As Long 'Index为标签顺序号 Dim OneRead As String Dim Xie As String Set One = MyOPCGroup.OPCItems(Index) One.Read OPCCache OneRead = One.Value '读数据 MyOPCGroup.SyncWrite ItemCount, ServerHandles, valuess, Errors '同步写数据 MyOPCGroup.SyncRead OPCCache, ItemCount, ServerHandles, ReadValue, Errors '同步读数据 One.Write (Xie) '写数据 若只读取数据,可以使用DataChange事件,当控制器中所要访问的数据一旦发生改变时将会触发该事件,并将该数据自动读到TxtValue文本框。
Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date) '自动刷新数据 Dim i As Long For i = 1 To NumItems txtValue(ClientHandles(i)) = ItemValues(i) '获取项的值 txtTime(ClientHandles(i)) = TimeStamps(i) '获取项的时间戳 txtQuantity(ClientHandles(i))=GetQualityString(Qualities(i)) '获取项的品质 Next i End Sub (5) 断开OPC服务器 MyOPCServer.OPCGroups.RemoveAll '移除所有OPC Group,空出资源 Set MyOPCGroup = Nothing MyOPCServer.Disconnect '断开连接。
2.毕业论文 基于modbus的plc与上位机的通信
1 引言 随着微电子技术和计算机技术的进步,可编程控制器以其可靠性高、抗干扰强、开发周期短,已经成为一种较为普及的、适应多种应用环境的工业控制器。
现已从最初的简单顺序控制、逻辑控制发展到可进行模拟量控制、位置控制,特别是PLC与PLC、PLC与计算机通信功能的实现,可组成多级控制系统,形成工厂自动化网络。PLC可以多种方式如直接采用现有的组态监控软件与上位监控机通信,但针对小规模的控制系统,找到一种高性价比的通信方法,具有积极的实际意义。
本文就是讨论如何利用Modbus通信协议来实现施耐德电器公司的NanoPLC与上位监控PC机的通信。2 硬件描述及串口设置2.1 接口电路设计 PLC与PC间实现通信,可使二者互补功能上的不足,PLC用于控制方面既方便又可靠,而PC机在图形显示、数据处理、打印报表以及中文显示等方面有很强的功能。
因此,各PLC制造厂家纷纷开发了适用于本公司的各种型号PLC机通信的接口模块,不同的通信方式,有着不同的成本价格和不同的适用范围。NanoPLC的CPU单元本身带有1个RS-485扩展口,可不配备专用通讯模块,而通过此接口与上位机进行串行通信。
在此介绍一种通过PLC的RS485扩展口与PC机的RS-232串行口进行通信的方法。由于NanoPLC的扩展口采用RS-485标准,RS485是RS422的变型。
RS422为全双工,可同时发送与接收;RS485则为半双工,在某一时刻,1个发送另1个接收。RS485是一种多发送器的电路标准,允许双导线上1个发送器驱动32个负载设备,负载设备可以是被动发送器、接收器或收发器。
而计算机的串行口采用RS-232标准。因此,作为实现PLC与计算机通信的接口电路,必须将RS-485标准转换成RS-232标准。
我们利用SC-485转换器实现RS485与RS232之间的转换。转换电路如图1所示。
图1 RS485与RS232转换电路图2.2 PLC串行口设置 施耐德的NanoPLC对通信参数的设置通过设置扩展口来实现,系统采用PC 机作为Modbus通信网络主站,NanoPLC作为从站。通信格式设置如下:波特率4800bps,图2 PLC串行口设置8位数据位,1位停止位,无奇偶校验。
如图2所示。2.3 PC机的串口初始化 在微机数据通信中,经常使用大规模集成串行接口电路芯片,它们的种类和型号很多,如UART、USRT、USART等。
能完成异步通信的硬件电路称为UART。作为可编程的异步串行通信芯片UART,应根据协议的要求对其初始化。
可编程串行异步通信控制器8250是IBM PC串行通信控制器I/O接口电路的核心,通过对8250的编程,可以控制串行数据传送格式和速度。PC机有2个串行通信接口COM1和COM2。
若选COM1,则8250各寄存器地址为3F8H~3FEH;选COM2,则8250各寄存器地址为2F8H~2FEH。这里介绍用Tubro C直接对PC机中的UART 8250中各寄存器进行初始化。
本例采用COM2口,初始化如下:outportb(0x2fb,0x80); /*btp=4800*/ outportb(0x2f8,0x18); outportb(0x2f9,0x0); outportb(0x2fb,0x1b); /*initialize (8、1、n)*/ outportb(0x2f9,0x0); outportb(0x2fc,0x3);3 软件描述3.1系统通信协议 NanoPLC采用Modbus通信协议。任何根据此通信协议进行通信的主、从机之间进行数据信息交换时,信息格式都必须遵守通信协议所规定的格式。
Modbus的数据交换模式有2种,1种为ASCII编码制,1种为RTU编码制。本例采用RTU码传输模式,它包括一些特殊标志码、PLC站号、呼叫字和校验码等,其数据帧格式如附表。
(1) 帧开始:数据帧以至少3.5个字符间隔时间(T1-T2-T3-T4)标志开始和结束。整个信息帧必须以连续的信号进行传输,从而保证CRC的校验正确。
(2) 从站地址:1个字节。各从站识别码,站号取值范围01H-F7H,共有247种不同站。
但Nano系列PLC通讯网络最多允许32个从站。(3) 功能号:1个字节。
表示主站对从站的各种操作工作,主机发功能号给从机,如果从机响应正常,则回送相同的功能码;如有错误发生,则将原功能码符号位置“1”后回送,并将错误代码写入数据区回送。各功能号具体功能如下:01或02:读n个内部位%Mi03或04:读n个内部字%Mwi05:写1个内部位%Mi06:写1个内部字%Mwi15:写n个内部位% Mi16:写n个内部字%Mwi(4) 数据区:数据区由一串2位16进制数据组成,从00-FFH。
如果通信正确,数据区存放PLC回应上位机的信息;如发送数据有误,则返回异常代码。NanoPLC处理的2种异常代码:*01:功能未知(PLC不支持的请求) 如发送: 01H 16H 00H 00H FFH 00H 09H F9H 返回: 01H 96H 01H 8EH 60H*03:无效数据(位或字的数据错误,如写位时数据既非16#FF00,又非16#0000) 如发送:01H 05H 00H 00H 03H 06H 4DH 38H 返回:01H 85H 03H 02H 91H(5) 校验码:2个字节。
采用CRC循环冗余码。它的基本原理是将一段信息看成一个很长的二进制数,然后用一个特定的数(如11021H)去除它,最后将余数作为校验码附在信息代码之后一起传送(或存储),在进行接收(或读出)时进行同样的处理,如有差错就可发现。
需特别注意的是,如果发送信息中的CRC校验码计算错误,则通信不能成功。3 按。
3.紧急求助:鄙人要写一篇关于VB的论文
1991年,美国微软公司推出了Visual Basic(可简称VB),目前的最新版本是VB 2008 Beta2(VB9)中文版。
Visual 意即可视的、可见的,指的是开发像windows操作系统的图形用户界面(Graphic User Interface,GUI)的方法,它不需要编写大量代码去描述界面元素的外观和位置,只要把预先建立好的对象拖放到屏幕上相应的位置即可。 Basic 实际上是一个短语的缩写,这个短语就是 Beginners all_purpose symbolic instruction code ,其中文意思为“初始者通用符号指令代码语言”。
Visual Basic有学习版、专业版和企业版三种版本,以满足不同的开发需要。学习版适用于普通学习者及大多数使用Visual Basic开发一般Windows应用程序的人员,但是;专业版适用于计算机专业开发人员,包括了学习版的全部内容功能以及Internet控件开发工具之类的高级特性;企业版除包含专业版全部的内容外,还有自动化构件管理器等工具,使得专业编程人员能够开发功能强大的组骨子里分布式应用程序。
VB是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发Windows环境下的各类应用程序。它简单易学、效率高,且功能强大可以与Windowsr专业开发工具SDK相媲美。
在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,以用动态链接库(DLL)、对象的链接与世隔嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows环境下功能强大、图形界面丰富的应用软件系统。随着版本的提高,Visual Basic的功能也越来越强。
5.0版以后,Visual Basic推出了中文版,与前个版本相比,其功能有了很大提升。 但是,功能再强大,Visual Basic仍然有一个缺点:在没有MSVBVM**.DLL的计算机上必须安装所需的DLL文件。
用它可设计操作系统,不过,比较困难。 在二十一世纪初,microsoft公司推出Visual Studio 2003与Visual Basic之间有了重大变化,Visual Studio为各种编程工具做了一个平台,Visual Basic.NET可在这种平台上运行。
相对于传统VB,有很大的不同。VB.Net,首次使用.Net构架进行可视化编程,并且能很好地与COM构架兼容。
2005年Visual Studio 2005则运用了NET 2.0的技术,更加的方便了程序员的工作。可是新的程序对系统配置要求也较高,需要微软.Net Framework 2.0以上的.Net构架支持。
2007年12月,微软(Microsoft)推出了Visual Studio 2008 Beta 2 发生了重大的变化(见附图)在代码输入的时候,可以比VB2005快很多,在非特殊的情况下,VB2008都会自动开启 自动完成关键字 这个命令 而且开始支持最新的.NET Framework 3.5 Beta 2。
4.我的毕业论文 基于modbus的plc与上位机的通信
先熟悉MODBUS协议规范 网上一搜一堆 对于上位机通讯 只需要定义4个区 OX0 OX1 OX3 OX4
OX0 离散量只读 相当于DI OX1离散量读写 相当于DO
OX3 读取过程量 OX4 读写数据 相当于位内存M区
不同的PLC对应的MODBUS地址也不同 如果是施耐得的TWIDO或者M340 只支持M区读取 对于上位机变量
只是OX1 OX4
上位机那边简单 把通讯配置好 波特率 奇偶校验 停止位等 在该连接下按照上述我说的建立变量连接就可以
5.求VB写的上位机程序,与51单片机之间进行通信
用mscommand32控件,设置好波特率等,设置方式是binary,不要用text方式。然后你要把文本框中的string "0x55" 转成数字的0x55,然后用mscomm1.output输出,单片机就能收到了。你设置好事件中断,mscomm1.RThreshold=1 当单片机发一个字节时,就会产生这个中断,你就可以到mscomm1.input里收到这个字节了。
easy, if any problem contact me freely. qq.1057106
6.VB 上位机程序与PLC通讯
'窗体上添加一个MSCOMM,一个按钮,然后粘贴如下代码,点一下按钮,然后PLC发送数据,如果程序收到了,会给出确认消息
Private Const StartFlag = &HA0
Private Const EndFlag = &H23
Private Sub Command1_Click()
Static Db() As Byte
Dim t() As Byte
Dim i As Long, j As Long
Command1.Enabled = False
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
ReDim Db(0 To 0) As Byte
Dim found As Long
Do
DoEvents
t = MSComm1.Input
If UBound(t) >= 0 Then
ReDim Preserve Db(LBound(Db) To UBound(Db) + UBound(t) - LBound(t) + 1) As Byte
j = UBound(t)
For i = UBound(Db) To LBound(Db) Step -1
Db(i) = t(j)
Debug.Print t(j)
j = j - 1
If j Next i
found = -1
For i = LBound(Db) To UBound(Db)
If Db(i) = StartFlag Then
found = i
End If
If Db(i) = EndFlag And found -1 Then
Exit For
End If
Next i
If i Dim s As String
For j = found To i
s = s & Hex(Db(j)) & " "
Next j
MsgBox s
Exit Do
End If
End If
Loop
Command1.Enabled = True
MSComm1.PortOpen = False
End Sub
不明白的请百度HI
转载请注明出处众文网 » 上位机vb毕业论文(VB实现PLC与上位机通信)