西门子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 then
   e:=TRUE;
else
  e:=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 DO
    b:=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 then
   case c of
      0:d:=TRUE;
      1:e:=0;
    ELSE
      f:=0;
   end_case;
else
   b=0 
end_if;

翻译后,在STL语言中:

A a
JC MAIN
L 0
T b
JU END

MAIN: L C
L 0
==I 
JC CASE0
L C
L 1
==I
JC CASE1
JU CASEDEF

CASE0:L 1
T d
JU ENDCASE

CASE1: L 0
T e
JU ENDCASE

CASEDEF: L 0
T f
ENDCASE: NOP 0
END: NOP 0

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值