跳到主要内容

欢迎使用OPCHDA协议

简介

OPCHDA是一个历史数据访问协议。

Windows环境搭建

这里将OPCHDA分为三个角色,服务端,客户端(Windows代理)和算盘端。服务端运行着OPCHDA的服务器,客户端运行着OPCHDA的算盘代理,算盘端运行着OPCHDA的组件代码。其中客户端和服务端的连接因为Windows DCOM的权限问题,需要特殊的设置才能生效。
+--------------+           +--------------------+      +---------------------+
|              |           |                    |      |                     |
|              |           |                    |      |                     |
|  OPCHDA 服务器| DCOM 连接 |   OPCHDA 客户端     |      |      算 盘           |
|              +<----------+   Windows代理      +<-----+                     |
|              |           |                    |      |                     |
|              |           |                    |      |                     |
|              |           |                    |      |                     |
+--------------+           +--------------------+      +---------------------+
在环境搭建之前需要确保:
•          OPCHDA服务器和OPCHDA客户端在一个局域网内,可以互相ping通
•          OPCHDA服务器和OPCHDA客户端需要都关闭防火墙
•          OPCHDA服务器和OPCHDA客户端主机的账号密码需要相同。

OPCHDA服务端环境搭建

服务端需要进行DCOM的权限的设置,这里完成了了一个桌面客户端的软件。用户在使用此设置软件之前,需要预先安装OPCHDA服务器。 点此下载此服务端设置软件,然后打开OPCDA_server_setting.exe: 首先点击刷新,然后选择需要设置的服务器,最后点击应用设置即可。

OPCHDA客户端环境搭建

客户端除了设置DCOM的权限,还提供了OPCHDA的代理。这里提供了一个安装包点此下载,用户点击此安装包然后一直点击下一步即可安装,安装的时候会设置好DCOM的权限。用户安装完成之后桌面上会提供一个OPCHDA客户端的链接,用户打开此程序即可完成环境的搭建。

OPCHDA小工具下载使用

请点击链接下载此小工具,OPCHDA小工具,此工具运行在windows电脑上,此工具在辅助得到OPCHDA的服务器名称,服务器上面的变量都是有帮助的。

用户界面使用

添加通道

这里插件指的是OPCHDA的windows代理。添加通道的时候需要填入插件的连接方式,目前支持客户端的方式,插件的IP地址可以在windows电脑上输入ipconfig命令查看。插件的端口默认是13000,不用去修改。

添加设备

添加设备的时候需要填入OPC服务器的地址和名称。如果OPCHDA服务器和OPCHDA windows代理在同一台设备上面,那么填写localhost即可。然后需要得到OPCHDA的服务器名称。通过OPCHDA小工具来获取此名称。

添加点位

点位的数据项地址可以使用OPCHDA小工具来查看,数据项的类型可以根据实际情况查看或者填写默认。 数据项名称指的是服务器上面的点位名称。
开始时间和结束时间指的是需要采集OPC-HDA数据的开始时间和结束时间,精确到秒,需要按照格式填写。需要注意的是,如果读取的时间返回太大会造成数据量过大。
数据汇总方法的含义是是否需要进行OPCHDA的数据运算,默认是不运算,也就是按照原始数据读取。运算的方法的实际值的对应关系:
ANNOTATIONS = 24,
WORSTQUALITY = 23,
PERCENTBAD = 22,
PERCENTGOOD = 21,
DURATIONBAD = 20,
DURATIONGOOD = 19,
RANGE = 18,
VARIANCE = 17,
REGDEV = 16,
REGCONST = 15,
REGSLOPE = 14,
DELTA = 13,
END = 12,
START = 11,
MAXIMUM = 10,
MAXIMUMACTUALTIME = 9,
MINIMUM = 8,
MINIMUMACTUALTIME = 7,
STDEV = 6,
COUNT = 5,
TIMEAVERAGE = 4,
AVERAGE = 3,
TOTAL = 2,
INTERPOLATIVE = 1,
NOAGGREGATE = 0(原始数据读取) 原始数据的读取数量,指的是按照原始数据读取时,需要读取的数据量。
数据汇总采集间隔,指的是按照数据汇总的方式读取(非原始数据读取),设置数据的汇总采集间隔。

点位表编辑

点位表导出之后,编辑导出的点位表再进行导入。编辑的时候,需要填写下述打勾的字段。

名称是否填写含义
appid数据项唯一的id
name数据项名称
desc数据项描述
freq数据项更新频率(毫秒为单位)
value× 
updatetime× 
quality× 
compute_func值运算函数,有n,+,-,*,/
compute_para值运算参数
readonly是否只读,只读写1,否则写0
report是否上报数据,上报写1,否则写0
report_change是否变化才上报的数据,数据变化才上报写1,否则写0
value_old× 
address地址,根据OPCHDA小工具来确定
time_start数据表起始时间
time_end数据表结束时间
aggregate数据汇总方法
num数据汇总方法为原始数据读取时,读取的数量
aggregate_interval数据汇总不是原始数据读取时,采用的采样间隔

组件输入输出格式

当作为算盘的组件使用时,输入输出格式如下。可以在转发字段定义这个功能来修改字段名或者去掉不要的字段。

组件输出

{
  "type":"report",
  "device_name":"device_sX2JS51FFL",
  "driver":"opchda",
  "channel":"channel_KTfa7GzMsL",
  "timestamp":"2020-11-25 08:29:49",
  "values":[
    {
      "id":"2",
      "name":"",
      "desc":"",
      "freq":"1000",
      "compute":"no;",
      "value":"[\n  {\n    \"time\":\"2020\\/11\\/24 15:05:01\",\n    \"value\":\"\",\n    \"quality\":\"bad\"\n  },\n  {\n    \"time\":\"2020\\/11\\/24 15:05:11\",\n    \"value\":\"\",\n    \"quality\":\"bad\"\n  },\n  {\n    \"time\":\"2020\\/11\\/24 15:05:21\",\n    \"value\":\"\",\n    \"quality\":\"bad\"\n  },\n  {\n    \"time\":\"2020\\/11\\/24 15:05:31\",\n    \"value\":\"\",\n    \"quality\":\"bad\"\n  },\n  {\n    \"time\":\"2020\\/11\\/24 15:05:41\",\n    \"value\":\"\",\n    \"quality\":\"bad\"\n  },\n  {\n    \"time\":\"2020\\/11\\/24 15:05:51\",\n    \"value\":\"\",\n    \"quality\":\"bad\"\n  }\n]",
      "quality":"Good",
      "address":"Random.Int4",
      "time_start":"2020\/11\/24 15:05:01",
      "time_end":"2020\/11\/24 15:06:01",
      "aggregate":"8",
      "num":"",
      "aggregate_interval":"10"
    },
    {
      "id":"1",
      "name":"sdd",
      "desc":"",
      "freq":"1000",
      "compute":"no;",
      "value":"[\n]",
      "quality":"Good",
      "address":"Random.Money",
      "time_start":"2020\/11\/25 15:05:01",
      "time_end":"2020\/11\/25 15:07:01",
      "aggregate":"0",
      "num":"3",
      "aggregate_interval":"10"
    }
  ]
}
因为采集的是时序数据,所以这里的value输出就是一个json。

组件输入

请查看入门这一节