SCL编程问答 联系客服

发布时间 : 星期日 文章SCL编程问答更新完毕开始阅读d201657f1711cc7931b71618

说明:

当一个功能块以 S7-SCL 源程序方式生成时,建议在源程序中直接生成背景数据块。如果不在相应的源程序中声明背景数据块,则每当接口(包含在 S7-SCL 的源程序)改变后,背景数据块都要重新生成。否则,在背景数据块和功能块之间将出现冲突。反之,如果背景数据块在源程序中直接生成,则不需要这些步骤。当执行命令“File > Compile”时,背景数据块将被自动生成。这样,功能块的改变将被直接传送到背景数据块中。这也防止了数据冲突的发生。

图 01 描述了在 S7-SCL 的功能块中如何声明相应的背景数据块。首先编程功能块,然后编程背景数据块,这样当背景数据块生成时,功能块的变量就确定了。

图 01

如果一个功能块在另一个功能块中被调用,仅需分配一个背景数据块给具有多重背景能力的功能块。这个背景数据块被称为多重背景数据块。它通过在功能块的静态变量声明中定义一个 FB 数据类型的来生成。被调用功能块的静态变量(及块参数)变为调用功能块静态变量的一个子集。

图 02

图 02显示了 SFB4 被 FB22 调用。一个类型为“TON”的静态变量 (SFB4 的符号名)在多重背景数据块(为了 SFB4 和 FB22)的应用中被声明,例如 ,数据块符号名为“SFB4_TON”。多重背景数据块 DB22 仅仅在 SFB4 在被 FB22 调用后生成。 注:

为了更新背景数据块,建议下载前在 SIMATIC 管理器中检查数据块的一致性。选中块文件夹并通过菜单命令“Edit > Check Block Consistency...”打开对话框。然后执行功能“Program > Compile all”。

在 S7-SCL 中读取一个组织块的起始信息 隐藏订货号显示订货号订货号:

问题:

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

解答:

在 SCL 编辑器中,通过“Insert > Block Template > OB”创建一个 OB。在临时区域,缺省情况下将创建一个 ARRAY OF BYTE 类型的数据区域。

如果您想要处理 SCL 源文件中一个 OB 的起始信息,请按下列步骤进行:

确定 OB 起始信息的结构。该信息包含在 OB 的 STL 源文件中,可在路径 Drive:\\Siemens\\Step7\\S7DATA\\S7wiz 下找到。使用编辑器打开合适的 OB (例如 OB31.awl) 并复制相应信息。

创建一个新的 SCL 源文件并插入您刚才复制的起始信息。

调整 S7-SCL 中 OB 的临时区域,以便可以通过符号方式访问变量。 例子:

对于时间错误 (OB3 已经超过了循环时间),系统会调用 OB80 并设置标志 M1.0。

SCL_OB80.pdf ( 1 KB )

在S7-SCL (例如 OB1 循环时间)中如何读取一个组织块(OB)的起始信息? 隐藏订货号显示订货号订货号:

说明:

下面的这个表描述了一个组织块的S7-SCL 源代码的生成步骤,重点在读取组织块的起始信息的STL 代码。 序号 步骤:

1 在SIMATIC 管理器中选择这个源文件 并且插入 S7-SCL源代码到你的STEP 7 项目中,使用菜单\插入> S7 软件> SCL源代码\

2 接下来通过双击S7-SCL source打开S7-SCL编辑器.

3 在S7-SCL编辑器中,通过\插入 > 块类型 > OB\,你能够创建一个OB。在临时数据区域,一个作为OB起始信息默认的字节数组被创建。.

如果在S7-SCL源文件中你需要更多的OB起始信息,在资源管理器中打开下面的路径:

\

你能够在这里发现组织块的STL源代码, 打开适当的STL源代码, 例如OB1.STL ,并且从

STL原文件中复制STL源代码到S7-SCL源文件中。

4 在符号表中输入S7-SCL 源文件的组织块的符号名, 例如OB1的符号名\循环执行\。

5 现在你不得不调整S7-SCL源文件中的语法结构 :

在这个程序的开始, 用引号标示,设置 \标题\和\版本\(或者删除\标题\和 \版本\例如标题='' 和 版本: '0.1',

在“开始”语句后面插入一个分号。

这样你能够编译组织块的S7-SCL 源文件。

例子:

在下面的S7-SCL程序中, 这个临时的程序\被评估OB80 (循环时间故障). 如果这个循环时间超过了OB3, 这个OB80被调用并且标志位M1.0 被置位。

图 01

下载:

在这个列表中(图. 02),在下载 \时,有44个 STEP 7中的组织块被包含在S7-SCL 源文件中。 \

图. 02

复制\文件到一个独立的目录中,. 在存档后, 这个文件被保存在\Templates S7 SCL\在STEP 7 库中,`这个库包含了上面列表的44个组织块的源文件。

为什么包含比较类型为 WORD / DWORD 的变量的 IF 语句不能被编译通过?

显示订货号

操作规程:

当在 IF 指令内比较操作数时,如果变量声明为 WORD 和 DWORD 类型,S7-SCL 仅允许比较操作“=”和“<>”,而不允许比较操作“>”和“<”。作为一种补救措施,建议将变量类型声明为 DINT。 IF 语句的操作数比较 变量类型:WORD 变量类型:DINT 只能使用“=”和“<>” 所有:“=”,“<>”,“>”和“<” 表 1 当操作数类型为“DWORD”时,在 IF 语句内进行操作数的“=”比较。 图 01 在 IF 语句内对操作数进行“<”比较,这里必须声明操作数类型为“DINT”。