-
问题
:
解答
:
关键字
:
在
S7-SCL
使用说明
操作指南
:
我能否得到一个访问
SCL
数组的索引
?
可以。
在
SCL
中可以有一个访问数组变量的索引
,
这里索引也可以是一个单精度的变量
STEP7 ? STL
成对比
)
。
Exam pie: fun ctio n FC1:void var anna
: ARRAY[1..3O] OF INT;
willy : INT;
end var begin willy:= 1;
willy := ann a[willy];
end
function
索引
SFC14
和
SFC15 ANY
参数的编程
?
中如何进行
在
S7-SCL
和
LAD/FBD/STL
编辑器中,要在
UDT
或
DB
中声明一个
ANY
数据类型的变量是不可能
的,因为
p>
ANY
当调用
SFC14
变量是一个参数类型。但是,可以声明
ANY
变量是一个临时变量。
或
SFC15
时,应确保通过
ANY
变量
记录”被参数化的用户数据区的长度必须与
HW
STL
中调用这些块
,
Config
中的模
块组态中的用户数据区长度相同
(
例如
3
字节
)
。这就是为什么建议要在
目的是可以定义
ANY
SCL
或
LAD/FBD/STL
指针。
如果直接调用
SFC14
组态的字节数是奇数,则
指针到精确的字节上
(
例如
0.0 BYTE 3
)
。如果在符号编程过程中
中,传送
STRUCT
或
ARRAY
至
q
ANY
类型的块参数时,编译器传送适当的
ANY
或
SFC15
并通过
“STRUCT
或“
ARRA
Y
类型的变量用符号提供
p>
记录”参数
,
若从站
SFC14/15
报告错误代码
80B1
。
这个动作的原因是
偶数长度。
STEP 7
中的
STRUCT
与
AR
RAY
总是按字的边界储存在存储器中,
所以总是传输的
是
< br>如果在
S7-SCL
中调用
SF
C14
或
SFC15
并要动态地提供<
/p>
ANY
指针,建议在
SCL
'
变量区域声明视
< br>图”中使用“
AT'
结构。
T
附
IPT
DJV PniLrrT
smuCT
和
ex
宁」
5
&VTEJ
/ /XCi
FjC-r inv FOxJLrt e
叫
h
F
丑
DE
KX
L
IXE:
■卩■ 口
DyLc lO
?二专炖
Spr
p>
弘
(
日
PnCnTjrtl
tVPtj
m
瑪:
woFp
;
DT
杠」
匚
EE
:
01
aye.
亡
/
r
n
f
M
rfiTT
-
REfr;
■
//PuillLtL to
bj IL- BEd
丁匚■=
r'.Trw
?口
_
巴
L
:
EID
—
CraStT
EOn- TTTE
TII^
]>r
mRld
EfT*
C-QU
rtr
!■
INr
;
*
匚点
3
皿
1'
//
「卩
=
厲耳诵
2
已日?
JL
『
CJuiyT o*
托
yr#
-^-iTiuirrt^ir
方■「?!
;
/
扭
Urt
虑
i 02
「血丄盐
Uut.L1i^tL3
J D
/ jQ?rc ;
na
hrCdf-^n^ (Ert-I rf -I n
M
bh
jlLa!
bn
VM^TIMP
T
■切
Al
4r
:
INT?
XTwrF
I
E
T
T
J
|13*_***
*
p>
,匸气卜
H
丄于
-
D fcyce
b
j=ffe^
Co
匚
L
虫鼻
JHV Po_pte
匚
By
佢「好肚讣
H
< br>—
IB
厂
tiuii^frlfrj
y/'Lenat r.
ft!
Buff PhtMTfpi
Egiez.
匚
Qtn
匚;
二
irfr_TCi_50ftD
iiEyM_Caiin:|
Buiitf
QlAfXr
;
FQlHSf.r
itQ^ !
fc/C t t-ddf-ESi ICL
r&g
/UTTtrrt^r
XTPO
jjeJ cbia
住
yr
史〕
n
妊
*
耳
p>
L
:
3-
IWT^TO^tCBC
(Dl^H'cniTwr)
^y/W-rm+ser eJ -iciznt Ion M
丹皿
du
曲
■■ * In
D
p
J JEL
-CL
IJII
i^LkiMrh
;
>Llpri_-|i
口
i
a
p>
■吧
a
】
flu
:
let
JT
ae <
br>
<
br>1
<
br> <
br> 程序示例。当此 S7-SCL 了
Sr
TIG
三
lULIet EyC?_HoliLte?
:
P
阳
111
dlfc.
lfCM_T5_lV0rK DfTTCiWM
C
H
h
严打「
PP_A
;
-
T^frt_ltiy_POlTltrr( J
/j Ur
:
tr
:
raa^n
H:
士
h
GF-
牛
EtiOr
-
5niH_PJkT(LltI>R
EL^T
Ecrer
-
5fPa PAT^LJttPFL
FUl^Tfj
iCsli_irCH_ia.-
ElLctJ
no rwcTivN
F_RtrczSff, Piraac
: -
TCPT X4iy Foimtcr
卜;
翻
vixt
:
5^-Cl-i
图
.01
程序描述
功能块提供了
SFC14
读取和
SFC15
写一致
性的数据到一个标准的从站。数据被储存
在
所指的
DB
块中
所指的地址开始的地址区中。
字节的长度
(
“
BYTE_COUNT)
定要与
STE P
7
组态所选模块的长度相同。
如果
参数的状态指示未
仃
rue),
用
SFC15
传输数据到从站,若指示为
用
SFC14
从从站读取
数据。
“LADDR
参数
和返回值
“RETVAL
在
STEP 7 SFC14/15
在线帮助中有描述。
用户创建数据区拷贝功能注意事项
例
如,在
索引的直接访问是不允许的。
统是禁止访问的。
形式下
,
用户需自定义两个索引标签
,
数据区拷贝和
除此之外系
原因是数据块号和此数据
块的地址仅可以在运行的过程中被访问。
下载
附件下载包括有
S7-SCL
功能
FC10
的
STEP 7
项目。复制
“NY_”
文件到一个单独的文件夹,然
后双击打开文件。
STEP 7
V5.4
项目及所有相关子目录就会自动解包。可以使用
SIMATIC
管理器打开和
处理解压缩项目。
此处有
STEP 7
项目中的两个相同的
S7
程序。
“
S7Prog_d
”包括德文注释的
S7-SCL
功能。
“
S7Prog_e
”包括英文注释的
S7-SCL
功能。
ANY_ ( 48 KB )
相关信息
:
关于带
AT
功能的
ANY
指针的结构的更多信息可在条目号
21946854
获得。
关键字
:
ANY poi nter
S7-SCL
中的全局常数
%
▼■显示订货号
描述
使用
S
7-SCL
,不能定义任何全局常数。
解决方法
:
在
STEP 7
的符号表中,使用相应
的数据类型创建标记字或双字。为这些标记区域分配恒定的数值。此后
,
便可以在整个项目中通过符号寻址和恒定分配的数值来使用标记数据区,这当然也包括
S7-SCL
。
p>
图
.01
在变量表中定义
变量
,
INT
类型,地址是
。
在
0B1
里使用
load
和
transfer
指令赋值。
由此即可在项目和
S7-SCL
源
程序里使用此变量。
FUHCTIOH
QUADRAT :
INT
VAR_IWPUI
wert
:
INT;
END
VAR
6EGTH
IF
wert
QUADRAT
ELSE
QUADRAT
Q
|
G
兰
bal
CQK3t|
THEM
:=
vert
*
wert;
wert =
2
QUJLDRIT =
QgPRAT
=
Tjert
= 2
, wert
= 2
:
=
EHD IF;
EHD
FUHCTIDH
图
01
S7-S
CL
中如何编辑、比较字符串,或将字符串转变为其他的数据类型
?
描述
:
此条目下处理下列问题
:
对一个字符串中的某个字符进行直接读写访问
编辑,比较,转换数据类型
编写一个字符串比较的
FB
例程
对一个字符串中的某个字符进行直接读写访问
MB10 = str[5]
图
p>
01
实例说明如何
字符串中的单个元素是无法单独访问的,例如这样的格式不允
许
:
使用
IEC FC26
“
MID'
函数、转换函数
“
STRING TO
CHA
R
和“
CHAR TO
BYTE
对字符串中某个元素
进行访问。
图
01
参数含义
:
IN
:
STRING
格式的输入变量。
从位置
P
开始(含
P
)的字符串长度。(数据类型
:
INT
)
起始字符位置。
(数据类型:
INT
)
RET VAL
STRING
格式的输岀变量。
编辑,比较转换数据类型
下面的
PDF
文件中是使用
IEC
标准函数进行字符串编辑的
S7-SCL
一些例子与说明。
S7_SC
「
String_Parameterzuweisung_e
( 99 KB )
字符串比较
FC
例程
FC
的参数往往传递的是地址。
p>
由于
FC
的
STR
ING
类型的参数地址指向调用者中字符串的存储位置
果此
<
/p>
FC
被调用时,所传递的指向字符串的地址是无效的。然而对于<
/p>
FB
,传递的字符串存储于背景
中,所传递的地址是总是有效的。对于包含字符串比较程序的
FC
,在处理之前必须将字符串数据从
OUT
,
IN_OUT
传到临时变量区,
否则编译会失败,错误消息是
:
correct
数分配错误)。
图
02
是
S7-SCL
字符串比较
FC
FC
被调用时
,
如果没有被装载到
FC
的临时变量区
,
stri ng1
禾
口
stri
将无法被获取。
ng2
DB
(
参
IN<
/p>
,
FWVTIOW
tc7
:
niT
VftK^l^OUT
:
S
T
RING
[
IS
1
f
■tringE:
STRTNC[
L
S]
;
VM
T
TEI
?
STLIHGllfen
/ /Declaration o
1 temporary VarraJile
tmpS:
3TIIIUO(16]
o
I
匕己
j&porary
Vatxahie
IF
tiiipl-
s>ti?ip?
TIHEN
f
c7z
=
lOO
;
/
/Handing over
if St iiigl ■=
:?-
Et r
ingZ
ELSE
f c?:
=
S
;
/
/ IT an din^
o
ve r
i
f Str in = St-r in^2
Eini_jr
;
BUD TVnClTON
图
02
然而,缓存字符串数据到临时
变量区域将很快导致本地存储需求增长,如果只有少数的
用临时变量是适宜的,但是
STRING
变量很多,建议使用
<
/p>
DB
变量缓存字符串。图
DB100
p>
缓存输入变量的示例。
E
UNCTION
FCS:
工
ITT
U11K_IN_OUT
Stringl:
[161
;
^tringZ;
STRING
(161
;
END_i?t
坐
:
=
dhIOO
.
tiapZ?
=
IF
dhlOO tJupL
3
dhlOO-tapZ
THEN
fQgy
IDO
;
ELSE
fc3:-
S;
END IE
f
eiw^f
lUbJdtion
图
03
关键字
:
消息号
15:4099
错误消息,临时变量,指针
STRING
变量,使
03
为使用数据块
如何读岀带有
关键字“
AT
勺字符
串中的管理和字节部分
?
说明
:
在某些数据通信任务中
,
p>
例如通过
TCP
协议
(
见条目号:
19033929
)
传送有可变信息长度的数据,字符串
的管理和字节部分可能必须分开。
S7-SCL
的关键字
AT
可用于这一目的。
数据类型
STRING
包含最多
254
个字符。
STRING
数据类型的变量的最大长度为
256
个字符。在变量创
建时,也同时定义了其最大长度。当前长度
(
字符串
使用的实际长度
)
在字符串重构或编辑过程中被输入。字
符串的第一个字节指定最大长度,第二个字节指定实际长度
。接下来的字符为
ASCII
格式。图
T1-01
显示
STRING
数据类型的结构。
图
01
注意事项
:
数据类型
STRING
格式的更多信息可在
STEP 7
的在线帮助中找到
: <
/p>
数据类型
STRING
的格式”。
可在
S7-SCL
的帮助中找到关于关键字
“AT
的更多信息
:
声明变量范围的视图
在
S7-SCL
中关键字“
AT
是变量或变量范围视图的一个定义。建议使用功能块的静态变量而不是全局数据
块。然后就可通过符号连接这个变量,例如
ABC
“
STRING
类型。
使用
S7-SCL
指令
AT
通过
STRING
变量
ABC
来创建一个模板。如图
T1-01
所示,数据类型
STRING
包含
256
个字节。字符串的最大长度和实际长度分别输入到字节
1
和字节
2
。在图<
/p>
T1-02
的样例程序中,字节
“Str
ing_maximal
包含最大长度,而字节
“
String_actual
包含
实际长度。字符串中的字符,最多总共
通过域
JKL:
ARRAY[1..254] OF BYTE
定义。
p>
可通过变量
连结字节部分,例如字符串
p>
ABC
中的第三个字节,及字符串中的第一个字符。
包含了读取数据类型
ST
RING
的字节部分的一个
S7-SCL
程序。
[1]:= MB1
图
02
在
S7-SCL
中如何访问
BYTE
、
WORD
和
DWORD
变量的各个位
?
说明
:
254
个
,
T1-02
图
从
S7-SCL
版本
V5.1
起,可以使用
AT
函数去读写变量的元素。当定义变量视图后,可以读写
:
变量数据类型为
BYTE
、
WORD
、
DWORD
的位
变量数据类型为
WORD
、
DWORD
的字节
变量数据类型为
DWORD
的字
AT
特性主要用于
INPUT
,
OUT PUT
p>
和本地变量。图
.01
显示了访问
BYTE
变量位的
AT
功能的
S7-SCL
样例
:
?**
-
-i
?■
Hvoas
^rui*s
*
芭
aFv
^'^jOFaiL
*?n*
* ■
am
' ^ui -
u
Fw - E -
LJIM
-
1X--
sj(p*?ww
-
■:
.-'itaflHAATsi?.
N
u
ri
FVWCTIOM
BI
J
OCK
fbiZ?
?i_l?pirT
UkinVarByta
:
BTTl,
7Llc?rV*r
AT
rf^lnVArByt*:
ABUY[0 OF
BOOL;
BHB
VM
?t_
OUTPUT
Xft:
BOOL;
XI:
XZ
:
X3:
EOOL,;
BOOL;
BQOLj
^aOLi
BOOL
;
BOOL
;
BOOL
:
X-l;
XS
:
X6
:
X7
:
VJUt
KO
:
=
XI
;
=
X2:
=
X3
-
Kt
=
Xg
=
畑
二
x?
-
riUtrVar
(0);
riUtrVtrtlU
TlleteVkr
(Z);
rilt?tVfcrt3U
rilctiVAr
(4)
;
riLttrVkt[5B
[bl;
EHB FVHCTIOIf BIOCV
-EKBRWffr
(1
彷
<1
'
图
01
图
.01
在这个
S7-SCL
的样例程序中,创建了输入叁数的多视图。如果
FB40
被调用,你能参数化作为输入和
输岀变数的
“
Mai nVarByte
和
“
X5
叁数。
“
FilterVar
叁数不在调用块中岀现。变量
“
MainVarByte
被分为变量
“
FilterVar
的
8
个布尔值。请参考
S7-SCL
的在线帮助中
“
声明变量范围视
图
“
部分。
声明视图
FB
VAR, VAR_TEM P,
FC
数据类型的声明
基本类型
变量的数据类型
复杂类型
ANY/
指针
基本类型
复杂类型
X
ANY/
指针
X
X
X
X
)
1
VAR
」
N
,
X
)
1
或
VAR_OUT
声明视图
基本类型
复杂类型
X
VAR_IN_OUT
ANY/
指针
X
声明视图
基本类型
复杂类型
X
X
VAR
或
VAR_TEMP
声明视图
VAR_IN, VAR_OUT
或
VAR_IN_OUT
表
.01
)
这里应该注意变量域
1
p>
ANY/
指针
X
X
X
X
基本类型
复杂类型
X
ANY/
指针
X
“
VAR
OUT
中的
ANY
指针在功能块中是不允许的。上述样例程序也不能用于
FC
中的
VAR IN
变量和
VAR OUT
域。
<
/p>
图
.02
示例复制两个输入变量
(
WORD
数据类型
)
到一个输岀变量
< br>(
DWORD
数据类型
)
。两个输入变量的
存储区
< br>
和
被复制到输岀变量
。
怖冶
“a
齐詁颐闿円心曲
I
帥」
iJ
』諮
.
点
te%#
十才
?
X ◎ fr
*jy.a-
w
-
.
^sB-
咒
BilJ CfiLiii
+iti
—
;
>ili
Y
J
却轉
ecu
” *ta
*
4
^siK-rtff
? ]
+
OCOC
?
-
-
|i?
gniiTJi
^xwzt
HrcH-s
挣
Erw
起
(3
袒
<:
(f
UtoT'i.
CT
;
土
~
-Tip.
X
i
;
a
. T I
ttpj^Ljdic.u...
”
Dr
监时!
a.
U
|p
FTOCTIOK
BLKK
FBILO
TMjNPirr
MOM
J
byword:
U0hl>
;
EKD VAA
?M_ovT^rr
AE_gftti?cht
:
PHOAD
J
C_duord
LT
STRUCT
匸丄
< br>*
w
:
WORD
;
~
匸
hl
曲:
V0U>;
■n^STHCT;
IBCIN
C_dtffltd.
X_l4u
:
A_WQird; C-duQifd
E_hi^
=
B_H(jcd^
I NV FUHCTIOH BLOCK
?
作
啟獣
/
h].
:,
图
03
变量“
A
word
中的数据被写入到输岀
“C_
dword'
的低位字中,而变量
“
B
word
中的数据被写入到高位字中。
C_dword
高位字节
1
低位字节
高位字节
低位字节
高位字
(
“
C_dwort.B_high
低位字
(
“
C_
_dwort.A_low
”)
表
.02
以上样例也可用于要被复制到
WORD
变量中的
BYTE
变量。
注意
:
不能定义一个由
8
个布尔类型变量组成的
类型的结构。因为结构变量最小是一个
结构不能由一个字节组成。
补救
:
定义一个
8
个布尔的队列替代现有的
8
个布尔变量组成的结构。这样就可以访问每个位了。
< br>
变量声明
备注
错误
ByteVar:
Byte; <
/p>
编译的错误信息
:
数据类型和变量类型不
一致
BoolVar AT ByteVar: STRUCT
“
BoolVar_1:= BOOL;
BoolVar_2:=
BOOL;
正确
ByteVar: BYTE;
(
如图
.01
)
BoolVar AT ByteVar: ARRAY
[0 .. 7] OF BOOL;
表
.03
这个限制不适用于变量类型
WORD
和
DWORD
软件环境
:
本
FAQ
的图片由
S7-SCL
版本
V5.3
生成。
如何使用
AT
函数在
S7-SCL
中构造一个
ANY
指针
?
WORD ,
一个
说明
在
S7
-SCL
中可以使用
AT
命令来定义其它声明变量的视图。
下面的两个例子描述了如何为
ANY
指针声
明组件,创建
ANY
指针以及确定用于从
DB6
复制数据到
DB7
的
SFC20
(BLKMOV)
的参数。
F
表描述了如何在函数中定义一个
ANY
指针。
步骤
No.
STEP 7
将参数类型
ANY
的数据保存在
10
个字节中。为此必须定义一个结构变量,
它包含如“
data
ype
”,
“
rep eat factor
,
DB number
的参数类型,还有构造
ANY
指针的字节和位地址。图
p>
示了在
FC
中两个结构变量
“
Test1
和“
Test2
的样例声明。
Li%20Ran/2_Release/20110505/Fi ni
shed/S7_SCL_AT_Fu nktion_01. png
图
01
2
使用
S7-SCL
指令
AT
通过结构变量
“
Test1
或“
Test2
创建一个模板,并且给为此而定义的变量声
明“
ANY
类型,例如“
pAny_source
。这样使用指令
已经定义了一个
ANY
指针
现在必须如图
01
所示通过结构说明预置
ANY
指针。以下指令对应于
ANY
指针
“
P#0
.0
Byte 10
”的结构
:
01
显
//
语法
ID
为十六进制
< br>
//
为数据类型字节
//
长度为
10
字节
〃为
DB6
//
数据块的字节和位地址
4
用定义了的
ANY
变量
“
pAny_source
和
“
pAny_destin
确定
SFC20(BLKMOV)
的
ANY
参数
(
图
<
/p>
01
)
,例如
,
INT
类型的变量
“
erg
对应于函数的返回值
(
RET_VAL
)
,
下表描述了如何在
UDT
中定义一个
ANY
指针。
步骤
No.
“AnyPoint
”的
UDT1
:
首先创建一个
UDT
来定义
ANY
参数,例如为参数创建一个符号名为
p>
Syn taxID: BYTE;
//
指定语法
ID
DataTy pe: BYTE;
〃数据类型编码
DataCou
nt: INT;
DB_Number: WORD;
//
重复因数
〃数据块数
Byte Poi
nter: DWORD;
//
字节和位地址的指针
2
在函数中声明了变量,女
n
“
AnyPoint
类型
(UDT1)
的
“
buffer_source
源
(DB)
和
“
buffer_destin
目的
(
DB
)
。使用
S7-SCL
指令
AT
通过结构变量
“
buffer_source
和<
/p>
buffer_destin
创建模板,
并声明为此
而定义的变量为
“
ANY
类型,例如
“
Source_Any
和“
Destin_Any
”使用指令
已经定义
ANY
指针如图
02
所示。
Li%20Ra n/2_Release/20110505/Fi ni
shed/S7_SCL_AT_Fu nktion_02. png
图
02
现在必须用图
02
中的结构化指令预置
ANY
指针。以下指令对应于目的数据块的
“P#0.0 Byte 10 ”
//
语法
ID
为十六
进制
16#10;
〃数据类型字节
16#02;
//
本长度
为
10
字节
16#0A;
//
为
DB7
//
数据块的字节和位地址
dw#16#84000000;
用定义了的
ANY
变量
“
Source_Any
”和
“
Destin_Any
'
确定
SFC20 (BLKMOV)
的
ANY
参数
(
图
02<
/p>
)
,例如
,
ny)
ANY
指针
INT
类型的变量
< br>“
erg
対应于函数的返回值
p>
(
RET_VAL
)
。
关于
ANY
指针的更多信息可见
参数类型
ANY
的格式
STEP 7
的在线帮助的以下标题中
注意事项
如果在
S7-SCL
中用
STL
程序调用一个函数,而且该函数有一个
ANY
p>
类型的
OUT
参数,就要用
ANY
指针将其参数化,例如,像
“
P#0.0 BYTE l0
不可能在
S7-SCL
中,因为
ANY
指针在
STL
和
S7-SCL
中的处理是不一样的。当在
S7-SCL
中从
ANY
至
U
ANY
赋值时,为了转发接收到
INPUT
参数
(
6 <
/p>
字节
)
。为了确定
STL
程序的
ANY OUT
的
ANY
指针,就会有
10
个字
节从一个指针复制到其它指针
参数推荐使用
“
< br>STRUCT
类型
(
如上例所述
)
。如果一个不是
S7-SCL
编译器就会创建地址
<
/p>
(
10
字节
)<
/p>
并且将其写入
ANY
复制“
SCL_
”文件到一个单独的
文件夹,并且双击打开。
ANY
的类型变量赋值给
ANY
变量,那么
指针。
STEP 7 V5.5
项目以及其全部相关子目录就
会自动解包。可以使用
SIMATIC
管理器打开和处理压缩项目。
STE
P 7
项目包含两个站。站
个函数中定义
ANY
指针的程序
< br>而站
2
包含在一个
UDT
中定义
ANY
指针的程序。
Li%20Ra n/2_Release/20110505/Fi ni
shed/disk_ SCL_ ( 88 KB )
关键字
滤波器,滤波,变量数据类型,变量视图
How can you con
struct an ANY poin ter in S7-SCL using the AT fun
cti
1
包含在一
on?
EH^
Dis play part number
In structi
ons
In S7-SCL you can use the AT comma nd
to defi ne other views of the declared variables.
The two
exa
mples below describe how to declare the components
for the ANY poin ter, create the ANY poin ter and
parameterize the SFC20 (BLKMOV) for
copying data from DB6 to DB7.
The table
below describes how to p roceed to defi ne an ANY
poin ter in a fun cti on.
No. P
rocedure
STE P 7 saves the data of the
p arameter type ANY in 10 bytes. For this you must
defi ne a structured
variable that
contains the p arameter types like
the
byte and bit address for con struct ing the ANY
poin ter. Fig. 01 shows a sample declarati on of
the two
structured variables
ruMcrzoiT
FCIZ
VOID
VAK
restl
;
STRUCT
//AWY Struhvut I
AUT_id:
BYTE;
//refine ftHT
Wow;
STI
Si
S
fluif
e?_r>B
V
:
WOW)
J
3
our
c
e
「
_
P
o
int
er:
D?0K>;
BMI>_STRVCT
r
Tes
匕
2:
STRUCT
Str-
uktut
±
AUY
—
id:
BYTE;
//T-efxiie AMY
De?tin_I>a.t
aType
:
EYTS
;
Destii^Iienglit z
KJORD
;
Destin DE
Kumuieu;
anlegeil
TfOKD*
Dew
七
in
Byte
ENl)_STRircT;~
er
:
DUJQtiD;
st ruciz-Tire
2
ZZI>e)[ia]
;
atioii
JLWY Pointer tur Quell-DE
fIng
AWT
o?
PE
pAjiy_fourc<
IT
Textl:
AKT
;
//I>etelAFatL>H. JLH7 Pointer iut Ziel-
DB //r>ecifiring ANY
point.5E of tsrget
DB
pAiiy_(le3cln
M
Test#:
AKY
;
er
5
:
IWT
;
f
/ft-iickgabewart /
?et>Lirn vaXue
Stin
VAR
T
电孔
J_.
JLHT
—
id:
=
L6ff 10
;
Z/^o rl>eleg&ii der Quell
-
AIIY-Point
e
r
Variablen
T^stL
,
Sovirt:e_PaVaType
;
=
Testi
Source
Lericrht
:
=
I?^0ia;
2
r
values
?
QH
三口
irus pgint-er
T^stl
1
T
电
stJ.
5ource_Byte_Poiiiter:
=
duf
16#34000CLiO;
T?seZ.
AHY_ld.:
-
L6#10;
Z
T
唱
st2-
Destiti
—
DsbaType;
=
1?|?
;
//kssign values for
destirLfitioEL pointer
TescZ
.
r>e
etin_Leii^ht
: =
lejiCia;
Test^
.
I>e
^I>B_H'uiiLiier
: =
IfiSOT
j
T^s^t?.
I>eEtiEi^Byt
-e_PoiEiter-;
=
dT^#16#e4DOOCOOF
/_/
直
ufriif STC20
1111(1 Fafajne
匕
rierijnm de r
AKY
—
Poin.t ezr-Var iab
len
//CaLliiig EFCZO and
programsxng of AITY ipoirit&r varlablGS
er
J
:
=
3FC?C (sccblk
-
=
pAn
匚
soxirue, dstlJ Ik
:
=
p
Aiiy_destin);
ZIW EUNCTIDEI
Fig.
01
Use the
S7-SCL in
struction
AT to
create a temp late via the structured variable
and declare the
Thus with
he in structi
on
you have defi
ned an ANY poin
ter.
3
Now you must pr eset the ANY poin ter
with the structured in structi ons as in Fig. 01.
The
follow ing
nstructio ns corres pond to the
structure of the ANY poi nter
Byte
10
ID
//Hex for the
syn tax
//for the data type
Byte
//le ngth here 10
bytes
//for
DB6
//byte and bit address of the data
block
Parameterize the ANY parameters of the
SFC20 (BLKMOV) with the defi ned ANY variables
'pAny _source
mple.
in)
The table below describes
how to p roceed to defi ne an ANY poin ter in a
UDT.
No.
P rocedure
1
To defi ne the ANY p
arameters you first create a UDT, for exa mple a
UDT1 with the symbolic n
ame
The variable
(RET_VAL).
'AnyPoint
arameters:
Syn taxID: BYTE;
tax ID
DataT ype: BYTE;
type
//sp ecification of the syn
//code for the data
DataCou nt: INT; //rep eat
factor
DB_Number: WORD;
//n umber for data block
Byte Poin ter: DWORD;
//poin
ter for byte and bit address
n the fun
cti on you declare the variables, for exa mple
'buffer_desti n
AT to create
the templates via the structured variables
declare the
'Desti
n_Any
you have defi ned the
ANY p oi nters as in Fig. 02.
TYPE
AnyP
oint
STRUCT
Syntax ID;
BYTE;
;
EYTE^
DmgCczunt;
IHT;
DB
—
Mujuljsr
:
TiJORL
;
SycaPo
irtCeif
:
DUO HE;
EMD_STRircT
EiWTYPE
F-UMCVION
FCl:
VOID
VUK
buf
f
er_5
3ource_Aiiy
BT
bu
?
?er_sflu.r c e
AJJT
i
but
AnyPoiiit;
DeEtin_Aiiy
AT
buf fer_destiii:
AHT;
erg:
IMT;
E2n> VAft
bTif
EyTit.a.3iir):
=
l^#iO
;
tnif iar_Eource. Dat-aTyi)e:
=
;
hixif fer_source
.
Dat-aCoxirit
:
=
16#0
a;
buffer
e,
DB
;
=
X6f 0^
;
buf
fet
—sour u?
-Byte
Poin
匸
er
:
=
d-wil^#S4000000^
kxuf fRE
—
dQFtzLn
>:
=
IS? 10
;
buf fer_(irpe:
-
ISSZ
;
bvtier_(lestln. DataCount:
=
16#0
A
;
bxi
?
ief_(le
ST-lii.
DB_tJujiil)er
:
—
IS i 0 7
;
b'ii?faif_dGstill. EytaPoiiit
SI:
:
=
d-w#i63ftS4CiOOOOO;
e
rg:
=
SFC^O C^rcblk:
=
Sour
匚
, dstiblh
:
=
__Any)
;
EXD
FUNCTIOK
Fig.
02
Now you must pr eset the
ANY poin ter with the structured in structi ons as
in Fig. 02. The
follow ing
nstructio ns corres pond to the ANY poi
nter
data block.
16#10;
16#02;
16#0A;
//hex for the
syn tax
ID
//for data type
Byte
//le ngth here 10
bytes
//for
DB7
//byte and bit address of the data
block
dw#16#84000000;
4
Parameterize
the ANY parameters of the SFC20 (BLKMOV) with the
defi ned ANY variables
The variable
More in formatio n on the structure of
the ANY poin ter is also available in the On li ne
Help of STE P 7 in the cha
pter en
titled
Format of the ANY p arameter
type
Note
If you call a fun
cti on with the STL p rogram in S7-SCL, which has
an OUT p arameter of the ANY type, the n
parameterization with an ANY p oi nter,
like
S7-SCL, because the ANY poin ters
are p rocessed differe ntly in STL and S7-SCL.
When assig ning from
ANY to ANY in
S7-SCL, the 10 bytes are cop ied from on poi nter
to the other (6 bytes) in order to forward the ANY
poin ters received to the INPUT p
arameters. To p arameterize the ANY OUT p
arameters of an
STL p rogram we recomme
nd variables of the
type other tha n
ANY is assig ned to an ANY variable, the n the
S7-SCL comp iler creates the address (10 bytes)
and
writes it to the ANY poin ter.
Copy the
V5.5 pr oject the n
unp acks automatically with all the associated
subdirectories. You can the n use the
SIMATIC Man ager to open and pr ocess
the extracted pr oject. The STEP 7 p roject in
cludes two stati ons.
Stati on_1 contains the pr ogram for
defi ning the ANY poin ter in a fun cti on and
Stati on_2 contains the
p
rogram for defi ning the ANY poin ter in a UDT.
SCL_ ( 88 KB )
在没有明确声明
DB
的情况下,如何使用
S7-SCL
打开一个数据块
?
< br>
描述
:
编程过程中,可以使用参数类型
BLOCK_DB
(
图
.01
)
.
在编译时,具体
的数据块是不确定的,所以
S7-SCL
编译器通过符号表和
DB
的变量声明不能找到对应的数据类型。如果使用绝对地址访问
DB
,
S7-SCL
假定
该数据类型为
BOOL,
BYTE, WORD
或
DWORD
。
下面的例子,通过绝对地址寻址
,
可以访问
DB
数据中的变量。在
FB
中,没有确定
DB
块(
db_test
)的数
据
D
D0
此时被读。
<
br>DINT
DB
)
run
KBL
VAR TPPUT
E3b_tcit:
_L.B;
stGt_VQrl:
T
ZflL;
?HI> VU
nip mJMCTlUH BLOCK
图
.01
该
DB
的数据
DD0
为
数据格式。
DD0
被转
化为
TIME
类型变量。
Stati on_1
contains the pr ogram for defi ning the ANY poin
ter in a fun cti on and Stati on_2 contains
the
注意
:
<
/p>
语句
允许直接访问
DB
。必须定义
WORD
类型的
变量用于
D
B
号和整型类型的变量
」
ndex
用作
DB
数据索引。
如果
DB
号是
类型的一个输入变量类型,可以间
接地使用
变量访问
DB
。
更多的信息请参考
S7-SCL
在线帮助
Absolute access to data blocks
In
dexed access to data
blocks
Class B con
versi on fun cti
ons
以及条目号
:
10553802
的第
5
点
.
如果数据块变量被分配给一个
UDT
且数据类型为
STRING
,应该怎样为它分配初始值并初始化
DB
?
巧
■
显示订
货号
描述
:
对于分配给
UDT
(
User-defi ned Data Type
,用户自定义数据类型
)
且数据类型为
STRING
的数据块变量
,
举例来讲,必须定义
UDT
中的初始值。图
01
给岀了两个
变量声明:
和
。
?
数据块中变量
的数据类型为
(
已定义符号:
,
这里
UDT1
了数据类型为
的结构化数据类型规范
。必须在此处将初始值
(
例如,
输入到
UD
T
中。
?
数据块中变量
的数据类型为
。可以在此处直接分配初始值
(
例如,
。
包含
mi
7iitTnf4L
IT
UTT
r iirv^
二
-tiiBi
.J
ST±1?
r
Em
TTM
^PL1_t. dul
4Ti?CT
.
M_V “ _L Uu
Lj
?
<
/p>
X
-
TDTK
-
I
F
1
fi?_4T?rF
DB V.U- i 5 b-c-
io^ i
■
7 E
-
?!■ I?TT
KOL.
峠!
?T?IIKr
耳
K9 pnrTKiil
图
01
我们建议按下表所示来初始化
数据块,用每个数据元素的初始值来替代实际值。
步骤
在
SIMATIC Manager
中,在
LAD/STL/FBD
编辑器内打开数据块。
通过
设置数据块视图为
■
DPttl
■?y
*
r-ac^v
*
Ata-
*
,皿
X
图
02
通过菜单命令
将初始值传送到实际值。
ffctr
J
图
03
然后,必须再重新加载数据块到
CPU
。
如何调用带有输岀参数
RET
VAL
的功能或系统功能
?
砂
显示订货号
操作步骤
:
许多
SFC
(
系统功能
)
都有输岀参数
RET_VAL
(
返回值
)
,它提供一个可供评估的错误代码。
帮助中提供有更多关于系统功能和输岀参数
后按“
F1
键获取相关的在线帮助信息。
同样的,一个编好的功能可以返回一个结果
(
RET
_VAL
)
S7-SCL
中调用带有返回值
STE P 7
在线
RET VAL
的信息。通过在
SIMATIC
管理器中选中
SFC
然
――例如用于自定义调试。
下表给岀了一些例子,
说明了如何在
的功能
(
FC
或
SFC
)
。
调用带有返回值的功能
(
FC
和
SFC
)
样例
:
带有
INT<
/p>
返回值的功能
:
FUNCTION
PCI:
INT
< br>VM
L
INPUT
a
:
IHT;
fc:
ruT
;
END VAR
IF
a
::
-b
THE KT
FC1==
1;
END
工巧
IE
a-
也
THE hr
FC1
T
=
10;
ENDIE;
EN1>_EUWCTION
图
01
:
调用带有返回值的功能
:
E1IWCTIOH
P
CE;
T'OLD
VAR
c:
riJT;
END
?t
BEGIK
c:
-
FCl
b-
-
2J
;
EKTD TiraCTION
图
02
调用一个系统功能
(
本例为
SFC24
)
:
当调用系统功能
SFC
24
“
TEST_D
”
(测试数据块
)
时,得到关于
CPU
主内存中一个数据块的
信息。通过调用
SFC24
可确定指定
DB
的数据字节长度,并检查该
DB
是否受到写保护。
feM-rMN
ITLB
■”
MP
lU IHHI
mjiv
rfljhj
EJm
ITD
Frrzt
ioBi_>iSEP
KT
三咚
屮
4
?
1ITTE 7Tnr
W
LP
*
F-I
II
1.
*4
■
riksr
图
03
图
03
指定
DB
所包含的数据字节数通过参数
“ <
/p>
DB_LENGTH
输岀,参数“
WRI
TE_PROT
包含关于指
定
DB<
/p>
的写保护
ID
的信息
(
FALSE
表示没有写保护
)
。
字符串类型注意事项
p>
S7-SCL
编译器在本地堆栈上为一个被使用的功能创建临时变量
,
这个变量定义为固定长度
(
1
到
8
字节
)
类型功能正常,但定义为
STRING
类型时例外,因为在
S7-SCL
一个
FC
的
STRING
类型返回值为
254
个字符,该类型通常生成长度为
256
字节。一个
STRING
变量最大为
256
< br>字节包含
254
个字符
,
最大字符串长度可以通过
S7-SC
L
编译器设置
(
)
减小。如果一个
IEC
功能的
STRING
返回变量由
VAR_TEMP
区域分配,必须先用字符串初始化
abc:='';
)
。
关键字
:
FC
调用,功能调用
在
p>
S7-SCL
的功能块的接口改变后,如何调整背景数据块和多重背
景数据块
?
说明
:
当一个功能块以
S7-SCL
源程序方式生成时,建议在源程序中直接生成背景数据块。如果不在相应的源程
序中声明背景数据块,则每当接口(包含在
< br>S7-SCL
的源程序)改变后,背景数据块都要重新生成。否则
,
在背景数据块和功能
块之间将岀现冲突。反之,如果背景数据块在源程序中直接生成,则不需要这些步骤。
当执行命令“
File > Com
pile
时,背景数据块将被自动生成。
这样,功能块的改变将被直接传送到背景数据块
例如
(
中。这也防止了数据冲突的发生。
图
01
描述了在
S7-SCL
的功能块中如何声明相应的背景数据块。
首先编程功能块
,
然后编程背景数据块
,
这样当背景数据块生成时,功能块的变量就确定了。
iwrriDK BUCE
Ft
34
Liril
HIT
A
J :
Iiri
:
EHT>
N
-VU
twioiRprr
OTTI
■
TflT
.
E j T .
J
T
I
.
IU
L
'
■JITTZ:
ZJJTi
■XB
m
OWi
-
INI
1
IMi
:
.
-
Eui
耳此
~K
ncH
EXB BUA
ftUtfE
图
01
如果一个功能块在另一个功能块中被调用
,
仅需分配一个背景数据块给具有多重背景能力的功能块。
p>
景数据块被称为多重背景数据块。它通过在功能块的静态变量声明中定义一个
调用功能块的静态变量
FB
数据类型的来生成。被
(及块参数)变为调用功能块静态变量的一个子集。
m
』
< br>_
占宙
:■* H s :
1I- z/pN :' r
r
—
AE f
T
:
<
;
mi_Tn
:
inu
:
R”
rm,
bFV
FM
.
.ncM
h J . ..
:?
-
??
q j.-
亓
-Bl..
;.ir , ,
I,
忤
?
-
ID
e,
n S41T
I.
nc
D
=
jm* TDE
Q: Z?Li
IT,
CU
■
BM
■ IW
■f
K
r
vHrr
阳韶
FRIF
?啊
吕
--
片
.
?
卜“…
■Ibiii
m
wi luru
图
02
图
02
显示了
SFB4
被
FB22
< br>调用。一个类型为
“
TON<
/p>
的静态变量
(
SFB4
的符号名)在多重背景数据块
(为了
SFB4
和
FB22
)的应用中被声明,例如
,数据块符号名为
“SFB4_TO
”。多重背景数据块
仅仅在
SFB4
在被
FB22
调用后生成。
主
:
这个背
DB22
为了更新背景数据块,建议下载前在
SIMATIC
管理器中检查数据块的一致性。
令
“
Edit > Check Block
Consistehcy...
‘
SCL_ ( 1 KB )
在
S7-
SCL
中读取一个组织块的起始信息
问题
:
在
p>
STL
中可以读取一个组织块的起始信息
能
?
选中块文件夹并通过菜单命
打开对话框。然后执行功能
“
Program > Compile all
。
(
例如
OB1
中的循环时间
)
,在
S
7-SCL
中是否存在同样的可
解答
:
”创建一个
OB
。在临时区域,缺省情况下将创建一
在
SCL
编
辑器中,通过
“
hsert >
Block Temp late > OB
个
ARRAY OF BYTE
类型的数据区域。
如果您想要处理
SCL
源文件中一个
OB
的起始信息,请按下列步骤进行
:
1
.
2.
3.
例子
:
对于时间错误
(
OB3
已经超过了循环时间
)
,系
统会调用
OB8O
并设置标志
M1.0
。
确定
OB
起始信息的结构。该信息包含在
OB
的
STL
源文件中,可在路径
Drive:Sieme
nsSte p7S7DATAS7wiz
复制相应信息。
下找到。使用编辑器打开合适的
OB
(
例如
)
p>
并
创建一个新的
SCL
源文件并插入您刚才复制的起始信息。
< br>
调整
S7-SCL
中
0B
的临时区域,以便可以通过符号方式访问变量。
在
S7-SCL (
例如
0B1
循环时间
)
中如何读
取一个组织块
(0B)
的起始信息<
/p>
?
OS
示订货号
说明
:
下面的这个表描述了一个组织块的
S
7-SCL
源代码的生成步骤,重点在读取组织块的起始信息的
码。
序步骤
:
号
在
SIMATIC
管理器中选择这个源
文件
并且插入
S7-SCL
源代码到你的
STEP 7
项目中,使用菜单
“<
/p>
插入
>
S7
软件
>
SCL
源代码
2
接下来通过双击
S7-SCL
source
打开
S7-SCL
编辑
器
.
在
S7-SCL
编辑器中,通过
插入
>
块类型
>
0B
,你能够创建一个
0B
。在临时数据区域,一个作
p>
为
0B
起始信息默认的字节数组被创建。<
/p>
如果在
S7-SCL
< br>源文件中你需要更多的
OB
起
始信息,在资源管理器中打开下面的路径
'vDrive>:Program Files'Sieme nsSte
p7S7DATAS7WIZ
你能够在这里发现组织块的
p>
STL
源代码
,
打
开适当的
STL
源代码
,
例如
,并且从
STL
p>
原
文件中复制
S
TL
源代码到
S7-SCL
源文件中。
STL
代