SCL编程手册.pdf

上传人:韩长文 文档编号:7226703 上传时间:2020-11-07 格式:PDF 页数:39 大小:854.50KB
返回 下载 相关 举报
SCL编程手册.pdf_第1页
第1页 / 共39页
SCL编程手册.pdf_第2页
第2页 / 共39页
SCL编程手册.pdf_第3页
第3页 / 共39页
SCL编程手册.pdf_第4页
第4页 / 共39页
SCL编程手册.pdf_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《SCL编程手册.pdf》由会员分享,可在线阅读,更多相关《SCL编程手册.pdf(39页珍藏版)》请在三一文库上搜索。

1、 S7-SCL 编程 Programming with S7-SCL Getting Started Edition (2008 年年 7 月月) 摘摘 要要 本文档主要用于讨论与 S7-SCL 编程相关的以下问题: ? 编程软件的基本信息 ? 基本概念讲解 ? 基本使用讲解 ? 用于示例工程的简单应用例子 ? 实际使用中常见问题及讲解 关键词关键词 编程工具;Step7;语句表;S7-SCL; Key Words Programming tools; Step7;STL;S7-SCL; A Division:= 1 / IN; IF OK THEN / 除法操作正常 ;/ 此处可以添加在除法

2、操作正常情况下,其它的用户程序 ELSE /除法操作不正常 ;/ : END_IF; 4.1.6. 问题:问题:S7-SCL 中读取一个组织块的信息中读取一个组织块的信息 问题:在 STL 中可以读取一个组织块的信息 (例如 OB1 中的循环时间),在 S7-SCL 中是否存 在同样的可能? 解答:STEP7 中的任意 OB 块在生成之后,其内部都自动生成一些特有的临时变量,例如 OB1 中 的变量 OB1_PREV_CYCLE 即为 CPU上个扫描周期所用的时间。 在 S7-SCL 编辑器中, 通过 “Insert Block Template OB”创建一个 OB 模板。在缺省情况下,此模

3、板的临时变量区域将创建一个 ARRAY OF BYTE 类型的临时变量。此区域与 OB 块的临时变量区域是相对应的,但由于没有变 量名称标识,并且数据类型也不相同,所以用户使用起来非常不方便。如果用户想要使用 S7-SCL 格式的 OB 块内的特有变量,请按下列步骤进行: 在路径 STEP7 的安装路径 Step7S7DATAS7wiz 下,包含所有 OB 块的 STL 格式模板, 可以使用写字板打开这些模板 (例如 OB31.awl), 并复制相应变量定义。 创建一个新的 S7-SCL 源文件并插入刚才复制的变量定义。 调整 S7-SCL 源文件中的语法结构 在这个程序的开始部分, 可以设置

4、 Title 和Version , 例如 Title= 和 Version= 0.1 在 BEGIN 语句后面插入一个分号,至此,即完成格式修改。 另外,也可以打开本文中的 S7-SCL 例子目录中的 OB_Templ 项目,其中包括了 44 个 S7-SCL 源 文件格式的组织块。 A 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。 注意:如果数据块编号及地址都使用了间接

5、寻址方式,则必须使用 S7-SCL 特定的标识方式,例如 A (此格式正确) STATUS_1:=WORD_TO_BLOCK (INDEX).DBW COUNTER; (此格式错误) 图 4-6: S7-SCL 中的 PLC 地址格式 x 可以为 0 至 65535 之间的数字(绝对地址) y 可以为 0 至 7 之间的数字(位地址) 对于其它 FB,OB,DB, T,C 等等的标识格式, S7-SCL 格式基本与 STL 格式相同, 此处不做说明。 4.1.9. 问题:为什么用户人工输入的程序问题:为什么用户人工输入的程序在编译时经常提示语法错误?在编译时经常提示语法错误? 问题:为什么用户

