加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线18475208684
公司新闻
SCL与STL的区别,16个SCL常见问题及解答
发布时间: 2024-06-17 16:48 更新时间: 2024-06-17 16:48

SCL  与 与 STL :

S7-SCL 可以编译成 STL, 虽然其代码量相对于 STL 编程有所增加,但我们更关心的是程序结构和程序的总体效率。类似于计算机行业的发展,汇编语言已经被舍弃,取而代之的是 C/C++等gaoji语言。S7-SCL 对工程设计人员要求较高,需要其具有一定的计算机gaoji语言的知识和编程技巧。


S7-SCL  常见问题:


1、如何规范地的开发一个 S7-SCL 程序?

解答:开发一个 S7-SCL 程序,应当遵循如下流程:

•  规划需要的块类型,即程序的整体结构。如:是否仅仅一个 FC 就可满足要求,还是需要生成其它 OB, FB 等

•  规划子任务(FB,FC 等等)

•  定义各个子任务的之间输入/输出接口

•  定义各个子任务在原文件中的顺序及调用关系

•  定义符号表

•  编译检查

•  下载调试


2、S7-SCL 支持哪些 STEP7 块,与其它语言有什么关系?

解答:S7-SCL 支持如下 STEP7 的块:OB,FC,FB,DB,UDT。在 S7 程序中,S7-SCL 块可以与其它STEP7 编程语言生成的块互相调用。S7-SCL 可以被编译成 STL, S7-SCL 生成的块也可以作为库文件被其它语言引用。由于 S7-SCL 程序由 ASCII 文本构成,所以它非常容易被导入或导出。



3、为什么双击打开 S7-SCL 类型的程序后,显示的格式却是 STL 格式?

解答:S7-SCL 程序编译后生成的执行代码实际上为 STL 格式,如下图中的 FC1, 虽然其标示为 SCL格式,但如果用户将 Source 目录中的 FC1 的源文件删除后,再双击打开 FC1 后,显示的将为 STL格式。

图片


4、什么是 OK Flag?

解答:在 S7-SCL 程序中,OK 是一个布尔类型的特殊本地变量。它用来显示块执行是否正确。OK 标志的使用与 STL 编程中对于 FC/FB 的 ENO 处理(STL 是用状态字的 BR 位来保存状态)非常相似。在程序的开始,可以将 OK 标志赋值为 TURE,如果程序执行有错误(例如 0 作为除数),则当程序退出时,用户通过程序将 OK 标志改写为 FALSE,此数值将被存储在输出参数 ENO 当中。OK 标志是一个系统变量,不需要定义,如果用户希望在程序中使用此标志,可以在 S7-SCL编程菜单 Options>Customize>Compiler 中,应当选择 Set OK flag.项。否则 ENO 将无法被评估。

OK 标志使用的例子:

OK:= TRUE;

Division:= 1 / IN;

IF OK THEN // 除法操作正常

;// 此处可以添加在除法操作正常情况下,其它的用户程序

ELSE //除法操作不正常

;// :

END_IF;


5、在 STL 中可以读取一个组织块的信息 (例如 OB1 中的循环时间),在 S7-SCL 中是否存在同样的可能?

解答:STEP7 中的任意 OB 块在生成之后,其内部都自动生成一些特有的临时变量,例如 OB1 中的变量OB1_PREV_CYCLE 即为CPU 上个扫描周期所用的时间。在 S7-SCL 编辑器中,通过“Insert> Block Template > OB”创建一个 OB 模板。在缺省情况下,此模板的临时变量区域将创建一个ARRAY OF BYTE 类型的临时变量。此区域与 OB 块的临时变量区域是相对应的,但由于没有变量名称标识,并且数据类型也不相同,所以用户使用起来非常不方便。如果用户想要使用 S7-SCL格式的 OB 块内的特有变量,请按下列步骤进行:

•  在路径 STEP7 的安装路径 \Step7\S7DATA\S7wiz 下,包含所有 OB 块的 STL 格式模板,可以使用写字板打开这些模板 (例如 OB31.awl), 并复制相应变量定义。

