问题:为什么PCS 7项目中OS上显示的当前报警时间和本地时间不一致,例如,计算机时间为14:16,而当前报警时间为22:16,如下图所示,偏差8个小时。该问题是如何造成的,又该如何解决?
图 1 当前报警和计算机时间不符
回答:在标准的PCS 7项目中,程序产生的报警信息其时间均来自于控制器。如果控制器的时间设置不正确,例如,设置控制器时间时未考虑时区的问题,或者未做自动的时间同步功能,则会出现上述问题。
我们首先来分析时区的问题。通常情况下,中国用户在安装操作系统时,其时间设置对话框中时区的设置会自动设置为东八区北京时间,比GMT时间早8个小时。
图 2 本地时区设置
而在WinCC项目的下列计算机属性设置中,其默认控制器的时区为UTC(即GMT)时区,并在本地显示报警的时间时按照本地时区进行转换后显示(归档时仍然按照UTC时区归档)。
图 3 WinCC项目计算机属性设置中有关时区的设置
如果我们不考虑控制器和上位机之间的时区偏差问题,简单的设置控制器的时间和本地时间相同。则会有如下问题:例如,当前本地时间为早晨9:00,设置控制器的时间也为早晨9:00。则当前产生的报警时间来自于控制器,其也为早晨9:00,上传至WinCC后,由于WinCC的默认设置中(上图3)认为控制器为UTC时区,且按本地时区进行显示。其将会自动加上本地时区和UTC时区的时间偏差8小时后,进行显示。最终显示的报警时间则为9:00+8=17:00点,和当前计算机时间不符。
因此,当通过Simatic manager的plc Set time of day菜单手动对所选择的控制器进行时间设定时,必须注意时区偏差的问题,如下图所示。
图 4 设置控制器时间时需要加入时区偏差
在设置模板时间时,需要点击More按钮,加入相应的本地时区时间偏差后(例如,当前计算机设置时区为东八区,则设置时间偏差为+8小时),然后点击apply按钮设置控制器的时间。例如,当前本地计算机时间为早晨9:00(东八区),则控制器的时间应该设置为凌晨1:00才正确(UTC时间 = 当前时间 - 时区偏差)。这样设置后,则不会出现上述的类似问题了。
上面介绍了控制器时间和本地时间之间时区偏差的问题,以及如何手动设置时间来纠正上述问题。在实际项目实施过程中,如果系统规模相对较大,例如,多个/对控制器、计算机等,则我们强烈建议采用系统自动时间同步的方式来进行时间设置。此时我们就不需要人为的去考虑时区的问题等,系统将自动根据时区偏差等来设置控制器和计算机的时间。