永发信息网

VB实现PLC与上位机通信

答案:4  悬赏:70  手机版
解决时间 2021-04-06 14:18
  • 提问者网友:美人性情
  • 2021-04-06 07:06
VB实现PLC与上位机通信
最佳答案
  • 五星知识达人网友:底特律间谍
  • 2021-04-06 07:14
可利用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
  ‘断开连接
全部回答
  • 1楼网友:野味小生
  • 2021-04-06 08:02
是232通信吗?你可以看串口调试工具的vb的源代码。网上面很容易找到的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