抖音粉丝群1
『7x24小时有问必答』

置顶/标星公众号,不错过每一条消息
众所周知S7-200 SMART PLC本身既不支持SIMATIC对时也不支持NTP对时,当需要它与WINCC系统时间一致时该怎么办?



1.描述

本文给出一种使用WINCC的C脚本把时间写到PLC变量,这些变量作为"Date_And_Time"数据类型值(以BCD码编码)被调用,通过指令“SET_RTC" 设置PLC时间。

2.PLC程序

PLC程序比较简单:
例子程序,WINCC下发的时间放在MB10-MB17,MB18为时间设置使能。读取的PLC时间放在MB20-MB27。关于READ_RTC/SET_RTC 指令更多信息,可查看”STEP 7-Micro/WIN SMART 在线帮助“。

1.png

3.添加条目与变量

配置WINCC通过Simatic Net OPC 连接S7-200 Smart PLC,在此就不叙述,网上资料很多。如果你遇到什么问题可以留言。

OPC SERVER添加条目

添加设置时间地址条目(对应MB10-MB18),Data type为B(byte)

2.png

添加读取时间地址条目(对应MB20-MB27),Data type为DT

3.png

4.jpeg

OPC CLIENT添加变量

通过浏览服务器添加读取时间变量(数据类型为”日期/时间“),设置时间变量(数据类型为”原始数据类型“)

5.png


4.WINCC脚本

画面添加一时间控件用来显示pc时间,一I/O域显示PLC时间,一按钮触发对时脚本

6.png

设置PLC时间C脚本:
#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){  #pragma code("kernel32.dll");void GetLocalTime(SYSTEMTIME *lpst);#pragma code();
SYSTEMTIME pctime;BYTE A[9] = {0};BYTE B[9] = {0};int i;int tmp1;int tmp2;
//读取pc本地时间GetLocalTime(&pctime);
A[0]=pctime.wYear-2000;A[1]=pctime.wMonth;A[2]=pctime.wDay;A[3]=pctime.wHour;A[4]=pctime.wMinute;A[5]=pctime.wSecond;
//8位整数值转成BCDfor(i = 0;i<6;i++) {    tmp1 = A / 10;   tmp2 = A % 10;   B = (tmp1 << 4) | tmp2;}
//时间设置标志B[8]=1;
SetTagRawWait("set200smartplctime",B,9);  //Return-Type: BOOL
}

注意:
上面的方法只能进行时间设置而不能完成时间同步的功能。因为必须考虑到延迟,比如报文的处理时间,C 脚本的运行时间等,PLC程序执行时间,因此这个方法在精度方面不如真正的时间同步精确。
还要注意时间跳变(向前/向后)的发生,这就意味着这个方法不适用于必须按时间正向顺序的应用。


推荐阅读:



最后
若觉得文章对你有帮助,随手点在看、分享,也是支持和鼓励。

扫描下面二维码、关注后,在底部菜单中可查看更多内容!  

长按识别图中二维码关注

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码