您现在所在的是:

西门子SIEMENS

回帖:335个,阅读:67125 [上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] ... [34] [下一页]
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:18:00
#10楼
用户自定义数据类型
**内容隐藏回复可见**
.
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:19:00
#11楼
数组数据类型
**内容隐藏回复可见**
.
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:20:00
#12楼
数组编程举例
[Post=30]一个数组应该被典型地用于描述同一主题的数据。让我们想象一个每隔3秒钟就改变一个输入值的过程。有必要保存这些输入值中的每一个,以便将其与所设定点相比较。所有的输入值都具有相同的数据类型。这种情况下,声明一个数组很有用,因为在代码本体声明中,可以用一个循环语句(如FOR循环),容易地比较这两个值。数组的单个组分可以用数组下标来访问。

 
类型声明:

TYPE
graph    :ARRAY[1..23]    OF INT;
set_point    :ARRAY[1..23]    OF INT;
END_TYPE
变量声明:

VAR
input        :graph;        (* 机器的输入值 *)
values        :set_point;        (* 相比较的值 *)
i            :INT :=1;        (* 用于数组下标的变量 *)
run            :BOOL    :=TRUE;
ERROR        :BOOL;
timer        :FB_TIMER;        (* 声明FB实例 *)
END_VAR
使用ST语言的代码本体声明:

timer (pt:=t#3s;in:=run);
IF timer.Q THEN    (* 向数组''graph''提供输入值 *)
input[i] := %IW0;    (* 给数组赋输入值 *)
run := 0;    (* 边沿检测,以便再次启动定时器 *)
i := i+1;    (* 更高的数组下标 *)
ELSE
run :=1;    (* 递增记数 *)
END_IF;
IF i = 23
FOR i:=1 TO 23 BY 1 DO
IF input[i] <> values[i] THEN     (* 比较数组
''graph''和''set point'' *)
ERROR := TRUE;
END_IF;
END_FOR;
i := 1;
END_IF;
[/Post]


[此贴子已经被作者于2005-11-8 22:30:21编辑过]
.
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:21:00
#13楼
结构数据类型
[Post=30]声明结构

结构数据类型包括了同一数据类型或不同数据类型的多个元素。

TYPE
machine:
STRUCT
x_pos    :INT;
y-pos    :INT;
depth    :INT;
rpm    :UINT;
END_STRUCT;
END_TYPE

在该例子中,结构数据类型‘machine’由x_pos、y_pos、depth和rpm等组分组成。所有的组分都描述了机器的特性。

编程举例

在必须要声明描述同一对象的多个数据的情况下,就应该使用结构。例如,一个钻孔机在一个工件上钻多个孔。所有的孔都具有工件上的x和y坐标位置、钻孔深度以及钻孔用的每分钟转数。对各个孔的具体值是不同的,但是所需的变量总是同样的。这种情况下,声明一个由分别用于位置、钻孔深度和每分钟转数的三个组分组成的结构会很有用。对于每个孔,可以给各组分赋不同的值。用于钻孔过程的功能块只需使用作为结构的同一个变量。

结构数组

可以在数组内使用结构,如下面的例子所示:

 
TYPE
machine:
STRUCT
x_pos    :REAL;
y_pos    :REAL;
depth    :INT;
rpm    :INT;
END_STRUCT;
my array    :ARRAY[1..10]    OF machine;
END_TYPE
 
一个结构数组的应用例子可能是具有多个钻孔机的转移线。通过数组下标,可以访问具体的钻孔机,并且通过各结构组分,可以分配用于钻孔的不同值。

带有数组的结构

可以在结构内使用数组,如下面的例子所示:

 
TYPE
graph    :ARRAY[1..10]    of INT;
drive:
STRUCT
rpm    :INT;
inputs    :IN_BOOL;
performance    :graph;
END_STRUCT;
END_TYPE
 
初始化结构

在编辑代码本体声明时,可以通过给各组分赋值的方式,来初始化结构。下图显示了一个例子:

变量声明:
VAR
var1   :machine;
first    :BOOL    :=TRUE;
END_VAR
 
使用ST语言的代码本体声明:
IF first THEN
var1.x-pos := REAL#1.3E+2
var1.rpm := 3000;
...
first := FALSE;
END_IF
...
 
[/Post]


[此贴子已经被作者于2005-11-8 22:30:51编辑过]
.
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:23:00
#14楼
字符串数据类型
[Post=60]用户自定义的字符串数据类型是具有可变数目的字符的字符串。声明一个用户自定义的字符串时,其长度被放在该数据类型后面的括号内。

用户定义字符串数据类型声明的例子。

TYPE
STRING10    :STRING(10)
END_TYPE

在这个例子中,字符串的长度是10个字符。
限制:最短的合理字符串长度为1,最长的合理字符串长度为32766。
[/Post]


[此贴子已经被作者于2005-11-8 22:31:30编辑过]
.
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:26:00
#15楼
枚举数据类型
[Post=50]枚举数据类型声明的例子:

TYPE
light    :(red, yellow, green);
END_TYPE

在该例子中,‘light’数据类型只能具有‘red’、‘yellow’或‘green’等值。
[/Post]


[此贴子已经被作者于2005-11-8 22:32:44编辑过]
.
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:27:00
#16楼
IEC 61131-3中的直接量
直接量可用于输入数据的外部表示。直接量对于数值、字符串和时间数据的表达是必需的。每当您要输入值时,就必须使用直接量。

.
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:28:00
#17楼
数值直接量
[Post=50]下表显示了可供使用的数值直接量:

类型 例子
整数直接量 -12 0 123_456 +986
实数直接量 -12.0 0.0 0.4560 3.14159_26
带有指数的实数直接量 -1.34E-12 -1.34e-12 1.0E+6
二进制直接量 INT#2#1111_1111
八进制直接量 INT#8#377
十六进制直接量 INT#16#FF SINT#16#ff
布尔FALSE和TRUE FALSE TRUE
布尔0和1 0,1


用于变量工作单中的直接量、INT或BOOL数据类型的直接量,可以不带关键字而使用,如下面的例子所示:
对于 INT#16#ff,您可以用16#ff。
对于 BOOL#FALSE,您可以用FALSE。

在变量声明中,您可以用“var1:DINT:=10”,但在代码本体中,您必须使用“LD DINT#10”。
[/Post]


[此贴子已经被作者于2005-11-8 22:33:18编辑过]
.
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:29:00
#18楼
字符串直接量
**内容隐藏回复可见**
.
6335
karl 版主
文章数:1703
年度积分:50
历史总积分:6335
注册时间:2003/12/26
发站内信
发表于:2005/2/4 11:30:00
#19楼
持续时间直接量
[Post=100]持续时间数据可以由小时、分、秒、毫秒及其组合来表示。

下表显示了可供使用的持续时间直接量:

类型 例子
短前缀  T#14ms t#14ms t#12m18s3.5ms T#25h_15m t#25h_15m
长前缀  TIME#14 ms time#14ms TIME#25h_15m time#25h_15m
[/Post]
.

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

78.0005