找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2976|回复: 12

4年WINCC项目经验总结

 火.. [复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:6
  • 打卡总奖励:9027
  • 最近打卡:2025-12-17 23:15:51

2823

主题

541

回帖

2万

积分

管理员

积分
22569
发表于 2021-1-5 20:48:25 | 显示全部楼层 |阅读模式
14年第一次用WINCC写了个技术总结,18年有项目用重新找出来,发现还是那么熟悉。但是用的WINCC6.2,安装的时候那是一个纠结。系统重做了N变,最终安装成功。希望能给各位使用者提供一定的帮助。
每个项目都有新的收获,养成长总结的好习惯,只管重要。帮助别人也帮助自己。闲话少说,下面开始正题。
一、Wincc online trend控件实现多条曲线查询
项目要求,查询任意时段内的两条曲线的历史数据
1、 首先在变量记录中设置需要记录的变量,如果需要在一个控件内显示两条曲线,做数据归档时,归档属性最好是一致的,归档属性不一样是否会出现问题,这个没测试,有兴趣的可以测试一下。
2、 数据记录设置OK后,新建画面插入online trend控件,我的项目需要把趋势打印出来,所以把控件的工具栏全部隐藏。
3、 双击online trend控件,添加需要显示的归档变量。选择公共X,Y轴等参数。坐标显示根据自己使用选择,基本上不用设置太多参数。
4、 添加需要显示的历史归档变量后,就需要写脚本了,西门子工控网论坛有实例,实例提示针对于一条曲线时使用,咨询西门子技术支持,如果需要同时显示两条曲线时,需要对两条曲线分别进行设置属性“控件.index=0,1”,但是测试其实只设置index=0的起始及结束时间就OK,就是论坛给的实例不是只针对于一条曲线,两条曲线时同样适用,再多的曲线就没测试了。
5、 西门子默认的时间格式为“MM-DD-YYYY HH-MM-SS”格式,所以在设置趋势起始及结束时间时需要注意。
6、 注:导入归档数据需要一定的时间,建议按钮触发。尝试在画面打开时触发脚本,有的时候会出现历史数据加载不上来。
7、 脚本如下,仅供参考
Dim objConnection
Dim strConnectionString

Dim strSQL
Dim objrs
Dim chaxun

'定义曲线控件
Dim TREND
Dim strval_1
Dim strval_2
Dim strval_t1
Dim strval_t2

'初始化程序,省略N行................................

'初始化程序,省略N行................................

chaxun=HMIRuntime.Tags("管号查询输入").Read
strConnectionString ="rovider=MSDASQL;DSN=REPORT;UID=WD=;"
strSQL = "select * from report whereguanhao='"&chaxun&"';"
Set objConnection =CreateObject("ADODB.Connection")
objConnection.ConnectionString =strConnectionString
objConnection.Open
Set objrs =CreateObject("ADODB.RecordSet")
objrs.open strSQL,objConnection
/赋值程序,省略,,,,,,,,,,,,,,,/

/赋值程序,省略,,,,,,,,,,,,,,,/

objrs.close
Set objrs = Nothing
objConnection.Close
Set objConnection = Nothing
'趋势时间设定
Set trend = ScreenItems("控件1")
strval_r=HMIRuntime.Tags("测试日期_read").Read
strval_t1=HMIRuntime.Tags("开始时间_read").Read
strval_t2=HMIRuntime.Tags("测试时间_read").Read

strval_1=strval_r+" "+strval_t1
strval_2=strval_r+" "+strval_t2

trend.Index=0
trend.Online=False
trend.TimeRange=False
trend.BeginTime=strval_1
trend.EndTime=strval_2
trend.Command="Reload"
实际效果如下:


2、Wincc ODBC连接ACCESS数据库, MshflexGird控件显示数据
1、 wincc自带安装SQL数据库,连接不上,退而求其次只能使用ACCESS数据库了,好多人说ODBC方法过时了,但是对于我们这些对数据查询量较小,查询频率较低的高级语言初学者来说,该方法还是比较实用。
2、 MshflexGird控件,个别电脑上可能没有注册,可以在网上下载重新注册,这次尝试了好多次可以注册,但是在添加的时候总是报错,使用较笨的方法安装了VB6.0,
3、 MshflexGird控件的属性比如列数,行数,列宽,列头注释等等。百度一下有好多文档介绍
4、 脚本部分:
Dim objConnection
Dim strConnectionString
Dim strSQL
Dim objrs
Dim chaxun
Dim i
Dim j
'定义报表控件
Dim aa
'chaxun=HMIRuntime.Tags("管号查询输入").Read
'数据库连接字符串
strConnectionString ="rovider=MSDASQL;DSN=REPORT;UID=WD=;"
strSQL = "select * from report order by 编号 ASC;"
Set objConnection =CreateObject("ADODB.Connection")
objConnection.ConnectionString =strConnectionString
objConnection.Open
Set objrs =CreateObject("ADODB.RecordSet")
objrs.open strSQL,objConnection

'数据循环写入MSFlexgrid控件
Set aa = ScreenItems("控件5")
aa.rows = 2
'设置列头文字
aa.FormatString = "^序号|^管号|^管径|^管长|^壁厚|^材质|^试压压力Mpa|^保压时间S|^试压日期|^结束时间|^开始时间|^操作员|^班次|^结论|^标准|^规格|^温度℃|"
'设置列宽度
For j=2 To 14
aa.ColWidth(j)=1500
Next
j=j+1
aa.ColWidth(1)=2000
aa.ColWidth(15)=2000
'写入数据
On Error Resume Next
objrs.moveFirst
Do While Not objrs.eof
For i=0 To 16
aa.TextMatrix(aa.Rows-1,i)=objrs.fields(i).value
Next
aa.Rows=aa.Rows+1
objrs.movenext
Loop
'释放连接
objrs.close
Set objrs = Nothing
objConnection.Close
Set objConnection = Nothing
效果如下:


三、页面打印问题:
1、 这次项目需要打印的报表格式为曲线及数据在同一个页面内,数据保存在access数据库内,曲线使用online trend控件显示。具体怎么实现呢,方法1,把曲线及查询的数据放在同一个页面内显示,打印页面。
2、 打印整个页面,网上及西门子论坛好多高手说了好多方法,可以借鉴一下。
3、 偶适用的方法是硬拷贝。
a、报表编辑器—新建一个布局,在新建的布局中插入硬拷贝对象。双击硬拷贝对象---选择—区域选择。区域=一个分段的硬拷贝(2),然后设置X,Y坐标,宽度及高度。XY轴设置为需要硬拷贝的开始点,宽度及高度为区域设置。
b、新建好布局,需要添加一个打印作业(报表编辑器—打印作业)设置名称,布局选择你设计的布局,对话框选择打印机设置(选择该项为打印的时候会弹出打印机选择对话框)。


c、最后一步就是脚本了,脚本是从网上赋值的C脚本。
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char*lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
#pragma option(mbcs)
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction"DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCCICNAME_SECTION_START
// syntax: #define PicNameInAction"ictureName"
// next PicID : 1
// WINCCICNAME_SECTION_END

RPTJobPrint("新建的打印作业的名称");
}
四、Wincc输入框输入负数问题:
Wincc输入输出框属性:输出格式=s99999,注意时小s,为啥大S不行呢,只能问siemens的技术了。
五、项目备份:
1.WinCC项目复制推荐使用系统自带的项目复制器Project Duplicator来复制,直接拷贝文件夹的复制方式可能会造成文件的丢失或者损坏。
2.使用项目复制器复制后的项目,只包含组态数据,不包含运行数据(例如归档文件)。
3.用项目复制器复制项目的操作步骤:
开始--SIMATIC--WINCC--Tools--Project Duplicator
“选择要复制的项目”中找到项目中的.MCP文件,另存即可。
4.整个wincc项目直接拷贝步骤:
“开始”--“运行”,输入reset_wincc.vbs,确定后会关闭WinCC的相关进程,然后直接复制项目即可。
打开项目时,还需注意WinCC版本信息,低版本WinCC打开高版本WinCC组态过的项目是会报错的


