1. 简介与操作
简介
Unix 时间 (或称为Epoch 时间) 是从世界协调时间 1970年1月1日 0时0分0
秒起开始累计的秒数。本范例将演示如何将 HMI的时间转换为Unix 时间。
操作
请输入时间至 [年月日时分秒] 栏位,输入完毕后,系统会自动计算出 Unix 时
间。或点选 [Local Time] 按钮,系统会将目前 RTC 的时间自动填入到 [年月日
时分秒] 栏位。
维纶通触摸屏Unix 時时间使用实例
計算方式解釋
根據POSIX:2008的 4.15小節定義,Epoch時間是個不包含潤秒,
從 Epoch以來累積的秒數。其計算方式為:
tm_sec + tm_min*60 + tm_hour*3600 + tm_yday*86400 +
(tm_year-70)*31536000 + ((tm_year-69)/4)*86400-
((tm_year-1)/100)*86400 + ((tm_year+299)/400)*86400
Unix 時間(Epoch時間)計算
此計算方式假設潤年發生在可被 4整除但不被 100整除、或是可被 400 整除的西元年。
宏細節 :
主要使用的巨集列出如下:
- macro_command main()
-
- short yy, mm, dd, hh, min, ss
- unsigned short md[13] = {0,31,59,90,120,151,181,212,243,273,304,334}
- unsigned short md_leap[13] = {0,31,60,91,121,152,182,213,244,274,305,335}
- unsigned int epoch = 0
- unsigned int a,b,c,d,e,f
-
- GetData(yy, "Local HMI", LW, 100, 1)
- GetData(mm, "Local HMI", LW, 101, 1)
- GetData(dd, "Local HMI", LW, 102, 1)
- GetData(hh, "Local HMI", LW, 103, 1)
- GetData(min, "Local HMI", LW, 104, 1)
- GetData(ss, "Local HMI", LW, 105, 1)
-
- yy = yy - 1900
- mm = mm-1
- if yy%4==0 then
- dd = md_leap[mm] + dd - 1
- else
- dd = md[mm] + dd - 1
- end if
-
- a = (yy-70) * 31536000
- b = (yy-69) / 4 * 86400
- c = (yy-1) /100 * 86400
- d = (yy + 299) / 400 * 86400
-
- epoch = ss + min*60 + hh*3600 + dd*86400 + a + b - c + d
- SetData(epoch, "Local HMI", LW, 0, 1)
-
- end macro_command
复制代码 2. 设定程序
步骤 1. 建立7个 [数值] 物件,其中6个提供输入 RTC 时间,1个则显示转换后的Unix 时间。
步骤 2. 建立巨集,将 RTC 时间转换为Unix 时间。
维纶通触摸屏Unix 時时间使用实例
3. 位址设定
此范例所使用之物件位址皆列于下表,请依实际需要调整。
维纶通触摸屏Unix 時时间使用实例
|