6、人工输入的程序在编译时经常提示语法错误? 解答:S7-SCL 程序和所有的高级语言一样,有着自己特定的语法,而很多编程人员容易在人工输 入程序时忽视语法格式,这样就造成编译错误。因此强烈建议编程人员使用 S7-SCL 的模板向导。 A A1 : INT := 10 ; A2 : STRING6 := FACTOR; A3 : ARRAY1.12 OF REAL := 0.0, 10(100.0), 1.0; 4.1.11. 问题:什么是“AT”指令,如何使用?问题:什么是“AT”指令,如何使用? 问题:什么是“AT”指令,如何使用? 解答: AT 指令是 S7-SCL 中特有的一个指令, 初学

7、者可能会忽略此指令, 或者对其理解不够深刻。 AT 指令在 S7-SCL 中有着非常重要的地位,很多应用程序都必须使用此指令。下面将对此指令进 行详细讲解。 AT 指令可以使用户能够以不同的数据类型来访问一个已经声明的变量。此指令类似于高 A /将 Supply1 定义为 FB10 类型 Supply2,Supply3,Supply4 : FB100; /将 Supply2,Supply3,Supply4 定义为 FB100 类型 4.1.13. 问题:如何在问题:如何在 S7-SCL 程序中实现数据块间接寻址?程序中实现数据块间接寻址? 问题:如何在 S7-SCL 程序中实现数据块间接寻址?

8、 A /字节间接寻址 STATUS_2:= DB12.DXWNO, BITNO; /位间接寻址,用户改变 WNO,BITNO 数值即可 STATUS_1:= Database1.DWCOUNTER; / Database1 为 DB 类型的本地变量 STATUS_2:= Database2.DXWNO, BITNO; STATUS_1:= WORD_TO_BLOCK_DB(INDEX).DWCOUNTER; /INDEX 被定义为 BLOCK_DB BLOCK_DB 数据类型,COUNTER 为整数数据类型,这样可以实现/数据块编号, 字节地址同时间接寻址,此功能是一种功能很强间接寻址方式。

9、/以下是数据块直接寻址方式格式,仅供参考。 STATUSBYTE :=DB101.DB10; /字节直接寻址格式 STATUS_3 :=DB30.D1.1; /位直接寻址格式 MEASVAL :=DB25.DW20; /字直接寻址格式 STATUSBYTE :=Status_data.DB10; STATUS_3 :=New data.D1.1; MEASVAL :=Measdata.DW20; STATUS_1 :=WORD_TO_BLOCK_DB (INDEX).DW10; 4.1.14. 问题:在问题:在 S7-SCL 程序中调用程序中调用 FC/FB 与在与在 STL/LAD 中有何区

10、别?中有何区别? 问题:在 S7-SCL 程序中调用 FC/FB 与在 STL/LAD 中调用 FB/FC 有何区别? 解答:在 STL/LAD 程序中调用 FB 可以不把参数填写完整,但在 S7-SCL 程序中调用 FB 时,必须 把FB参数填写完整; 对于FC的调用S7-SCL与STL/LAD区别不大。 强烈建议编程人员使用S7-SCL 的模板向导调用 FB。下图的程序说明了两者的区别: SCL 中,FB 的输入/输出参数必须填写完 整,而且对输入参数赋值格式与对输出参 数赋值格式不同, FB 的特殊格式务必要引 起重视 图 4-13: STL/S7-SCL 调用 FB 区别 在 STL

