1、西门子STL语言案例STL案例1:数值到位的对应1. LAR1 P#SetValue /#SetValue为输入,WORD型TAR2+AR1A 【AR1,P#】= # /Q_Adress为UDT, OutPut为结构体A 【AR1,P#】= #同理,位到数值的对应也是一样的处理方法。STL案例2:存储区地址指针-16位地址指针(应用于T/C/DB/DI/FB/FC等的号)L 11T MW20A L S5T#10SSE TMW20 /T11/用于定时器L MW20L 1+IT MW22A CU CMW22 /C12/用于计数器L 12T LW20UC FCLW20 /FC12/用于FCOPN D
2、BLW20 /DB12/用于DBSTL案例3:存储区地址指针-32位地址指针OPN DB1 /打开共享数据块OPN DI3 /打开背景数据块,最多同时打开两个DB块L 4SLD 3T MD20 /转换为指针为P#L P#T MD24 /将指针P#存储在MD24中L 320T MD28 /转换为指针为P#,存在MD28中L DBWMD20 /L DBWMD24 / +IT DIWMD28 / STL案例4:存储区地址指针-32位地址指针,与LOOP指令配合操作,某一DB块中与MW2相等的第一个数的位置L 0T MW100T MD4OPN DB1L 100NEXT: T MW100L MW2L D
3、BWMD4=I= A JC m1L MD4L P#+DT MD4L MW100LOOP NEXTm1: FP JNC m2L MD4L P#/D+ 1T MD8STL案例5:寄存器间接寻址-32位内部区域指针使用示例OPN DB1LAR1 P#L DBWAR1,P#LAR1 MD20L DBWAR1,P#+ILAR2 P#T DBWAR2,P#STL案例6:寄存器间接寻址-32位交叉区域指针使用示例LAR1 P#A AR1,P# /注意格式,= L P#LAR2L WAR2,P# /注意格式T MW60 STL案例7:Point数据类型指针使用示例Point指针占用48位地址空间,主要用于向被
4、调用的函数FC/FB传递复合数据类型(如ARRAY、STRUCT、UDT等)的实参,在被调用函数的FC/FB内部可以间接访问实参的存储器。输入首地址,求多个浮点数的平均值。CALL FC3In_Data:=P# /Point型NO :=4 /Int型OUT_VAL :=MD20内部程序如下L 0T #ADD_TEMP /临时变量清零LAR1 P#In_Data /或L P#In_Data ; LAR1L 0L WAR1,P# /DB块号或0=I /判断是否是DB块数据JC M1 T #BLOCK_NOOPN DB#BLOCK_NO M1: L DAR1,P# /第一个数据的起始地址 LAR1
5、L 0 L #NO =I JC END NO: T #NO_TEMP L DAR1,P# L #ADD_TEMP +D T #ADD_TEMP L #NO_TEMP LOOP NO L #ADD_TEMP L #NO DTR /R T #OUT_VALEND: NOP 0 多背景调用时注意地址偏移STL案例8:Any数据类型指针使用示例与Point指针相比,Any类型指针可以表示一段长度的数据,例如:P# BOOL 16,也可以选择直接赋值,如。输入Any指针地址,求多个浮点数的平均值。CALL FC13In_Data:=P# REAL 8OUT_VAL:=MD20内部程序如下L 0T #AD
6、D_TEMPL P#In_DataLAR1L BAR1,P# /若数据类型不是REAL,则跳转到ENDL B#16#8 /代表REAL数据类型的代号DJC END L 0L WAR1,P# /Any指针DB号或0=IJC M1T #BLOCK_NOOPN DB#BLOCK_NOM1: L WAR1,P# /Any指针数据长度 T #Data_LEN L DAR1,P# /Any指针第一个数据起始地址 LAR1 L # Data_LENNO: T #DATA_NO L DAR1,P# L ADD_TEMP +R T ADD_TEMP +AR1 P# L #DATA_NO LOOP NO L #ADD_TEMP L #Data_LEN ITD DTR /R T #OUT_VALEND: NOP 0多背景调用时注意地址偏移
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1