AVEVA PMLNet Guide

Similar documents
OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

无类继承.key

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

untitled

untitled

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

Microsoft Word - 物件導向編程精要.doc

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

用户手册.cdr

untitled

Shanghai International Studies University THE STUDY AND PRACTICE OF SITUATIONAL LANGUAGE TEACHING OF ADVERB AT BEGINNING AND INTERMEDIATE LEVEL A Thes

EJB-Programming-4-cn.doc

2005硕士论文模版

Microsoft PowerPoint - ch6 [相容模式]

软件工程文档编制

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Microsoft Word - ch04三校.doc

Chapter 9: Objects and Classes

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

, 即 使 是 在 昏 暗 的 灯 光 下, 她 仍 然 可 以 那 么 耀 眼 我 没 有 地 方 去, 你 会 带 着 我 么 杜 晗 像 是 在 嘲 笑 一 般, 嘴 角 的 一 抹 冷 笑 有 着 不 适 合 这 个 年 龄 的 冷 酷 和 无 情, 看 着 江 华 的 眼 神 毫 无 温

目次 

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

2013年度西藏自治区教育厅

薛 秦 高 继 宁 宋 明 锁 文 洪 梁 瑞 敏 贾 跃 进 内 蒙 古 自 治 区 (3 人 ) 琪 格 其 图 米 子 良 赵 震 生 辽 宁 省 (8 人 ) 田 素 琴 白 凤 鸣 肖 瑞 崇 黄 恩 申 白 长 川 杨 世 勇 李 敬 林 王 秀 云 吉 林 省 (5 人 ) 赵 继 福

2005 3,? :; ;, ;,,,,,,1 % %,,,,, 1 %,,,, : () ;, ;,,,,,,,,,,,,, (2004) ( GBΠT ) 16 (2004), (2004) 47

第 2 篇 经 文 : 创 27:1-29 这 段 经 文 呈 现 给 读 者 三 幕 剧 场 景 第 一 幕 (1-4 节 ): 预 备 祝 福 父 亲 以 撒 年 纪 老 迈, 不 知 道 哪 一 天 会 死 (1 节 ), 想 要 趁 着 活 着 的 时 候, 预 备 给 长 子 以 扫 祝

医学科研方法


政治哲學要跨出去!

Microsoft PowerPoint - Model Checking a Lazy Concurrent List-Based Set Algorithm.ppt [Compatibility Mode]

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

