wincc的n个经典问题解答之一

已锁定

阿洪

  • 帖子

    610
  • 精华

    0
  • 被关注

    3

论坛等级:侠客

注册时间:2007-04-03

普通 普通 如何晋级?

wincc的n个经典问题解答之一

543

0

2007-04-03 16:14:32

1、问: 如何触发计算机扬声器的声音?
  答: 编写如下C-Action:
  #pragma code("kernel32.dll");
  BOOL Beep(DWORD dwFreq,DWORD dwDuration);
  #pragma code();
  Beep(500,500);
2、问: 如何在WinCC中读取系统时间?
  答: 通过如下C-Action:
  #pragma code("kernel32.dll");
  Void GetLocalTimes(SYSTEMTIME*lpst);
  #pragma code();
  SYSTEMTIME time;
  GetLocalTime(&time);
  SetTagWord("Varname",time.wYear);
  SetTagWord("Varname",time.wMonth);
  SetTagWord("Varname",time.wDayOfWeek);
  SetTagWord("Varname",time.wDay);
  SetTagWord("Varname",time.wHour);
  SetTagWord("Varname",time.wMinute);
  SetTagWord("Varname",time.wSecond);
  SetTagWord("Varname",time.wMilliseconds);
  3:如何进行WinCC 和 S7之间的时间同步? 

回答:下面的方法只能进行时间设置而不能完成时间同步的功能。因为必须考虑到延迟,比如报文的处理时间,C 脚本的运行时间等,因此这个方法在精度方面不如真正的时间同步精确。 

   1.创建一个数据块 ,其中有一个 "DATE_AND_TIME" 类型的变量和一个布尔变量。当元素"Flag" 在WinCC中被置1,程序就调用系统函数SFC0  "SET_CLK"。D B1中的触发变量"Flag" ( DB1.DBX 8.0)在WinCC脚本中被SetTagBitWait("DB1_FLAG",TRUE) 置1。 因此仅当此C脚本在WinCC中被调用时,时间才被设置。SFC0 必须先添加到Step7程序的块文件夹中。 在此段程序中,DB块中的各个时间变量被写到作为 SFC0参数的"DATE_AND_TIME"类型的本地变量"DateAndTime"中。 用 "SET_CLK" 设置完时钟后,触 发变量"Flag"被复位。 注意: 在此段程序中,本地变量"DateAndTime"存储在以0为起始地址的本地数据堆栈中。如果不得已要把这个变量分配到别的地址,同 时对传送指令参数化时,必须要考虑到地址分配的问题。

   2.为“年”新建一个 "Unsigned 8-bit value"类型的变量,对其进行格式变换 ByteToBCDByte,然后为其在DB块中选择相应的字节地址:  在WinCC 中创建剩下的变量。 选择"Unsigned 16-bit value" 类型然后改变格式为 WordToBCDByte ,然后在DB块中选择实际的字节地址。

   3.最后,在WinCC中创建一个C脚本来读取系统时间并进行拆分,然后把它们写到DB1中。 S7 PLC中的时钟设置是被脚本中的"DBI_FLAG"变量触发的。 

wincc的n个经典问题解答之一 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32974条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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