设备在生产制造过程的数据记录需要有准确的时间信息,以便对产品质量进行检查、监控及追溯;

PLC与人机界面(HMI)的时间需要保持同步,以便操作人员查看相关的信息;

所有这些需求,都涉及到对PLC时钟的读写。今天这篇文章,我们就来介绍下如何使用西门子SCL编程语言提供的指令对PLC的时钟进行读写。

西门子scl编程结构图解(西门子SCL编程入门教程连载)(1)

对PLC/CPU时钟的读写,西门子SCL提供了RD_SYS_T(read system time)、WR_SYS_T(write system time)、RD_LOC_T(read local time)和WR_LOC_T(write local time)四种指令。

1、RD_SYS_T(read system time)

RD_SYS_T指令能读取CPU的当前系统时间,该指令有一个输出参数(OUT)和一个返回值(RET_VAL)。
返回值RET_VAL的数据类型为整型(INT),用于返回指令执行的状态,其编码如下:

西门子scl编程结构图解(西门子SCL编程入门教程连载)(2)

error_code:read_system_time

输出值OUT为指令读取到的时间,该时间值不包括本地时区或夏令时偏移量等信息,其数据类型根据CPU类型的不同有所不同:

对于S7-1200系列CPU,其数据类型为DTL;

对于S7-1500系列CPU,其数据类型为DT、LDT或者DTL;

举个例子:

首先定义两个临时变量tmp_cpu_system_time和tmp_return,如下图:

西门子scl编程结构图解(西门子SCL编程入门教程连载)(3)

变量定义

使用指令RD_SYS_T读取系统时间并存放到tmp_cpu_system_time中,代码如下:

西门子scl编程结构图解(西门子SCL编程入门教程连载)(4)

2、WR_SYS_T (write system time)

WR_SYS_T指令能够设置CPU的当前系统时间。
该指令有一个输入参数(IN)和一个返回值(RET_VAL);
返回值RET_VAL返回指令执行的状态,其编码如下:

西门子scl编程结构图解(西门子SCL编程入门教程连载)(5)

输入参数IN是要设置的时间值,不包括本地时区或夏令时偏移。

其数据类型根据CPU类型的不同有所不同:
对于S7-1200系列CPU,其数据类型为DTL;
对于S7-1500系列CPU,其数据类型为DT、LDT或者DTL;
举个例子:

使用WR_SYS_T指令设置CPU的系统时间为2019-12-17 10:00:00,代码如下:

西门子scl编程结构图解(西门子SCL编程入门教程连载)(6)

3、RD_LOC_T (read local time)

RD_LOC_T指令能读取CPU的本地时间,该指令有一个输出参数(OUT)和一个返回值(RET_VAL)。
与RD_SYS_T指令不同,如果当前CPU有设置时区或夏令时,则 RD_LOC_T指令会输出当前时区的时间或夏令时。
RET_VAL的数据类型为整数(INT),返回指令执行的状态,其编码如下:

西门子scl编程结构图解(西门子SCL编程入门教程连载)(7)

输出值OUT的数据类型根据CPU的不同有所不同:
对于S7-1200系列CPU,输出值OUT的数据类型为DTL;

对于S7-1500系列CPU,输出值OUT的数据类型为DT、LDT或者DTL;
使用RD_LOC_T读取CPU的本地时间并存放到tmp_cpu_local_time中,代码如下:

西门子scl编程结构图解(西门子SCL编程入门教程连载)(8)

4、WR_LOC_T (write local time)

WR_LOC_T指令用来设置CPU的本地时间,该指令有两个输入参数(LOCTIME和DST)和一个返回值(RET_VAL)。
RET_VAL的数据类型为整数(INT),返回指令执行的状态,其代码如下:

西门子scl编程结构图解(西门子SCL编程入门教程连载)(9)

LOCTIME是要写入的时间值,数据类型为DTL(S7-1200)或者DT、LDT、DTL(S7-1500);
DST是英文"Daylight Saving Time"的首字母缩写,表示“夏令时”。数据类型为布尔型,TRUE表示采用夏令时,FALSE表示采用标准时间;
举个例子:

设置CPU的本地时间为2019-12-17 10:15:00(非夏令时),代码如下:

西门子scl编程结构图解(西门子SCL编程入门教程连载)(10)

好了,关于西门子SCL编程语言时钟读写指令就先介绍到这里。如果你喜欢这篇文章,可以去官网(https://www.founderchip.com/)下载本文PDF版本。

,