导入Wpf控件
新建Wincc画面,右键点击控件>WPF控件,选择添加/删除...在打开的选择.NET对象窗口中,点击添加按钮。选择我们生成的wincc.dll文件。
四、测试
我们在wincc中创建一个字符串型的内部变量输入。在新建的画面中创建三个控件:
- Wincc自带的输入\输出域
- 刚生成的自定义的控件wincc
- 微软创建的TextBox控件
image.png
4.1 为什么要创建Wincc原有的输入输出域呢?
一是为了测试改变了Wincc中的变量,我们自定义的控件是否会跟着变化。二是为了测试当我们自定义的控件改变了绑定的内部变量输入时,Wincc中的内部变量值输入是否会变化。
4.2 为什么要创建微软自带的TextBox控件呢?
由于在测试的时候,当自定义控件输入框里的值变化时,Wincc的内部变量没有改变,怀疑是否是自定义的控件有疏漏,因此创建了一个微软定义的TextBox作为验证。发现也是不会变化。
4.3 控件的属性
我们自定义的控件属性微软的TextBox属性Wincc自带的输入输出域控件属性OK,开始测试。
时长00:24
测试的结果是:当我们使用输入输出域来改变输入变量的值时,WPF控件都会立即更新。但是我们使用WPF的自定义的控件的输入框来改变输入变量的值时,Wincc中的输入变量值并没有改变。
为什么这样呢?我们可以猜测是自定义的控件属性中连接的变量只是读取了Wincc中变量的数据,并没有把自定义控件改变后的值通知给Wincc程序去刷新变量的值。在网上查了下资料。发现国外的官方论坛上https://support.industry.siemens.com/tf/ww/en/posts/change-tag-from-wpf-control/80200/?page=0&pageSize=10有类似的问题,但是没有给出有效的解决办法。
五、如何让自定义控件改变Wincc中的值?
我们可以通过事件触发来通知Wincc中的变量数据刷新。配置如下所示:测试视频:
5.1 局限性
这种触发变量更新的方式局限性很大:
1.是组态麻烦,相当于一个变量我要连接至少两次,一次读取,一次回调触发刷新。
2.是如果有很多属性需要刷新的话就不好弄了。