[西门子] 西门子博途:使用 DB_ANY 数据类型

[复制链接]
查看489 | 回复0 | 2024-6-9 21:04:22 | 显示全部楼层 |阅读模式
>使用 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 数据类型”(PLC data types) 文件夹中的命令“新增数据类型”(Add new data type)。
    这样,将创建并打开一个用于创建 PLC 数据类型的新声明表。
  • 在 PLC 数据类型中声明以下行:
    X-coordinate > REAL
    Y-coordinate > REAL
    Diameter > REAL










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

创建 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








“UDT_RectangleWindowStatic”的作业数据只能用于冲出其边沿分别与 x 和 y 轴平行对齐的矩形。
如果要冲出具有不同对齐设置的矩形(即不与 x 和 y 轴平行对齐),则需要其它 PLC 数据类型。例如,在其它 PLC 数据类型中,可以指定高度和宽度,以及矩形与 x 轴的角度。

创建 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








用于指定矩形中心位置的 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)。


输入相应的起始值:

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

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


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

操作步骤 - 创建程序代码
为每个作业类型,创建一个单独的函数。在此,将冲孔作业细分为具体的各个冲孔操作,并包含在 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








  • 创建 ARRAY 数据块“DB_PunchList”。










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

  • 声明该块接口,如下所示:








  • 编写以下程序代码:










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

  • 声明该块接口,如下所示:








  • 编写以下程序代码:










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

  • 声明该块接口,如下所示:








  • 编写以下程序代码:










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

  • 创建一个 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”。
  • 声明该块接口,如下所示:








  • 编写以下程序代码:










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

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

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

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

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

  • 创建 STL函数“FC_SwapOrderList”。
  • 声明该块接口,如下所示:








  • 声明全局变量“NewModelNr”:








  • 编写以下程序代码:










创建数据块“DB_OrderRepository”:

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

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

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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则