AI 助理
备案 控制台
开发者社区 安全 文章 正文

SCL与STL的区别,16个SCL常见问题及解答

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
函数计算FC,每月15万CU 3个月
简介: SCL与STL的区别,16个SCL常见问题及解答

SCL  与 与 STL :

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


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格式。


640.jpg


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

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


640.png


调用 FC1,得到返回值:


640.png


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


640.jpg


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]; (此格式错误)


640.png


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

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

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

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


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


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

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


640.jpg


9、S7-SCL 程序中如何使用多重背景?


解答:S7-SCL 程序中可以使用多重背景,下面的程序列出了正确格式,声明完成后,在程序中即可调用:

Supply1 : FB10;  //将 Supply1 定义为 FB10 类型

Supply2,Supply3,Supply4 : FB100;  //将 Supply2,Supply3,Supply4 定义为 FB100 类型


10、如何在 S7-SCL 程序中实现数据块间接寻址?


解答:S7-SCL 程序中对数据块间接寻址提供了良好的支持,编程也很简单。下面的程序列出了正确格式:


STATUS_1:= DB11.DW[COUNTER];  //字节间接寻址

STATUS_2:= DB12.DX[WNO, BITNO];  //位间接寻址,用户改变 WNO,BITNO 数值即可

STATUS_1:= Database1.DW[COUNTER];  // Database1 为 DB 类型的本地变量

STATUS_2:= Database2.DX[WNO, BITNO];

STATUS_1:= WORD_TO_BLOCK_DB(INDEX).DW[COUNTER];

//INDEX 被定义为  BLOCK_DB 数据类型,COUNTER 为整数数据类型,这样可以实现/数据块编号,

字节地址同时间接寻址,此功能是一种功能很强间接寻址方式。

//以下是数据块直接寻址方式格式,仅供参考。

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;

11、在 S7-SCL 程序中调用 FC/FB 与在 STL/LAD 中调用 FB/FC 有何区别?


解答:在 STL/LAD 程序中调用 FB 可以不把参数填写完整,但在 S7-SCL 程序中调用 FB 时,必须把FB参数填写完整;对于FC的调用S7-SCL与STL/LAD区别不大。强烈建议编程人员使用S7-SCL的模板向导调用 FB。


12、为了将 S7-SCL 中的位数据类型(BYTE, WORD 或 DWORD)转换到“REAL”数据类型时,需要使用哪种数据类型转换程序?


解答:为了将 S7-SCL 中的位数据类型(BYTE, WORD 或 DWORD)转换到数字数据类型“REAL”时,需要使用以下指令:

