作者 | 主题 |
---|---|
山顶有风 侠圣 经验值:3818 发帖数:834 精华帖:3 |
楼主 2018-07-06 23:04:44
主题:初学者WINCC应用过程中,部分功能技术总结,希望对初学者有一定帮助 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 = "Provider=MSDASQL;DSN=REPORT;UID=;PWD=;" strSQL = "select * from report where guanhao='"&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 = "Provider=MSDASQL;DSN=REPORT;UID=;PWD=;" 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、 偶适用的方法是硬拷贝。 3.1、报表编辑器—新建一个布局,在新建的布局中插入硬拷贝对象。双击硬拷贝对象---选择—区域选择。区域=一个分段的硬拷贝(2),然后设置X,Y坐标,宽度及高度。X Y轴设置为需要硬拷贝的开始点,宽度及高度为区域设置。 3.2、新建好布局,需要添加一个打印作业(报表编辑器—打印作业)设置名称,布局选择你设计的布局,对话框选择打印机设置(选择该项为打印的时候会弹出打印机选择对话框,个人感觉比较实用)。 3.3、最后一步就是脚本了,脚本是从网上赋值的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
// WINCC:PICNAME_SECTION_START // syntax: #define PicNameInAction "PictureName" // next PicID : 1 // WINCC:PICNAME_SECTION_END
RPTJobPrint("新建的打印作业的名称"); } 四、Wincc输入框输入负数问题: Wincc输入输出框属性:输出格式=s99999,注意时小s,为啥大S不行呢,只能问siemens的技术了。 五、项目备份: 1.WinCC项目复制推荐使用系统自带的项目复制器Project Duplicator来复制,直接拷贝文件夹的复制方式可能会造成文件的丢失或者损坏。 打开项目时,还需注意WinCC版本信息,低版本WinCC打开高版本WinCC组态过的项目是会报错的
2014年3月17号于湖州 陌上尘
路漫漫其修远兮,吾将上下而求索!!!
|