之前的简单的例子,我们已经简单的使用了dpConnect()/dpGet()函数,
在WinCC OA 中 以dpXxxx开头的函数都与数据点(Datapoint)操作相关的函数
Datapoint 连接了驱动与系统的数据,在WinCC OA中非常重要,对Datapoint的配置可以直接在Para图形界面中逐一配置 也可以使用CTRL脚本对其进行配置
Para模块
Para模块 由数据类型DataPoint Type 数据点 DataPoint 及其配置组成;
Para模块负责整套系统的 数据点创建/配置,将驱动的数据通过para的配置 与系统的功能关联起来.
Para的主要功能用于保存配置信息, 其实其底层实现就是一个嵌入式数据库(Raima),WinCC OA 将大部分配置类信息都保存在Raima数据库中
对Para模块的深入理解
站在软件工程师的视角:
在Para里新建一个数据点类型 可以理解为新建一张表
往特定数据类型里添加一个数据点 可以理解为往这个表里插入一行,但是这个数据点的名字是全局唯一的
西门子赋予Gedi Para新的理解:
将Gedi Para 与面向对象关联起来
新增一个datapoint ,将其传递给UI层的显示界面 相当于实例化了一个的显示对象,这个对象有自己的属性(para),跟行为(GEDI 组态界面显示),这也是面向对象的组态的粗浅理解
接下来我们一起动手操作一番
创建数据类型PumpStation 如图示 (属性节点相当于数据库里的字段)
手动创建新datapoint
手动操作Para界面非常简单 对数据点类型鼠标右键就可以弹出创建菜单
*****重点******
本篇文章带着大家使用脚本实现相应的操作,翻开官方文档,我们可以看到有很多关于dp操作的函数(dpXxxxxx()函数…)
步骤1:
我们新建一个Panel么,实现如下组态
拖拽三个按钮 一个Multiline TextEdit
步骤2:
在Panel 的ScopeLib中定义一个该panel的全局计数变量
步骤3:
对新增dp 按钮的Clicked Event 进行编码
main(mapping event)
{
string dpName = "station"+pumpStationCount;
// 判断数据点是否存在
if(dpExists(dpName)) {
DebugN("datapoint already exists");
}else{
//创建数据点
dpCreate(dpName,"PumpStation");
}
pumpStationCount++;
}
步骤4:
对查找dps 按钮进行编码
main(mapping event)
{
dyn_string dps;
dps = dpNames("station*");
string tempString;
for(int i = 1;i<=dps.count();i++)
{
tempString += dps[i]+'';
}
TEXT_EDIT1.text(tempString);
}
步骤5:
同样对删除按钮进行编码
步骤6:
运行测试
Tips:
当开发一些小型系统的时候dpXxxxx系列的函数使用频率可能不会很高,遇到大型系统,datapoint的点数非常多管理起来就比较麻烦了,尤其是靠人工进行录入管理,特别容易出错,这样使用脚本区实现一个配置页面,把一些容易出错的环节给代码化,会大大增加效率