技术论坛

 应用探讨——CFC编程应用探讨

返回主题列表
作者 主题

总坛主
西门子官方工程师西门子官方工程师

经验值:23695
发帖数:3792
精华帖:8
楼主    2011-08-16 15:13:16
主题:应用探讨——CFC编程应用探讨
CFC(连续功能图)是PCS7下的一种方便、简洁的编程环境,通过功能块互连的方式,既可以轻松自动实现跨AS的数据交换,也可以避免对诸如M、L等系统资源的管理,编程不再是一个面向繁琐数据存储单元的乏味劳动,而是将主要精力集中面向控制技术层面的全新工作。
和传统的STL、LAD等编程语言相比,CFC编程存在诸多的不同,所以在使用CFC的过程中,一方面可以积攒很多小技巧、小心得,另一方面也会碰到各种各样的问题,诸如:
? 逻辑没有问题,为何运算结果不正确
? 编译的时候总是出现很多的Warning,会影响程序执行吗
? CFC中功能块的消息组态,很多的$$是起什么作用的
? CFC中功能块的高亮区都包含哪些信息,如何修改
? “过程模式”和“实验室模式”有什么区别
? 下载CFC的时候为什么会出现不同的方式选择,都有什么区别
? ……
为此,我们专门开设这个集中交流的平台,大家可以就自己工程实施过程中碰到的CFC相关的的编程组态、编译下载中的问题、心得、技巧等,畅所欲言,分享切磋。正在使用或准备使用CFC进行程序编写的用户,也可以就自己的需求和大家来探讨,在扩展思路的同时,相信也会有意想不到的收获。
此次集中探讨将持续至9月14日,其中有突出表现的网友将获得加倍精华奖励积分;最终所有有效留帖的网友将获得加倍发帖金币;根据交流情况,会酌情赠送小礼品。
交流结束后将整理精华内容,供广大网友分享参考。

预祝大家交流愉快,收获丰富!

本次探讨的发帖整理请参见此处

大家可以参考如下资料:

S7-CFC编程
A0252
SIMATIC S7 CFC手册
24451339
CFC 功能块库
24451026
www123456
至圣

经验值:12225
发帖数:2431
精华帖:86
3楼    2011-08-16 20:54:04
精华帖  主题:回复:应用探讨——CFC编程应用探讨
S7-CFC简介(转):
S7-CFC (Continuous Function Chart 连续功能图表) 具有以下特点:
􀂗 通过绘制功能图表来自动生成程序
􀂗 拥有强大的预制程序库,同时也可使用STEP7中的标准块
􀂗 通过简单的连线来降低开发成本并减少错误
优化集成在STEP7中,与STEP7 兼容
􀂗 适用于 SIMATIC S7-300 (推荐用于CPU314以上CPU), S7-400, C7 and WinAC
S7-CFC 不仅仅具有PLC典型的元素(例如 输入/输出,定时器,计数器, 符号表),而且具有图形化编程语言语言的特性,其非常适合于如下任务: 1.过程控制 2.系统工程
CFC 与SCL及STL:CFC会生成SCL代码,最终编译成STL。其代码量相对于STL 编程有所增加。
凌波微步
奇侠

