青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

AVEVA PMLNet Guide

Posted on 2014-12-25 22:33 eryar 閱讀(4772) 評論(2)  編輯 收藏 引用 所屬分類: 4.AVEVA Solution

AVEVA PMLNet Guide

eryar@163.com

Abstract. AVEVA PMLNet allows you to instantitate and invoke methods on .NET objects from PML proxy objects. The PML proxy objects behave just like any other PML object. The paper gives a hello world example to demenstrate the PMLNet usage.

Key Words. AVEVA, PMLNet, PML, AVEVA .Net, C#, Managed C++

1. Introduction

AVEVA PMLNet允許在PML代理對象中實例化或調用.Net對象的方法。代理PML對象的定義通過.NET類運行時創(chuàng)建出來,其與.Net類有類似的方法;代理PML類方法的參數只能是指定的幾種,這幾種類型的參數與.Net類型對應。代理PML對象的用法及功能表現與其他PML對象相同。

可被PML調用的組件(即動態(tài)庫dll)通過命令IMPORT加載到AVEVA PDMS/Marine中來。組件可由任意.Net語言來定義,例如:Managed C++(托管C++)、C#或VB .NET等。PMLNet通過反射(reflection)來加載指定的組件。PMLNet引擎(Engine)只會加載包含有自定義屬性標記PMLNetCallable的組件中的類和方法。為了在.Net類中定義代理PML類必須滿足一定的條件(rules)。

綜上所述,在滿足PMLNet一定條件下創(chuàng)建的.Net組件中的類是可以被PML使用的,即可以在PML代碼中調用.Net組件中的資源。通過這種方式,可以獲得以下幾點優(yōu)勢:

v 在簡單易學的PML中使用.Net庫中的海量資源,如Excel的讀寫庫等;

v 程序關鍵部分用.Net實現,代碼的保密性相對PML而言要好很多;

v 由于PMLNet引擎支持.Net的組件,即C++、VB.Net寫的庫都可以被PML調用;

本文主要通過一個簡單例子來說明PML代理類的定義方法,掌握后可以擴展到在PML中使用托管C++,代碼保密性更好且速度更快。這樣就可以在PML中應用更廣泛的資源,來提高程序的開發(fā)效率。

由于本人水平所限,文中的錯誤不妥之處在所難免,敬請不吝指教,將不勝感激。歡迎討論交流,共同進步。

2.Design Details

下圖所示為如何在PDMS/Marine中使用PMLNet實現自定義。有一些.NET API可以用來訪問當前數據庫任務,顯示列表drawlist,幾何geometry和其他功能。用戶可以通過C#的API來訪問PDMS/Marine,但是直接在C#中調用PML是不可能的(It is not possible to directly to call PML from C#)。然而AVEVA提供了一個事件機制來允許PML去訂閱(subscrible)C#發(fā)出的事件(events),如下圖虛線所示。

wps_clip_image-23162

Figure 2.1 Using PMLNet

使用PMLNet有如下限制:

v 只有標記了PMLNetCallable且滿足一定條件的.Net類才能被PML調用;

v 模塊切換并不保留.NET對象,核心的C++或FORTRAN對象在模塊切換時也不會被保留;

v PML調用.NET方法時只能傳入指定類型的變量,其他類型不支持,如DIRECTION, ORIENTATION等;

v 在.NET中調用PML是不允許的,唯一的辦法就是通過.NET的事件來調用PML;

v It is not possible to enter ‘partial’ namespaces as you might in C# and expect them to be concatenated;

并不是所有的PML對象都可以傳遞到所調用的.NET方法中去,只有下表的PML類型的變量可以傳遞到調用.NET對象的方法中去:

wps_clip_image-5893

Figure 2.2 Only PML variables types maybe passed to methods of .NET class

3.Using PMLNet

AVEVA提供了一個簡單的PMLNet例子,程序名為PMLNetExample,將這個例子的代碼例出如下所示:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Collections;

using Aveva.PDMS.PMLNet;

namespace Aveva.Pdms.Examples
{
    [PMLNetCallable()]
    
public class PMLNetExample
    {
        [PMLNetCallable()]
        
public event PMLNetDelegate.PMLNetEventHandler PMLNetExampleEvent;

        [PMLNetCallable()]
        
public PMLNetExample()
        {
        }

        [PMLNetCallable()]
        
public void Assign(PMLNetExample that)
        {
            
//No state
        }

        [PMLNetCallable()]
        
public void RaiseExampleEvent()
        {
            ArrayList args 
= new ArrayList();
            args.Add(
"ExampleEvent");
            
if (PMLNetExampleEvent != null)
                PMLNetExampleEvent(args);
        }

        
        [PMLNetCallable()]
        
public void Method()
        {
            MessageBox.Show(
"Called Method");
        }
    }
}

如上述代碼所示,需要暴露給PML的方法或屬性都要標記上PMLNetCallable。將上述代碼編譯后生成一個組件放到PDMS/Marine的安裝目錄下,就可以寫一個PML小程序來測試效果了。

