西门子博途中DB_ANY数据类型的使用

描述

使用 DB_ANY 数据类型 (S7-1200/1500)

DB_ANY 数据类型用来标识任意数据块。对于 S7-1200/1500 系列的 CPU,可以选择访问编程期间尚不可用的数据块。为此,请在访问块的块接口中创建一个 DB_ANY 数据类型的块参数。数据块名称或先前分配给数据块名称的 DB_ANY 数据类型的变量将在运行期间传送到此参数。可以通过以下指令,处理数据块中用符号表示的内容:

VARIANT_TO_DB_ANY:将 VARIANT 转换为 DB_ANY

DB_ANY_TO_VARIANT:将 DB_ANY 转换为 VARIANT

有关这些指令的更多信息,请参见“基本指令 > STL/SCL > 转换操作 > VARIANT”(Basic instructions > STL/SCL > Conversion operations > VARIANT)。

该过程具有以下优势:不需要知道将要处理的数据块就能创建程序代码。

在本示例中需要使用以下对象:

cpu

编程示例

以下示例说明了如何使用 DB_ANY 数据类型:

冲孔机可以冲出各种各样的几何形状。冲孔作业将传送到机器,每个作业有特定的作业数据。作业数据的作业类型和数据值各有不同。

操作步骤 - 创建 PLC 数据类型

在第一个作业中,将在一块金属板上冲出一个圆孔。要使冲孔机能够执行此作业,需要提供中心点坐标以及圆孔的半径。可以通过 PLC 数据类型 (UDT) 将这些作业数据一起传送到冲孔机。

cpu

创建 PLC 数据类型“UDT_Hole”以传送作业数据:

在项目树中,双击“PLC 数据类型”(PLC data types) 文件夹中的命令“新增数据类型”(Add new data type)。
这样,将创建并打开一个用于创建 PLC 数据类型的新声明表。
在 PLC 数据类型中声明以下行:
X-coordinate > REAL
Y-coordinate > REAL
Diameter > REAL
cpu
cpu

在第二个作业中,将在一块金属板上冲出一个矩形。对于此作业,需要提供两个坐标,分别定义此矩形的左上角和右下角。可以通过 PLC 数据类型“UDT_RectangleWindowStatic”将这些作业数据一起传送到冲孔机。

cpu

创建 PLC 数据类型“UDT_RectangleWindowStatic”:

在项目树中,双击“PLC 数据类型”(PLC data types) 文件夹中的命令“新增数据类型”(Add new data type)。
这样,将创建并打开一个用于创建 PLC 数据类型的新声明表。
在 PLC 数据类型中声明以下行:
X1-coordinate > REAL
Y1-coordinate > REAL
X2-coordinate > REAL
Y2-coordinate > REAL
cpu
cpu

“UDT_RectangleWindowStatic”的作业数据只能用于冲出其边沿分别与 x 和 y 轴平行对齐的矩形。

如果要冲出具有不同对齐设置的矩形(即不与 x 和 y 轴平行对齐),则需要其它 PLC 数据类型。例如,在其它 PLC 数据类型中,可以指定高度和宽度,以及矩形与 x 轴的角度。

cpu

创建 PLC 数据类型“UDT_RectangleWindowFlexible”:

在项目树中,双击“PLC 数据类型”(PLC data types) 文件夹中的命令“新增数据类型”(Add new data type)。
这样,将创建并打开一个用于创建 PLC 数据类型的新声明表。
在 PLC 数据类型中声明以下行:
X-coordinate > REAL
Y-coordinate > REAL
Height > REAL
Width > REAL
Angle > REAL
cpu
cpu

用于指定矩形中心位置的 x 轴和 y 轴坐标。

操作步骤 - 创建数据块

在下一部分,您将学习如何将简单的几何形状(其作业数据已在 PLC 数据类型中定义)传送到冲孔机。冲孔作业在程序代码中被细分成多个冲孔操作,这些冲孔操作由冲孔机连续执行。冲孔机有一个十字工作台,金属板将紧紧地夹在这个工作台上。可以将十字工作台沿 x 轴和/或 y 轴移动,就像在坐标系中一样。十字工作台由两个电机推动。该工具有不同的印模用来在金属板上冲出各种形状,例如大小不同的圆形和矩形。该工具还可以最多旋转 90 度来切出具有不同对齐角度的矩形。

现在,可使用 PLC 数据类型创建多个背景数据块。之后,该背景数据块将包含具体值,如圆孔的值。

创建背景数据块“DB_OrderHole”:

双击“程序块”(Program blocks) 文件夹下方的命令“添加新块”(Add new block)。
“添加新块”(Add new block) 对话框随即打开。
单击“数据块 (DB)”(Data block (DB)) 按钮。
指定名称“DB_OrderHole”。
选择数据块“UDT_Hole”作为类型。
单击“确定”(OK)。

输入相应的起始值:

cpu

要制造特定的金属板部件,例如控制柜的侧面板,则将必需的几何形状加载到冲孔机。为此需要创建另一个包含数据块列表的数据块。