•  从 BYTE 到 REAL:“DINT_TO_REAL(DWORD_TO_DINT(BYTE_TO_DWORD(value))”

•  从 WORD 到 REAL:

“DINT_TO_REAL(DWORD_TO_DINT(WORD_TO_DWORD(value))”

•  从 DWORD 到 REAL:

“DINT_TO_REAL(DWORD_TO_DINT(value))”


注意事项:用户在将 BYTE, WORD 或 DWORD 数据类型转换到 “REAL” 数据类型时,S7-SCL中常见的错误可以参考下例:


从 WORD 到 REAL:“DWORD_TO_REAL(WORD_TO_DWORD(value))”(错误程序)。

如果执行了这一转换,会得到错误的结果。


原因:DINT_TO_REAL 函数将把源数据转换并按照 IEEE REAL 的格式存储到目的变量,而DWORD_TO_REAL 仅仅是从源数据拷贝位串至目的变量。


因此,为了获得正确的“REAL”数,必须总是通过中间步骤“DWORD_TO_DINT”和“DINT_TO_REAL”实现。


13、在 S7-SCL 中如何区分某个变量名是本地变量,还是符号名?


解答:S7-SCL 中本地变量与符号名的引用有如下区别:


•  如果引用中只有变量名,则此变量为本地变量,如:Motor_Status:= Motor_1

•  如果引用中变量名称上包括“”,则此变量为符号名,如:Motor_Status:= “Motor_1”


14、如何访问一个字符串中的单个字符?


解答:对于字符串中的单个字符,使用如下的访问格式,是错误的:


MB10 := str[5] 这样的表达式无法实现将字符串的第 5 个字符送至 MB10 中。


方法:可以使用 IEC 函数 MID 来得到字符串的某个部分,例子如下:

VAR

str : STRING[20];

END_VAR

MB10:=CHAR_TO_BYTE(STRING_TO_CHAR(MID(IN:=str,L:=1,P:=5)));


15、如何加密我的 S7-SCL 程序?


解答:S7-SCL 程序加密与 STL 程序加密方法几乎一样,用户可以在程序中加入关键字:KNOW_HOW_PROTECT,再进行编译即可,下图中的 FC1 在编译后,即出现了加锁保护的图标 。


注意:提供给最终用户的项目中应当删除 S7-SCL 源代码,否则用户在双击加密的块后(例如下图中的 FC1),依然可以关联打开 S7-SCL 源代码。


640.jpg



注意:提供给最终用户的项目中如果删除 S7-SCL 源代码,用户将只能看到 STL 格式的程序,稍微复杂些的 S7-SCL 程序在 STL 格式下几乎是无法阅读的。此方法类似于加密的效果。


16、如何对 S7-SCL 程序中的数据块及静态变量初始化?


解答:S7-SCL 程序中对数据块及静态变量初始化和 STL 语言格式类似,下面的程序列出了正确格式:

DAT1 : REAL := 100.5;

A1 : INT := 10 ;

A2 : STRING[6] := 'FACTOR';

A3 : ARRAY[1..12] OF REAL := 0.0, 10(100.0), 1.0;

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
游客jfclsu2z7ufhs
目录
相关文章
整日摸鱼的小黑猫
|
5月前
|
算法 C++ 容器
C++ STL:空间配置器源码解析
C++ STL:空间配置器源码解析
整日摸鱼的小黑猫
76 0
廖文
|
10天前
|
算法 编译器 C语言
STL基础介绍
STL基础介绍
廖文
30 0
微客大师
|
4月前
|
C++ 容器
STL标准库之《stack原理与实战分析》
STL标准库之《stack原理与实战分析》
微客大师
37 0
微客大师
|
4月前
|
存储 算法 大数据
STL标准库之《deque原理与实战分析》
STL标准库之《deque原理与实战分析》
微客大师
40 0
godspeedlucip-44601
|
5月前
|
机器学习/深度学习 算法 C++
C++模板与STL【STL概述】
C++模板与STL【STL概述】
godspeedlucip-44601
37 0
可涵不会debug
|
C++ 容器
STL库之集合基本使用方法
STL库之集合基本使用方法
可涵不会debug
124 0
你的小笔记本YY
|
5月前
|
C++ 容器
【C++】STL容器——探究不同 [ 迭代器 ] 种类&在STL中的使用方式(15)
【C++】STL容器——探究不同 [ 迭代器 ] 种类&在STL中的使用方式(15)
你的小笔记本YY
52 0
小程序面包园
|
5月前
|
编译器 C++
C++之STL库:string类(用法列举和总结)
C++之STL库:string类(用法列举和总结)
小程序面包园
111 0
烽起黎明
|
10月前
|
算法 C语言 C++
【C++】STL之string类概述-2
【C++】STL之string类概述
烽起黎明
44 0
烽起黎明
|
10月前
|
存储 Linux 编译器
【C++】STL之string类概述-1
【C++】STL之string类概述
烽起黎明
46 0

热门文章

最新文章

  • 1
    树莓派 Raspberry Pi (bullseye)更换阿里云源方法
  • 2
    阿里技术高P访谈之“呆萌”程序员蒋晓伟为何从Facebook到阿里巴巴
  • 3
    ODPS技术架构及应用实践
  • 4
    TensorFlow中的那些高级API
  • 5
    安装Zabbix过程中出现的问题集
  • 6
    阿里云郑晓:浅谈GPU虚拟化技术(第三章)
  • 7
    LightBus新浪微博客户端开源下载
  • 8
    JS字符串 window.open() window.opener window.name window对象总结
  • 9
    在iOS虚拟键盘上添加动态隐藏按钮
  • 10
    Java-类库-Guava-Throwables类
  • 1
    使用Python实现深度学习模型:智能设备故障预测与维护
    28
  • 2
    安全运维:入侵检测与防御实战指南
    26
  • 3
    阿里云短信平台API错误码提示错误天级流控显示小时级错误码
    25
  • 4
    阿里云短信服务文档与实际API不符
    26
  • 5
    二维数组在物理上以及逻辑上的数组维度理解
    27
  • 6
    C语言:数组名作为类型、作为地址、对数组名取地址的区别
    13
  • 7
    C语言:一维数组的不初始化、部分初始化、完全初始化的不同点
    12
  • 8
    【通信协议讲解】单片机基础重点通信协议解析与总结之ModBus(五)
    17
  • 9
    【通信协议讲解】单片机基础重点通信协议解析与总结之CAN(四)
    15
  • 10
    【通信协议讲解】单片机基础重点通信协议解析与总结之串口通信(三)
    12
  • 相关课程

    更多
  • Go语言核心编程 - 数据结构和算法
  • 相关电子书

    更多
  • 低代码开发师(初级)实战教程
  • 冬季实战营第三期:MySQL数据库进阶实战
  • 阿里巴巴DevOps 最佳实践手册
  • 下一篇
    阿里云无影云电脑免费试用,最长可试用3个月

    玻璃钢生产厂家揭阳玻璃钢海豚雕塑朝阳区玻璃钢雕塑工程报价江苏酒店玻璃钢造型雕塑制作绍兴玻璃钢雕塑摆件销售杭州玻璃钢雕塑厂招工信息佛山玻璃钢火烈鸟雕塑辽宁玻璃钢雕塑厂家外贸玻璃钢动漫雕塑厂蝴蝶玻璃钢雕塑定做郑州公园玻璃钢雕塑南京定制玻璃钢雕塑推荐厂家玻璃钢雕塑厂要在哪寻找客源玻璃钢卡通人物雕塑制作厂蚌埠创意玻璃钢雕塑制作玻璃钢卡通雕塑工艺新化玻璃钢卡通雕塑河南步行街玻璃钢雕塑图片江西佛像玻璃钢雕塑图片邢台玻璃钢卡通雕塑价格青海玻璃钢景观雕塑公司中山玻璃钢雕塑价格表火炬玻璃钢雕塑山东常用商场美陈生产厂家濮阳大型玻璃钢人物雕塑制造商场装饰玻璃钢卡通雕塑哪家便宜庆阳玻璃钢牛雕塑玻璃钢校园名人雕塑甘肃玻璃钢寺庙雕塑浙江大型主题商场美陈哪家好泰州玻璃钢卡通门头雕塑设计香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化