在CommandWindow中輸入如下圖所示的命令:

wps_clip_image-24546

Figure 3.1 Using PML proxy object in PML

在PML中使用代理PML對象主要分為以下步驟:

v 使用IMPORT命令導入組件;

import 'PMLNetExample'

其中PMLNetExample是生成的dll組件名;

v 引入命名空間;

using namespace 'Aveva.Pdms.Examples'

命名空間的名稱與C#中命名空間對應;

v 實例化類對象;

!= object PMLNetExample()

實例化類對象的方式與其他PML對象一樣。

v 調用對象方法;

!a.method()

調用對象的方法也和PML對象一樣,得到結果如下圖所示:

wps_clip_image-3837

Figure 3.2 Test PML proxy object method

4.Rules for Calling .NET

想要在PML中調用.NET類對象,就必須遵守一定的規(guī)則。這些規(guī)則如下:

v 可被PML調用的.NET組件必須由PMLNetCallable標記且位于%PDMSEXE%目錄中;

v .NET組件中只有類可以被PML使用,結構體、接口及枚舉除外;

v .NET組件中需要被PML調用的類必須由PMLNetCallable標記;

v .NET組件中需要被PML調用的方法必須由PMLNetCallable標記;

v .NET組件中需要被PML調用的方法的參數類型必須為指定的幾種類型;

wps_clip_image-5383

Figure 4.1 Only PML variables types maybe passed to methods of .NET class

v .NET組件中需要被PML調用的類和方法必須是公有的;

v .NET組件中需要被PML調用的方法不支持默認參數的定義;

v .NET組件中需要被PML調用的類和方法名稱是區(qū)分大小寫的;

v .NET組件中需要被PML調用的類中必須要有Assign()方法;

v .NET組件中需要被PML調用的類必須有一個由PMLNetCallable標記的公有的默認構造函數;

如果沒有遵守上述條件之一,當加載相應的組件時就會報出錯誤,錯誤信息如下所示:

(46,87) PML: Object definition for XXX could not be found.

5.Conclusion

綜上所述,在PML中調用.NET組件中的類還是很方便的,只要滿足PML代理類定義的一些規(guī)則就可以了。

由于.NET組件中的類是由.NET語言實現的,所以托管C++、C#及VB.NET編寫的組件都可以包裝成代理PML類,進而被PML調用。這種方式就更加擴大了PML可使用的資源,如C++的庫都可以在PML中使用,且代碼更保密,不易查看源碼。

在PML中調用.NET組件中類是可行的,但直接在C#中調用PML卻是不可行的。AVEVA也提供了在C#中調用PML的方式:即通過事件訂閱,詳細請參考文檔。

6. References

1. AVEVA .NET Customisation User Guide

2. Example of PML Callable: PMLNetExample

3. AVEVA Software Customisation Guide

4. AVEVA Software Customisation Reference Manual

5. AVEVA Data Access Routines User Guide

 

PDF Version: AVEVA PMLNet Guide

Feedback

# re: AVEVA PMLNet Guide  回復  更多評論   

2015-12-28 11:50 by lh
請問在VB.NET中,如何標記“PMLNetCallable”?謝謝

# re: AVEVA PMLNet Guide  回復  更多評論   

2015-12-28 19:43 by eryar
@lh
Hi 你好!

