CFC编程常见问题

问题1  CFC里能不能调用LAD/STL编写的FC/FB

CFC中可以调用其他编程语言编写的FC/FB,例如使用LAD编写的设备逻辑处理代码等。

使用LAD/STL等编写FC/DB时需要注意功能块号的选择,具体信息请参考 问题2

问题2  如何查看CFC中给用户预留的FC/DB范围

CFC的编程窗口中,依次打开菜单项“Options”à“ Customize”à“Compile/Download”

Description: Description: 2011-06-14_101518

在弹出的窗口中,“Areas Reserved for Other Applications”中可以设置和查看给用户预留的FCDB范围:

Description: Description: 2011-06-14_101735

问题3  修改FC/DB块范围时报错

CFC编译过程中会根据Chart中插入的功能块和运行组的设置,自动创建FCDB块。如果程序中还有通过LAD/STL/FBD创建的FCDB,在CFC编译过程中为了保护这些用户代码,可以指定哪些范围中的FCDB块被保留。

根据实际需要可以调整预留的FCDB块的范围,但在调整过程中,可能会弹出如下错误提示:

Description: Description: 2011-06-14_115713

导致这个问题的原因是设置的新范围并不能涵盖所有用户自定义的FC/DB。可以将涉及到的FC/DB修改块号来适应新的范围。

FC/DB的范围设置窗口中还可以通过“Compress”选项来调整CFC相关的FC/DB以实现块号的连贯性。但使用这个功能需要注意:

1 使用Compress之前使用Read Back功能回读参数;

2 Compress之后需要对CPU进行全部下载;

3 OS重新编译和下载。

问题4  CFC中如何监控功能块和变量

完成CFC的编译和下载之后,点击工具栏上的按钮Description: Description: 2011-06-14_152610,即可开启测试模式(“Test Mode”)。在测试模式下选中需要监控的功能块,点击右键选择“Watch On”,或者在菜单“Debug”下选择“Watch On”。此时该功能块的监控列表(“Watch List”)中包含的管脚都会开始监控。如果需要监视该功能块的其他管脚,则可以选择该管脚,点击右键选择“Add I/O”,或者点击功能工具栏上的Description: Description: 2011-06-14_161933即可将其添加到功能块的Watch List中:

Description: Description: 2011-06-14_154019

每次开启测试模式,所有的功能块管脚不会自动被监控,这是因为默认情况下,CFC为了降低监控通讯负荷对AS的影响,都是在运行模式(“Process Mode”)工作。但是,也可以在CFC编程窗口的菜单项“Debug”中选择“Laboratory Mode”来激活实验室模式。工作在这种模式下,只要测试模式开启,CFC中所有功能块的Watch List中包含的管脚都会自动被监控。

问题5  如何禁用部分CFC的执行

默认情况下,CFC中插入的功能块都是隶属于某个OB3x下、以CFC名称命名的运行组。双击功能块上的高亮区即可打开运行组窗口:

Description: Description: 6-15-2011 10-49-49 AM

在运行组编辑器中也可以自己创建新的运行组,将需要禁用的功能块拖放到其中。

在程序中可以通过一个BOOL类型的输出来激活/禁止一个运行组,具体过程是:

Description: Description: 6-15-2011 11-51-38 AM

                                                                      

选择一个功能块的BOOL类型输出管脚,点击菜单项“Insert”à“Interconnection to Runtime Group…”

Description: Description: 6-15-2011 11-54-11 AM

                                                                      

编译下载程序。只要上图中“StruDiIn”的管脚“Value”0,名为“TIC1003”的运行组就会被禁止执行。

问题6  CFC中能否连接DB块中的数据

CFC中使用DB块中的单元可以参考如下文档:

https://support.industry.siemens.com/cs/cn/zh/view/81211742

问题7  CFC编译时为何将创建的OB块删除了

CFC中包含驱动块,且选择了“Generate module drivers”,那编译过程中会尝试重新生成诊断OB(例如OB85/86/101/102等)。如果用户已经创建了诊断OB,且内容为空,在编译时则会删除空的诊断OB并生成新的,如下警告信息:

Description: Description: 6-15-2011 2-52-40 PM

如果用户创建的诊断OB中已经有内容,则编译时就会报错:

Description: Description: 6-15-2011 2-55-00 PM

问题8  没有驱动块的CFC程序编译时如何自动生成诊断OB

如果CFC程序中不包含驱动块,为了生成相应的诊断OB,请参考如下应用文档:

https://support.industry.siemens.com/cs/cn/zh/view/79575755

问题9  如何将CFCChart编译成一个功能块

CFCChart在默认情况下都是作为一个项目程序(Program)来编译的,但也可以编译成一个和FB一样的功能块。

选择菜单项“View”中的“Chart Inputs/Outputs”,或者点击工具栏上的Description: Description: 6-16-2011 12-08-37 PM,可以打开ChartI/O窗口,和FB下类似:

Description: Description: 6-16-2011 4-40-54 PM

