【生意多】-免费发布分类信息
当前位置: 首页 » 新闻 » 行业 » 正文

用WinCC读取的PC时间设置PLC控制器的时间

放大字体  缩小字体 发布日期:2022-02-09 06:57:20    作者:xinwen    浏览次数:527
导读

由于最近手头一个项目用NTP和SMITIC模式去做时间同步都不成功,咨询西门子热线怀疑是plc硬件版本的问题,由于项目已经运行,程序

由于最近手头一个项目用NTP和SMITIC模式去做时间同步都不成功,咨询西门子热线怀疑是plc硬件版本的问题,由于项目已经运行,程序太多不能停机,所以就想着用wincc读取服务器的时间,然后把读取的时间写入PLC来做时钟同步,服务器是外置gps时钟的客户端,时间同步没问题,具体步骤如下:下面的方法是使用WinCC的脚本把本地或者系统时间写到数据块(DB350)的变量中。这些变量作为"Date_And_Time"数据类型变量被调用,传送到系统块"SET_CLK" (SFC0)中。说明步骤11、创建一个共享数据块DB350,在里面建立如下变量,如图所示:2、创建1个功能FC30,在里面调用SFC0,如图所示:3、写设置校对周期的循环时间程序,示例中设置为60S,如图所示:4、在OB1中调用FC30,Step7的程序到此结束。步骤21、打开wincc变量管理器,新建如下变量,变量类型为无符号8位值,格式调整为ByteToBCDByte,如图所示:2、打开全局脚本,在全局动作中写如下脚本,编译保存,注意函数使用“设置系统时间”将格林威治时间写入控制器。如果希望将系统时间写入控制器,可以在C脚本中,将“Get Local Time”注释掉,用“Get System Time”(在C脚本中被注释掉的部分)替代。如图所示:脚本附件:#include "apdefap.h"void SetCpuTime(){  #pragma code("kernel32.dll");  void GetLocalTime(SYSTEMTIME *lpst);  #pragma code();   SYSTEMTIME time;  BOOL ret; //printf("Start function SetCpuTimern");//GetSystemTime(&time);  //Use if system time is neededGetLocalTime(&time);    // Use if local time is neededret = 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 function3、至此wincc这边设置完成,然后下载PLC程序,运行wincc就可以啦!
 
(文/xinwen)
打赏
免责声明
• 
本文为xinwen原创作品,作者: xinwen。欢迎转载,转载请注明原文出处:http://www.31duo.com/news/show-3024429.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。
 

(c)2016-2019 31DUO.COM All Rights Reserved浙ICP备19001410号-4

浙ICP备19001410号-4