11、中,FB 的调用格式 对输入赋值 对输出赋值 A END_VAR MB10:=CHAR_TO_BYTE(STRING_TO_CHAR(MID(IN:=str,L:=1,P:=5); 4.2. 程序优化相关问题 程序优化相关问题 4.2.1. 问题:如何在访问结构时优化运行时间?问题:如何在访问结构时优化运行时间? 问题:如何在访问结构时优化运行时间? 解答:如果需要多次访问一个结构,可在 S7-SCL 代码中也创建一个同样类型的临时变量来优化运 行时间。用户可在临时变量声明中生成此变量,并在程序中多次使用它。 假设用户希望完成如下 操作: DB4.Field.Value:= DB4.Field

12、.Value1*DB4.Field.Value2*DB4.Field.Value3; 可见以上操作数都存在于 DB 的结构当中,在不进行优化的情况下,这段程序在运行时,将多次打 开数据块,进行多次读取操作,程序运行所需时间较多。 定义 DB4 的数据结构 初始化 DB4 图 4-14: 定义数据块 A 解决方法:我们建议以以下给出的两行语句来替代上面的语句: tmp := WORD_TO_BLOCK_DB (DBNo).DBDBIndex; Display := WORD_TO_INT (BYTE_TO_WORD (tmp); 4.3.9. 问题:在编译问题:在编译 UDT 时出现时出现Syn

13、tax error with UNLINKED 问题:在编译 UDT 时出现Syntax error with UNLINKED 解答:如果一个 UDT 在用UNLINKED声明之前已标识,该 UDT 不会被编译通过。UNLINKED属性 不可用于 UDT。编译将会以错误消息Syntax error with UNLINKED结束。该规则也应用于 STL 源 程序声明。UDT 通常不装载到 S7 CPU 中,而总是存储于离线的 S7 用户程序。 相关知识:对于UNLINKED数据块属性,意味着 DB 块有以下特性: 仅仅存储于装载存储器中 不占据任何 RAM 空间。 UNLINKED属性声明在

14、数据块的头部 与程序没有关联关系 A 在 S7-SCL, 数据块由 AWL 编译器生成。如果你在数据块准备部分和赋值部分同时初始化变量,你 必须使用 AWL 专用符号。 因此在示例中的 BYTE 类型的变量, 仅允许指定十六进制数字作为初始值。 S7-SCL 符号 (例如 B#2#1100_1100) 只可用在代码区,因为 S7-SCL 编译器只在代码区被使用。 解决方法:将二进制数字改为十六进制数字作为初始值, 例如: Var1: BYTE: = b#16#cc; 4.4. 与监控调试相关问题 与监控调试相关问题 4.4.1. 问题:为什么我的程序编译通过,但无法运行?问题:为什么我的程序编

15、译通过,但无法运行? 问题:为什么我的程序编译通过,但无法运行? 解答:当使用 S7-SCL 语言时,建议使用的 CPU 类型 最低为 CPU314。即便如此,用户也应当注 意系统资源的限制。例如:当定义临时变量的时候,不要超过所用 CPU 技术参数中的本地数据大 小的限制。否则可能导致程序无法运行。 4.4.2. 问题:为什么我的程序无法被监控?问题:为什么我的程序无法被监控? 问题:为什么我的程序无法被监控? A&D Service & Support Page 38-39 解答:为了程序可以被监控,在编译 S7-SCL 程序时,在菜单 OptionsCustomizeCompiler 中

16、, 应当选择 Create debug info 项。注意:Create object code 项也应当被选择,否则程序编译时仅仅 作语法检查,而不生成可执行程序。Optimize object code 项也应当被选择,此选项将优化程序 代码。 4.4.3. 问题:在问题:在 S7-SCL 哪些变量在监控时无法被显示?哪些变量在监控时无法被显示? 问题:在 S7-SCL 哪些变量在监控时无法被显示? 解答:在监控时,如下变量无法被显示: 复杂数据类型不被显示,但复杂数据类型中的基本数据类型可以被显示(例如字节数组中 的某个字节) DATE_AND_TIME、 STRING、 BLOCK_F

17、B、 BLOCK_FC、 BLOCK_DB、 BLOCK_SDB、 TIMER、 COUNTER 不被显示 以符号格式访问的数据块不被显示,例如:myDB.DW0, myDB 为某个数据块的符号名 注意:有时候监控变量的数据超出了 CPU 能够提供的资源数量,也将出现部分无法显示的情况。 5. 附录推荐网址附录推荐网址 5.1. 西门子自动化与驱动产品的在线技术支持 西门子自动化与驱动产品的在线技术支持 西门子(中国)有限公司自动化与驱动集团 客户服务与支持中心 网站首页: 专家推荐精品文档: AS常问问题: AS更新信息: “找答案”AS版区: A&D Service & Support Page 39-39

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1