開發opc
Ⅰ 系統集成領域中SDK介面和OPC介面有什麼區別和聯系呀
OPC全稱是OLE for Process Control,即用於過程式控制制的OLE,是針對現場控制系統的一個工業標准介面,是工業控制和生產自動化領域中使用的硬體和軟體的介面標准。基於微軟的OLE(現在的Active X)、COM (部件對象模型)和DCOM (分布式部件對象模型)技術,OPC包括自動化應用中使用的一整套介面、屬性和方法的標准集,用於過程式控制制和製造業自動化系統。提供工業自動化系統中獨立單元之間標准化的互聯互通,順應了自動化系統向開放、互操作、網路化、標准化方向發展的趨勢。
軟體開發工具包是一些被軟體工程師用於為特定的軟體包、軟體框架、硬體平台、操作系統等創建應用軟體的開發工具的集合,一般而言SDK即開發Windows平台下的應用程序所使用的SDK。它可以簡單的為某個程序設計語言提供應用程序介面API的一些文件,但也可能包括能與某種嵌入式系統通訊的復雜的硬體。一般的工具包括用於調試和其他用途的實用工具。SDK 還經常包括示例代碼、支持性的技術註解或者其他的為基本參考資料澄清疑點的支持文檔。
Ⅱ OPC是什麼
OPC(OLE for Process Control)技術是指為了給工業控制系統應用程序之間的通信建立一個介面標准,在工業控制設備與控制軟體之間建立統一的數據存取規范。
它給工業控制領域提供了一種標准數據訪問機制,將硬體與應用軟體有效地分離開來,是一套與廠商無關的軟體數據交換標准介面和規程,主要解決過程式控制制系統與其數據源的數據交換問題,可以在各個應用之間提供透明的數據訪問。
(2)開發opc擴展閱讀:
OPC建立於OLE規范之上,它為工業控制領域提供了一種標準的數據訪問機制。工業控制領域用到大量的現場設備,在OPC出現以前,軟體開發商需要開發大量的驅動程序來連接這些設備。即使硬體供應商在硬體上做了一些小小改動,應用程序也可能需要重寫。
同時,由於不同設備甚至同一設備不同單元的驅動程序也有可能不同,軟體開發商很難同時對這些設備進行訪問以優化操作。硬體供應商也在嘗試解決這個問題,然而由於不同客戶有著不同的需要、同時也存在著不同的數據傳輸協議,因此也一直沒有完整的解決方案。
Ⅲ 如何開發OPC+Server
開發方式有三種:
1.簡單的:就是應用已經有的如DDE to OPC 或串口 to OPC,modbus to
OPC等軟體把您的設備變成相關的OPC伺服器。方法簡單實用,費用合理快速,讓你馬上搭上OPC的快車。主要缺陷:你的設備必需是標准設備或更標准設備
相容。這種方式比較適合產品多的廠家快速的轉型,或提供OPC相關產品。
2.一般的:應用第三方的開發包開發,這種方式相對來說減少了開發的難度,而且第三方有相應的技術支持,開發商專業做這種產品,產品有一定的穩定性。這種方式對開發包有依賴性,並且OPC伺服器的穩定性依賴第三方的開發水平。本方法適於老闆要求你馬上開發出OPC產品是^_^,或者入門者使用。
3.有難度的:應用COM開發。這種開發方式是最可以學習到東西的。但需要有一定的基礎,而且需要對英文有一定的認識度。
Ⅳ 如何開發OPC Server
開發方式有三種:
1。
簡單的:就是應用已經有的如DDE to OPC 或串口 to OPC,modbus to
OPC等軟體把您的設備變成相關的OPC伺服器。方法簡單實用,費用合理快速,讓你馬上搭上OPC的快車。主要缺陷:你的設備必需是標准設備或更標准設備
相容。這種方式比較適合產品多的廠家快速的轉型,或提供OPC相關產品。
2.。
一般的:應用第三方的開發包開發,這種方式相對來說減少了開發的難度,而且第三方有相應的技術支持,開發商專業做這種產品,產品有一定的穩定性。這種方式
對開發包有依賴性,並且OPC伺服器的穩定性依賴第三方的開發水平。本方法適於老闆要求你馬上開發出OPC產品是^_^,或者入門者使用。國內相關的開發
包有華富慧通的和拓林的開發包。
3。有難度的:應用COM開發。這種開發方式是最可以學習到東西的。但需要有一定的基礎,而且需要對英文有一定的認識度。
Ⅳ 如何一步步編寫opc client程序
一.准備工作:
下載opc基金會的OPC Proxy DLL然後按照說明進行安裝。這些動態庫是opc程序運行所必須的。
1. 將下列文件拷貝至要運行OPC伺服器和OPC客戶端的機器上的SYSTEM32目錄下
opcproxy.dll C:\WINDOWS\system32
opccomn_ps.dll C:\WINDOWS\system32
opc_aeps.dll C:\WINDOWS\system32
opchda_ps.dll C:\WINDOWS\system32
aprxdist.exe C:\WINDOWS\system32
opcenum.exe C:\WINDOWS\system32
2. 注冊這些 dll 文件
REGSVR32 opcproxy.dll
REGSVR32 opccomn_ps.dll
REGSVR32 opc_aeps.dll
REGSVR32 opchda_ps.dll
3. 如果在windows 系統(\WINDOWS \system32)目下不存在actxprxy.dll,運行aprxdist.exe
4. 安裝 opcenum.exe
opcenum /regserver
二.opcserver開發
1. 新建vc工程。比如建一個控制台工程。在工程中包含如下頭文件
#include "opcda.h"
#include "opc_ae.h"
#include "WTOPCsvrAPI.h"
#include "WtOPCsvrEXTapi.h"
以上頭文件在例子程序中都能找到,拷貝到自己的工程下。
WTOPCsvrAPI.h是開發包動態庫提供的導出函數文件。裡面有每個函數的具體說明,調用的時候看一下說明。
2. 在.cpp中定義一個GUID這個guid是用來標識opcserver的唯一id可以通過操作系統的工具生成,也可以編一個。格式如下。
const GUID
CLSID_OPCSimSvr = {0x99b8f472, 0xc037, 0x11d2, {0x80, 0xb8, 0x0, 0x60, 0x97, 0x58, 0x58, 0xbe}};
3. 在工程中加入對WtOPCSvr動態庫的連接。
WTOPCsvr動態庫的有關文件都在之前的例子包裡面能找到。
WTOPCsvr.lib WTOPCsvr.dll是對應lib和dll
4. 初始化
(1)調用UpdateRegistry()函數完成注冊。下面是一個調用參考例子代碼
BOOL COPCSimSvrApp::InitInstance()
{
TCHAR szTokens[] = _T("-/ ");
CString HelpPath;
CString SvrName, SvrDescrip;
int i;
HelpPath = AfxGetApp()->m_pszHelpFilePath;
i = HelpPath.ReverseFind('\\');
HelpPath = HelpPath.Left(i+1);
HelpPath += "OPCSIMSVR.EXE";
//
// Self-Registration code
// (look for cmdline options to register & unregister server)
//
SvrName = "WinTECH.OPCServer";
SvrDescrip = "WinTECH Software OPC Server Simulator";
CString tempCmdLine(m_lpCmdLine);
LPTSTR lpszToken = _tcstok(tempCmdLine.GetBuffer(1), szTokens);
while (lpszToken != NULL)
{
if (_tcsicmp(lpszToken, _T("UnregServer"))==0)
{
UnregisterServer ((BYTE *)&CLSID_OPCSimSvr, SvrName);
return (FALSE);
}
else if (_tcsicmp(lpszToken, _T("RegServer"))==0)
{
UpdateRegistry ((BYTE *)&CLSID_OPCSimSvr,
SvrName,
SvrDescrip,
HelpPath);
return (FALSE);
}
lpszToken = _tcstok(NULL, szTokens);
}
(2)調用InitWTOPCsvr完成開發包dll初始化。
以上兩個步驟不可顛倒。
5. 創建item
這里的item是伺服器所有的item,這些item通過opc庫戶端能瀏覽到。創建item的函數為CreateTag().
Opc有兩種地址空間形式:扁平和多層結構的。
比如調用創建的點為item1、item2、item3.這類結構就是扁平的。各個點類似與文件系統中的文件。
比如調用創建的點為test.item1、test.item2、test.item3這種點名,開發包會自動形成多層的點結構。Test類似與文件系統中的文件夾,item類似與文件系統中的文件夾下的文件。扁平式和多層結構在客戶端瀏覽點名時體現。
多層結構的點名之間默認是用「.」分隔。為了簡單可以將我們的opcserver設計為扁平結構。
創建一個點時會返回一個handle用來標識這個點。我們程序需要自己建立這個handle和資料庫中保存設備實時值的對應關系。這部分可以參考例子代碼。
6. 建立一個定時器採集設備數據
定時從資料庫中取得各個handle對應的item的值。然後比較各個item的值是否和上一次讀取的值有變化,如果有變化調用UpdateTagToList放入對應的隊列。開發包會自動將變化的值送到客戶端。
大致流程為
(1) 從資料庫中採集一遍所有點的實時值。
(2) 調用StartUpdateTags()
(3) 循環讀取每個item在資料庫中的數據,和上一次讀取到的進行比較。如果有變化調用UpdateTagToList()
(4) 最用調用EndUpdateTags()完成所有item的更新。
7. 客戶端控制
客戶端寫tag的值的時候,在opcserver是通過一個回調函數來響應的。
在伺服器端必須調用EnableWriteNotification()來指定寫值的回調函數。回調函數的格式為:
typedef VOID (CALLBACK* WRITENOTIFYPROC)(HANDLE, VARIANT*, DWORD*);
然後在回調函數內部實現從HANDLE指定的tag寫到具體的控制設備對應的變數中。
8. 其它常用函數
RequestDisconnect()一般在opcserver在關閉時調用,用來通知客戶端opcserver自己要關閉。
NumbrClientConnections()用來計算當前有多少個客戶端連接到了opcserver
UninitWTOPCsvr()程序退出時清理
SetVendorInfo()設置廠商信息
三.opc客戶端測試
下面以本機opcquickclient.exe為例說明伺服器和客戶端之間的應用關系。
1. 運行opcquickclient.exe
2. 點擊edit->new server connection 菜單。彈出server properties對話框。從中展開opc data access server version 2.0.會瀏覽到本機安裝的所有opcserver。選中我們自己開發的opcserver,點擊確定。完成與伺服器的連接
3. 點擊edit->new group 用默認值添加組。
4. 點擊edit->new item 彈出如下對話框。(下圖是一個多層結構地址空間的例子,單層的更簡單)選中左側的某個父節點,右側會顯示出各個子tag。選中要向opcserver查詢的tag,點擊add leaves。然後點擊ok
5. 在客戶端主界面上能看到剛才要查詢的tag。它會自動跟隨opcserver端數據的變化而變換。
6. 右鍵要控制的tag,在菜單中選擇同步寫或者非同步寫(一般建議用非同步,避免阻塞客戶端的正常運行)。鍵入要寫入的值。查看設備上是否動作。從而檢驗opcserver是否編寫的正確。
Ⅵ 如何學習c#開發opcclient
新建C#應用程序,命名為OPC Client,將OPCAutomation.dll引用,如圖。
using OPCAutomation;
2. 定義OPC的三個介面類OPCServer類、OPCGroup類和OPCItem類;
OPCServer KepServer;
OPCGroups KepGroups;
OPCGroup KepGroup;
OPCItems KepItems;
OPCItem KepItem;
3. 枚舉網路OPC伺服器
枚舉OPC伺服器用到GetOPCServers()函數
//獲取計算機IP,計算機名稱
IPHostEntry IPHost = Dns.Resolve(Environment.MachineName);
if (IPHost.AddressList.Length > 0)
{
strHostIP = IPHost.AddressList[0].ToString();
}
else
{
return;
}
//通過IP來獲取計算機名稱,可用在區域網內
IPHostEntry ipHostEntry = Dns.GetHostByAddress(strHostIP);
strHostName = ipHostEntry.HostName.ToString();//獲取本地計算機上的OPCServerName
try
{
KepServer = new OPCServer();
object serverList = KepServer.GetOPCServers(strHostName);
//枚舉網路所有OPC伺服器並寫入ComboBox控制項
foreach (string turn in (Array)serverList)
{
cmbServerName.Items.Add(turn);
}
cmbServerName.SelectedIndex = 0;
btnConnServer.Enabled = true;
}
catch (Exception err)
{
MessageBox.Show("枚舉本地OPC伺服器出錯:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
4. 連接OPC伺服器
try
{
KepServer.Connect(remoteServerName, remoteServerIP);
if (KepServer.ServerState == (int)OPCServerState.OPCRunning)
{
tsslServerState.Text = "已連接到-" + KepServer.ServerName + " ";
}
else
{
//這里你可以根據返回的狀態來自定義顯示信息,請查看自動化介面API文檔
tsslServerState.Text = "狀態:" + KepServer.ServerState.ToString() + " ";
}
}
catch (Exception err)
{
MessageBox.Show("連接遠程伺服器出現錯誤:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
5. 創建組和列出OPC伺服器中所有節點
//創建組
try
{
KepGroups = KepServer.OPCGroups;
KepGroup = KepGroups.Add("OPCDOTNETGROUP");
SetGroupProperty();
KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
KepGroup.AsyncWriteComplete += new DIOPCGroupEvent_(KepGroup_AsyncWriteComplete);
KepItems = KepGroup.OPCItems;
}
catch (Exception err)
{
MessageBox.Show("創建組出現錯誤:"+err.Message,"提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return false;
}
//列出OPC伺服器中所有節點
//展開分支
oPCBrowser.ShowBranches();
//展開葉子
oPCBrowser.ShowLeafs(true);
foreach (object turn in oPCBrowser)
{
listBox1.Items.Add(turn.ToString());
}
Ⅶ 如何開發OPC Server
可以找一些廠商提供的開發包,但是介面限制死了。 需要授權
自己開發,難度太大,可以搜下LightOPC的源碼
Ⅷ opc協議源代碼用什麼語言開發
opc是一個協議 與你所用的語言無關 OPC 是以 OLE/COM 機製作為應用程序的通訊標准。 OLE/COM 是一種客 戶 / 伺服器模式,具有語言無關性、代碼重用性、易於集成性等優點。 OPC 規范 了介面函數, 不管現場設備以何種形式存在
Ⅸ OPC是通信協議嗎
OPC(OLE for Process Control, 用於過程式控制制的OLE)是一個工業標准,管理這個標准國際組織是OPC基金會,OPC基金會現有會員已超過220家。遍布全球,包括世界上所有主要的自動化控制系統、儀器儀表及過程式控制制系統的公司。
基於微軟的OLE(現在的Active X)、COM (部件對象模型)和DCOM (分布式部件對象模型)技術。OPC包括一整套介面、屬性和方法的標准集,用於過程式控制制和製造業自動化系統。
OPC全稱是OLE for Process Control,它的出現為基於Windows的應用程序和現場過程式控制制應用建立了橋梁。在過去,為了存取現場設備的數據信息,每一個應用軟體開發商都需要編寫專用的介面函數。由於現場設備的種類繁多,且產品的不斷升級,往往給用戶和軟體開發商帶來了巨大的工作負擔。通常這樣也不能滿足工作的實際需要,系統集成商和開發商急切需要一種具有高效性、可靠性、開放性、可互操作性的即插即用的設備驅動程序。在這種情況下,OPC標准應運而生。OPC標准以微軟公司的OLE技術為基礎,它的制定是通過提供一套標準的OLE/COM介面完成的,在OPC技術中使用的是OLE 2技術,OLE標准允許多台微機之間交換文檔、圖形等對象。
COM是Component Object Model的縮寫,是所有OLE機制的基礎。COM是一種為了實現與編程語言無關的對象而制定的標准,該標准將Windows下的對象定義為獨立單元,可不受程序限制地訪問這些單元。這種標准可以使兩個應用程序通過對象化介面通訊,而不需要知道對方是如何創建的。例如,用戶可以使用C++語言創建一個Windows對象,它支持一個介面,通過該介面,用戶可以訪問該對象提供的各種功能,用戶可以使用Visual Basic,C,Pascal,Smalltalk或其它語言編寫對象訪問程序。在Windows NT4.0操作系統下,COM規范擴展到可訪問本機以外的其它對象,一個應用程序所使用的對象可分布在網路上,COM的這個擴展被稱為DCOM(Distributed COM)。
通過DCOM技術和OPC標准,完全可以創建一個開放的、可互操作的控制系統軟體。OPC採用客戶/伺服器模式,把開發訪問介面的任務放在硬體生產廠家或第三方廠家,以OPC伺服器的形式提供給用戶,解決了軟、硬體廠商的矛盾,完成了系統的集成,提高了系統的開放性和可互操作性。
OPC伺服器通常支持兩種類型的訪問介面,它們分別為不同的編程語言環境提供訪問機制。這兩種介面是:自動化介面(Automation interface);自定義介面(Custom interface)。自動化介面通常是為基於腳本編程語言而定義的標准介面,可以使用VisualBasic、Delphi、PowerBuilder等編程語言開發OPC伺服器的客戶應用。而自定義介面是專門為C++等高級編程語言而制定的標准介面。OPC現已成為工業界系統互聯的預設方案,為工業監控編程帶來了便利,用戶不用為通訊協議的難題而苦惱。任何一家自動化軟體解決方案的提供者,如果它不能全方位地支持OPC,則必將被歷史所淘汰。
Ⅹ opc是什麼意思
OPC是OLE for Process Control的縮寫,即應用於過程式控制制的OLE。
OLE原意是對象連接和嵌入,隨著OLE2的發行,其范圍已遠遠超出了這個概念。現在的OLE包含了許多新的特徵,如統一數據傳輸、結構化存儲和自動化,已經成為獨立於計算機語言、操作系統甚至硬體平台的一種規范。
OPC建立於OLE規范之上,它為工業控制領域提供了一種標準的數據訪問機制。工業控制領域用到大量的現場設備,在OPC出現以前,軟體開發商需要開發大量的驅動程序來連接這些設備。
(10)開發opc擴展閱讀:
OPC以OLE/COM機製作為應用程序的通信標准,而OLE/COM是一種客戶端/伺服器模式,具有語言無關性、代碼重用性、易於集成性等優點。
OPC伺服器中的代碼確定了伺服器所存取的設備和數據、數據項的命名規則和伺服器存取數據的細節,不管現場設備以何種形式存在,客戶都以統一的方式去訪問,從而保證軟體對客戶的透明性,使得用戶完全從低層的開發中脫離出來。
客戶應用程序僅須使用標准介面和伺服器通信,而並不需要知道底層的實現細節。