艾默生Ovation DCS OPC服务分析
? ? ?艾默生的OPC DA服務器,使用的ProdId為“Ovation.OPCDAServer.1”,GUID值是{A3ABA03B-6CF7-4b13-A264-FD5AA251CC76}。
? ? ? OPC DA服務器版本方面,有支持OPC3.0的,也有支持OPC2.0的,影響的主要的OPC3.0支持直接讀取變量值。
? ? ? 在OPC的瀏覽層次方面,采用域(節點?工作站?)、單元、站、變量、變量屬性5層結果,第5層為變量的屬性值,不同類型的屬性值有所差別,幾十到上百不等。
? ? ? 比如我們定義了一個Pascal001的變量,最終包含的全部OPC點和對應的點類型如下:
Pascal001.DROP1/51.UNIT1@NET1.1T,Integer Pascal001.DROP1/51.UNIT1@NET1.1V,Number Pascal001.DROP1/51.UNIT1@NET1.1W,Integer Pascal001.DROP1/51.UNIT1@NET1.2V,Number Pascal001.DROP1/51.UNIT1@NET1.2W,Integer Pascal001.DROP1/51.UNIT1@NET1.3D,Integer Pascal001.DROP1/51.UNIT1@NET1.3L,Integer Pascal001.DROP1/51.UNIT1@NET1.3M,Integer Pascal001.DROP1/51.UNIT1@NET1.3S,Integer Pascal001.DROP1/51.UNIT1@NET1.3V,Number Pascal001.DROP1/51.UNIT1@NET1.3W,Integer Pascal001.DROP1/51.UNIT1@NET1.3Y,Number Pascal001.DROP1/51.UNIT1@NET1.3Z,Number Pascal001.DROP1/51.UNIT1@NET1.4V,Number Pascal001.DROP1/51.UNIT1@NET1.4Y,Number Pascal001.DROP1/51.UNIT1@NET1.4Z,Number Pascal001.DROP1/51.UNIT1@NET1.5V,Number Pascal001.DROP1/51.UNIT1@NET1.6V,Number Pascal001.DROP1/51.UNIT1@NET1.7V,Number Pascal001.DROP1/51.UNIT1@NET1.8V,Number Pascal001.DROP1/51.UNIT1@NET1.AD,String Pascal001.DROP1/51.UNIT1@NET1.AP,,Integer Pascal001.DROP1/51.UNIT1@NET1.AS,Integer Pascal001.DROP1/51.UNIT1@NET1.AT,String Pascal001.DROP1/51.UNIT1@NET1.AV,Number Pascal001.DROP1/51.UNIT1@NET1.AW,Integer Pascal001.DROP1/51.UNIT1@NET1.AY,,Integer Pascal001.DROP1/51.UNIT1@NET1.AZ,Integer Pascal001.DROP1/51.UNIT1@NET1.BB,Integer Pascal001.DROP1/51.UNIT1@NET1.BH,Number Pascal001.DROP1/51.UNIT1@NET1.BL,Number Pascal001.DROP1/51.UNIT1@NET1.BV,Number Pascal001.DROP1/51.UNIT1@NET1.BW,Number Pascal001.DROP1/51.UNIT1@NET1.CE,Integer Pascal001.DROP1/51.UNIT1@NET1.CM,,Integer Pascal001.DROP1/51.UNIT1@NET1.CV,,Integer Pascal001.DROP1/51.UNIT1@NET1.CX,Integer Pascal001.DROP1/51.UNIT1@NET1.CY,Integer Pascal001.DROP1/51.UNIT1@NET1.DB,Number Pascal001.DROP1/51.UNIT1@NET1.DG,Integer Pascal001.DROP1/51.UNIT1@NET1.DJ,Number Pascal001.DROP1/51.UNIT1@NET1.DO,Integer Pascal001.DROP1/51.UNIT1@NET1.ED,String Pascal001.DROP1/51.UNIT1@NET1.EH,Number Pascal001.DROP1/51.UNIT1@NET1.EL,Number Pascal001.DROP1/51.UNIT1@NET1.EU,String Pascal001.DROP1/51.UNIT1@NET1.EV,Number Pascal001.DROP1/51.UNIT1@NET1.FD,,Integer Pascal001.DROP1/51.UNIT1@NET1.FL,Integer Pascal001.DROP1/51.UNIT1@NET1.FM,,Integer Pascal001.DROP1/51.UNIT1@NET1.FV,Number Pascal001.DROP1/51.UNIT1@NET1.FY,Integer Pascal001.DROP1/51.UNIT1@NET1.GS,Integer Pascal001.DROP1/51.UNIT1@NET1.HD,Integer Pascal001.DROP1/51.UNIT1@NET1.HL,Number Pascal001.DROP1/51.UNIT1@NET1.HR,Number Pascal001.DROP1/51.UNIT1@NET1.HS,Number Pascal001.DROP1/51.UNIT1@NET1.ID,Integer Pascal001.DROP1/51.UNIT1@NET1.IP,Integer Pascal001.DROP1/51.UNIT1@NET1.IQ,Integer Pascal001.DROP1/51.UNIT1@NET1.IT,Integer Pascal001.DROP1/51.UNIT1@NET1.IV,Number Pascal001.DROP1/51.UNIT1@NET1.KC,,Integer Pascal001.DROP1/51.UNIT1@NET1.KR,String Pascal001.DROP1/51.UNIT1@NET1.LB,Integer Pascal001.DROP1/51.UNIT1@NET1.LJ,String Pascal001.DROP1/51.UNIT1@NET1.LL,Number Pascal001.DROP1/51.UNIT1@NET1.LM,Integer Pascal001.DROP1/51.UNIT1@NET1.LR,Number Pascal001.DROP1/51.UNIT1@NET1.LS,Number Pascal001.DROP1/51.UNIT1@NET1.MP,Integer Pascal001.DROP1/51.UNIT1@NET1.MQ,,Integer Pascal001.DROP1/51.UNIT1@NET1.MR,Integer Pascal001.DROP1/51.UNIT1@NET1.OR,,Integer Pascal001.DROP1/51.UNIT1@NET1.P6,,Integer Pascal001.DROP1/51.UNIT1@NET1.P7,,Integer Pascal001.DROP1/51.UNIT1@NET1.P8,,Integer Pascal001.DROP1/51.UNIT1@NET1.P9,,Integer Pascal001.DROP1/51.UNIT1@NET1.PA,String Pascal001.DROP1/51.UNIT1@NET1.PF,String Pascal001.DROP1/51.UNIT1@NET1.PN,String Pascal001.DROP1/51.UNIT1@NET1.PZ,,Integer Pascal001.DROP1/51.UNIT1@NET1.RP,Integer Pascal001.DROP1/51.UNIT1@NET1.RT,,Integer Pascal001.DROP1/51.UNIT1@NET1.RV,Number Pascal001.DROP1/51.UNIT1@NET1.RW,Number Pascal001.DROP1/51.UNIT1@NET1.SD,Integer Pascal001.DROP1/51.UNIT1@NET1.SF,String Pascal001.DROP1/51.UNIT1@NET1.SJ,Integer Pascal001.DROP1/51.UNIT1@NET1.SK,Integer Pascal001.DROP1/51.UNIT1@NET1.SN,Number Pascal001.DROP1/51.UNIT1@NET1.SP,Integer Pascal001.DROP1/51.UNIT1@NET1.SR,,Integer Pascal001.DROP1/51.UNIT1@NET1.TB,Integer Pascal001.DROP1/51.UNIT1@NET1.TT,String Pascal001.DROP1/51.UNIT1@NET1.TV,Number Pascal001.DROP1/51.UNIT1@NET1.TW,Number Pascal001.DROP1/51.UNIT1@NET1.U4,Integer Pascal001.DROP1/51.UNIT1@NET1.U5,Integer Pascal001.DROP1/51.UNIT1@NET1.U6,Integer Pascal001.DROP1/51.UNIT1@NET1.U7,Integer Pascal001.DROP1/51.UNIT1@NET1.UH,Number Pascal001.DROP1/51.UNIT1@NET1.UL,Number Pascal001.DROP1/51.UNIT1@NET1.VH,Number Pascal001.DROP1/51.UNIT1@NET1.VL,Number Pascal001.DROP1/51.UNIT1@NET1.VN,Integer Pascal001.DROP1/51.UNIT1@NET1.YB,Number Pascal001.DROP1/51.UNIT1@NET1.YS,Number Pascal001.DROP1/51.UNIT1@NET1.ZH,Number Pascal001.DROP1/51.UNIT1@NET1.ZI,Number Pascal001.DROP1/51.UNIT1@NET1.ZL,Number Pascal001.DROP1/51.UNIT1@NET1.ZM,Number Pascal001.DROP1/51.UNIT1@NET1.ZY,Integer? 點的層級和瀏覽的節點層級剛好相反。?
? 重點需要關注點的屬性有.ED、.1W、.AV,ED是點的描述,1W的整數值,AV的模擬量的值。艾默生的數據點1W還有一個特殊寫法,后面可以加":0",表示取整數的第0位的值,這時變量實際上已經是開關量了。
? ?OPC對應點的名稱沒有過多的約束,艾默生的點名稱充分體現了這一點,點中可以包括很多特殊符號,如:“-”、“/”、“#”、">"、"<"、"("、")"等,路徑中還有"@"符號。
? ?點的OPC Item Properties方面,有常規的數據類型、數據值、數據質量和時戳等,也有OPC擴展的數據描述(Item Description,對應ID 101)等。
?
? ? ?在采集數據時,可以考慮從DCS直接導出數據點的定義文件,這個方法比較簡單和直接。
? ? ?如果采用枚舉方法,只能采用BRANCH方式,不支持FLAT方式。需要考慮他的特殊的結構帶來的龐大的點名稱。在艾默生中定義10萬個點,瀏覽出來的數據點數量可能達到千萬級別。
總結
以上是生活随笔為你收集整理的艾默生Ovation DCS OPC服务分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nod32/ESET下載及更新
- 下一篇: 前端码农2021上半年的辛酸血泪史与自赎