创建数据块“DB_OrderList”:

双击“添加新块”(Add new block) 命令。
“添加新块”(Add new block) 对话框随即打开。
单击“数据块 (DB)”(Data block (DB)) 按钮。
指定名称“DB_OrderList”。
选择“全局数据块”(Global DB) 作为该数据块的类型。
单击“确定”(OK)。

在数据块中创建以下作业列表:

cpu

操作步骤 - 创建程序代码

为每个作业类型,创建一个单独的函数。在此,将冲孔作业细分为具体的各个冲孔操作,并包含在 ARRAY 中。

创建 PLC 数据类型“UDT_Punch”。
双击“PLC 数据类型”(PLC data types) 下方的命令“添加新数据类型”(Add new data type)。
将创建一个名为“UserDataType_x”的新 PLC 数据类型。
将 PLC 数据类型重命名为“UDT_Punch”。
在 PLC 数据类型中声明以下行:
Tool > DINT
x > REAL
y > REAL
w > REAL
cpu
cpu
创建 ARRAY 数据块“DB_PunchList”。
cpu
cpu

要为一个孔洞准备冲孔作业并将其细分为具体的各个冲孔操作,则需创建一个 SCL 函数并命名为“FC_PrepareHole”。

声明该块接口,如下所示:
cpu
cpu
编写以下程序代码:
cpu
cpu

要为一个窗口准备冲孔作业,则需通过一个函数将四个冲孔操作序列组合到一个冲孔作业中。创建一个 SCL 函数并命名为“FC_PrepareWindowStatic”。

声明该块接口,如下所示:
cpu
cpu
编写以下程序代码:
cpu
cpu

要为一个可变矩形准备冲孔作业,则需通过一个函数将四个冲孔操作序列组合到一个冲孔作业中。创建一个 SCL 函数并命名为“FC_PrepareWindowFlexible”。

声明该块接口,如下所示:
cpu
cpu
编写以下程序代码:
cpu
cpu

冲孔机现在应该会开始处理作业。如果它已经在处理作业,则应从作业列表中获取下一个作业并进行准备。

创建一个 SCL 函数块。
双击“添加新块”(Add new block) 命令。
“添加新块”(Add new block) 对话框随即打开。
单击“函数块 (FB)”(Function block (FB)) 按钮。
指定名称“FB_PrepareNextOrder”。
声明该块接口,如下所示:
cpu
cpu
声明全局变量“AllOrdersDone”:
cpu
cpu
编写以下程序代码:
cpu
cpu

通过将当前冲孔作业细分成几个冲孔操作,为列表中的下一个作业做好了准备。冲孔机必须能够识别当前正在处理哪个冲孔作业。

创建一个 SCL 函数。
双击“添加新块”(Add new block) 命令。
“添加新块”(Add new block) 对话框随即打开。
单击“函数 (FC)”(Function (FC)) 按钮。
指定名称“FC_PrepareOrder”。
声明该块接口,如下所示:
cpu
cpu
编写以下程序代码:
cpu
cpu

在 SCL 函数块“FB_PrepareNextOrder”中调用 SCL 函数“FC_PrepareOrder”

cpu

之后,在 OB1 中调用“FB_PrepareNextOrder”:

cpu

除了上述的操作方式之外,还通过在预定义作业中使用数据块“DB_OrderList”将作业加载到冲孔设备中,动态生成作业列表。此外,也可选择不同的作业列表。在执行一个作业列表后,再将新的作业列表加载到冲孔设备中。为此,需额外编写以下代码:

为函数块“FB_PrepareNextOrder”创建一个背景数据块。

双击“程序块”(Program blocks) 文件夹下方的命令“添加新块”(Add new block)。
“添加新块”(Add new block) 对话框随即打开。
单击“数据块 (DB)”(Data block (DB)) 按钮。
指定名称“DB_FB_PrepareNextOrder”。
选择数据块“FB_PrepareNextOrder”作为类型。
单击“确定”(OK)。

cpu

如需交换作业列表,则需额外创建一个 SCL 函数:

创建 STL函数“FC_SwapOrderList”。
声明该块接口,如下所示:
cpu
cpu
声明全局变量“NewModelNr”:
cpu
cpu
编写以下程序代码:
cpu
cpu

创建数据块“DB_OrderRepository”:

双击“程序块”(Program blocks) 文件夹下方的命令“添加新块”(Add new block)。
“添加新块”(Add new block) 对话框随即打开。
单击“数据块 (DB)”(Data block (DB)) 按钮。
指定名称“DB_OrderRepository”。
选择“全局数据块”(Global DB) 作为该数据块的类型。
单击“确定”(OK)。

cpu

之后,在 OB1 中调用“FC_SwapOrderList”:

cpu

结果

以下示例说明了如何使用指令“DB_ANY_TO_VARIANT:将 DB_ANY 转换为 VARIANT”来确定数据块的 PLC 数据类型,以及如何据此选择和执行适当的函数。

 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分