签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
最近因为实际需要,wincc连接了部分的设备总共10台,因为每台设备都有相应的产量计数,在当班需要进行清零,这个关系到每个时间段的产量,所以要求同时归零。
鉴于此种情况,开始从wincc寻求解决问题的办法,第一步开始想办法将系统的时间取出:1、利用C脚本文件将系统时间读取,代码(只是把别人的东西复制了一下)如下:
#pragma option(mbcs)
#pragma code("kernel32.dll");
void GetLocalTime(SYSTEMTIME*lpst);
#pragma code();
SYSTEMTIME time;
GetLocalTime(&time);
SetTagWord("Data_Hour",time.wHour);
SetTagWord("Data_Month",time.wMonth);
SetTagWord("Data_Year",time.wYear);
SetTagWord("Data_Second",time.wSecond);
SetTagWord("Data_Minute",time.wMinute);
if (GetTagSWord("SECOND")== 10&&"Data_Second"== 10)//if语句后面取值必须使用GetTagSWord("tag_name")
SetTagDWord("module",100);
SetTagBit("ZERO",1);
}
else
{
SetTagDWord("module",200); //Return-Type: BOOL
SetTagBit("ZERO",0);
因为忽然之间有了其他的想法,所以这个帖子发的其实有点莫名其妙,现在完成后补充后面内容。实际上上面做的准备都是为了做WINCC的日报表、月报表、年报表使用的。因为生产需要进行产量统计,所以对统一性要求较高,使用WINCC同时赋值的方法进行统一(如果通讯中断,这个就很难进行了,如果有好的想法可以帮忙想下)。言归正传,做报表当时查阅百度第一方案为将数据读入SQL数据库,再通过WINCC的控件进行EXCEL导出,但是自己装的软件里面有控件未授权,没有办法完全实现,具体参考如下:
(2条消息) Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)_木子*泓泽的博客-CSDN博客_wincc报表
没办法只能再想其他办法,省掉SQL数据库的存储,直接将数据导出到EXCEL中,这样就产生了以日期为名称的日报表。具体代码如下:已经测试运行无误。
Dim objExcelApp,objExcelBook,objExcelSheet,a,b,i
Dim sheetname
sheetname="原数据" '工作表名称
Set objExcelApp =CreateObject("Excel.Application") '创建表格对象模型
objExcelApp.Visible=False '设置表格对象可见,不可见=False
Set a=objExcelApp.Workbooks.Open("C:\生产数据表_模板1") '如果存在打开该文件,
Set b=a.worksheets(sheetname)
i=10
objExcelApp.Worksheets(sheetname).Activate '激活工作表格
objExcelApp.Worksheets(sheetname).cells(i,8).value = Now()
objExcelApp.Worksheets(sheetname).cells(i,9).value =(HMIRuntime.Tags(变量1").Read
objExcelApp.Worksheets(sheetname).cells(i,10).value= HMIRuntime.Tags("变量2").Read
objExcelApp.Worksheets(sheetname).cells(i,11).value = HMIRuntime.Tags("变量3").Read
objExcelApp.Worksheets(sheetname).cells(i,13).value = 0
Dim patch,filename
filename=CStr(Year(Now))&"_"&CStr(Month(Now))&"_"&CStr(Day(Now))&"_"&CStr(Hour(Now))&"_"&CStr(Minute(Now))&"_"&CStr(Second(Now))
patch= "C:\报表\"&filename&".xlsx"
objExcelApp.ActiveWorkbook.SaveAs patch
objExcelApp.Workbooks.Close '退出工作簿
objExcelApp.Quit '表格模型退出
Set objExcelApp= Nothing'释放资源
Set fso=Nothing'释放资源
经过此脚本,就完成了日报表的导出。另外还有月报表,还不知道怎么做,不知道谁能给提供下帮助。
这样这个帖子算是有头有尾了
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1762080&b_id=5&s_id=0&num=4
嗯,感觉用VBS的话,更简单一些呢
没看懂你要干什么?GetTagSWord("SECOND")和"Data_Second"== 10之间是什么关系?你要每分钟的第10秒清一次吗?
如果你的设备漏了这个复位的参数怎么办?应该是hmi置位,接收设备中复位。
vbs直接用year(now),month(now),day(now),hour(now),minute(now),second(now)这些函数获取时间字段的值更简单。
c脚本中的变量值都是读进来的,没有直接使用的。Data_Second也必须要先读取才能用于判断。
如果你是每10秒判断1次,那么脚本中直接判断second(now)=10就行了。因为你的脚本因为系统原因可能有读不到数据的情况,所以建议你脚本周期用5s或者10s,然后脚本中判断值在一个范围内就可以了。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录