小知识:
SIMATIC WinCC(WindowsControl Center),是西门子公司为工业控制开发的组态软件,它是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。
WinCC,这一运行于Microsoft Windows 2000和XP下的Windows控制中心,已发展成为欧洲市场中的领导者,乃至业界遵循的标准。如果你想使设备和机器最优化运行,如果想最大程度地提高工厂的可用性和生产效率,WinCC当是上乘之选。


转发是最大的鼓励!谢谢您的支持!

工控课堂 www.gkket.com

0

主题

382

回帖

1640

积分

高级会员

积分
1640
发表于 2021-1-5 23:31:11 | 显示全部楼层
无私奉献,好工控人,32个赞送给你!!
工控课堂 www.gkket.com

0

主题

114

回帖

471

积分

注册会员

积分
471
发表于 2021-1-5 23:45:11 | 显示全部楼层
强烈支持楼主ing……
工控课堂 www.gkket.com

0

主题

90

回帖

139

积分

新手上路

积分
139
发表于 2025-11-14 03:22:47 | 显示全部楼层
楼主辛苦啦,期待下一篇分享
工控课堂 www.gkket.com

0

主题

85

回帖

132

积分

新手上路

积分
132
发表于 2025-11-14 05:32:01 | 显示全部楼层
浅蹲一个后续,楼主更新踢我一下
工控课堂 www.gkket.com

0

主题

323

回帖

920

积分

中级会员

积分
920
发表于 2025-11-14 05:55:30 | 显示全部楼层
笑不活了,评论区比正文还精彩
已转发给朋友,一起快乐一下
工控课堂 www.gkket.com

0

主题

80

回帖

124

积分

新手上路

积分
124
发表于 2025-11-14 07:52:11 | 显示全部楼层
内容太顶了!疯狂点赞,已默默收藏~
工控课堂 www.gkket.com

0

主题

78

回帖

125

积分

新手上路

积分
125
发表于 2025-11-14 09:25:43 | 显示全部楼层
笑不活了,评论区比正文还精彩!
工控课堂 www.gkket.com

0

主题

98

回帖

148

积分

新手上路

积分
148
发表于 2025-11-15 12:42:47 | 显示全部楼层
赞同 + 10086,没毛病,完全没毛病
工控课堂 www.gkket.com

0

主题

233

回帖

496

积分

注册会员

积分
496
发表于 2025-11-15 19:08:14 | 显示全部楼层
理性围观,感觉大家说得都有道理
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 16:16 , Processed in 0.138357 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表