WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

有的时候我们需要将OA 中的数据提供给上层业务,当然这种需求WinCC OA给了我们很多方法, 比如使用OPC UA Server ,也可以使用API 二次开发,

今天我们使用 OA内置的HttpServer 对外提供RESTful 风格的查询方式,使用这种方式应该是一般web开发工作人员最为熟悉的方法,

OK,废话不多说 ,接着撸代码

准备工作

1)首先我们新建一个数据类型restful

该数据类型下面有三个节点 其中 press temp 为浮点型,width为整形


WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

2) 创建多个数据点 并赋值

WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

小编在restful数据类型下创建了 data01 data02 data03 三个数据点

编码

1)新建restfulTest文件,并添加至启动列表

WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

注意control manager 的修改

WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

2编码restfunTest.ctl

#uses "CtrlHTTP"
main()
{
  httpServer(FALSE, 12000,0); // 初始化http server 端口12000
  /*注意通配符*的使用*/
  httpConnect("getRestful", "/restful/*"); //定义restful类型的接口 
}
string getRestful(dyn_string names, dyn_string values, string user, string ip, dyn_string headerNames, dyn_string headerValues, int idx)
{

string result;
string tag;
int rc;
dyn_string numbers;
string sURI = httpGetURI(idx);

//!!!!!重要
strreplace(sURI,"/restful/","");//替换"/restful/"为空

/ 拼接为"System1:data01." /
tag
="System1:"+sURI+".";
numbers
= dpNames(tag+"*");
//遍历datapoint 下数据点
for(int i =1;i<=numbers.count();i++)
{
anytype temp;
//获取datapoint 下数据点值
dpGet(numbers[i],temp);
result
+= numbers[i]+" = "+temp+"<br/>";//<br/> 为html的换行符
}

return result;
}

这里我们针对 restful 数据类型进行了接口的定义,请详细阅读代码

使用浏览器测试

WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口


在浏览器中 输入http://localhost:12000/restful/data01 发现在浏览器中已经获得了想要的结果(上图示)

我们换一个数据类型 data02再来试一下

WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

好的,这样针对一个数据类型的简易接口就完成了,你学会了么?

后记

为了方便上层业务的调用 我们可以把取出的结果 拼接为json的格式

{
"data02":{
"press":87.12,
"temp":12.1
"width":45,
}
}

这样就便于跟IT 的小伙伴打交道了,


码上关注 更多精彩

WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

WinCC OA-CTRL-使用CtrlHTTP对外开放数据接口

上一篇:C# DES加密解密


下一篇:delphi CxGrid用法总结(63问)