個人在工廠做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
寫的如有差錯,還多諒解。