课程中心
HOME
课程中心
正文内容
plc编程stl好处 有人说:SCL将成为PLC的主流编程语言?
发布时间 : 2025-04-19
作者 : 小编
访问数量 : 23
扫码分享至微信

有人说:SCL将成为PLC的主流编程语言?

现在很多大品牌的中高级 PLC 都支持国际电工委员会 IEC61131 标准中规范的五种编程语言的混合编程,即梯形图(LD)、结构化文本(ST)、流程图(SFC)、指令表(IL)和功能块(FB)。在这五种编程语言中,

此外,由于西门子 S7 系列 PLC 在国内工控领域中使用很广,它的编程软件 Step7 默认情况下只支持梯形图和指令表编程,但通过安装“S7-SCL”软件包和“S7-Graph”软件包可实现结构化文本和流程图编程。

结构化文本是一种类似于计算机高级语言的编程方式,它的语法规范接近计算机中的PASCAL 语言。

所以有人就问:SCL将成为PLC的主流编程语言么?

于是很多电气人发表了自己的看法,一起来看看吧!

bnnyygy 说:

我献丑来一个,半成品,给设备改造的,用的欧姆龙CP1L,ST语言功能块,部分节选。

wenpian 说:

还是梯形图适合逻辑。

ljj977 说:

程序写的不错。tia protal中可以采用SCL与LAD混编的模式。这样的灵活性就更大了。

作为一个有C基础的人来说,用SCL他可能更擅长,入门更快。作为习惯了LAD编程的人员来说,写一般的逻辑关系程序,确实要清晰些。

计算机的普通编程人员将会有一部分人能胜任1200的编程工作,而且他们的转行不会有多大的门坎。可以说,PLC的编程人员来源会更广泛。

fujifa 说:

在JAVA出现之前,C语言的菜鸟们也是认为C语言将一统江湖,在PYTHON出来之前,JAVA的菜鸟们也是这么认为的。菜鸟们总是习惯使用必将,一定等词汇来描述他们认为的事物,为什么老鸟们不这样认为呢?因为老鸟们知道:

1:SCL,也就是ST语言,编译为机器码的执行效率比其他语言效率低。

2:梯形图编程语言也在进步,去看看诸如富士、AB这类在梯形图中使用高级语言编程等增强型梯形图语言的厂家就知道了。

hgxmm123 说:

老外喜欢用SCL语言编程,它功能丰富。国人喜欢用梯形图编程,易于推广。

有些PLC语言不能实现的功能,用SCL就能实现。

twtynijj 说:

最多只能说是备选的语言方法 ,主流怕是很难,可读性并不是很好,推广也难。老外是因为人家母语就是字母组成,对他们来说可读性还是非常强。

现在PLC还是以LAD SFC ST CFC 这一类为代表,也符合IEC标准的。如果哪一家PLC只有一种你说的SCL,怕是干不了几年在中国就只能关门了,这是由市场决定的。

cvlsam 说:

西门子之所以称为SCL而不是ST,是因为其编程语言指令表叫做STL,为了避免混淆,所以叫做SCL,其实就是其他厂家的ST语言。

“还是以 LAD SFC ST CFC 这一类为代表”,看到这句就说明您不太熟悉西门子了啊。

twtynijj 说:

嗯,西门子是不熟悉,刚出社会那会接触过。换工作环境后就没怎么接触。而且也只会用梯形图呀。

pqsh 说:

我觉得,5-10年这些语言都将消失。

人工智能,会听懂人的语言和思想。只要你说清楚,机器就会执行。当然,这样汉语会失去优势,因为汉语逻辑不严谨。

fsjnzhouyan 说:

现在有些智能家居就能接收中文语音控制家电。

vao 说:

梯形图,这种应该是主流趋势,不是你自己擅长什么就一定会主流,工人容易看懂的才好。

gaoyingchun 说:

工控人要失业了

ljj977 说:

在数据的处理方面,SCL还是要比LAD更具有它的它快捷性,计算的功能也是十分强大的。比如一个一维数组,你在使用时,感觉用LAD不难,但一个二维数组、一个多维数组你再使用LAD编程,难度就要大多了。

作为博图软件三大编程语言,SCL就是其中的标配,在原来300/400编程语言中,还没有列入标配行列之中。这也说明了西门子对它的重视,也给大家一个信号。因此了解它、学习它还是有必要的。

