由于最近手头一个项目用NTP和SMITIC模式去做时间同步都不成功,咨询西门子热线怀疑是plc硬件版本的问题,由于项目已经运行,程序太多不能停机,所以就想着用wincc读取服务器的时间,然后把读取的时间写入PLC来做时钟同步,服务器是外置gps时钟的客户端,时间同步没问题,具体步骤如下: 下面的方法是使用WinCC的脚本把本地或者系统时间写到数据块(DB350)的变量中。 这些变量作为"Date_And_Time"数据类型变量被调用,传送到系统块"SET_CLK" (SFC0)中。 说明 步骤1 1、创建一个共享数据块DB350,在里面建立如下变量,如图所示: 2、创建1个功能FC30,在里面调用SFC0,如图所示: 3、写设置校对周期的循环时间程序,示例中设置为60S,如图所示: 4、在OB1中调用FC30,Step7的程序到此结束。 步骤2 1、打开wincc变量管理器,新建如下变量,变量类型为无符号8位值,格式调整为ByteToBCDByte,如图所示: 2、打开全局脚本,在全局动作中写如下脚本,编译保存, 注意 脚本附件: #include "apdefap.h" void SetCpuTime() { #pragma code("kernel32.dll"); void GetLocalTime(SYSTEMTIME *lpst); #pragma code();
SYSTEMTIME time; BOOL ret;
//printf("Start function SetCpuTime\r\n"); //GetSystemTime(&time); //Use if system time is needed GetLocalTime(&time); // Use if local time is needed ret = SetTagMultiWait("%d%d%d%d%d%d%d", "Year",time.wYear-2000, "Month",time.wMonth, "Day",time.wDay, "Hour",time.wHour, "Minute",time.wMinute, "Second",time.wSecond, "Flag",1 ); //end SetTagMultiWait } // end function 3、至此wincc这边设置完成,然后下载PLC程序,运行wincc就可以啦! |
电工学习网 ( )
GMT+8, 2023-3-10 22:08