Chart中设置输入IN、输出OUT或者输入_输出IN_OUT,通过拖放和Chart中的功能库的相同数据类型管脚连接。

完成程序编写之后,依次点击菜单项“Chart”à“ Compile”à“ Chart as Block Type…”

Description: Description: 6-15-2011 3-41-15 PM

在弹出的窗口中设置功能块号、符号名、参数等即可。

问题10         如何一次打印所有的CFC

CFC编程窗口中的“Chart”菜单项下点击“Print…”可以打印当前的Chart中的内容,但不能实现所有CFC内容的打印。

要实现一次性打印所有CFC内容,需要使用DOCPOR。在工厂视图(或者组件视图)下,在单项目的右键菜单插入“Project Documentation”

Description: Description: 6-15-2011 4-53-52 PM 

双击生成的“Documentation”,打开DOCPRO配置窗口。首次打开会有一个初始化的过程。在DOCPRO“Documentation”的右键菜单中选择“Insert Wiring Manual”

Description: Description: 6-15-2011 4-56-03 PM 

点击之后,就可以选择需要包含的内容:

Description: Description: 6-15-2011 4-57-33 PM 

如上图所示,将工程视图中CFC选择,其会自动添加在一个打印任务中:

Description: Description: 6-15-2011 4-58-01 PM 

CFC编程界面下的打印一样,需要设置CFC打印的内容,在添加进来的CFC(或全选所有CFC)上点击右键,选择“Object Properties”

Description: Description: 6-15-2011 4-59-53 PM 

在属性窗口中,修改View标签页中的内容,选择“Sheet”

Description: Description: 6-15-2011 5-00-15 PM 

完成以上设置后,直接在打印任务“Job List”的右键快捷菜单上触发“Print”即可将其中添加进来的所有CFC全部打印出来:

Description: Description: 6-15-2011 4-58-20 PM 

关于DOCPRO的更多内容可以参考如下手册:

https://support.automation.siemens.com/WW/view/en/1137193

问题11         如何将IO管脚的数据类型显示出来

CFC中是可以将功能块管脚的数据类型显示出来的,在编程窗口中,点击菜单“Option”à“ Customize”à“ Layout”

Description: Description: 6-16-2011 10-47-33 AM

在弹出的设置窗口中,检查“I/Os”中是否已选择为“Name(and type)”,默认情况下这个选项是被选择的:

Description: Description: 6-16-2011 10-48-13 AM

之后,设置功能块的显示宽度:

Description: Description: 6-16-2011 10-47-58 AM

在其中修改Block width“Wide”即可:

Description: Description: 6-16-2011 10-48-26 AM

完成设置之后,Chart中的所有功能块都变宽了,且管脚数据类型也显示出来了:

Description: Description: 6-16-2011 10-49-01 AM

问题12         CFC中使用IN_OUT管脚,为何只能接输入

在将CFC“Chart I/O”中定义的“IN_OUT”接口,只能和Chart中功能块的“IN”或者“IN_OUT”类型相连接,不可以和“OUT”类型连接。

问题13         CFC中的功能块的EN管脚能否通过逻辑来控制

默认情况下CFC功能块的EN管脚是隐藏的,可以在功能块的“I/Os”中取消EN管脚的“Invisible”属性选择。

Chart中可以通过其他功能块的BOOL类型输出来连接EN管脚:

Description: Description: 6-16-2011 4-51-31 PM 

连接EN端之后,功能块的高亮区加了一个黄底的问号,这表示功能块的执行与否不确定。在运行过程中EN端变成0,或者直接在编程过程中赋值为0

Description: Description: 6-16-2011 4-50-38 PM 

其中的红底感叹号表示该功能块不会被执行。

所以,CFC中功能块可以通过EN来控制控制块执行与否,但需要注意其使能条件,以免出现功能始终无法执行的问题。

问题14         CFC编译时为何报超过64K的上限

进行CFC编译的时候会报如下错误:

Description: C:\Users\PCS7\Desktop\TO OS\TO OS\PCS7_TOP_V1\PCS7_Engineering\PCS7_AS_Engineering\CFC\CFC_FAQ\image\image029.png 

这个问题是指编译过程中生成功能块时,其大小超过64K的上限。如下是出现该问题之前的最近一次正常编译之后最大的功能块:

Description: Description: 6-16-2011 4-20-50 PM 

此时CFC编译生成的FC的大小接近64K了,在增加了少量程序之后再编译就出错。

对于CPU而言,其能支持的单个FC/FB最大规模为64K,所以在CFC编译生成FC超过这个限制后就会报错停止:

Description: Description: 6-16-2011 3-47-57 PM 

导致这个问题的原因是CFC的运行组设置不合理,如下图所示,所有的功能块都集中在一个运行组或者直接在OB3x中,这样就容易让编译生成的FC规模过大。

Description: Description: 6-16-2011 4-06-46 PM 

解决这个问题就可以根据功能块之间的联系、或者工艺关系来多划分运行组,让每个运行组中的功能块个数不要过多。