记静下心来从头学习PLC编程以及用C#开发OPC client 与PLC 交互

个人在工厂做MES维护, 想学习PLC 对及上位机控制PLC时也是有着客观需要。首先我的学习顺序是先培养自己的兴趣,

我是做.net 开发的, 所以我就打算先 用C# 开发出opc client 只与PLC中某个地址位作读取,写入以实现我程式可实现MES 中

相关判断来实现PLC设备 启动/停止、等待之类的操作。 先从最简单的做起 ,这样会增加自信以及会有成就感。

 

对于C# 开发OPC CLIENT , 我百度了很多考虑到C#开发不分局限到某个品牌PLC ,所以一次就能兼顾所有那才是成熟的方案。

这样就需要用的OPC server ,市面上有很多OPC server 一些是小公司开发的,收费还应用面小 源代码少不便学习。 综观所有我选 了KEPWARE 公司的OPCSERVER 。 此工具在网上有很多版本,并且源码较多便于学习。

一。kepware kepserver V6.5

  此软件可直接网上下载,相关软件有一些说明。我们可从只增加一台虚拟PLC设备,一,二个标签值来实现监控与读写

网址-http://www.opdown.com/soft/108809.html

 

二。opc client 

 1.此为采用VS2010 开发  ,调用 Interop.OPCAutomation.dll ,并需要在C盘 注册 OPCDAAUTO.DLL .

调用的DLL我源代码中有,OPCDAAuto 需要直接度娘找下。

 

我写的第一个示例主要是从CSDN 另一网友 处学习 -https://www.cnblogs.com/badnewfish/archive/2009/04/11/1374966.html

但正宗来源还是 无私的大尾巴狼啊 兄弟 原创的,但此兄 的博文已经不见了 ,其原创网址-http://www.cnblogs.com/xiaosacao/archive/2009/01/13/1374895.html

其文章非常适合我们这些有C#基础,但是对OPC client 不了解的人,

2. opc client 中关健变量分析

下面这些还是要熟知的。,利于懂的如何编程。

OPC主要包含两种接口:CUSTOM标准接口和OLE自动化标准接口,自定义接口是服务商必须提供的,而自动化接口则是可选的。
自定义接口是一组COM接口,主要用于采用C++语言的应用程序开发;
自动化接口是一组OLE接口,主要用于采用VB,DELPHI,Excel等基于脚本编程语言的应用程序开发。本文是使用C#通过自动化接口来实现的,也是最简单的方式。

首先必须了解的是OPC服务器的对象模型:

自动化接口中共定义了6类对象:OPCServer对象、OPCBrowser对象、OPCGroups对象、OPCGroup对象、OPCItems对象、OPCItem对象。接下来简要描述一下这些对象的主要功能。

1)、OPCServer对象

由客户端创建的OPCServer自动化对象。然后客户端通过其方法实现连接到OPC数据访问自定义接口。OPCServer对象现在可以用来获取关于OPC服务器的一般信息,并创建和操作OPCGroup对象的集合。

主要的属性:

StartTime

CurrentTime

LastUpdateTime

MajorVersion

MinorVersion

BuildNumber

VendorInfo

ServerState

LocaleID

Bandwidth

OPCGroups

PublicGroupNames

ServerName

ServerNode

ClientName

主要的方法:

GetOPCServers

Connect

Disconnect

CreateBrowser

GetErrorString

QueryAvailableLocaleIDs

QueryAvailableProperties

GetItemProperties

LookupItemIDs

2)、OPCBrowser对象

OPCBrowser对象是在服务器中存在的分支或项目名称的集合。其是可选的。如果服务器不支持,将不会创建这个对象。

主要的属性:

Organization

Filter

DataType

AccessRights

CurrentPosition

Count

主要的方法:

Item

ShowBranches

ShowLeafs

MoveUp

MoveToRoot

MoveDown

MoveTo

GetItemID

GetAccessPaths

3)、OPCGroups对象

OPCGroups是OPCGroup对象的集合,以及创建、删除和管理它们的方法。

该对象还具有OPCGroup默认属性。当添加OPCGroups时,DefaultGroupXXXX属性设置其初始状态。可以更改默认值,以添加具有不同初始状态的opc组。更改默认值并不会影响已经创建的组。添加OPCGroup后,它的属性可以被修改。这减少了调用Add方法所需的参数数量。

主要的属性:

Parent

DefaultGroupIsActive

DefaultGroupUpdateRate

DefaultGroupDeadband

DefaultGroupLocaleID

DefaultGroupTimeBias

Count

 

 

主要的方法:

Item

Add

GetOPCGroup

Remove

RemoveAll

ConnectPublicGroup

RemovePublicGroup

 

 

4)、OPCGroup对象

OPC组为客户组织数据提供了一种方式。例如,组可能表示特定操作符显示或报告中的项。数据可以读写。基于异常的连接也可以在客户端和组中的项之间创建,可以根据需要启用和禁用。OPC客户机可以配置OPC服务器应该向OPC客户机提供数据更改的速率。

主要的属性:

Parent

Name

IsPublic

IsActive

IsSubscribed

ClientHandle

ServerHandle

LocaleID

TimeBias

DeadBand

UpdateRate

OPCItems

主要的方法:

SyncRead

SyncWrite

AsyncRead

AsyncWrite

AsyncRefresh

AsyncCancel

5)、OPCItems对象

这个对象还具有OPCItem默认的属性。当添加OPCItem时,DefaultXXXX属性设置其初始状态。可以更改默认值,以添加具有不同初始状态的OPCItems。当然,一旦添加了OPCItem,它的属性可以被修改。这减少了调用Add方法所需的参数数量。

主要的属性:

