工控领域PLC时间转换为UNIX时间做网络同步比较
网络整理 2023-01-05
最近在安全行业里做读取PLC内部故障事件分析的工作,发现在PLC网络里采用NTP时间同步基本上没有,因为在工控领域PLC更多承担业务层面控制需求的实现,反而对于PLC本身的安全并没有过多的重视。

多区域内PLC时间同步就是安全设置的必要一步,因为这个会涉及PLC内部的事件和记录是否能够按照真实的时间进行提取和分析。那在不同网段读取不同厂商PLC时间进行比较和同步就成为一个比较麻烦的事情。不同厂商PLC的日期和时间比较需要用到一个INT数组数据来比较。所以才有了这需求打算采用Unix 时间来做时间对比,因为所有厂商的PLC的日期和时间都可以转成Unix时间。


什么是Unix时间?
Unix时间(英文为Unix epoch, Unix time, POSIX time或Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。UNIX时间的0按照ISO 8601规范为:1970-01-01T00:00:00Z。一个小时表示为UNIX时间格式为:3600秒;一天表示为UNIX时间为86400秒,闰秒不计算。

时间                    秒

1分钟                  60秒

1小时                  3600秒
1天                     86400秒
1周                     604800秒
1月(30.44天)       2629743秒
1年(365.24天)     31556926 秒


下面将采用结构化文本的形式来开发这个PLC时间转成Unix时间,为了方便大家在其他的PLC中实现时间格式的转换。
// Convert system time to unix time
// (seconds until 1970-01-01 00:00)
// Create by jiansiting

FUNCTION Unixtime : DWORD

VAR_INPUT
END_VAR

VAR_TEMP
leapyears:INT;
days_from_1970  : DINT;
days_from_BeginOfYear : ARRAY[1..12] OF INT;
l_unixtime:DINT;
sfc1_ret_val:INT;
CDT_systemtime:DATE_AND_TIME;
systemtime AT CDT_systemtime : STRUCT
year_CDT:BYTE; // 1970 ... 2038
month_CDT:BYTE;
day_CDT:BYTE;
hour_CDT:BYTE;
minute_CDT:BYTE;
second_CDT:BYTE;
END_STRUCT;

year:INT; // 1970 ... 2038
month:INT;
day:INT;
hour:INT;
minute:INT;
second:INT;
END_VAR

leapyears:= 0;
days_from_1970  := 0;

// days of current month without leap day

days_from_BeginOfYear[1]  :=   0;
days_from_BeginOfYear[2]  :=  31;
days_from_BeginOfYear[3]  :=  59;
days_from_BeginOfYear[4]  :=  90;
days_from_BeginOfYear[5]  := 120;
days_from_BeginOfYear[6]  := 151;
days_from_BeginOfYear[7]  := 181;
days_from_BeginOfYear[8]  := 212;
days_from_BeginOfYear[9]  := 243;
days_from_BeginOfYear[10] := 273;
days_from_BeginOfYear[11] := 304;
days_from_BeginOfYear[12] := 334;

// read system time
sfc1_ret_val:= READ_CLK(CDT := CDT_systemtime);
year:= BCD_TO_INT(systemtime.year_CDT) + 2000;
month:= BCD_TO_INT(systemtime.month_CDT);
day:= BCD_TO_INT(systemtime.day_CDT);
hour:= BCD_TO_INT(systemtime.hour_CDT);
minute:= BCD_TO_INT(systemtime.minute_CDT);
second:= BCD_TO_INT(systemtime.second_CDT);

// sum of leap years since 1979 (without current leap year)
leapyears := ((year-1)-1968)/4-((year-1)-1900)/100+((year-1)-1600)/400;
days_from_1970 := (year-1970)*365 + leapyears+ days_from_BeginOfYear[month] + day-1;

IF ( (month > 2) AND ((year MOD 4 = 0) AND ((year MOD 100 <> 0) OR (year MOD 400 = 0))) ) THEN
days_from_1970 := days_from_1970 + 1; // + leap day, if year is leap year
END_IF;

// OUTPUT in s
l_unixtime :=  second + 60 * ( minute + 60 * (hour + 24 * days_from_1970) );


// if error return 0
IF  sfc1_ret_val <> 0 THEN
Unixtime := 0;
ELSE
Unixtime := DINT_TO_DWORD(l_unixtime);
END_IF;

END_FUNCTION
者:剑思庭
声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • FPGA
  • 可编程
  • PLC
  • verilog
  • FPGA数字图像处理基础(二)——灰度直方图统计(Verilog)

    图像灰度直方图统计是数字图像处理的基础操作,通过统计图像灰度值提取简单的图像特征,并对复杂的图像处理方法提供统计数据参考。本文简要介绍图像灰度直方图的概念与作用,详细阐述图像灰度值统计方法与Verilog实现

    昨天
  • FPGA数字图像处理基础(一)——色彩空间转换(Verilog)

    不同图像处理方法通常采用不同的图像色彩空间,图像色彩空间转换是图像处理算法的基础。本文简要介绍常见的图像色彩空间,详细阐述RGB、YCbCr色彩空间与灰度图像转化的算法与Verilog实现

    昨天
  • FPGA数字图像显示原理与实现(Verilog)

    HDMI和VGA视频接口广泛应用于各种显示设备,掌握图像显示时序是FPGA数字图像处理的基础

    昨天
  • 详解IIC协议(Verilog实现)

    IIC集成电路总线(Inter Intergrated Circuit)基础知识、协议标准和Verilog实现

    昨天
  • 详解UART协议(Verilog实现)

    UART通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)基础知识、协议标准和Verilog实现

    昨天
  • 一种简易数字存储示波器的设计方案

    1引言与传统模拟示波器相比.数字存储示波器不仅具有可存储波形、体积小、功耗低,使用方便等优点,而且还具有强大的信号实时处理分析功能。在电子测量领域,数字存储示波

    前天
  • 基于FPGA的数字分频器设计方法

    作者:赵厉,张志国,唐芳福1.概述随着集成电路技术的快速发展,半导体存储、微处理器等相关技术的发展得到了飞速发展。FPGA以其可靠性强、运行快、并行性等特点在电

    03-29
  • SPI 总线四种工作方式

    SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于CPU与各种

    03-28
  • 采用EP2C5T144C8 FPGA实现PS/2接口的设计方法

    引言当前嵌入式系统技术已得到了广泛应用,但传统嵌入式系统的人机接口多采用小键盘操作的文本菜单方式,用户操作较为不便。本设计利用FPGA实现对PS/2接口鼠标的控

    03-27
  • 实现一维与二维信号显示的VGA的接口时序和系统设计

    引言随着电子技术的发展,VGA(视频图形阵列)接口出现在很多嵌入式平台上,用于图像信息的实时显示等。在某些情况下,设计者希望通过普通的显示器或投影仪观测FPGA

    03-27
  • 实时时钟RTC设计推荐方案

    一、什么是RTC实时时钟(Real_TimeClock)简称为RTC,主要为各种电子系统提供时间基准。通常把集成于芯片内部的RTC称为片内RTC,在芯片外扩展的

    03-27
  • 基5FFT的verilog代码实现及仿真

    本文根据算法推导完成FPGA代码的实现基仿真

    03-27
下载排行榜
更多
广告