[ 13 年 12 月 06 日, 下 午 6 点 24 分 ] Intel Hosts 新 加 入 的 同 学 们, 快 去 听 听 在 线 宣 讲 会 哦, 同 时 完 成 页 面 下 方 有 奖 调 查, 就 有 资 格 参 与 大 奖 抽 取 啦! [ 13 年 12 月 06 日, 下 午

Logitech Wireless Combo MK45 English

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

绘制OpenCascade中的曲线

条 件 的 限 制, 可 在 广 西 参 加 普 通 高 考, 特 指 不 受 学 籍 户 籍 迁 入 的 年 限 限 制, 但 在 高 考 报 名 时 考 生 的 学 籍 户 籍 必 须 已 迁 入 广 西 二 外 来 人 员 需 要 提 供 的 审 查 材 料 ( 一 ) 按 照 自 治 区 招

ebook

Landscape Theory & Study 17

致 謝 在 研 究 所 這 段 期 間 受 到 了 許 多 人 的 幫 助, 才 有 今 日 我 創 作 及 論 文 的 樣 貌 首 先 我 要 謝 謝 我 的 爸 媽, 知 道 我 自 小 就 喜 歡 塗 塗 畫 畫, 高 中 開 始 為 了 準 備 考 美 術 系 而 每 日 下 課 後 往 畫

Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f

untitled

epub83-1

Microsoft Word - CX VMCO 3 easy step v1.doc

Guava学习之Resources

标题

<4D F736F F D20B3C2B9FAD5D7C2DBCEC4C5C5B0E62E646F63>

第 29 卷第 9 期 Vol. 29 NO. 9 重庆工商大学学报 ( 自然科学版 ) J Chongqing Technol Business Univ. Nat Sci Ed Sept X * ABAQUS 1 2

标题

AL-M200 Series

PowerPoint Presentation

(procedure-oriented)?? 2

目 录


ebook140-9

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

4

UDC Empirical Researches on Pricing of Corporate Bonds with Macro Factors 厦门大学博硕士论文摘要库

UDC The Policy Risk and Prevention in Chinese Securities Market

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

案例正文:(幼圆、小三、加粗)(全文段前与段后0

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

1 下列类头定义中, 正确的是 面向对象程序设计网络课程 A class x { } B public x extends y { } C public class x extends y {.} D class x extends y implements y1 { } 2 现有两个类 A B,

OOAD PowerDesigner OOAD Applying PowerDesigner CASE Tool in OOAD PowerDesigner CASE Tool PowerDesigner PowerDesigner CASE To

Ps22Pdf



Transcription:

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, Managed C++ 1. Introduction AVEVA PMLNet 允许在 PML 代理对象中实例化或调用.Net 对象的方法 代理 PML 对象的定义通过.NET 类运行时创建出来, 其与.Net 类有类似的方法 ; 代理 PML 类方法的参数只能是指定的几种, 这几种类型的参数与.Net 类型对应 代理 PML 对象的用法及功能表现与其他 PML 对象相同 可被 PML 调用的组件 ( 即动态库 dll) 通过命令 IMPORT 加载到 AVEVA PDMS/Marine 中来 组件可由任意.Net 语言来定义, 例如 :Managed C++( 托管 C++) C# 或 VB.NET 等 PMLNet 通过反射 (reflection) 来加载指定的组件 PMLNet 引擎 (Engine) 只会加载包含有自定义属性标记 PMLNetCallable 的组件中的类和方法 为了在.Net 类中定义代理 PML 类必须满足一定的条件 (rules) 综上所述, 在满足 PMLNet 一定条件下创建的.Net 组件中的类是可以被 PML 使用的, 即可以在 PML 代码中调用.Net 组件中的资源 通过这种方式, 可以获得以下几点优势 : 在简单易学的 PML 中使用.Net 库中的海量资源, 如 Excel 的读写库等 ; 程序关键部分用.Net 实现, 代码的保密性相对 PML 而言要好很多 ; 由于 PMLNet 引擎支持.Net 的组件, 即 C++ VB.Net 写的库都可以被 PML 调用 ; 本文主要通过一个简单例子来说明 PML 代理类的定义方法, 掌握后可以扩展到在 PML 中使用托管 C++, 代码保密性更好且速度更快 这样就可以在 PML 中应用更广泛的资源, 来提高程序的开发效率 由于本人水平所限, 文中的错误不妥之处在所难免, 敬请不吝指教, 将不胜感激 欢迎讨论交流, 共同进步

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# 发出的事件 (events), 如下图虚线所示 Figure 2.1 Using PMLNet 使用 PMLNet 有如下限制 : 只有标记了 PMLNetCallable 且满足一定条件的.Net 类才能被 PML 调用 ; 模块切换并不保留.NET 对象, 核心的 C++ 或 FORTRAN 对象在模块切换时也不会被保留 ; PML 调用.NET 方法时只能传入指定类型的变量, 其他类型不支持, 如 DIRECTION, ORIENTATION 等 ; 在.NET 中调用 PML 是不允许的, 唯一的办法就是通过.NET 的事件来调用 PML; It is not possible to enter partial namespaces as you might in C# and expect them to be concatenated; 并不是所有的 PML 对象都可以传递到所调用的.NET 方法中去, 只有下表的 PML 类型 的变量可以传递到调用.NET 对象的方法中去 : 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 public class PMLNetExample public event PMLNetDelegate.PMLNetEventHandler PMLNetExampleEvent; public PMLNetExample() public void Assign(PMLNetExample that) //No state public void RaiseExampleEvent() ArrayList args = new ArrayList(); args.add("exampleevent"); if (PMLNetExampleEvent!= null) PMLNetExampleEvent(args); public void Method() MessageBox.Show("Called Method");

如上述代码所示, 需要暴露给 PML 的方法或属性都要标记上 PMLNetCallable 将上述代码编译后生成一个组件放到 PDMS/Marine 的安装目录下, 就可以写一个 PML 小程序来测试效果了 在 CommandWindow 中输入如下图所示的命令 : Figure 3.1 Using PML proxy object in PML 在 PML 中使用代理 PML 对象主要分为以下步骤 : 使用 IMPORT 命令导入组件 ; import 'PMLNetExample' 其中 PMLNetExample 是生成的 dll 组件名 ; 引入命名空间 ; using namespace 'Aveva.Pdms.Examples' 命名空间的名称与 C# 中命名空间对应 ; 实例化类对象 ;!a = object PMLNetExample() 实例化类对象的方式与其他 PML 对象一样 调用对象方法 ;!a.method() 调用对象的方法也和 PML 对象一样, 得到结果如下图所示 : Figure 3.2 Test PML proxy object method

4. Rules for Calling.NET 想要在 PML 中调用.NET 类对象, 就必须遵守一定的规则 这些规则如下 : 可被 PML 调用的.NET 组件必须由 PMLNetCallable 标记且位于 %PDMSEXE% 目录中 ;.NET 组件中只有类可以被 PML 使用, 结构体 接口及枚举除外 ;.NET 组件中需要被 PML 调用的类必须由 PMLNetCallable 标记 ;.NET 组件中需要被 PML 调用的方法必须由 PMLNetCallable 标记 ;.NET 组件中需要被 PML 调用的方法的参数类型必须为指定的几种类型 ; Figure 4.1 Only PML variables types maybe passed to methods of.net class.net 组件中需要被 PML 调用的类和方法必须是公有的 ;.NET 组件中需要被 PML 调用的方法不支持默认参数的定义 ;.NET 组件中需要被 PML 调用的类和方法名称是区分大小写的 ;.NET 组件中需要被 PML 调用的类中必须要有 Assign() 方法 ;.NET 组件中需要被 PML 调用的类必须有一个由 PMLNetCallable 标记的公有的默认构造函数 ; 如果没有遵守上述条件之一, 当加载相应的组件时就会报出错误, 错误信息如下所示 : (46,87) PML: Object definition for XXX could not be found.

5. Conclusion 综上所述, 在 PML 中调用.NET 组件中的类还是很方便的, 只要满足 PML 代理类定义的一些规则就可以了 由于.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