国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

<i id="ikktk"><dfn id="ikktk"><table id="ikktk"></table></dfn></i>
    <ins id="ikktk"><ul id="ikktk"><thead id="ikktk"></thead></ul></ins><dl id="ikktk"><s id="ikktk"></s></dl><button id="ikktk"><form id="ikktk"><strike id="ikktk"></strike></form></button>
    <small id="ikktk"><sub id="ikktk"><tfoot id="ikktk"></tfoot></sub></small><dl id="ikktk"><s id="ikktk"></s></dl><dl id="ikktk"><strike id="ikktk"><big id="ikktk"></big></strike></dl>
    <i id="ikktk"></i><big id="ikktk"><xmp id="ikktk">
    <i id="ikktk"><optgroup id="ikktk"><li id="ikktk"></li></optgroup></i>
    0
    • 聊天消息
    • 系統(tǒng)消息
    • 評(píng)論與回復(fù)
    登錄后你可以
    • 下載海量資料
    • 學(xué)習(xí)在線課程
    • 觀看技術(shù)視頻
    • 寫文章/發(fā)帖/加入社區(qū)
    會(huì)員中心
    創(chuàng)作中心

    完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

    3天內(nèi)不再提示

    以C#編寫并使用NET-Framework的OPC自定義接口

    機(jī)器人及PLC自動(dòng)化應(yīng)用 ? 來源:機(jī)器人及PLC自動(dòng)化應(yīng)用 ? 作者:機(jī)器人及PLC自動(dòng)化 ? 2022-04-11 10:09 ? 次閱讀
    加入交流群
    微信小助手二維碼

    掃碼添加小助手

    加入工程師交流群

    使用示例程序

    該程序包括多個(gè)元素,操作員可使用這些元素觸發(fā)以下動(dòng)作:

    以C#編寫并使用NET-Framework的OPC自定義接口

    啟動(dòng)程序時(shí),僅啟用“啟動(dòng)示例” (Start Sample) 按鈕。單擊此按鈕后,程序?qū)⑸伤璧?OPC 對(duì)象。隨即會(huì)啟用其它按鈕。

    以C#編寫并使用NET-Framework的OPC自定義接口

    單擊“ 啟動(dòng)示例” (Start Sample) 按鈕后,以 C# 編寫并使用 .NET- Framework 的 OPC 自定義接口(異步通信)的示例程序的啟動(dòng)對(duì)話框 .

    程序說明:

    1 選擇 .NET 組件

    2 將 ProgID 轉(zhuǎn)換為 CLSID

    3 建立與 OPC 服務(wù)器的連接

    4 創(chuàng)建 OPC 組

    5 添加數(shù)據(jù)項(xiàng)

    6 請(qǐng)求 IConnectionPointContainer 接口

    7 請(qǐng)求 IOPCAsyncIO2 接口

    8 創(chuàng)建回調(diào)對(duì)象

    9 連接 OPC 服務(wù)器與客戶端的回調(diào)對(duì)象

    10 執(zhí)行所需的寫入和讀取操作

    11 接收 OPC 服務(wù)器的通知

    12 刪除對(duì)象并釋放內(nèi)存

    步驟 1:選擇 .NET 組件

    要配合使用 OPC 數(shù)據(jù)訪問的自定義接口和 .NET,必須在您的 Visual Basic 項(xiàng)目中使用上述運(yùn)行時(shí)可調(diào)用包裝 (RCW) 。在該示例項(xiàng)目中,OpcRcw.Da 和 OpcRcw.Comn 組件已添完畢。

    如果它們未出現(xiàn)在選項(xiàng)中,也可使用“瀏覽” (Browse) 按鈕從下列文件夾中進(jìn)行選擇:“ <安裝路徑> SIEMENS SIMATIC.NET opc2in”

    步驟 2:將 ProgID 轉(zhuǎn)換為 CLSID

    為了對(duì)其進(jìn)行標(biāo)識(shí),每個(gè) COM 服務(wù)器都有一個(gè) ProgID 且該 ProgID 分配給世界上唯一的類型。使用 GetTypeFromProgID() 函數(shù)可實(shí)現(xiàn)上述操作。SIMATIC NET 的 OPC 服務(wù)器的 ProgID 是 L"OPC.SimaticNET":

    Type svrComponenttyp = Type.Get TypeFromProgID(L"OPC.SimaticNET");

    步驟 3:建立與 OPC 服務(wù)器的連接

    Activator 類的 CreateInstance() 函數(shù)生成一個(gè)具有之前指定類型的類的實(shí)例:

    pIOPCServer =

    (IOPCServer)Activato r.CreateInstance(svrComponenttyp

    );

    該程序段的結(jié)果是 IOPCServer 類型的接口變量 pIOPCServer。

    步驟 4:創(chuàng)建 OPC 組

    IOPCServer 接口具有用于創(chuàng)建組的 AddGroup() 方法:

    pIOPCServer.AddGroup(GROUP_NAME,

    0,

    dwRequestedUpdateRate,

    hClientGroup,

    hTimeBias..AddrOfPinnedObject(),

    hDeadban d.AddrOfPinnedObject(),

    dwLCID,

    out pSvrGroupHandle,

    out pRevUpdateRate,

    ref out pobjGroup1)

    注意

    hDeadband 和 hTimeBias 的內(nèi)存分配由 GCHandle.Alloc() 函數(shù)完成。

    GCHandle hTimeBias;

    hTimeBias = GCHandle.Alloc(tim ebias,GCHandleType.Pinned);

    GCHandle hDeadband;

    hDeadband = GCHandle.Alloc(deadband,GCHandleType.Pinned);

    這些函數(shù)處理傳送變量時(shí)間偏倚和死區(qū)(百分比死區(qū))的非管理型內(nèi)存。

    當(dāng)不再需要管理句柄時(shí),必須按如下所示再次將其釋放:

    if (hTimeBias.IsAllocated) hTimeBias. Free();

    if (hDeadband.IsAllocated) hDeadband.Free();

    該程序段的結(jié)果是一個(gè)具有指定名稱和所需屬性的組。AddGroup() 還返回 pobjGroup1變量作為返回參數(shù),即組對(duì)象的接口。

    使用類型調(diào)整調(diào)用 IOPCGroupStateMgt ,可以只從返回的組接口 pobjGroup1 獲取該接口。該調(diào)用的簡(jiǎn)化形式對(duì)應(yīng)于 COM 方法 Queryinterface()。

    稍后需使用 IOPCGroupStateMgt 接口的 S etState() 方法激活和禁用組。

    pIOPCGroupStateMgt = (IOPCGroupStateMgt)pob jGroup1;

    步驟 5:添加數(shù)據(jù)項(xiàng)

    IOPCItemMgt 接口具有用于創(chuàng)建 OPC 數(shù)據(jù)項(xiàng)的 AddItems() 方法:

    ((IOPCItemMgt)pobjGroup1).AddItems(2,ItemDeffArray,out

    pResults,out pErrors);

    該程序段的結(jié)果是服務(wù)器添加兩個(gè)具有 itemd efs 參數(shù)中所指定屬性的數(shù)據(jù)項(xiàng)。此外,還會(huì)對(duì)結(jié)果結(jié)構(gòu) OPCITEMRESULT 的變量(服務(wù)器句柄、目標(biāo)系統(tǒng)上數(shù)據(jù)項(xiàng)的數(shù)據(jù)類型等)進(jìn)行初始化。

    由于結(jié)果通過基礎(chǔ) COM 接口寫入至非管理型內(nèi)存,因此來自管理型 .NET 代碼的訪問必須利用封送函數(shù):

    OPCITEMRESULT result = (OPCITEMRESULT)Marshal.PtrToStructure(pos,

    typeof(OPCITEMRESULT));

    Ite mSvrHandleArray[0] = result.hServer;

    pos = new IntPtr(pos.ToInt32() +

    Marshal.SizeOf(typeof(OPCITEMRESULT)));

    OPCITEMRESULT result = (OPCITEMRESULT)Marshal.PtrToStructure

    (pos,typ eof(OPCITEMRESULT));

    ItemSvrHandleArray[1] = result.hServer;

    步驟 6:請(qǐng)求 IConnectionPointContainer 接口

    IConnectionPointContainer 類型的 pIConnectionPointContainer 變量可源自 m_group_1 變量。

    pIConnectionPointContai ner =

    (IConnectionPointContainer)pobjGroup1;

    定位 IConnectionPoint 接口需要使用該接口。

    步驟 7:請(qǐng)求 IOPCAsyncIO2 接口

    pIOPCAsyncIO2 類型的 pIOPCAsyncIO2 變量可源自 pobjGroup1 變量。

    pIOPCAsyncIO2 = (IOPCAsyncIO2)pobjGroup1;

    該接口提供用于異步讀取和寫入值的方法。

    步驟 8:創(chuàng)建回調(diào)對(duì)象

    為了允許 OPC 服務(wù)器返回異步操作的值,必須在客戶端上執(zhí)行 I OPCDataCallback 接口。

    public class OPCAsync :System.Windows.Forms.Form ,

    IOPCDataCallback

    使用 IConnectionPointContainer 接口的 FindConnectionPoint() 方法建立 OPC 服務(wù)器的 IConnectionPoint 和 IOPCDataCallback 接口間的連接。該連接將為異步調(diào)用生成一個(gè)回調(diào)對(duì)象。

    Guid iid = typeof(IO PCDataCallback).GUID;

    pIConnectionPointContainer.FindConnectionPoint(ref iid,

    out

    pIConnectionPoint);

    步驟 9:連接 OPC 服務(wù)器與客戶端的回調(diào)對(duì)象

    OPC 服務(wù)器的回調(diào)對(duì)象與客戶端應(yīng)用程序間的連接通過 Advise() 方法來建立。返回變量 dwCookie 是該連接的 ID 。

    pIConnectionPoint.Advise(this,out dwCookie);

    步驟 10:執(zhí)行所需的寫入或讀取操作

    在步驟 7 中生成的 Read() 和 Write() 方法可通過 IOPCAsyncIO2 接口來訪問:

    pIOPCAsyncIO2.Read(1,ItemSvrHandleArray,nTransactionID+1,

    out nCancelid,out pErrors);

    步驟 11:接收 OPC 服務(wù)器的通知

    如果激活組中激活數(shù)據(jù)項(xiàng)的數(shù)據(jù)發(fā)生更改,服務(wù)器將調(diào)用回調(diào)對(duì)象的 OnDataC hange 方法。讀取操作完成后,服務(wù)器調(diào)用 OnReadComplete() 方法;寫入操作完成后,服務(wù)器調(diào)用 OnWriteComplete() 方法。服務(wù)器將返回值以參數(shù)的形式傳遞至方法。

    virtual void OnDataChange(

    Int32 dwTransid,

    Int32 hGroup,

    Int32 hrMasterquality,

    Int32 hrMastererror,

    Int32 dwCount,

    int[] phClientItems,

    object[] pvValues,

    short[] pwQualities,

    FILETIME[] pftTimeStamps,

    int[] pErrors,

    )

    步驟 12:刪除對(duì)象并釋放內(nèi)存

    退出程序前或單擊“ 停止”(Stop) 后,必須刪除已生成的 OPC 對(duì)象并釋放所占用的內(nèi)存。

    pIConnectionPoint.Unadvise(dwCookie);

    Marshal.ReleaseComObject(pIConnectionPoint);

    Mar shal.ReleaseComObject (pIConnectionPointContainer);

    Marshal.ReleaseComObject(pIOPCAsyncIO2);

    Marshal.ReleaseComObject(pIOPCGroupStateMgt);

    Marshal.ReleaseComObject(pobjGroup1);

    Marshal.ReleaseComObject(pIOPCServer);

    釋放內(nèi)存

    使用 COM 時(shí),客戶端有時(shí)需要釋放服務(wù)器所請(qǐng)求的內(nèi)存。相關(guān)規(guī)則如下:

    ? [out]:將從服務(wù)器請(qǐng)求具有該屬性的參數(shù)的內(nèi)存。

    ? [in,out] :將從客戶端請(qǐng)求此類參數(shù)的內(nèi)存。服務(wù)器可以再次釋放內(nèi)存并對(duì)其進(jìn)行重新分配。

    ? [in] :客戶端將請(qǐng)求內(nèi)存。服務(wù)器不負(fù)責(zé)釋放內(nèi)存。

    原文標(biāo)題:以 C# 編寫的 OPC 自定義接口(異步通信)

    文章出處:【微信公眾號(hào):機(jī)器人PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

    審核編輯:湯梓紅
    聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
    • 接口
      +關(guān)注

      關(guān)注

      33

      文章

      9520

      瀏覽量

      157036
    • OPC
      OPC
      +關(guān)注

      關(guān)注

      7

      文章

      372

      瀏覽量

      49072

    原文標(biāo)題:以 C# 編寫的 OPC 自定義接口(異步通信)

    文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

    收藏 人收藏
    加入交流群
    微信小助手二維碼

    掃碼添加小助手

    加入工程師交流群

      評(píng)論

      相關(guān)推薦
      熱點(diǎn)推薦

      《Visual C# 2005開發(fā)技術(shù)》C#與.NET Framework簡(jiǎn)介.pdf

      《Visual C# 2005開發(fā)技術(shù)》C#與.NET Framework簡(jiǎn)介.pdf[hide][/hide]
      發(fā)表于 06-24 19:50

      如何創(chuàng)建自定義狀態(tài)回調(diào)函數(shù)呢

      狀態(tài)回調(diào)函數(shù)依賴于SDK的framework框架,且已經(jīng)為用戶預(yù)留了自定義回調(diào)函數(shù)的框架,audio,bt,fs,net的狀態(tài)回調(diào)框架都是完全公開的,參照編寫即可。如何創(chuàng)建
      發(fā)表于 12-29 06:06

      基于Microsoft .NET FrameworkOPC

      介紹了OPC (OLE for Process Control) Data Access 規(guī)范基本內(nèi)容Microsoft .NetFramework 特點(diǎn)。基于Microsoft .Net Framework 2.0 介紹了托管
      發(fā)表于 05-25 13:57 ?22次下載

      NET中激活基于COM的OPC數(shù)據(jù)存取定制接口

      研究C#接口屬性類后,編寫了一個(gè)COM 編排文件,將基于COM 的OPC 數(shù)據(jù)存取定制接口映射到.NET
      發(fā)表于 06-18 11:18 ?24次下載

      研究C#程序與基于COM的OPC數(shù)據(jù)存取服務(wù)器交換數(shù)據(jù)

      研究了OPC NET COM 自動(dòng)化包裝器所封裝的COM 編排技術(shù)和OPC NET 應(yīng)用程序接口內(nèi)的設(shè)計(jì)模式。在其基礎(chǔ)上使用
      發(fā)表于 09-02 17:17 ?16次下載

      OPC接口技術(shù)

        •概述   •OPC基本原理   •OPC自定義接口
      發(fā)表于 10-22 16:44 ?25次下載

      DOS下自定義時(shí)間重啟

      DOS環(huán)境下,C語言編寫自定義時(shí)間重啟。
      發(fā)表于 03-16 09:40 ?6次下載

      C#教程之自定義窗體的最大化、最小化和關(guān)閉按鈕

      C#教程之自定義窗體的最大化、最小化和關(guān)閉按鈕,很好的C#資料,快來學(xué)習(xí)吧。
      發(fā)表于 04-20 09:59 ?4次下載

      C#教程之自定義屏保

      C#教程之自定義屏保,很好的C#資料,快來學(xué)習(xí)吧。
      發(fā)表于 04-20 09:59 ?7次下載

      C#教程之自定義水晶按鈕控件

      C#教程之自定義水晶按鈕控件,很好的C#資料,快來學(xué)習(xí)吧。
      發(fā)表于 04-20 10:50 ?6次下載

      C#教程之自定義動(dòng)畫鼠標(biāo)

      C#教程之自定義動(dòng)畫鼠標(biāo),很好的C#資料,快來學(xué)習(xí)吧。
      發(fā)表于 04-20 14:46 ?4次下載

      《Visual C# 2005開發(fā)技術(shù)》C#與.NET Fram

      《Visual C# 2005開發(fā)技術(shù)》C#與.NET Framework簡(jiǎn)介
      發(fā)表于 02-07 15:11 ?0次下載

      AVR編寫1602自定義字符

      AVR編寫自定義字符不錯(cuò)的練習(xí)題目
      發(fā)表于 03-20 14:21 ?1次下載

      C#自定義開關(guān)按鈕控件(WINFORM)

      C#自定義開關(guān)按鈕控件(WINFORM)轉(zhuǎn)載于:https://www.cnblogs.com/macT/p/10212711.html
      發(fā)表于 10-21 18:36 ?18次下載
      <b class='flag-5'>C#</b><b class='flag-5'>自定義</b>開關(guān)按鈕控件(WINFORM)

      C#與STM32自定義通信協(xié)議

      C#與STM32自定義通信協(xié)議功能:1.可通過C#上位機(jī)對(duì)多臺(tái)STM32下位機(jī)進(jìn)行控制2.自定義上位機(jī)與下位機(jī)通信協(xié)議
      發(fā)表于 12-24 18:59 ?40次下載
      <b class='flag-5'>C#</b>與STM32<b class='flag-5'>自定義</b>通信協(xié)議