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: