技术论坛

wincc取系统时间用C脚本与设备读写数据

作者 主题
游民

经验值: 52
发帖数: 5
精华帖: 0
主题:【探讨】wincc取系统时间用C脚本与设备读写数据


只看楼主 楼主 2022-05-13 17:49:08

     最近因为实际需要,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

版主

经验值: 69050
发帖数: 12265
精华帖: 59
回复:wincc取系统时间用C脚本与设备读写数据


只看楼主 1楼 2022-05-14 22:18:07

嗯,感觉用VBS的话,更简单一些呢


Q群:https://jq.qq.com/?k=9BDuEgf6
以下网友喜欢您的帖子:

  
版主

经验值: 43587
发帖数: 15780
精华帖: 61
回复:wincc取系统时间用C脚本与设备读写数据


只看楼主 2楼 2022-05-16 15:11:52

没看懂你要干什么?GetTagSWord("SECOND")和"Data_Second"== 10之间是什么关系?你要每分钟的第10秒清一次吗?


活到老,学到老!为了生活学习吧!
以下网友喜欢您的帖子:

  
版主

经验值: 43587
发帖数: 15780
精华帖: 61
回复:wincc取系统时间用C脚本与设备读写数据


只看楼主 3楼 2022-05-16 15:16:34

如果你的设备漏了这个复位的参数怎么办?应该是hmi置位,接收设备中复位。

vbs直接用year(now),month(now),day(now),hour(now),minute(now),second(now)这些函数获取时间字段的值更简单。


活到老,学到老!为了生活学习吧!
以下网友喜欢您的帖子:

  
版主

经验值: 43587
发帖数: 15780
精华帖: 61
回复:wincc取系统时间用C脚本与设备读写数据


只看楼主 4楼 2022-05-18 08:42:36

c脚本中的变量值都是读进来的,没有直接使用的。Data_Second也必须要先读取才能用于判断。

如果你是每10秒判断1次,那么脚本中直接判断second(now)=10就行了。因为你的脚本因为系统原因可能有读不到数据的情况,所以建议你脚本周期用5s或者10s,然后脚本中判断值在一个范围内就可以了。


活到老,学到老!为了生活学习吧!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
wincc取系统时间用C脚本与设备读写数据
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。