Parent

DefaultRequestedDataType

DefaultAccessPath

DefaultIsActive

Count

 

主要的方法:

Item

GetOPCItem

AddItem

AddItems

Remove

Validate

SetActive

SetClientHandles

SetDataTypes

6)、OPCItem对象

OPC项表示与服务器中的数据源的连接。与每个项目相关联的是一个值,质量和时间戳。值以变量的形式出现,质量类似于Fieldbus指定的值。

主要的属性:

Parent

ClientHandle

ServerHandle

AccessPath

AccessRights

ItemID

IsActive

RequestedDataType

Value

Quality

TimeStamp

CanonicalDataType

EUType

EUInfo

 

主要的方法:

Read

Write

 

如下知识点为转载-

程序中涉及到的重要方法和属性比较多,解释下几个容易搞混的:

OPCItem 对象的属性ServerHandle,只读属性,服务器提供给Item的句柄,通过此句柄,Client可以定位到此Item,来对此Item进行后续的操作,比如移动删除;

OPCItem 对象的属性ClientHandle,可读可写属性,客户端分配给Item的句柄,这个句柄可以手动设置,也可由.NET随机选取的,不需要我们来设置,并且每次运行时,这
个句柄都不同,类似于TCP scoket通讯中的Client端分配的端口号。Server端必须指定端口号,Client端随机生成,每次都不一样。

OPCGroup 对象的属性的IsSubscribed,可读可写属性,Group的IsSubscribed为True,此Group才能开始接受服务器的数据属性,此Group才能被订阅。

OPCGroup 对象的事件DataChange (TransactionID As Long, NumItems As Long, ClientHandles() As Long,ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)需要注意的是NumItems参数是每次事件触发时Group中实际发生数据变化的Item的数量,而不是整个Group里的Items.

OPCGroup 对象的属性UpdateRate,可读可写属性,规定了数据刷新的周期,单位milliseconds.注意的是,不是设定多少ms,实际就是多少,比如给定53ms,OPC server会就近选择50ms.有区间划分的。
--------------------- 
作者:wfx7414 
来源:CSDN 
原文:https://blog.csdn.net/wfx7414/article/details/50628171 
版权声明:本文为博主原创文章,转载请附上博文链接!

感谢 wfx7414的分享。

3.程式界面-

 

此程式在信息显示后需在listbox上单击 对应标签 这样后台获取 标签对应的服务器端线程可在后面 写入数值时用到 ,可对应写到此标签上。

我只是写了最简单的,但是在datachange涵数中可根据定义好的规则对多标签实现 读取后 操作其值,可实现在后台直接完成,

此部份对于会用C#的应没大问题, 我们只要入了门,就是任鸟飞了。嘿嘿。

三。欧姆龙PLC 硬软件上手,以及简单程式编写

学PLC 重要的事一定是要有个PLC , 不管如何都需要一个PLC 来做些动手操作。我用的是欧姆龙CP1E-E20系列 最低档款。

无网口,COM 口但对于上手来说够了。

清单如下- 欧姆龙CP1E-E20,24伏电源,二个24伏开关,二根电源线,三个电灯, 一个传感器

接线只对应欧姆龙PLC ,其他品牌PLC还不会,接线只对应欧姆龙PLC ,其他品牌PLC还不会,接线只对应欧姆龙PLC ,其他品牌PLC还不会,

1.硬件接线

  我的是220V供电,所以直接用电源线切开, 分别对应INPUT 位置 的L,N,地 线 接好后记得一定要打个热融胶 这样你手无意碰到就不会触电了 ,很是安全, INPUT 有个COM 口是接24伏电源上+ 极 ,这样其他INPUT上就供电了 ,

在INPUT 端一般接的是开关,感应器之类的触发型部件。这些部件正极端接INPUT 00,01~12,另一端接24伏电源负极上这样形成环路就有电了。

out 端 -

COM 口 接负极,端点到COM口成对匹配的,端点出来负极,接到电灯负极上,电灯正极接到24伏电源正极。

之后就可根据地址位编程了。 INPUT 上00口在PLC上就是0.00,01口就是0.01 ,out 上 01口就是100.01,02就是100.02.

2.软件 -CXONE V4

  此软件需要自行度娘了 ,其基本介绍我们使用官网的 https://www.fa.omron.com.cn/elearning/map 

入门是最好的,讲的很简单,还可根据视频做一些例子 非常棒。

目前我只学了,常用的开,闭,定时器, 我以最简单的二开关控制1电灯交替亮来说明下-

 

开关类是0.开头,输出端为100.开头;具体哪个端点就是0.01,0.02 ,之类 依实际来设定。

第一个常开 是给启动开关,首次通电供电给,常闭开关这样可给虚拟中继器持续供电, 也保养按了常闭开关后切断整个电路。

虚拟中断器是一直有电的,PLC为从上到下,从左到右执行,且是毫秒级轮回执行。

设计控一个电灯亮几秒灭几秒时,其主要思想是通过 计时器在计时的时候 ,本身是断开的,计时完成后才是连通。 

知道 此原理我们就可在断开和连通时对接电灯,确保电灯常开,常闭。并通计时器T1计时完成后 连通状态再使用常闭反向标签 给T0断电,实现 T0再给T1断电,形一下循环。 使电灯一直保持 亮,来 亮 灭。

控制一个电灯会了,那二,三个就都没问题了 , 

其他的输入,输出 都可仿造 开关和电灯设计 。 

自己可多写些小程序,并根据工厂情况来加大难度了。

我的源代码都在 下面网址上-

https://download.csdn.net/download/jack_33/11126038

写的如有差错,还多谅解。

 

 

 

 

 

 

 

 

  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值