SCL是三大语言之一,说它是主流的编程语言不为过吧。

cvlsam 说:

用过AB的梯形图的话,觉得其他语言都可以不要了。

其实三大语言并不包括ST语言。

以前是梯形图,指令表和功能块,现在部分厂商取消了指令表,被SFC替代了。

当然,多学习一点没有错,不过不是以西门子SCL语言为基础,西门子的SCL语言离标准还有点距离,要用也应该从菲尼克斯的学起,人家才是完全符合IEC标准的。

wgefwgef 说:

越是菜鸟,越是水平差,越抵制ST。

逍遥的久鸣 说:

不管白毛黑猫抓到老鼠才是好猫,越简单明了越好,这么多年过去了,梯形图还是那么坚挺!

如果后期维护,现场水平不高,是不是就要失业了?

hnhyczj 说:

高级语言应当是发展的方向。

乌龟船长 说:

老外喜欢用SCL语言编程,它功能丰富。国人喜欢用梯形图编程,易于推广。

fuhuafeng72 说:

SCL确实好,但一些工控不适合。

ljj977 说:

LAD是PLC编程使用最广泛的语言,用户量最多,当然它是老大。但SCL也一定会壮大起来的,因为它有自己优势。这里并不是说LAD不好,但有时候,有些人用SCL去编程反而更方便,特别是熟悉高级语言(如C语言等)的人。这两种语言的使用肯定是因人而异的,喜好不同、知识背景不同,他们的选择就不同。

用LAD语言写的程序,复杂一点的话,一般的电工是看不懂的。说句实在话,LAD语言,当初就是为电工准备的编程语言。那时候只有逻辑控制。电工如果满足了一般的逻辑控制,数据处理程序的编写就成了一句空话,别人用LAD写出来的程序也不见得看得懂。

现在时代不同了,PLC不只是去处理逻辑控制,还多了好多些功能。老早之前,S7-200就明显看到它的结构化编程的思想。300/400,到现在的1200/1500,它们都在朝着更先进的方向发展,LAD的语言更是如此。现在的LAD就是面向开发人员、工程师、技术人员的。再说电工也分好几类吧,一般的电工在工厂里是接触不到编程这一块的。LAD现在也是也是十分强大。

SCL未来将成为主流的语言,并不意味着LAD不是主流语言。大家还是不要误解了我的观点。

SCL能作为标配的编程语言出现在博途中,说明了什么,不正是说明它的存在价值吗。

年轻的朋友们,如果感兴趣,学习一下SCL语言的程序编写,我觉得还是蛮好的。

liuxd6909 说:

但凡是主流都是被大多数人所认同 的,所接受的。

fuhuafeng72 说:

企业有三六九等,很多小作坊,你给他传统的继电器系统原理图都搞不明白,不要说英文类C的程序了。世界就是个矛盾体。

LAD确实是一种不错的编程方式,之于类C,形如安卓之于IOS。

zhanghaiw 说:

做逻辑SCL确实不怎么样,搞搞算法还可以。建议LAD+SCL的组合,感觉非常棒。

965528555 说:

做逻辑也是非常好的,算法更是好用。而且方便转换其他PLC

以上观点都非常棒!至于结论如何,小编自身觉得每个语言都有自己的可取之处,对于大型的主流化编程语言,是作为一个资深的电气人应该了解的内容,时刻把握行业潮流动态,才不会让自己处于被动状态。看了以上内容,你觉得呢?留言哦!

往期优秀文章回顾:

新手学西门子PLC,要从哪开始?「附PLC与电动机控制精品讲解」

SCL与STL的区别是什么?SCL常见问题及解决办法

一、SCL 与 STL

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

STL是STEP7时代推出的语言,它不是STRUCT TEXT LANGUAGE的缩写,所以它和ST语言完全没关系。STL语言是一种汇编语言,是面向机器底层的语言,可以直接操作寄存器,可读性不强,和80C51单片机的机器语言是一个层面。所以它是一种低级语言,而ST和SCL都是中高级语言。

二、S7-SCL 常见问题

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

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

• 规划需要的块类型,即程序的整体结构;

