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

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

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

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

准备工作

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

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


image

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

image

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

编码

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

image

注意control manager 的修改

image

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 数据类型进行了接口的定义,请详细阅读代码

使用浏览器测试

image


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

我们换一个datapoint data02再来试一下

image

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

后记

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

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

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


码上关注 更多精彩

posted @ 2020-05-25 18:29  莱立佰  阅读(2065)  评论(0编辑  收藏  举报