•  创建一个新的 S7-SCL 源文件并插入刚才复制的变量定义。

•  调整 S7-SCL 源文件中的语法结构

•  在这个程序的开始部分, 可以设置 "Title" 和"Version" , 例如 Title=' ' 和 Version= '0.1'

•  在 BEGIN 语句后面插入一个分号,至此,即完成格式修改。

另外,也可以打开本文中的 S7-SCL 例子目录中的 OB_Templ 项目,其中包括了 44 个 S7-SCL 源文件格式的组织块。


6、如何理解 FC/SFC 的输出参数 RET_VAL(返回值)?

解答:对于此问题,如果读者对 PASCAL 语言或者gaoji编程语言非常熟悉,可能此问题就非常容易解释。许多 SFC (系统功能) 都有输出参数 RET_VAL (返回值) ,它提供一个可供评估的错误代码。STEP 7 在线帮助中提供有更多关于系统功能和输出参数 RET_VAL 的信息。通过在 SIMATIC管理器中选中 SFC 然后按“F1”键可以获取相关的在线帮助信息。同样,一个 FC 也可以返回一个结果,下面给出了一些例子,说明了如何在 S7-SCL 中调用带有返回值 (RET_VAL) 的功能 (FC 或 SFC)。

定义 FC1, 函数类型为 INT (返回值)

图片

调用 FC1,得到返回值:

图片

调用一个系统功能 (SFC24):当调用系统功能 SFC 24 “TEST_DB”(测试数据块) 时,得到关于 CPU主内存中一个数据块的信息。SFC24 确定指定 DB 的数据字节数,并检查该 DB 是否受到写保护。选定 DB 所包含的数据字节数通过参数“DB_LENGTH”输出,参数“WRITE_PROT”包含关于选定 DB 的写保护 ID 的信息 (FALSE 表示没有写保护)。

图片


7、在 S7-SCL 程序中,PLC 中的地址标识与 STL/LAD 中的地址标识有何区别,使用中有何注意事项?


解答:在 S7-SCL 程序中,PLC 中的地址标识与 STL/LAD 中的地址标识基本相同,方便了编程人员快速掌握 S7-SCL 语言。下图为 PLC 中的 S7-SCL 程序地址标识格式:

图中一些格式有些特殊,实际上,下面的格式在 S7-SCL 中都是正确的。

DB1.D0.0:=DB1.DBX0.1;

DB1.DB1:=DB1.DBB1;

DB1.DW2:=DB1.DBW2;

DB1.DD4:=DB1.DBD4;

QX0.0:=Q0.0;

IX0.0:=I0.0;

MX0.0:=M0.0;

所以说,在一般情况下,编程人员依旧可以 STL 的标识方式用于 S7-SCL。

注意:如果数据块编号及地址都使用了间接寻址方式,则必须使用 S7-SCL特定的标识方式,例如如下语句:

STATUS_1:=WORD_TO_BLOCK (INDEX).DW [COUNTER]; (此格式正确)

STATUS_1:=WORD_TO_BLOCK (INDEX).DBW [COUNTER]; (此格式错误)

图片

上图为S7-SCL 中的 PLC 地址格式。

x 可以为 0 至 65535 之间的数字(juedui地址)

y 可以为 0 至 7 之间的数字(位地址)

对于其它 FB,OB,DB, T,C 等等的标识格式,S7-SCL 格式基本与 STL 格式相同,此处不做说明。


8、为什么用户人工输入的程序在编译时经常提示语法错误?

解答:S7-SCL 程序和所有的gaoji语言一样,有着自己特定的语法,而很多编程人员容易在人工输入程序时忽视语法格式,这样就造成编译错误。因此强烈建议编程人员使用 S7-SCL 的模板向导。

在菜单 Insert 中,提供了 Block Call, Block Template, Control Structure, 三个向导,用户可以通过使用此向导,提高输入效率。例如在下图中指出了两个常见错误,用户如果使用向导,就不容易出错误:

图片

1720758158.jpg

1724016427.jpg

1727497303.jpg

联系方式

  • 电  话:18475208684
  • 经理:向小姐
  • 手  机:18475208684
  • 微  信:18475208684