西门子STL源码解读:模拟量计算模块SCALE

西门子STL源码解读:模拟量计算模块SCALE

编码文章call10242025-02-13 11:06:339A+A-

最近有个朋友问我能不能给把一个STL程序块给转换成SCL,他说这个程序是他们公司大佬写的程序,有个模拟量处理的块是STL的他看不懂,想让我给转成SCL的,我一看这不是SCALE块,这个块以前我解读过,就把这个代码分享一下。

STL源码

使用博图之后数据接口和程序的可读性好了很多

STL代码解读

1、SET

2、A #BIPOLAR //模拟量极性

3、JC EL01

如果#BIPOLAR为TRUE,也就是设置了模拟量的极性跳转到第7行EL01处。

4、L 0.0e+0

5、T #K1

6、JU EI01

如果未设置模拟量的极性#K1等于0.0,强制跳转到第9行EI01行。

7、EL01: L -2.7648e+4

8、T #K1

如果设置模拟量的极性#K1等于-2.7648e+4

9、EI01: NOP 0

10、L 2.7648e+4

11、T #K2

变量#K2赋值为2.7648e+4。

12、L #IN

13、ITD

14、DTR

15、T #IN_REAL

将模拟量接口的数值#IN,转换为双整形,再转换为实形,赋值给#IN_REAL

16、L #HI_LIM

17、L #LO_LIM

18、-R

19、T #SPAN

计算模拟量实际值的上下限的范围赋值给#SPAN

20、L #IN_REAL

21、L #K1

22、>=R

23、JC EL02

如果输入值#IN_REAL>#K1,正常模拟量通道返回的值#IN_REAL应该在K1K2之间。判断模拟量的值是否大于下限。

取值正常跳转到第29行EL02处,不在正常范围内执行24行。

24、L 8

25、T #scale //返回值

26、L #LO_LIM

27、T #OUT

28、JU FAIL

低于下限异常处理代码,返回值#scale为8,输出下限值,跳转到58行FAIL处。

29、EL02: POP

30、L #K2

31、<=R

32、JC EI04

此处判断模拟量取值是否高于上限,正常值跳转到38行EL04处,超出则执行33行

33、L 8

34、T #scale

35、L #HI_LIM

36、T #OUT

37、JU FAIL

高于上限异常处理代码,返回值#scale为8,输出上限值,跳转到58行FAIL处。

38、EI04: NOP 0

39、NOP 0

40、L #K2 //27648.0

41、L #K1 //0或者-27648.0

42、-R

43、T #TEMP1

44、L #IN_REAL

45、L #K1

46、-R

47、L #TEMP1

48、/R

49、L #SPAN

50、*R

51、L #LO_LIM

52、+R

53、T #OUT

执行模拟量运算的经典公式,OUT为模拟量计算的输出值

54、L 0

55、T #scale

56、SET

57、JU SVBR

模拟量值正常是,则返回值#scale为0,使能ENO输出。

58、FAIL: CLR

59、SVBR: SAVE

如果模拟量超过上下限的时候,返回值#scale为8,不使能ENO输出。

SCL代码解读

下面是根据STL代码转写的SCL程序,用SCL一行可以实现很多的运算。




IF #BIPOLAR THEN   //根据极性确定K1的值
    #K1 := -2.7648e+4;
ELSE
    #K1 := 0.0e0;
END_IF;
#K2:= 2.7648e+4;
#IN_REAL := INT_TO_REAL(#IN); //通道输入模拟量转为浮点型
#SPAN := #HI_LIM - #LO_LIM;   //模拟量上下限范围
IF #IN_REAL < #K1 THEN     //低于下限异常处理
    #scale2 := 8;
    ENO := false;
    #OUT := #LO_LIM;
ELSIF #IN_REAL > #K2 THEN //高于上限异常处理
    #scale2 := 8;
    ENO := false;
    #OUT := #HI_LIM;
ELSE                                         //正常数值计算
    #TEMP1 := #K2 - #K1;
    #OUT := (#IN_REAL - #K1) / #TEMP1 * #SPAN + #LO_LIM;
    #scale2 := 0;
END_IF;



如果大家有代码需要解读,欢迎私信给我,我是山东王建设,专注于西门子STL代码解读,期待您的点赞与关注。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4