经验值:8896
发帖数:2782
精华帖:72
7楼    2011-08-17 14:58:09
精华帖  主题:回复:<b><font color=red>应用探讨——CFC编程应用探讨</font></b>
1.做项目就像做人,目光不能光放在眼前的这点利益。
2.做项目的最终目的是控制的结果与将来的维护,升级等
3.做项目也好比你SHOPPING,性价比比较重要,不一定那个要买最贵的,也不一定要买最便宜的。好的性价比才是我们大多数人选择的方向。
4.CFC仅是PCS7中的一个功能。其实现的方法,方案也在与开发者的灵活运用。
5.至于编译,我想任何语言都需要的。编译的功能是检查基本语法错误的一个标准方法。CFC的编译不仅仅是检查语法错误,还会做很多的功能。例如诊断信息的生成,系统文件的生成,OB的生成等等。因此CFC的编译虽然时间稍微长了一些,但其功能是全面的,不是片面的。
6.STL是种好语言,也是我们应该学会的。但各种语言的灵活运用才是王道。
7.STL编写自定义功能块,然后在CFC中运用是一种非常好的方法。
8.其实STL语言是面向更多熟悉代码语言的人群。LAD面向的是更多电气出身的人群,而CFC面向的是全部的人群,是一看就明白的一种直观性的语言。
9.CFC中的很多功能是一种优化,并不是无用的。例如运行组等。
10.其实我也是从PLC学起的。但是用CFC后,就真切的发现其可用性的强大。
11.CFC其实是从传统的DCS理念中应运而生的一个编程语言。很多传统的DCS的编程方式都是图表化的。
12.CFC不但可以作为编程界面,而且也可以利用CFC来编写FC,FB等功能块。
13.我觉得CFC的最大的亮点就是连线方式。不用像STL,LAD编写一个简单的数学逻辑需要很多的中间变量。

------说了很多了。对于各种语言的使用其实我是这样认为的:不论何种语言都有其存在的必然性。都有其优劣特性。我们需要的是更深的了解其理念和使用方式。灵活使用,结合使用才是我们写好一个程序,做好一个项目的根本。
------对于授权,价格问题,还是因项目成本而异吧。这个在很多时候是决定使用哪种语言的关键。
管理员注:本帖已被纳入此次探讨发帖整理,请点此详阅
不以物喜,不以己悲; 达则兼济天下,穷则独善其身。
药尘
游侠

经验值:530
发帖数:64
精华帖:1
14楼    2011-08-19 20:05:23
精华帖  主题:回复:<b><font color=red>应用探讨——CFC编程应用探讨</font></b>
用PCS7编程比较简单,但是需要明白CFC的库文件,毕竟CFC不是自己编写的块,第二个需要强调的一点,请不要把PCS7和STEP7孤立开来,PCS7所有的程序全部都是以STEP7为基础的,请抓住最基础的,还有CFC是使用SCL为编程语言的,但是不代表LAD FBD STL就不能用了,CFC仅仅是一个FB,它无论用何种语言编程皆可,我看到有很多工程师为了学习写CFC块还学习SCL,精神委实可嘉,可以多学一种高级语言,但是我写过的很多CFC块仍然用LAD一样是可以实现的。第三,请区分TIA和PCS7,这个有极大的联系,但是又有很大的区别,在西门子的论坛里有这方面的知识,可以参考一下。
CFC跟我们以前的那种线性编程不同,它是一种简易的图表化线性编程,而在STEP7中还是属于一种模块化线性编程,这个需要区分清楚。
希望大家以后在学习PCS7里的CFC编程的时候,将其简单化,不要复杂化,有很多在STEP7中能使用的方法,在PCS7中一样可以使用。学习CFC和PCS7抓住基础才是真正的重点,这个基础就是STEP7。如果抓住了这个重点,相信大家肯定在这方面会进步的很快的。
管理员注:本帖已被纳入此次探讨发帖整理,请点此详阅
剑忠
奇侠

经验值:9045
发帖数:639
精华帖:57
25楼    2011-08-21 11:21:14
精华帖  主题:回复:应用探讨——CFC编程应用探讨
关于CFC工具的编程中的一些常见问题,我搜索了一下我历年来在论坛中的一些问答,供大家分享。不完善之处,望大家补充;错误之处,望大家指正!

1、当选择编译下载时,系统出现“FC*isoutsideuserrange.”等提示的原因是:指用户手工创建使用了提示信息中的FC块编号,但该FC块编号超出了CFC编译工具为用户使用,而默认保留的FC块编号范围。处理方法如下:(http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=44004&cid=1035)
(1)在“Options->Customize->Compile/DownLoad”的对话框中,可看见CFC工具默认保留为用户使用的FC块编号范围是60~700。
(2)用户可以更改CFC工具默认保留为用户使用的FC块编号范围,以满足用户需求。
(3)当然,也用户可以更改手工创建使用的FC块编号,以满足CFC工具默认保留为用户使用的FC块编号范围,而不致超限!

