上面提供了两个 STL 示例。STL 程序员可使用组只能显示在 STL编辑器中的简化
STL 指令。这是因为用作 LAD/FBD 能流输入的 BOOL 参数不保存到 L 存储器。
第二组编译器生成的 STL 指令可显示在 LAD、FBD 和 STL
编辑器中,因为程序编译器使用 L 存储器来保存在 LAD/FBD 中为能流输入的 BOOL
输入参数的状态。
地址参数(例如,IN4 (&VB100))传入子例程作为
DWORD(无符号双字)值。对于调用例程中常数值前面有常数描述符的参数,必须为其常数参数类型。例如:要传送值为 12,345
的无符号双字常数作为参数,必须将常数参数为
DW#12345。如果参数中遗漏了对于常数的说明,则可将该常数认定为不同类型。
不对输入或输出参数自动执行数据类型转换。例如,如果变量表参数的数据类型为 REAL,但在调用例程中,为该参数双字 (DWORD)
数据类型,则子例程中的参数值将是双字数据类型。
值传递到子例程后,存储在子例程的局部存储器中。变量表的左列显示各传递参数的局部存储器地址。调用子例程时,输入参数值将到子例程的局部存储器中。子例程执行完成时,从子例程的局部存储器将输出参数值到输出参数地址。
数据元素大小和类型用参数的编码表示。参数值到子例程中的局部存储器的分配如下所述
:
● 参数值按照带参数的调用子例程指令的顺序分配给局部存储器,起始地址是 L
0.0。
● 一至八个连续位参数值分配给从 Lx.0 到 Lx.7 的单个字节。
● 字节、字和双字值分配给以字节为边界的局部存储器(LBx、LWx 或 LDx)。
在带参数的子例程调用指令中,必须按照一定的顺序排列参数,输入参数在前面,是输入/输出参数,是输出参数。
如果使用 STL 编程,则 CALL 指令的格式是:
CALL 子例程编号, 参数 1, 参数 2,... , 参数 16示例:子例程和子例程返回指令
LAD
STL
MAIN
扫描时,调用子例程 0
进行初始化。
Network 1 LD SM0.1 CALL SBR_0
SBR0
可以在后一个程序段前使用有条件返回指令来退出子例程
。
Network 1 LD M14.3 CRET
SBR0
如果 M14.3
接通,将跳过此网络。
Network 2 LD SM0.0
MOVB 10, VB0
示例:使用字符串参数的子例程调用
此示例根据给定输入的状态将不同字符串文字到地址。此字符串的地址被保存。通过间接地址将字符串地址传入子例程。子例程输入参数的数据类型是字符串
。子例程将字符串移到其它位置。
字符串文字也可传入子例程。子例程内的字符串引用始终相同
西门子PLC模块6ES7531-7NF00-0AB0
使用Starter / SCOUT调试
如图9所示:在SteP7项目中生成了两个驱动项目“SINAMICS_S120_CU320"和"SINAMICSxS120xCBE20v1",分别是驱动在PROFIBUSDP和PROFINET IO网络上生成的。本例中PC与CBE20之间通过网线连接,用如图9的方式既可直接打开Starter或SCOUT 及驱动项目。
图 9.
可通过使用"configuration"对驱动装置进行手动配置。配置结束后编译保存。
本例中:在Scout中选择同样的报文结构,并与SteP7 HW Config中定义的报文结构保持*,并单击“Transfer toHw Config"按钮
图 10.
注意:S120支持两个周期性通讯接口IF1和IF2,分别通过CU参数P8839.0和P8839.1来定义IF1和IF2的通讯方式,在默认情况下P8839.0=P8839.1=99,就激活了这两个接口的自动模式,如下表所示:
在这种方式下无法实现PROFIBUS DP和PROFINET IO的并行通讯,为了实现其并行通讯,需要按如下方式设置:
? P8839[0]=1和P8839[1]=2:PROFIBUS DP 用于同步,PROFINET IO用于周期性通讯
? P8839[0]=2和P8839[1]=1:PROFINET IO用于同步,PROFIBUSDP用于周期性通讯(本例中的设置)
两个周期性通讯接口IF1和IF2的特性如上表所示:
注意:IF2不支持TM41,TM15,TM17,TM/TB,CU与CPU之间的通讯。
五、通过PROFIBUS DP或PROFINET IO总线来实现过程数据的传输
S7-300/400PLC通过PROFINET IO或PROFIBUSDP周期性通讯方式将控制字1(CTW1)和主设定值(NSETP_B)发送至驱动器。
(1) 控制字中Bit0做电机的起、停控制。
(2) 主设定值为速度设定值,参数P2000中的值为频率设定值和实际值的参考频率,对应4000H(十六进制),发送的高频率(大值)为7FFFH(200%)。
(3) 当组态的报文结构 PZD=2或自由报文999时,在S7-300/400 中可用“MOVE"指令进行数据传送;当组态的报文结构PZD >2,在S7-300/400 中需调用SFC14和SFC15系统功能块。
? SFC14(“DPRD_DAT")用于读驱动装置的过程数据。
? SFC15(“DPWR_DAT")用于将过程数据写入驱动装置。
例子(PROFINET IO):SERVO_02 控制字、主设定值的发送及状态字、实际频率的读取程序见图11。
图11
通过读取Servo_02的参数r2050和P2051可以判断数据是否传输成功。
图12
例子(PROFIBUS DP):SERVO_02 "控制字、主设定值的发送及状态字、实际频率的读取程序见图13。
图13
通过读取Servo_02的参数r8850和P8051可以判断数据是否传输成功。
图14
注意通过通讯接口IF1和IF2可以实现CPU与Servo_02的数据传输
六、驱动器参数的读取及写入
1.扩展PROFIDRIVE功能(DPV1)
非周期性数据传送模式允许:
? 交换大量的用户数据
? 用DPV1的功能 READ 和 WRITE可以实现非周期性数据交换。传输数据块的内容应遵照PROFIdrive参数通道(DPV1)数据集DS47(非周期参数通道结构)。
2. 参数请求及参数应答的结构
参数请求包括三部分:请求标题、参数地址及参数值。
表1.参数请求格式
表2.参数应答格式
表3.参数请求及应答描述