苏州实操派科技有限公司官网-实操派教育科技,汇川技术PLC培训,实操派PLC培训,苏州PLC培训机构

如何在西门子PLC中读取以前的值

[复制链接]
1 544

附件下载,需登录可以查看贴内更多信息

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

x
文章大纲:

I. 前言
    A. 西门子PLC的基础介绍
    B. 挑战:如何读取以前的值?

II. 了解西门子PLC数据存储结构
    A. 西门子PLC的数据类型
        1. 位(bit)
        2. 字节(byte)
        3. 字(word)
        4. 双字(dword)等
    B. 西门子PLC中数据的存储方式
        1. 程序区(CPU存储)
        2. 数据块(DB)
        3. 全局数据区(system data)

III. 读取以前的值
    A. 利用西门子PLC的历史数据记录功能
        1. 配置数据记录块
        2. 通过SFC函数块实现读取历史数据
    B. 利用内存地址和指针来读取
        1. 记录变量地址
        2. 通过指针实现读取以前的值

IV. 示例代码
    A. 利用历史数据记录功能
        1. 程序示例
        2. 数据块示例
    B. 利用内存地址和指针实现
        1. 程序示例
        2. 数据块示例

V. 注意事项和总结
    A. 避免出现潜在风险
    B. 总结

I. 前言
西门子PLC(Programmable Logic Controller)是一种广泛应用于工业自动化领域的设备。在PLC编程中,读取以前的某个点的值是必须的,因为它能帮助我们分析问题并进行后续的处理。在本文中,我们将讲述如何在西门子PLC中读取以前的值。

II. 了解西门子PLC数据存储结构
在学习之前,需要了解西门子PLC的数据类型和存储方式。实际上,西门子PLC中的数据类型有很多,包括位、字节、字、双字等。每种数据类型所占用的字节数也不同。

此外,西门子PLC中的数据有三种存储方式:程序区,数据块和全局数据区。

数据记录块是一种特殊的数据块,只有在预定义的条件下才能使用。这种特殊的数据块能够在PLC操作期间自动存储值。可以通过SFC函数块读取历史值。

III. 读取以前的值
在了解了数据结构之后,我们可以利用数据记录块或内存地址和指针来读取以前的值。

A. 利用西门子PLC的历史数据记录功能
首先,我们需要创建一个数据记录块,该块在特定的条件下会自动记录变量的值。然后,我们可以编写SFC函数块来读取数据记录块中的历史数据。

B. 利用内存地址和指针来读取
其次,我们也可以通过记录变量地址并利用指针来读取以前的值。这种方式需要注意存储位置和变量类型。

IV. 示例代码
以下是两种读取以前的值的示例代码。

A. 利用历史数据记录功能
程序示例:

```
DATA_BLOCK DB1
  VAR_TEMP : INT;
  HIS_TEMP : HISTORY_TEMPLATE :=(
    CLASS := HISTORY_CLASS,
    MAX_ENTRIES := 10);
END_DATA_BLOCK

TEMP := 0;
HISTORY_CONTROL(IN := TRUE, ADDR := ADDR(HIS_TEMP), VALUE := TEMP);

FOR i := 1 TO 10 DO
  HISTORY_READ(IN := HIS_TEMP.HISTORY_CLASS,
  ENTRY := HIS_TEMP.MAX_ENTRIES - i +1 ,
  OUT => TEMP);
  // 这里获得以前的值
  END_FOR;
```

数据块示例:

```
DATA_BLOCK DB1
  HIS_TEMP : HISTORY_TEMPLATE :=(
    CLASS := HISTORY_CLASS,
    MAX_ENTRIES := 10);
END_DATA_BLOCK

TEMP := 0;
HISTORY_CONTROL(IN := TRUE, ADDR := ADDR(HIS_TEMP), VALUE := TEMP);

// 获得以前的值
FOR i := 1 TO 10 DO
  HISTORY_READ(IN := HIS_TEMP.HISTORY_CLASS,
  ENTRY := HIS_TEMP.MAX_ENTRIES - i +1 ,
  OUT => TEMP);
  // 这里获得以前的值
  END_FOR;
```

B. 利用内存地址和指针实现
程序示例:

```
DATA_BLOCK DB1
  TEMP_OLD : INT := 0;
  TEMP_NEW : INT := 0;
END_DATA_BLOCK

// 记录变量地址
OLD_ADDR := ADDR(DB1.TEMP_OLD);
NEW_ADDR := ADDR(DB1.TEMP_NEW);

// 利用指针来读取以前的值
POINTER_TO_OLD := P#OLD_ADDR;
OLD_VALUE := POINTER_TO_OLD^;
```

数据块示例:

```
DATA_BLOCK DB1
  TEMP_OLD : INT := 0;
  TEMP_NEW : INT := 0;
END_DATA_BLOCK

// 记录变量地址
OLD_ADDR := ADDR(DB1.TEMP_OLD);
NEW_ADDR := ADDR(DB1.TEMP_NEW);

// 利用指针来读取以前的值
POINTER_TO_OLD := P#OLD_ADDR;
OLD_VALUE := POINTER_TO_OLD^;
```

V. 注意事项和总结
需要注意的是,读取以前的值可能会导致内存的消耗过大,因此在使用过程中需要十分谨慎。

在本文中,我们阐述了西门子PLC中如何读取以前的值。通过对西门子PLC的基础知识的了解,我们可以通过数据记录块或内存地址和指针来实现这一目标。

________________________________________________________________________

免责声明:本文非官方发布,内容真实性请注意甄别,文章内容仅供参考。本站不对内容真实性负责,请悉知!本站不对内容真实性负责,请悉知!。我们专注于汇川技术产品培训,官网https://shicaopai.com

相关帖子

回复

使用道具 举报

shicaopai 2023-6-24 05:01:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

"π³ 实操派",培养中高端PLC工程师,PLC培训-Codesys培训

项目实战 手把手教学 微信&电话 15850116008
超2000节系统化课程,汇川优秀自动化讲师亲授!学一门Codesys,玩800家PLC仅剩少量名额
点击免费试听

到实操派,学PLC就是快!

扫码领取工控文库VIP

钻石VIP先到先得

服务电话 & 微信:9:00-22:00

15850116008

苏州实操派科技有限公司

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

Copyright © 苏州实操派科技有限公司 2022 到实操派,学PLC就是快!工业自动化业务培训适用人群:成人 ( 苏ICP备2022021576号-3 )

公司地址:江苏省苏州市吴中区越溪街道天鹅荡路5号31B13

返回顶部