PMLNetCallable只針對C#的,VB沒用過,不清楚。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩国产不卡| 卡通动漫国产精品| 亚洲一区二区高清| 欧美韩日一区二区| 亚洲综合首页| 欧美日韩中文另类| 亚洲欧洲日本在线| 先锋影院在线亚洲| 美女主播精品视频一二三四| 一本久道久久综合狠狠爱| 噜噜噜91成人网| 国产一区二区激情| 午夜精品视频在线观看| 亚洲乱亚洲高清| 欧美成人午夜影院| 有坂深雪在线一区| 欧美gay视频激情| 午夜欧美大尺度福利影院在线看| 欧美四级在线观看| 亚洲免费视频网站| 中文亚洲字幕| 国产精品丝袜白浆摸在线| 欧美一级二级三级蜜桃| 亚洲视频在线观看免费| 国产精品www| 亚洲欧美春色| 亚洲一区二区三区四区中文| 国产精品国产三级国产aⅴ入口| 亚洲一区日韩| 亚洲一区二区黄| 国产精品一区二区三区观看| 香蕉久久一区二区不卡无毒影院| 亚洲在线视频观看| 欧美成人午夜77777| 夜夜嗨网站十八久久| 一本久久精品一区二区| 国产精品夫妻自拍| 久久国产综合精品| 久久国内精品自在自线400部| 韩日午夜在线资源一区二区| 欧美大片91| 国产精品hd| 久久久久久久综合狠狠综合| 亚洲欧美一区在线| 亚洲黄色成人| 亚洲精品视频免费观看| 久久国产夜色精品鲁鲁99| 亚洲免费视频中文字幕| 国产自产v一区二区三区c| 欧美高清在线视频观看不卡| 欧美福利专区| 午夜精品一区二区三区四区| 欧美一级二区| 99re热这里只有精品视频 | 亚洲永久精品大片| 国产日韩在线看片| 亚洲国产毛片完整版| 欧美韩日一区二区三区| 久久精品30| 欧美精品在线免费| 久久躁狠狠躁夜夜爽| 欧美日韩mv| 欧美成人午夜免费视在线看片| 欧美三级精品| 欧美激情中文不卡| 国产亚洲毛片| 亚洲视频二区| 日韩写真视频在线观看| 欧美专区在线观看| 午夜在线成人av| 欧美日韩综合另类| 亚洲国产成人精品女人久久久 | 久久九九热re6这里有精品| 99综合视频| 久久在线视频在线| 久久精品国产精品亚洲综合| 欧美三级乱码| 99在线视频精品| 99精品国产99久久久久久福利| 久久国产精品一区二区三区四区| 日韩视频精品| 久久久噜噜噜久久狠狠50岁| 性色av一区二区三区在线观看| 欧美日韩理论| 日韩天堂在线视频| 日韩一区二区电影网| 女仆av观看一区| 久热精品在线视频| 狠狠色狠狠色综合日日五| 亚洲欧美日韩一区二区三区在线观看| 亚洲美女性视频| 美女视频黄免费的久久| 女人香蕉久久**毛片精品| 精品91在线| 亚洲一区欧美一区| 亚洲欧洲精品一区| 美女视频黄 久久| 欧美成人免费在线视频| 老鸭窝91久久精品色噜噜导演| 国产一区二区三区在线观看免费 | 国产专区综合网| 久久精品九九| 国产综合久久久久久| 美女视频黄 久久| 欧美成人蜜桃| 一本一本久久| 国产精品久久久久久久久| 99天天综合性| 欧美激情精品久久久久久蜜臀| 免费成年人欧美视频| 美女视频网站黄色亚洲| 久久久久.com| 欧美在线在线| 欧美视频久久| 欧美亚洲一级片| 亚洲欧美日韩一区在线观看| 国产精品sm| 亚洲午夜激情网页| 久久久久久久激情视频| 国产一区二区| 欧美成人免费在线视频| 欧美激情91| 亚洲欧美韩国| 国产欧美大片| 美玉足脚交一区二区三区图片| 蜜臀av国产精品久久久久| 99精品免费网| 欧美日韩在线视频一区二区| 欧美一区二区三区四区视频| 亚洲国产精品久久久久婷婷老年 | 美女图片一区二区| 一区二区三区精品在线| 欧美日韩综合另类| 久久久久免费视频| 欧美国产亚洲精品久久久8v| 亚洲尤物在线视频观看| 国产精品热久久久久夜色精品三区 | 免费亚洲一区| 亚洲欧洲在线看| 欧美一区二区三区另类| 性欧美大战久久久久久久免费观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲免费在线视频| 亚洲精品一区二区三区在线观看| 欧美大片免费久久精品三p| 亚洲欧美日韩视频一区| 麻豆国产精品一区二区三区 | 亚洲尤物视频在线| 国产欧美一区二区视频| 欧美日本在线观看| 99爱精品视频| 免费日韩视频| 日韩性生活视频| 亚洲国产精品久久久久久女王| 欧美一区二区三区在| 亚洲国产精品123| 久久精品伊人| 一区二区激情小说| 亚洲国内自拍| 国产日韩欧美不卡在线| 亚洲国产综合在线| 亚洲一区二区成人| 99国产精品久久久久久久久久| 国产精品久久久久aaaa九色| 欧美大片一区二区| 欧美一区成人| 欧美亚洲免费在线| 日韩网站在线看片你懂的| 欧美激情日韩| 久久久精品动漫| 久久激情久久| 在线观看视频一区二区欧美日韩 | 国产精品久久久久av免费| 久久综合99re88久久爱| 久久久久久婷| 亚洲第一久久影院| 精品999网站| 亚洲精选中文字幕| 欧美午夜女人视频在线| 欧美日韩午夜激情| 美女精品视频一区| 欧美粗暴jizz性欧美20| 久久久久久69| 美国三级日本三级久久99| 香蕉乱码成人久久天堂爱免费| 亚洲女与黑人做爰| 在线亚洲欧美| 午夜精品久久久久99热蜜桃导演| 久久综合久久综合这里只有精品 | 久久亚洲色图| 小处雏高清一区二区三区| 亚洲在线一区二区| 一本色道久久综合狠狠躁篇怎么玩 | 欧美综合国产精品久久丁香| 欧美激情一区二区三区蜜桃视频 | 久久精品一区二区三区不卡| 久久精品夜夜夜夜久久| 久久成人av少妇免费| 久久综合色88| 亚洲自拍偷拍福利|