2、用CFC工具FB功能块中的一个参数量程既无须编译(Compile),也无须下载(download),只需让被修改的CFC功能块中在线(Online)即可修改了。方法如下:
(http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=71736&cid=1035)
(1)首先打开被修改的CFC功能块对象名;
(2)然后鼠标点击CFC工具栏上的“TestMode(on/off)”按钮,或点击CFC窗口菜单“Debug”→“TestMode”项;
(3)之后,该CFC窗口中的功能块就随即进入在线监控状态(Online),并且会看到一些功能块的I/O端口有黄色的数字动态显示;
(4)最后,鼠标指向需要修改的功能块的I/O端口引脚后双击,在弹出的“Properties-Input/Output”(I/O参数修改对话框)中键入修改值后,“OK”按钮即可。

3、CFC嵌套图表相当于子程序吗?那这个嵌套图表怎么打开看看里面有那些逻辑?(http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=70650&cid=1035)
(1)CFC嵌套图表是指用CFC工具编写,并只能由CFC工具调用的功能图块,也就算是CFC子程序吧!
(2)CFC工具编写的功能图块参数定义,可在点击“视图(View)>图表I/O(ChartInput/Output)”后编辑和查阅。
(3)要在被调用的CFC嵌套图表(功能图块)中,查阅或编辑修改CFC功能图块,先将鼠标选中当前的CFC功能图块,然后右击鼠标;之后在弹出的浮动菜单中选择“Open(打开)”即可。

4、两个CFC功能块在不同的Charts里如何连线,或者在一个Charts里的不同Sheet表的CFC功能块块如何连线?方法如下:(http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=45213&cid=1035)
打开任意一个CFC块后,如果CFC编辑视窗在“Overview(概貌)”显示模式下,可看见共有6张Sheet,3行2列,左右排列;如果CFC编辑视窗在“Sheetview(表浏览)”显示模式下,则只能看见其中一张Sheet了。CFC的调用功能块则可放置在每张Sheet里。
(一)同一张Sheet内的功能块的连线:
(1)鼠标点击一CFC块的I/O端口;
(2)按住左键并拖放至另一CFC块的I/O端口上;
(3)如果数据类型相同即连线上。
(二)不在同一张Sheet内的功能块的连线:
(1)鼠标先点击(Click)一CFC块的I/O端口;
(2)再打开另一CFC块的Sheet,并准确找到该CFC块的I/O端口上点击它(Click);
(3)如果数据类型相同即连线上。
(三)不同CFC块内的功能块连线:
(1)首先打开所有需要连线的CFC块;
(2)然后找到一个CFC块的Sheet内的功能块/O端口上先点击(Click);
(3)最后准确找到另一个CFC块内的Sheet内的功能块/O端口上点击它(Click);
(4)如果数据类型相同即连线上。

5、CFC,在编译的时候提示DB、FC或者FB不在用户范围内,导致不能编译?处理方法如下(http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=44431&cid=1027)
(一)任意打开一个CFC块后,点击菜单项“Options”→“Customize”→“Compile/DownLoad”;
(而)在弹出的“SettingforCompilation/DownLoad”对话框中,可看见“FCnumbersfrom:”项.默认设置为“60to600”;“DBnumbersfrom:”项.默认设置为“1to60”;
(三)尽量不要修改这些设置,但请一定要注意如下:
(1)用户自定义DB块编号使用范围是:1~60;
(2)用户自定义FB和FC块编号使用范围是:60~600;
(3)超出以上使用范围的编号为系统占用。

