艾默生的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万个点,浏览出来的数据点数量可能达到千万级别。