故事作者:铁面判官

最近创作

看看TA的故事

【软件编程】用WinCC读取的PC时间设置PLC控制器的时间

已锁定

铁面判官

西门子1847工业学习平台

  • 帖子

    327
  • 精华

    2
  • 被关注

    39

论坛等级:侠圣

注册时间:2016-08-24

钻石 钻石 如何晋级?

【软件编程】用WinCC读取的PC时间设置PLC控制器的时间

1674

0

2021-01-11 15:27:29

由于最近手头一个项目用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、打开全局脚本,在全局动作中写如下脚本,编译保存,

注意
函数使用“设置系统时间”将格林威治时间写入控制器。
如果希望将系统时间写入控制器,可以在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 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就可以啦!


【软件编程】用WinCC读取的PC时间设置PLC控制器的时间 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3364条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。