Classic step7上使用SCL

最近因为工作需求的变化,又回头用上了很多年前的step7。用习惯博图之后再回到step7上确实是一个很逆向的事情,但是没办法,项目需要也就只能遵守这个规则。
东西再老,只要认真去做,也会有新发现。

1. 搭建一个全新的SCL块

  • 首先新建项目,选择SCL source,然后打开它:
  • 选择模板,FB/FC都行,这里选择FB模板:

把对应的FBxxx改成实际的FB编号
VAR TEMP是FB的临时变量;
VAR是FB的静态Static变量

  • 模板选择完成之后,可以选择参数模板(定义变量的IN/OUT/INOUT接口模板):

选择参数模板之后,可以看到多了VAR INPUT,VAR IN_OUT,VAR OUTPUT一类的宏,这明显对应了FB块的三类接口。

  • 对应的,实际项目中,还需要其他模板,也可以在Insert中择需选择:
    • 选择插入DB则插入一段共享DB,长度自己在参数中定义
    • 选择插入Instance DB则插入一段背景DB,
    • 插入Constant表示插入常量
    • 插入Comment表示插入注视,包括一些版本信息
  • 更改为实际的FB编号之后(如此处是FB1),点击编译,会发现生成了新的FB1:

  • 简单定义一下输入参数后的实际效果:

2. 导入其他来源的SCL文件(比如博图)

  • 导入源文件:
  • 导入之后的一些兼容性问题:

红色标记处都是有一些兼容性问题的,因为博图是用的符号访问,返回到Step时,格式反而不对了,要改回fb编号才行。
ton_time,S7_Optimized_Access那些都是后期才支持的东西,放在老版本上明显不兼容了。

  • 代码逻辑和博图上写的没有明显差异:

  • 导入的文件在使用之前还是需要多多查查兼容性才行。

3. PIQ批量赋值

  • 直接用QW[index_num]:= 16#FFFF就行,中括号中放的是绝对寻址数。
  • 在经典step7的寻址上,SCL和STL有一定情况的通用:

stl和scl的通用

地址寻址

间接寻址

AT的使用:

  • 用AT映射UDT:


  • 结合ANY,用AT映射struct:

posted @ 2024-11-01 23:42  不愿透露姓名的小村村  阅读(120)  评论(0编辑  收藏  举报