使用.net(c#)對(duì)PDMS進(jìn)行開發(fā)


@版權(quán)聲明:本文為版權(quán)歸作者所有吞滞,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明盾沫,且在文章頁(yè)面明顯位置給出,
本文鏈接http://www.reibang.com/p/9f2b3868ad5a
如有問題裁赠, 可郵件(yumxuanyi@qq.com)咨詢。


關(guān)鍵字:PDMS赴精、PML佩捞、.NET

pdms中目前還是支持用.NET進(jìn)行開發(fā)的,但是提供的功能并不完善蕾哟,還有很多限制一忱。但是就是這樣也阻止不了大家使用.net的熱情。本文將就在.net對(duì)PDMS開發(fā)中的流程及問題做一個(gè)簡(jiǎn)要的介紹谭确。

1. 限制

  1. 只有那些被標(biāo)記為PMLNETCallable并且遵守一定規(guī)則的.NET類才能被pml調(diào)用帘营。(關(guān)于調(diào)用規(guī)則將在后文介紹)
  2. Module switching does not persist .NET object。Core PML objects defined in FORTRAN or C++are not persisted either逐哈。
  3. 不支持將PML 系統(tǒng)或用戶自定義對(duì)象傳遞給.net芬迄。例如pml中的DIRECTION,ORIENTATION,...都是不能轉(zhuǎn)成.net對(duì)象的。但是昂秃,將數(shù)據(jù)庫(kù)引用傳遞給.NET是可能的(可以作為數(shù)組或者String)禀梳。也可以將一個(gè)pml .net Proxy的實(shí)例傳遞給.net.
  4. 直接從.NET中訪問PML對(duì)象是不允許的。要從.net中訪問pml的唯一的方式是通過事件
  5. 不支持‘partial’關(guān)鍵字肠骆。and expect them to be concatenated.

2. 調(diào)用.NET的規(guī)則

當(dāng)定義PML可以訪問的.NET 類時(shí)算途,必須遵守一定的規(guī)則。這些規(guī)則是PMLNetEngine強(qiáng)制要求的哗戈。這些規(guī)則如下:

  1. 一個(gè)PML可調(diào)用的程序集必須被標(biāo)記為PMLNETCallable郊艘。而且該程序集必須位于%PDMSEXE%目錄或者子目錄或者UNC path路徑下。
  2. 只有部分類型是PML可以調(diào)用的唯咬。(不包括結(jié)構(gòu)纱注、接口、枚舉等) 胆胰。
  3. Class必須被標(biāo)記為PMLNETCallable狞贱。
  4. 能被PML訪問的方法必須標(biāo)記為PMLNETCallable
  5. 要被PML調(diào)用的方法的參數(shù)類型必須是pml支持的類型蜀涨。
  6. 要被PML調(diào)用的類和方法必須是public瞎嬉。
  7. 要被PML調(diào)用的方法中不允許存在默認(rèn)參數(shù)蝎毡。
  8. 要被PML調(diào)用的類和方法的名字不區(qū)分大小寫
  9. 要被PML調(diào)用的類中必須有一個(gè)Assign()方法氧枣。
  10. 類中必須存在默認(rèn)的公共的構(gòu)造函數(shù)沐兵,而且被標(biāo)記為PMLNETCallable
    要是你不遵守這些規(guī)則便监。在加載程序集的時(shí)候就會(huì)出現(xiàn)錯(cuò)誤而且pml類也不能正確創(chuàng)建扎谎。

3. 方法的參數(shù)規(guī)則

pml .net
Real double
String string
boolean bool
ARRAY Hashtable
OBJECT PMLNetCallable Class

例如創(chuàng)建自定義類

  1. 添加引用
    添加的程序集為: PMLNET.dll
  2. 引用命名空間
    using Aveva.PDMS.PMLNET;
  3. 創(chuàng)建自定義類
[assembly::PMLNETCallable()]      
namespace AvevaPdmsExamples //程序集必須標(biāo)記為PMLNETCallable
{
    [PMLNETCallable()]                   //類必須標(biāo)記為PMLNETCallable
    public class PMLNetExample:UserControl  //類必須為public 
   {  
         [PMLNETCallable()]
        public event PMLNetDelegate.PMLNetEventHandler  PMLNETExampleEvent;//定義事件

         ///觸發(fā)事件的代碼
         ///何時(shí)觸發(fā):界面中雙擊按鈕時(shí)觸發(fā)
         ///觸發(fā)的目的:可以在pml中注冊(cè)該事件當(dāng)事件觸發(fā)是將參數(shù)傳遞到pml中
         [PMLNETCallable()]
        public void RaiseExampleEvent()
        {
             if(PMLNETExampleEvent != null)
             {
                   ArrayList args = new ArrayList();//用于存儲(chǔ)需要傳遞的參數(shù)
                   args.Add(object value1);
                   ...//添加pml支持的數(shù)據(jù)類型即可
                   args.Add(object valuen);
                   PMLNETExampleEvent(args);
             }
        }


        //按鈕點(diǎn)擊時(shí)觸發(fā)事件
        private void btnShowType_Click(object sender,EventArgs e)
       {
              RaiseExampleEvent();//觸發(fā)事件
       }
   

        [PMLNETCallable()]
        public PMLNetExample() //必須有一個(gè)公共的構(gòu)造函數(shù)并標(biāo)記為PMLNETCallable
       {

        }
      
        [PMLNETCallable()]
        public void Assign(PMLNetExample that)//必須有一個(gè)Assign方法并標(biāo)記為PMLNETCallable
        {

        }


        ///PML中能訪問的方法 必須為public 標(biāo)記為PMLNETCallable
        [PMLNETCallable()]
       public void PmlCanCallMethod()
       {
             MessageBox.Show("PML Can Called Method");
       }


         ///PML中不能訪問的方法 要么不是public 
        ///要么未標(biāo)記為PMLNETCallable
        public void PmlCanNotCallMethod()
       {
             MessageBox.Show("PML Can not Called Method");
       }
   }
}

通過以上步驟,一個(gè)pml可訪問的類就創(chuàng)建成功了。

編譯生成程序集。

這里程序集名稱為AvevaPdmsExamples.dll

放置程序集

將AvevaPdmsExamples.dll放置在PDMS安裝目錄下

pml中使用該程序集

 import 'AvevaPdmsExamples'
 handle any
   --如果已加載就忽略
 endhandle

--創(chuàng)建一個(gè)pml窗體
setup form !!myPmlForm size 108 18
  using namespace 'AvevaPdmsExamples'
 
 container .mainUI PMLNetControl  ‘標(biāo)題名’ width 103 height 20 $*--PML中一個(gè)usercontrol的容器
  member .myClass is PMLNetExample  $*-- 定義一個(gè)PMLNetExample的成員變量
exit

define method .myPmlForm()
    using namespace 'AvevaPdmsExamples'
    !this.myClass = object PMLNetExample()
  
    !handle = !this.myClass.addEventHandler('PMLNETExampleEvent',!this,'myCallBackMethod')

    !ui = !this.myClass.handle();
    !this.mainui.control = !ui; //使用pml中的容器來加載我們的.net中的界面
endmethod

//事件的調(diào)用者中的事件處理方法
//事件處理方法
//array 為前面?zhèn)鬟f過來的參數(shù)
define method .myCallBackMethod(!array is array)
    !ladderNumber = !array[0]
   --下面就根據(jù)array的值進(jìn)行建模了
endmethod

另外礼华,可以將.net中的UserControl嵌套在pml的 Container中,所以在.net中不必繼承于form直接繼承于UserControl就好了界牡。見以上代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拐叉,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胶背,死亡現(xiàn)場(chǎng)離奇詭異巷嚣,居然都是意外死亡喘先,警方通過查閱死者的電腦和手機(jī)钳吟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窘拯,“玉大人红且,你說我怎么就攤上這事〉渔ⅲ” “怎么了暇番?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)思喊。 經(jīng)常有香客問我壁酬,道長(zhǎng),這世上最難降的妖魔是什么恨课? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任舆乔,我火速辦了婚禮,結(jié)果婚禮上剂公,老公的妹妹穿的比我還像新娘希俩。我一直安慰自己,他們只是感情好纲辽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布颜武。 她就那樣靜靜地躺著璃搜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鳞上。 梳的紋絲不亂的頭發(fā)上这吻,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音篙议,去河邊找鬼橘原。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涡上,可吹牛的內(nèi)容都是我干的趾断。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼吩愧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼芋酌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雁佳,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脐帝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糖权,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堵腹,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年星澳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疚顷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡禁偎,死狀恐怖腿堤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情如暖,我是刑警寧澤笆檀,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站盒至,受9級(jí)特大地震影響酗洒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枷遂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一樱衷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧登淘,春花似錦箫老、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阔籽。三九已至,卻和暖如春牲蜀,著一層夾襖步出監(jiān)牢的瞬間笆制,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工涣达, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留在辆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓度苔,卻偏偏與公主長(zhǎng)得像匆篓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寇窑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • [TOC] 內(nèi)存管理 一鸦概、托管堆基礎(chǔ) 在面向?qū)ο笾校總€(gè)類型代表一種可使用的資源甩骏,要使用該資源窗市,必須為代表資源的類...
    _秦同學(xué)_閱讀 3,790評(píng)論 0 3
  • alert(a); function name(parameters) { alert(parameters); ...
    name阿喆azhe閱讀 1,023評(píng)論 0 3
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,784評(píng)論 0 27
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,092評(píng)論 1 32
  • 別人在競(jìng)選職位時(shí)羅列出的各種證書饮笛、獎(jiǎng)狀咨察。她們會(huì)謙虛得說“隨便看看就好,這都過去了福青∩阌” 可是,只有他們自己知道當(dāng)...
    Sherry161閱讀 184評(píng)論 0 1