每周一个编程小例子:使用 PLC 将字符串转换为日期格式

引言

在 PLC(可编程逻辑控制器)编程中,我们常常需要将日期信息从字符串格式转换为日期格式,尤其在自动化生产中,涉及到大量数据交换与处理时,这一需求尤为突出。日期转换是其中的常见任务之一,尤其当输入数据以字符串形式传递时,如何高效准确地转换成 PLC 能够处理的日期格式(例如 D#YYYY-MM-DD)是每位 PLC 工程师需要解决的问题。

本文将介绍如何通过一个简单的程序实现将字符串类型的日期(例如'20181220')转换为日期格式(例如 D#2018-12-20)。

程序代码及介绍

以下是该 PLC 程序的核心代码(代码基于 TIA 平台的 SCL 语言):

  • FUNCTION_BLOCK "StringToDate"
  • { S7_Optimized_Access := 'TRUE' }
  • VERSION : 0.1   
  •       VAR_INPUT      
  •             stringDateIn : String;   
  •       END_VAR   
  •       VAR_OUTPUT      
  •             dateDateOut : Date; 
  •       END_VAR   
  •       VAR      
  •             stringYear : String;     
  •             stringMonth : String;     
  •             stringDay : String;     
  •             uintYear : UInt;     
  •             usintMonth : USInt;     
  •             usintDay : USInt;     
  •             dtlDate {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL;   
  •       END_VAR
  • BEGIN
  •  
  •               REGION split    
  •                       #stringYear := LEFT_STRING(IN := #stringDateIn, L := 4);  
  •                      #stringMonth := MID_STRING(IN := #stringDateIn, L := 2, P := 5);    
  •                      #stringDay := MID_STRING(IN := #stringDateIn, L := 2, P := 7);
  •               END_REGION ;
  •               REGION convert    
  •                      #uintYear := STRING_TO_UINT(#stringYear);    
  •                      #usintMonth := STRING_TO_USINT(#stringMonth);    
  •                      #usintDay := STRING_TO_USINT(#stringDay);
  •               END_REGION ;
  •               REGION DTL    
  •                      #dtlDate.YEAR := #uintYear;  
  •                      #dtlDate.MONTH := #usintMonth;    
  •                      #dtlDate.DAY := #usintDay;
  •               END_REGION ;
  • #dateDateOut:=DTL_TO_DATE (#dtlDate);
  • END_FUNCTION_BLOCK

该程序实现了将一个字符串格式的日期(例如20181220)转换为日期格式(例如D#2018-12-20)。它主要包括三个步骤:

    (1)分割字符串:将输入的日期字符串按年、月、日分割。

    (2)转换数据类型:将分割出的年、月、日部分分别转换为适合的数值类型(UInt和USInt)。

    (3)构建日期:通过 DTL(Date and Time Library)构建一个日期数据,并将其输出为 PLC 支持的日期格式。

主要功能块介绍

  • LEFT_STRING:从字符串中获取指定长度的子字符串,用于提取年份部分。

  • MID_STRING:从字符串中间获取子字符串,用于提取月份和日期部分。

  • STRING_TO_UINT / STRING_TO_USINT:将字符串转换为无符号整数(UInt)或无符号短整数(USInt)。

  • DTL_TO_DATE:将通过DTL构建的日期数据类型转换为标准的 PLC 日期格式。

应用场景

这种日期字符串转日期格式的功能,在工业自动化控制中有广泛应用,尤其是涉及到:

  • 数据日志记录:系统需要记录日期时间信息时,往往通过字符串接收外部数据,然后进行转换存储。

  • 时间控制系统:在一些基于日期的控制逻辑中,使用字符串格式传递日期,PLC 需要将其转换为合适的格式进行进一步处理。

  • 自动化设备间数据传输:多个自动化设备之间可能通过字符串格式传递日期信息,PLC 需要对这些数据进行格式转换,确保统一的日期格式进行比较或运算。

拓展思考

    (1)日期范围验证:在实际应用中,转换后可能需要验证日期是否在有效范围内。例如,日期的月份应在 1 到 12 之间,日期应与对应月份的天数相符。这个程序可以进一步拓展,加入日期合法性检查。

    (2)支持不同格式的日期输入:可以扩展程序支持多种日期格式的输入,如DD/MM/YYYY、MM-DD-YYYY等,根据实际需求灵活调整。

    (3)自动化调度系统:在自动化调度系统中,日期和时间是关键数据。通过这种日期转换功能,可以精确地同步设备的工作时间,确保生产任务按时完成。

总结

本文介绍了一个简单的 PLC 程序,用于将字符串格式的日期转换为日期格式。通过该程序,工程师可以轻松地处理输入的日期字符串,并将其转换为适用于 PLC 控制系统的数据格式。这不仅能够提高自动化生产的准确性,还能帮助设备间的数据交换更为高效。通过对该程序的扩展思考,我们还可以实现更多复杂的日期处理功能,进一步提高系统的灵活性和可靠性。

希望本文的介绍能帮助您在 PLC 编程中更好地理解和应用日期转换功能。

你来出题 我来答图片图片图片

欢迎大家在评论区提一些标准功能块的需求,如果合适,我们会在以后的文章中与大家分享。

图片

往期回顾

每周一个编程小例子 :Bit 到 Word 转换的两种实现方案对比

每周一个编程小例子:记录设备运行时间

每周一个编程小例子:基于长按检测的启动控制系统

每周一个编程小例子:探秘 PLC 数据记录功能块

每周一个编程小例子:心跳检测与 PLC 应用

每周一个编程小例子:斜坡发生器

每周一个编程小例子:旋转速度计算

每周一个编程小例子:计算 PLC 循环周期|例程需求征集!

每周一个编程小例子:如何优雅的分割字符串

每周一个编程小例子:带反馈的阀门控制程序

每周一个编程小例子:西门子 LGF 库中的脉冲继电器功能块

每周一个编程小例子:曲线加减速的控制应用

每周一个编程小例子:轻松去除字符串前导字符

每周一个编程小例子:根据阈值更新输入

每周一个编程小例子:官方模拟量输入处理模块

每周一个编程小例子:主从电机的时序控制

每周一个编程小例子:基于一阶滞后滤波的优化方案

每周一个编程小例子:16 进制到浮点数的神奇转换

每周一个编程小例子:PLC 长按控制程序

每周一个编程小例子:PLC 程序实现多位整数拆分

每周一个编程小例子:流量累积计算器

每周一个编程小例子:用于连锁的电机标准控制模块

每周一个编程小例子:PID 控制算法在 PLC 系统中的实现与应用

每周一个编程小例子:自定义种子生成随机数

每周一个编程小例子:可调时间的脉冲生成器

每周一个编程小例子:带滤波的标准模拟量输入功能块

图片

2025年11月

Tags: