記靜下心來從頭學習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

寫的如有差錯,還多諒解。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章