作者:吴宇航
目录
一、博途V16的常见问题。
1.1异常的通讯设置弹窗。
当我们安装完博途V16后开机桌面可能会出现如下的通讯设置的弹窗。
虽不影响使用但每次都需要去都点击关闭窗口.解决方法如下。
打开状态栏的搜索输入“服务”如图:
点击“打开”出现服务窗口,并找到SCSMonitor如图:
双击打开SCSMonitor界面如图:
将启动类型“自动”更改为“手动”,接着服务状态点击“停止”,最后点击“应用”即可完成如图:
1.2WINCC仿真显示异常。
当我们仿真HMI画面时可能会遇到显示出的文字不全且仿真画面窗口小如图:
要想解决此问题,我们要先在桌面找到WinCC Runtime Advanced 注意不是WinCC Runtime start,如果找不到可以在状态栏搜索如图:
找到后点击“打开”,接着右击WinCC Runtime Advanced点击属性如图:
然后点击“兼容性”点击“更改高DPI设置”打开面板如图:
最后勾选“替代高DPI缩放行为”,“缩放执行”选择“系统”:
点击确定后,退至上一界面点击应用,画面问题即可解决如图:
二、博途V16功能使用
2.1FC块的使用
当我们调用FC块时会看到如图提示:
其意思是FC块没有背景数据块,也就是说FC块中的数据没有存储地,牢记这一点,接下来看FC块可定义变量,如图:
Input变量为可读变量,Output变量为可写变量,InOut变量为可读可写变量,所说的可读可写只是针对于其所链接的外部变量,在不填入管脚的情况下本身都可以读写。
我们以Input举例,如图:
当我们对外部变量置1,Input正常读取,但当我们将程序反过来,就会有如图提示:
这就证明了Input外部定义的变量只可读取不可写入,同理当我们把Output的外部变量,放入上图的#Temp1处,则出现如图提示:
Temp变量只在当前FC块中可用,且其没有存储区,所以对Temp的赋值只在第一次循环中有用。故其不能作为沿。Constant变量则作为对常量的注释。
上述变量了解后我们来了解FC块的具体用途。
因FC块没有背景数据块,且有临时变量的特性我们可以将其看作是我们可以自定义的方程,这个方程里的数据不参与外界程序,当我们需要它时只需在主程序中调用,并给一个数值,我们就可以得出结果,且可以在主程序中多次调用大大减少了写重复程序的时间,增加可读性。
我们举一个例子:一条饮料填装流水线,需要填装大,中,小圆柱体的饮料瓶,给出的直径和高,求出所需的饮料体积。
要求中的数据不同但计算方法一样,这时我们就可以用到FC块。
先创建一个数据块DB,命名为饮料填装数据块,在我们填写数据时会发现其中有多个重复的数据需要分别填写,这时我们可以用到UDT。
UDT用户数据类型,是一种用户可以自定义的数据量类型,其主要便于我们建立数据名称省去多次建立了浪费的时间。
过程如图:找到PLC数据类型,并点击添加新的数据类型。
然后定义我们所需的数据类型。
接着建立一个DB块,在其中建立个名称,数据类型选择Array[]of,更改我们想要的数量,然后选择我们定义的数据类型。
这样我们就完成了UDT的使用,大大减少了我们建立数据的时间。
接着我们建立FC块,先定义变量:
接着编写程序:
最后在主程序中调用:
这样我们就成功调用了FC块,由上述的例子我们可以将FC块定义为:是一个对方法的封装。其内部的程序不被外部所影响,可以被随意调用,且只要输入的数据一样结果一定相同。
应注意的是,调用了含有全局背景的功能块的FC块在被多次调用时无法独自运行。如图:
这是因为这些FC块中的定时器共用一个背景块,只有在定时器的状态相同时才会工作。如图:
接着程序要求增加,需要增加一个计数按钮,来计数体积输出次数,程序如图
但这样就有一个弊端,InOut是链接了外部变量的,但其中的“按钮上一周期状态”是作为FC块内部变量来使用的,这就导致了我们在其他的编程时可能会错用了这个外部变量,使得FC块内部程序出错。这就破坏了FC块对方法的封装。这时我们就要用到FB块。
2.2FB块的使用
当我们调用FB块时出现如图提示:
可得知FB块是有自己的背景数据块的,其中的数据有自己的存储区,我们在主程序中调用FB块时它就会生成自己的背景数据块。
FB块中独有一个Static变量。Static变量为在参与到计算中其值不仅给到输出参数也会被永久保存到背景数据块中。且其为局部变量只在FB块中可以使用。
这就解决了我们在FC块的例子中遇到的问题。接下来我们将FC块内的程序更改到FB块中。如图:
上图只是将FC块中的InOut变量该存到了FB块中的Static中。其余的复制过去。
这样我们就将FC块改还成了FB块,并解决了程序的封装问题。实现这一方法的原因就在于FB块对于数据的封装,就是Static变量的存在,它的存在将FB块中的数据于外部的数据隔绝了起来。所以我们可以将FB块看作是:
对方法和数据的封装。
我们对比调用FB块生成的DB块和我们自己建立的DB块,如图:
对比之下可以发现二者不无太大差别,也就是说FC块和FB块某种程度上是可以互相替代的,它俩的主要差别就在于Static变量,当FB块不用到Static变量它就同于FC块只是多了背景数据块,当FC块用InOut变量来代替Static变量它就等同于FC块,只是无法对数据封装。
由于FB块生成背景数据块的特性,上例中我们在主程序多次调用FB块时在左侧的程序块中可以看到生成了多个DB块如图:
如果调用很多的话未免过于杂乱,我们可以在额外建立一个FB块_1,将原来在主程序调用FB块_2生成的FB块删除,在新建的FB块_1中重新调用,当提示“调用选项”时我们不再选择“单个实例”而是改为选择“多重实例”。如图:
“多重实例”就是将当前调用的FB块_2的DB块保存到承载它的FB块_1的DB块中,当在主程序中调用FB块_1时,系统就只会生成一个DB块。如图:
同样的若我们需要使用多个如定时器这样会生成DB块的功能块,因为定时器这种的功能块本质上就是封装好的FB块,我们也可以建立一个空的FB块,将带有功能块的程序放入空FB块中。