个人在工厂做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
写的如有差错,还多谅解。