西门子博途:使用 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)。
该过程具有以下优势:不需要知道将要处理的数据块就能创建程序代码。
在本示例中需要使用以下对象:
编程示例
以下示例说明了如何使用 DB_ANY 数据类型:
冲孔机可以冲出各种各样的几何形状。冲孔作业将传送到机器,每个作业有特定的作业数据。作业数据的作业类型和数据值各有不同。
操作步骤 - 创建 PLC 数据类型
在个作业中,将在一块金属板上冲出一个圆孔。要使冲孔机能够执行此作业,需要提供中心点坐标以及圆孔的半径。可以通过 PLC 数据类型(UDT) 将这些作业数据一起传送到冲孔机。
创建 PLC 数据类型“UDT_Hole”以传送作业数据:
|
在第二个作业中,将在一块金属板上冲出一个矩形。对于此作业,需要提供两个坐标,分别定义此矩形的左上角和右下角。可以通过 PLC数据类型“UDT_RectangleWindowStatic”将这些作业数据一起传送到冲孔机。
创建 PLC 数据类型“UDT_RectangleWindowStatic”:
这样,将创建并打开一个用于创建 PLC 数据类型的新声明表。
在 PLC 数据类型中声明以下行:
X1-coordinate > REAL
Y1-coordinate > REAL
X2-coordinate > REAL
Y2-coordinate > REAL
在 PLC 数据类型中声明以下行:
X-coordinate > REAL
Y-coordinate > REAL
Height > REAL
Width > REAL
Angle > REAL
双击“程序块”(Program blocks) 文件夹下方的命令“添加新块”(Add new block)。
“添加新块”(Add new block) 对话框随即打开。
单击“数据块 (DB)”(Data block (DB)) 按钮。
指定名称“DB_OrderHole”。
选择数据块“UDT_Hole”作为类型。
单击“确定”(OK)。
双击“添加新块”(Add new block) 命令。
“添加新块”(Add new block) 对话框随即打开。
单击“数据块 (DB)”(Data block (DB)) 按钮。
指定名称“DB_OrderList”。
选择“全局数据块”(Global DB) 作为该数据块的类型。
单击“确定”(OK)。
创建 PLC 数据类型“UDT_Punch”。
双击“PLC 数据类型”(PLC data types) 下方的命令“添加新数据类型”(Add new datatype)。
将创建一个名为“UserDataType_x”的新 PLC 数据类型。
将 PLC 数据类型重命名为“UDT_Punch”。
在 PLC 数据类型中声明以下行:
Tool > DINT
x > REAL
y > REAL
w > REAL
创建 ARRAY 数据块“DB_PunchList”。
声明该块接口,如下所示:
编写以下程序代码:
声明该块接口,如下所示:
编写以下程序代码:
声明该块接口,如下所示:
编写以下程序代码:
创建一个 SCL 函数块。
双击“添加新块”(Add new block) 命令。
“添加新块”(Add new block) 对话框随即打开。
单击“函数块 (FB)”(Function block (FB)) 按钮。
指定名称“FB_PrepareNextOrder”。
声明该块接口,如下所示:
声明全局变量“AllOrdersDone”:
编写以下程序代码:
创建一个 SCL 函数。
双击“添加新块”(Add new block) 命令。
“添加新块”(Add new block) 对话框随即打开。
单击“函数 (FC)”(Function (FC)) 按钮。
指定名称“FC_PrepareOrder”。
声明该块接口,如下所示:
编写以下程序代码:
单击“数据块 (DB)”(Data block (DB)) 按钮。
指定名称“DB_FB_PrepareNextOrder”。
选择数据块“FB_PrepareNextOrder”作为类型。
单击“确定”(OK)。
创建 STL函数“FC_SwapOrderList”。
声明该块接口,如下所示:
声明全局变量“NewModelNr”:
编写以下程序代码:
单击“数据块 (DB)”(Data block (DB)) 按钮。
指定名称“DB_OrderRepository”。
选择“全局数据块”(Global DB) 作为该数据块的类型。
单击“确定”(OK)。
“UDT_RectangleWindowStatic”的作业数据只能用于冲出其边沿分别与 x 和 y 轴平行对齐的矩形。
如果要冲出具有不同对齐设置的矩形(即不与 x 和 y 轴平行对齐),则需要其它 PLC 数据类型。例如,在其它 PLC数据类型中,可以指定高度和宽度,以及矩形与 x 轴的角度。
创建 PLC 数据类型“UDT_RectangleWindowFlexible”:
这样,将创建并打开一个用于创建 PLC 数据类型的新声明表。
用于指定矩形中心位置的 x 轴和 y 轴坐标。
操作步骤 - 创建数据块
在下一部分,您将学习如何将简单的几何形状(其作业数据已在 PLC数据类型中定义)传送到冲孔机。冲孔作业在程序代码中被细分成多个冲孔操作,这些冲孔操作由冲孔机连续执行。冲孔机有一个十字工作台,金属板将紧紧地夹在这个工作台上。可以将十字工作台沿x 轴和/或 y轴移动,就像在坐标系中一样。十字工作台由两个电机推动。该工具有不同的印模用来在金属板上冲出各种形状,例如大小不同的圆形和矩形。该工具还可以多旋转90 度来切出具有不同对齐角度的矩形。
现在,可使用 PLC 数据类型创建多个背景数据块。之后,该背景数据块将包含具体值,如圆孔的值。
创建背景数据块“DB_OrderHole”:
输入相应的起始值:
要制造特定的金属板部件,例如控制柜的侧面板,则将必需的几何形状加载到冲孔机。为此需要创建另一个包含数据块列表的数据块。
创建数据块“DB_OrderList”:
在数据块中创建以下作业列表:
操作步骤 - 创建程序代码
为每个作业类型,创建一个单独的函数。在此,将冲孔作业细分为具体的各个冲孔操作,并包含在 ARRAY 中。
要为一个孔洞准备冲孔作业并将其细分为具体的各个冲孔操作,则需创建一个 SCL函数并命名为“FC_PrepareHole”。
要为一个窗口准备冲孔作业,则需通过一个函数将四个冲孔操作序列组合到一个冲孔作业中。创建一个 SCL函数并命名为“FC_PrepareWindowStatic”。
要为一个可变矩形准备冲孔作业,则需通过一个函数将四个冲孔操作序列组合到一个冲孔作业中。创建一个 SCL函数并命名为“FC_PrepareWindowFlexible”。
冲孔机现在应该会开始处理作业。如果它已经在处理作业,则应从作业列表中获取下一个作业并进行准备。
通过将当前冲孔作业细分成几个冲孔操作,为列表中的下一个作业做好了准备。冲孔机必须能够识别当前正在处理哪个冲孔作业。
在 SCL 函数块“FB_PrepareNextOrder”中调用 SCL 函数“FC_PrepareOrder”
之后,在 OB1 中调用“FB_PrepareNextOrder”:
除了上述的操作方式之外,还通过在预定义作业中使用数据块“DB_OrderList”将作业加载到冲孔设备中,动态生成作业列表。也可选择不同的作业列表。在执行一个作业列表后,再将新的作业列表加载到冲孔设备中。为此,需额外编写以下代码:
为函数块“FB_PrepareNextOrder”创建一个背景数据块。
“添加新块”(Add new block) 对话框随即打开。
如需交换作业列表,则需额外创建一个 SCL 函数:
创建数据块“DB_OrderRepository”:
“添加新块”(Add new block) 对话框随即打开。
之后,在 OB1 中调用“FC_SwapOrderList”:
结果
以下示例说明了如何使用指令“DB_ANY_TO_VARIANT:将 DB_ANY 转换为VARIANT”来确定数据块的 PLC 数据类型,以及如何据此选择和执行适当的函数。