西门子TIA-SCL转STL指令项目案例及技巧
文章目录
-
- 前言
- 📑知识点①:赋值指令
- 📑知识点②:条件执行
- 📑知识点③:循环执行
- 📑知识点④:分支执行
- 📑知识点⑤:调用程序
- 案例
前言
提示:这是一篇关于SCL转换成STL编程语言的文章
在西门子TIA软件中,将STL转换SCL语言有相关的工具,这个不再细谈,可以查找很多资料且有迹可循,但将SCL转换STL指令的资料确是很少。记得上次使用STL指令还是学生时期,之前有朋友项目上遇到需要将SCL转换STL指令,借此机会,研究了下STL指令,成功编译并仿真实现了同样的功能。
📑知识点①:赋值指令
提示:在LAD等编程语言中使用Move指令,比较常见。指令解释:L-加载指令,T-传送指令;
源程序,在SCL语言中:
b:=a
翻译后,在STL语言中:
L b
T a
以上是否很简单,那么我们使用数组+变量增加下难度。
源程序,在SCL语言中:
b[m+1]:=a[m]
翻译后,在STL语言中:
L m
T x
L x
+ 1
T y
L a[x]
T b[y]
📑知识点②:条件执行
提示:"与","或","非"是电路组成的基本知识,指令解释:A-与,O-或,X-异或,AN-与非,ON-或非,XN-异或非
源程序,在SCL语言中:
if a and b=0 or c=0 or not d thene:=TRUE;
elsee:=false;
end_if;
翻译后,在STL语言中:
A a
A(
L b
L 0
==I
)
O(
L c
L 0
==I
)
ON d
= e
📑知识点③:循环执行
提示:为了提高编程效率,常用for循环遍历执行运算,指令解释:JC-满足跳出,JU-无条件跳出, L_LOOP-循环开始标记,可自定义,L_END-循环结束标记,可自定义。
源程序,在SCL语言中:
for a:=0 TO 10 DOb:=b+1;
end_for;
翻译后,在STL语言中:
L_LOOP:L a
L 10
>I
JC L_END
L a
+1
T a
JU L_LOOP
L_END: NOP 0
📑知识点④:分支执行
提示:如果遇到多层嵌套或者分支语句,可以进行多次拆分和跳转,一定要做好编号,建议先执行小语句,验证完成后,再嵌入大语句中即可,指令解释:同上;
源程序,在SCL语言中:
if a thencase c of0:d:=TRUE;1:e:=0;ELSEf:=0;end_case;
elseb=0
end_if;
翻译后,在STL语言中:
A a
JC MAIN
L 0
T b
JU ENDMAIN: L C
L 0
==I
JC CASE0
L C
L 1
==I
JC CASE1
JU CASEDEFCASE0:L 1
T d
JU ENDCASECASE1: L 0
T e
JU ENDCASECASEDEF: L 0
T f
ENDCASE: NOP 0
END: NOP 0