关于WINCC向1200和400写入PC时间的问题(已处理)

已锁定

手机用户20211004588180

  • 帖子

    3
  • 精华

    0
  • 被关注

    1

论坛等级:游民

注册时间:2021-10-04

普通 普通 如何晋级?

关于WINCC向1200和400写入PC时间的问题(已处理)

2556

4

2022-03-26 20:13:39

现在已经搞好了。

具体方案如下

1,在wincc变量中,增加新的驱动systen info,并创建,年月日时分秒对应的变量,类型是16位整数

2,在对应的PLC中创建数据块,并建立对应的变量,连接到WINCC中

3,在界面拖放IO输入输出域,选择输出,绑定system info中的变量输出值,并在事件,输入输出,输出值中,添加动作,将system的变量,和PLC中创建的变量进行连接转发

4,这样在PLC中就可以监控到对应地址的当前时间值了。

5,在PLC中创建写入时间的DTL数据类型,将WINCC转发过来的时间数据,一一对应到DTL数据中。

6,通过WR_LOC_T指令,将新创建的DTL数据,写入到PLC中。担心一直写会引起不可预估的问题,增加一个定时器,设定24小时写一次。

这样就实现了WINCC向PLC同步时间的问题。但是还是存在一个瑕疵问题。


就是如果存储时间的数据块因为重置而丢失数据之后,那么在显示时间的界面需要重新激活一下才可以再次写入PLC,否则只会同步改变的数字。年和月这种长时间不变的就一直为0。

打算在多个该PLC相关的界面,增加时间显示,这样只要切换一次页面就可以转发一次,就不会出现没有数据了。这算是补救方案。希望有更好的办法,




--------------------------------------------------------------------

原提问内容:

现在项目上有一套wincc 7.5版本的

下属55个1200系列CPU,基本是1214和1215的,

下属2个414的CPU,

目前存在问题是,因为wincc上服务器时间和下面CPU时间不完全一致,到时时间启停的时候有延迟或者提前,现在客户要求完全同步。

第一次尝试,根据寻找的以下全局脚本代码(附文末),建立一个内部变量Now,数据类型是8位文本变量。可以实现时间的组合。也可以在wincc上用输出域显示出来。但是我在PLC上的STRING数据类型的地址,通过数据直连没办法吧Now的数据转发到PLC的String地址中,最多只能转发一半,不知道原因,而且里面存在一个问题就是10以内的时间数字不会自动补0,导致字符串长短不定。失败

第二次尝试,根据刚才第一次尝试的脚本,建立几个word数据类型,直接把单个systime.wYear等直接按照单个无符号16位传送到PLC的地址。发现无法传送。数据始终为0

第三次尝试,关于PLC个NTP时间服务器的,一看服务器上各种设置,就不敢动,怕服务器出问题。到时候就麻烦了。

第四次想法,通过脚本把时间读取过来,然后分别把年,月,日,时,分,秒,转换成整数,在转发到PLC对应的时间地址,将PLC的内部时间和wincc转发过来的时间对比,如果超过一定误差,就写入一次。


请各位大佬指点,第三个想法能不能实现,能实现的话,怎么转发,我用gettagword指令一直报错。

或者有更好的办法能够实现。



读取时间全局脚本。

#include "apdefap.h"

int gscAction( void )

{

#pragma option(mbcs)

char szNow[20];

SYSTEMTIME systime;

GetSystemTime(&systime);

sprintf(szNow,"%d-%d-%d %d:%d:%d",systime.wYear,systime.wMonth,systime.wDay,systime.wHour+7,systime.wMinute,systime.wSecond);

SetTagChar("Now",szNow);

return 0;

}


关于WINCC向1200和400写入PC时间的问题(已处理) 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32660条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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