第一:S7-SCL简介
S7-SCL(Structured Control Language 结构化控制语言) 具有以下特点:
是一种类似于PASCAL的高级编程语言,符合国际标准IEC 61131-3PLCopen基础级认证适用于 SIMATIC S7-300 (推荐用于CPU314以上CPU), S7-400, C7 and WinACS7-SCL 为 PLC 做了优化处理,它不仅仅具有 PLC 典型的元素(例如 输入/输出,定时器,计数器,符号表),而且具有高级语言的特性, 例如:循环、选择、分支、数组、高级函数
S7-SCL 其非常适合于如下任务:
复杂运算功能
复杂数学函数
数据管理
过程优化
第二:S7-SCL 与 STL
S7-SCL 可以编译成 STL, 虽然其代码量相对于 STL 编程有所增加,但我们更关心的是程序结构和程序的总体效率。类似于计算机行业的发展,汇编语言已经被舍弃,取而代之的是 C/C++等高级语言。S7-SCL 对工程设计人员要求较高,需要其具有一定的计算机高级语言的知识和编程技巧。
第三:S7-SCL 的安装与使用:
STEP7 标准版并不包括 S7-SCL 软件包及授权,需单独购买,STEP7 Professional 版包括了S7-SCL 的软件包及授权,安装即可。在 S7 程序中,S7-SCL 块可以与其它 STEP7 编程语言生成的块互相调用。S7-SCL 生成的块也可以作为库文件被其它语言引用。由于 S7-SCL 程序由 ASCII 文本构成,所以它非常容易被导入或导出。
第四:S7-SCL 软件兼容性
不同 S7-SCL 软件版本与 STEP7 及操作系统之间的兼容性:图中的 X 表示兼容,- 表示不兼容
仅仅 S7-SCL V5.1+SP1或以后版本支持
仅仅 S7-SCL V5.1+SP1或以后版本支持
仅仅 S7-SCL V5.1+SP1或以后版本支持
第五:S7-SCL 简单示例
在下面的例子中,编写一个完成软件滤波程序的 FB1, 程序每调用一次 FB1, 其采集一个新的过程变量,存储在 FIFO 堆栈中,共 10 个周期的采样值,超过 10 个周期的采样值将被舍弃。程序将此 10 个采样值中的最大最小值找出,并计算出除去最大值及最小值之后的平均值。
平均值(滤波输出)=(10 个采样值之和-最大值-最小值)/8 平均值(非滤波输出)=转换后的实时采样值
新建项目,插入 SCL Source
![7878591e062db71b61b13a35ae921a4f.png](https://i-blog.csdnimg.cn/blog_migrate/67ed818fc888a6aa6b4ceda2647851e9.jpeg)
双击,SCLSource 打开 SCL 环境,并使用 FB 模板
![accff11490c7ff5b74e28a873ffd9fb0.png](https://i-blog.csdnimg.cn/blog_migrate/e8c1caf38e74dde85ac9a5ca8dd4835d.jpeg)
更改 FB编号
![ab678db82775cce7c0ddfe380b7faf2b.png](https://i-blog.csdnimg.cn/blog_migrate/adaac74474dec8ee5828e0364f364e03.jpeg)
使用参数模板
![93ac8eb00eb7ce81f7c6e2e7d4206eb3.png](https://i-blog.csdnimg.cn/blog_migrate/69a3a99f53e1ecb1e458a7c26fe72df6.jpeg)
编辑 FB参数
![959de4fc027d2684d1539078b406e32e.png](https://i-blog.csdnimg.cn/blog_migrate/976288154f4f2511f6eb098589ec5b8e.jpeg)
使用调用功能块向导
![41200340d3ee3534b8f7f8f7adaccec6.png](https://i-blog.csdnimg.cn/blog_migrate/12a0d6b6636aa4dace1468ae7b2d5d47.jpeg)
调用 FC105
![66102feb43b06d819380f1e8eb5edb9a.png](https://i-blog.csdnimg.cn/blog_migrate/2dd28353b27c38016d190f69618b30bf.jpeg)
由于在 SCL中调用了 FC105, 还需在 SIMATIC Manager 将 FC105 添加到项目中
![3190fa15f4e3ef9a4abda6f3cc5c2c3e.png](https://i-blog.csdnimg.cn/blog_migrate/699211c0eb1461c219485b06d51c3ac9.jpeg)
FC105 复制到当前项目中
![869d3757e36882adb2f6f9e4bba72fe8.png](https://i-blog.csdnimg.cn/blog_migrate/eeda3ad4e9270ec57e4be9f2497d972a.jpeg)
FB1 参数定义
![eff4845bf9a37db6384b2741a39e0f81.png](https://i-blog.csdnimg.cn/blog_migrate/87613cc90c53252627df5de8b37b4915.jpeg)
FC105调用
![3a2fc6c28775ea6a7a82adee35124abf.png](https://i-blog.csdnimg.cn/blog_migrate/1b1150f049183cd4197d9c14127cd7da.jpeg)
下面的程序中使用了判断条件,在此使用 IF 模板
![640ad283dfa48712b3b6c743ef04ad8d.png](https://i-blog.csdnimg.cn/blog_migrate/9dde97af6efed77b1e17b7db1870d567.jpeg)
使用 IF, FOR-NEXT等高级语言的方式,很容易就可编写出滤波程序
![d33ae0e683ee12a3d496c4fcac2c6ade.png](https://i-blog.csdnimg.cn/blog_migrate/ab5293607bea279c4a037f7850fc9b65.jpeg)
在菜单 Option-Customize中选择生成调试信息
![92abd00ce8b0d946af42e2cf523a1900.png](https://i-blog.csdnimg.cn/blog_migrate/bfedd611d76e1666121f41e89310e3e7.jpeg)
在菜单的 File-Compile编译没有错误后,就可以生成 FB1 了,在 OB35 中可以调用 FB1,下载整个项目后监控 OB35:
输出参数 SCALED_VAL 为实时的采样值
输出参数 SCALED_FILTED 为滤波后的采样值
假设OB35的执行周期为T, 如果某时刻采样值发生变化,那么此数值将不同于以前的多个采样值,此数值可能被认定为最大值或最小值,而最大值或最小值将被忽略,这样就实现了滤波的效果。当采样值发生变化,并维持了大于等于2T的时间,此时的输入值的两次采样值会被滤掉一个采样值,而另一个采样值将参与平均值的运算。
![7e4673f49aea052d6125946bd803765a.png](https://i-blog.csdnimg.cn/blog_migrate/0afafd97ce9da9b7fada1eaa56a6d8ea.jpeg)
可以在高级语言界面下监控 FB1
![5b4e2f1048c5c05d1f8913df8639f778.png](https://i-blog.csdnimg.cn/blog_migrate/7b826daf88df1f19594d84a50116d77b.jpeg)