• 规划子任务(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格式。

【文末免费领取学习电工/PLC学习资料】

【文末免费领取学习电工/PLC学习资料】

【文末免费领取学习电工/PLC学习资料】

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 (返回值)

调用 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 之间的数字(绝对地址),y 可以为 0 至 7 之间的数字(位地址),对于其它 FB,OB,DB, T,C 等等的标识格式,S7-SCL 格式基本与 STL 格式相同,此处不做说明。

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

解答:S7-SCL 程序和所有的高级语言一样,有着自己特定的语法,而很多编程人员容易在人工输入程序时忽视语法格式,这样就造成编译错误。因此强烈建议编程人员使用 S7-SCL 的模板向导。在菜单 Insert 中,提供了 Block Call, Block Template, Control Structure, 三个向导,用户可以通过使用此向导,提高输入效率。例如在下图中指出了两个常见错误,用户如果使用向导,就不容易出错误:

【文末免费领取学习电工/PLC学习资料】

【文末免费领取学习电工/PLC学习资料】

【文末免费领取学习电工/PLC学习资料】

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

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

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

Supply2,Supply3,Supply4 : FB100;

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

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

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

<1>下面的程序列出了正确格式:

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 为整数数据类型,这样可以实现数据块编号,字节地址同时间接寻址,此功能是一种功能很强间接寻址方式。

<2>以下是数据块直接寻址方式格式:

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 源代码。

注意:提供给最终用户的项目中如果删除 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;

小贴士

今天小编就给大家分享一部电气软件的“葵花宝典” 。这市面上少有,整理汇总齐全且免费下载,且针对电气从业者,量身归类梳理的,兼具实用与专业技术为一身。电工必备软件(电脑版+手机APP) ,供大家下载收藏,一起来看看!

★如何领取?★

①点击技成PLC课堂主页点击“关注

②选择“免费资料 ”即可,喜欢请多多点赞分享!

相关问答

西门子PLC中STLMOVE指令具体有什么作用?

MOVE:移动字节指令,将输入字节(IN)移动至输出字节(OUT),不改变原来的值。MOVE:移动字节指令,将输入字节(IN)移动至输出字节(OUT),不改变原来的值。

是不是学会了stl语言,就不用学习个个品牌的plc了?

即使学会IEC标准的STL语言,针对各个品牌的PLC在应用中还是会有很大不同。工业界的语言很少有大范围通用的,这是应该重点批评的地方,但也大多是历史遗留问题,...

三菱PLC,STL指令怎么用的?

答:三菱plc、stl指令用法:(1)STL触点与母线相连,与STL触点相连的起始触点应使用LD或LDI指令。即使用STL指令后,LD点移至STL触点的右侧,一直到出现下一...

PLC中,指令STL,SET是什么意思,在哪用?M8029的用法又是什么?

STL是步进触点指令,用于“激活”某个状态。SET是置位指令,转移方向用。STL触点一般是与左侧母线相连的常开触点,当状态步成为活动步时,对应的STL触点接通...S...

三菱PLC,STL指令到底怎么使用?

三菱PLC的STL指令是一种结构化文本语言,可用于编写程序。其使用方法如下:根据需要编写STL指令。在编写STL指令时,需要注意语法的正确性,确保指令能够被正确...

请问西门子PLC编程语言“语句表(STL)”的全拼是什么?

PLC厂家设计了专门用于编制顺序控制程序的指令和编程元件。其中,STL为步进梯形指令(StepLadderInstruction)。使用STL指令时应该注意以下一些问题:1)与ST...

三菱PLC中STL指令怎么写?

STL指令用于将一个寄存器或标志位的内容设为1,格式为STLPn.0(其中n为PLC中I/O模块的编号,0为该模块中的第一个输出点),如STLP0.0表示将I/O模块0中的第一个...

三菱plc的stl指令中~跳步是不是set和out都可以使用?为什么?

三菱PLC中的STL步进指令,SET和OUT都可以使用,只不过是要求输出保持和非保持的问题,保持用SET非保持用OUT就行了。三菱PLC中的STL步进指令,SET和OUT都可以使用...

stl指令编写流程?

STL(StructuredTextLanguage,结构化文本语言)是一种用于PLC(可编程逻辑控制器)程序编程的高级语言,可用于实现复杂自动化过程的逻辑控制。下面是STL指令...

plc中stl指令中TAK的英文全称是什么_作业帮

[最佳回答]TAK(toggleACCU1withACCU2)exchangesthecontentsofACCU1withthecontentsofACCU2.

 湘桂铁路  爱如夏花 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2025  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部