西门子博途中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 数据类型”(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 数据类型,以及如何据此选择和执行适当的函数。


巨头争霸,苹果和谷歌的智能家居之战
6个简单的开关电源电路设计原理图
抖音还有可能被超越么?短视频的下半场到底在哪里?
多媒体普法阵地创新法治文化宣传形式
Facebook全新开源深度学习框架Pythia,即插即用快速构建AI模型
西门子博途中DB_ANY数据类型的使用
一加5什么时候上市?一加5和一加3T有什么区别?这次一加5升级了哪些新功能?
利用触觉晶体管打造更智能的人造皮肤
国际电工委最新标准动态,它都发布将会带来哪些影响
AI驱动应用创新,携手开发者共建创新未来
变频器无故停机的常见原因分析
机器人来了,外卖小哥会失业吗?5G对无人外卖配送有什么影响?
Versal HDIO OBUFT和IOBUF三态时序影响
摩尔定律5年内将失效 半导体行业地震
下一代 iPhone 将搭载三摄并将支持5倍光学变焦?
三分钟读懂 王峰与朱啸虎的对话区块链
12.9寸的iPad Pro2即将发布:保护壳提早曝光,会有双镜头?
周子学:全球半导体市场仍处于上升的趋势,中国市场发展潜力可期
新一代iPad Pro曝光:三星电子计划明年发布首款Mini LED电视
iPad Pro的Mini-LED 显示屏将在2021年上半年推出