6、编译的时候总是出现很多的警告(Warning)提示。通常原因是:超出了每个运行组所允许插入的CFC程序块数量。处理方法如下:
(http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=36961&cid=1035)
(1)任意打开一个CFC程序块,鼠标点击菜单栏“Options”→“Customize”→“Compile/Download”;
(2)在弹出的窗口中,可看到“InstalledblocksperruntimegrouporOB:”项中,CFC编译系统自动默认设置的数值为50。即只允许每个运行组插入的CFC程序块数量为50。
(3)你可以修改“InstalledblocksperruntimegrouporOB:”项中的数值,但建议最好不要增/减允许值。
(4)如果数值超限后,最好是采用分离法。即先新建几个运行组,仍然由OB35块调用;再将“AI_CH”和“STATUS”运行组中的CFC程序块分离出去,放置在新建的运行组中,就解决问题了。
(5)注意:放置在新建运行组中的CFC程序块数量也不要超限,否则又会出现上述问题。

7、PCS7的Charts中有很多带@前缀标识是如何生成的?
(http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=42101&cid=1035)
(1)在“Charts”节点中带@的CFC功能块,一般是在使用PCS7软件版本里编译(Compile)CFC功能块时,勾选了“Generatemoduledrivers”之后自动生成的。当然你也可以手工组态编辑了。
(2)这些带@的CFC功能块主要用于本项目运行后,系统的诊断和报警信息向WinCC监控画面中实时传递,以方便操作与维护人员监控和分析系统的运行状况。

8、CFC中功能块的消息组态,很多的$$是起什么作用?可参见我在论坛“WinCC与STEP7集成方式做项目”主题讨论及分享中76楼和95楼的回答:
(http://www.ad.siemens.com.cn/club/bbs/post.asp?myreply=1&b_id=5&a_id=864494&s_id=&num=126#anch)

9、什么类型的项目可以使用CFC工具编程?关于这个回答结论很多,参见如下:
(http://www.ad.siemens.com.cn/service/answer/solution.asp?Q_id=38543&cid=1035)
大学之道,在明明德,在亲民,在止于至善。
Ken(小释)
侠士

经验值:1876
发帖数:293
精华帖:19
27楼    2011-08-21 15:24:06
精华帖  主题:回复:应用探讨——CFC编程应用探讨
下载时会出现 “仅更改”、“整站”下载。
仅更改下载是将仅仅改动的部分下载,不会造成CPU停机。
整站下载是会停机的!
1.CFC编译后会在block里面自动调用很多块,如果你的CFC在改动后有新的块被调用就只有整站下载可以选择,整站下载是会停机的!
2.在程序上还有个时间戳的概念,就是说在程序下载的时候会附带时间信息下载到CPU。举例:我们都有一个习惯就是,会一边编写程序。一边做程序归档备份。比如我在20110821 09:00做了备份,但是我09:00之后做了很多修改添加了很多功能。但是我在20110822 13:00最后一下下载程序后才发现很多程序是不对的。但是我记不清楚我修改过哪些了。那我就需要重新获取归档,恢复09:00的程序。但是PLC里面记录的时间戳是13:00的程序,那么我现在再下载早期的程序(附带早期的时间戳)就会造成PLC停机。

CFC其实是一种很方便的编程语言,形象直观,方便简单。
Ken(小释)…西门子自动化技术群16182848
www123456
至圣

经验值:12225
发帖数:2431
精华帖:86
34楼    2011-08-23 13:51:00
精华帖  主题:回复:应用探讨——CFC编程应用探讨
梯形图一般说来对逻辑控制和需要用简单算法的对象比较方便,可以实现模块化编程。CFC一般说来对被控对象有较杂的过程计算更方便些。CFC的编程方式采用的是CHART图表式,执行按[输入接口]->[功能块]->[输出接口]次序,属于模块化的编程方式。内部连接只要数据类型一致,直接托拽就可建立连接,但容易引起交叉,感觉不简洁,其实可以使用连接关系标号,可以减少交叉连线,连接关系标号一直则相通,如下所示。另外,在CFC中,如下图中逻辑关系在一个页面中保留4个层级,尽量不放满,给人感觉直观,简洁,可读性好。

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。