日志档案

发表于 2008-11-15 21:35:33

0

标签: 无标签

IEC 61131标准数据类型

IEC 61131标准数据类型

IEC 61131字符串数据类型

用户自定义的字符串数据类型是具有可变数目的字符的字符串。声明一个用户自定义的字符串时,其长度被放在该数据类型后面的括号内。 字串7

字串3

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

TYPE
STRING10    :STRING(10)
END_TYPE

字串7

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

IEC 61131结构数据类型

字串9

声明结构 字串5

字串1

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

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

字串5

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

字串7

编程举例

字串1

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

字串8

结构数组 字串7

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

字串5

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

带有数组的结构 字串7

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

字串2

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

字串7

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

变量声明:
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
...
字串4

IEC 61131数组编程举例 字串4

一个数组应该被典型地用于描述同一主题的数据。让我们想象一个每隔3秒钟就改变一个输入值的过程。有必要保存这些输入值中的每一个,以便将其与所设定点相比较。所有的输入值都具有相同的数据类型。这种情况下,声明一个数组很有用,因为在代码本体声明中,可以用一个循环语句(如FOR循环),容易地比较这两个值。数组的单个组分可以用数组下标来访问。  字串4

  字串7

  
类型声明:

字串7

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

字串3

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

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;

字串5

IEC 61131数组数据类型

字串5

声明数组

字串2

字串6

数组数据类型包括同一个数据类型的几个元素。一个数组中的特定元素是通过一个数组下标来定义和访问的。一个数组可用于仅仅在类型声明的一行之内,声明同一类型的几个元素。 字串4

数组数据类型声明的例子:

字串7

TYPE
graph    :ARRAY[1..23]    OF INT;
END_TYPE 字串6

在本例子中,数据类型‘图形’包括了23个‘INT’数据类型的元素。数组的所有元素都被一个接一个地连续存储在PLC存储器里。 字串9

要想声明一个数组,您首先要在数据类型工作单的类型声明中声明该数组。然后,您就可以在POU的变量工作单中声明变量了(请参考下面的编程示例)。

字串6

多维数组 字串9

如果需要多维数组,则可以使用数组的数组。下图展示了一个数组的数组:

字串9

  
TYPE
graph    :ARRAY[1..10]    OF INT;
my array    :ARRAY [1..3] OF graph;
END_TYPE
  
在一个数组的数组中,单个元素是用两个下标来访问的,如下图所示:

字串2

  
变量声明:

字串1

VAR
var1   :my_array;
var2   :INT;
END_VAR
  
使用ST语言的代码本体声明:

字串6

var2 := var1[1] [3];
  
初始化数组 字串2

数组可以被初始化,即:可以对数组中的每个元素赋一个初值。正如上面所描述的那样,每一个元素都是通过其下标来访问的。一个数组的初始化可以在编辑代码本体声明时进行。

字串2

  
变量声明: 字串6

VAR
graph    :ARRAY[1..10]    OF INT;
END_VAR
  
使用ST语言的代码本体声明: 字串2

graph[1]:=7; 
graph[2]:=1092; 
.
.
.
graph[10]:=13; 
  
不必初始化一个数组的所有元素。如果未使用任何初始值,则数组元素是在启动程序的执行时用默认初值来初始化的。

字串5

字串8

IEC 61131用户自定义数据类型 字串1

用户自定义数据类型,是由应用程序员,利用文本编辑器,通过使用一个TYPE...END_TYPE声明来编辑的。导出数据类型可以是枚举数据类型、结构或数组。

字串7

  字串5

数组数据类型包括了一个数据类型的几个元素。一个数组可用于仅仅在类型声明的一行之内,声明同一类型的几个元素。

字串7

结构数据类型包括了不同的数据类型的几个元素。  字串1

用户定义字符串,是具有可变数目的字符的STRING数据类型。声明一个用户自定义的字符串时,其长度在数据类型后面的括号内。 字串1

枚举数据类型将可能值限制在所枚举的元素范围内。使用了该数据类型的变量,只能具有所枚举的值。 

字串7

IEC 61131-3中的类属数据类型

字串7

类属数据类型
类属数据类型是包括了基本数据类型的分级组的数据类型。ANY_INT包括DINT、INT、SINT、UDINT、UINT和USINT等基本数据类型。如果一个函数可以与ANY_INT相连,则意味着可以处理DINT、INT、SINT、UDINT、UINT和USINT等数据类型的变量。  字串6

  字串3

在下表中显示了类属数据类型:

字串9

ANY
ANY_NUM
ANY_REAL
REAL
ANY_INT
DINT, INT, SINT
UDINT, UINT, USINT
ANY_BIT
DWORD, WORD, BYTE, BOOL
STRING
TIME 字串7


系统分类: PLC/PAC   |   用户分类: 无分类   |   来源: 整理

    阅读(70)    回复(0)