精华内容
下载资源
问答
  • Wincc报表+Listview使用

    千次阅读 2018-08-29 16:09:00
    listviewWincc中可以作为显示的控件,对于列表表头的定义如下所示: list的命名,点击属性,在对象名称中对其定义: 有了listview的定义,就可以使用VBS对其表头的定义。具体代码如下所示(使用VBS): ...

    listview在Wincc中可以作为显示的控件,对于列表表头的定义如下所示:

    list的命名,点击属性,在对象名称中对其定义:

     

     有了listview的定义,就可以使用VBS对其表头的定义。具体代码如下所示(使用VBS):

    wincc运行起来的画面如下所示:

    有了表头以及列的定义就可以查询数据库数据显示在listview中。后续更新。

    转载于:https://www.cnblogs.com/yxxblog/p/9555000.html

    展开全文
  • ListView开发实例 ListView示例 ListView案例 小例子 源码
  • 项目背景   本项目中包含几套相同的粉灰取样单体设备,每次都需要刷卡启动系统,...本项目使用WinCC7.0作为上位机HMI软件其中一项内容就是实现下列功能: * 将刷卡信息存储到数据库中 * 数据库可以进行查...
    项目背景

      本项目中包含几套相同的粉灰取样单体设备,每次都需要刷卡启动系统,现场触摸屏会显示刷卡的一些信息(计划号、单位、重量、车号等信息,均为字符串类型)。刷卡机是通过RS485接口连接触摸屏,触摸屏不带存储卡,刷卡信息在系统运行结束后会自动清零。本项目使用WinCC7.0作为上位机HMI软件其中一项内容就是实现下列功能:
    * 将刷卡信息存储到数据库中
    * 数据库可以进行查询操作,并且能导出到excel

      网上有很多教程,但大多有些细节方面的问题,实现起来总是有些问题,没办法只能自己动手,丰衣足食。
      研究了几天总算是实现了功能,因为是在办公室,所以是用step7写了模拟程序,与WinCC一起仿真来测试报表功能。下面的介绍均是基于仿真的基础上,应用到现场只需进行一些小的改动即可。

    建立用户归档

      要求能存储字符串类型的数据,本次WinCC报表使用用户归档来实现,因为变量记录工具是不支持存储字符串类型数据的,而且用户归档控件的事件触发比变量记录要灵活的多。用户归档数据保存在WInCC自带的SQL Server 2005数据库中,后面有详细介绍。
      建立用户归档的方法网上很多,此处就不做介绍,建立如下用户归档“test3”,域act_time连接内部变量“act_time”,域CH连接PLC变量“CH001”(另两个域“RIQI”和“SHIJIAN”,分别连接了系统的日期和时间变量,没有用到,但懒人作祟,就没删除了),这里只用这个两个变量来测试,可以根据需要增加更多域来连接需要归档的变量。
    变量

    内部变量
    用户归档

      新建用户归档所需的控制变量“A_ID”、“A_job”,用于控制变量的读写操作,在建立用户归档时配置好这两个变量。当ID和指令分别为-1和6时用户归档存储一次数据,存储、读取、删除操作结束后指令A_job都会自动置0
    创建控制变量
    设置控制变量

    控制变量“ID”和“作业”的其它组合:

    ID作业 =“6”作业 =“7”作业 =“8”
    -1附加数据记录-删除带最低 ID 的数据记录
    -6读取带最低 ID 的数据记录写入带最低 ID 的数据记录删除带最低 ID 的数据记录
    -9读取带最高 ID 的数据记录写入带最高 ID 的数据记录删除带最高 ID 的数据记录

      通过PLC编程给变量来“A_ID”、“A_job”赋值,刷卡时m0.4来一次脉冲使A_ID=-1,A_job=6,存储一次数据。
    程序

      以上是建立用户归档的方法,打开SQL Server 2005数据库软件,会发现多了一个数据库CC_test_17_12_18_11_29_28R,表格中多了个用户归档同名的表“dbo.UA#test3”,归档记录就存在这个表中,后续用到的查询、导出功能都需要连接到数据库中的这个表。
    数据库

    WinCC画面

      在WinCC中新建一个启动画面,画面中添加几个控件:
    - 一个Listview控件,控件对象名称改为“LT1”,用于显示数据记录。
    - 两个DTpicker控件,名称改为“DTP1”、“DTP2”,用于选择查询的起止日期。
    - 两个按钮,一个“查询”,一个“导出”。
    画面
      画面建立好后,要实现数据的查询和导出功能,可以通过在“查询”和“导出”按钮中编写VBS脚本来实现。

    刷卡时间
      由于现场触摸屏没有记录刷卡时间,在数据传给上位机时需要把刷卡时间记录下来,可以使用系统当前时间保存到“act_time”变量中。但是刷卡是一个随机事件,所以我们需要添加一个VBS全局脚本,保存实时间到“act_time”变量,具体操作如下:

    新建全局脚本

      VBS动作代码如下,保存为“Aktion_write.bac”(可自己命名)。

    Dim TM
    Set TM=HMIRuntime.Tags("act_time")
    TM.Value=CStr(Date())&" "&CStr(Time())
    TM.Write

      设置VBS动作触发器,标准周期触发,250毫秒为周期(其实500毫秒就够用了,可根据系统资源来考虑触发周期):

    全局脚本触发器

      在WinCC中用静态文本框,动态连接变量“act_time”,测试显示的时间如下图,与系统时间一致地变化:

    系统时间
      这样在刷卡事件触发的时候,用户归档的域act_time就可以存储刷卡的时间。

    展开全文
  • 与查询功能不同的是,导出功能是把数据写入到Excel中,而不是显示到ListView控件上。这里给“导出”按钮的事件属性——“鼠标动作”中添加VBS脚本。 1、查询数据   这部分和查询的脚本一样,连接数据库,先比较...
    导出

      上一篇介绍了查询的VBS脚本,导出到Excel的功能同样也通过脚本来实现,也需要连接数据,查询需要的数据。与查询功能不同的是,导出功能是把数据写入到Excel中,而不是显示到ListView控件上。这里给“导出”按钮的事件属性——“鼠标动作”中添加VBS脚本。

    1、查询数据
      这部分和查询的脚本一样,连接数据库,先比较日期,然后再通过查询字符串进行查询操作。

    '定义连接字符串
    Dim sPro,sDsn,sSer,sCon
    sPro = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=false;"
    sDsn = "Initial Catalog=CC_test_17_12_18_11_29_28R;"
    sSer = "Data Source=ADMIN-PC\WINCC"
    sCon = sPro + sDsn + sSer
    
    Dim date1,date2,D1,D2
    Set D1=ScreenItems("DTP1")   'DTP1获取的为系统短时间格式 "2017/12/28 10:00:00"
    Set D2=ScreenItems("DTP2")
    date1 = Split(D1.value," ",-1,1)
    date2 = Split(D2.value," ",-1,1)
    Dim dt1,dt2
    dt1 = CStr(date1(0))&" "&"00:00:00"
    dt2 = CStr(date2(0))&" "&"23:59:59"
    
    '比较两个日期得大小   
    If DateDiff("d", CDate(D1.value), CDate(D2.value)) < 0 Then
       MsgBox "起始日期: "& date1(0) &"   大于  终止日期: "& date2(0), vbOKOnly + vbExclamation, "警告"
       Exit Sub
    End If
    
    '定义查询命令,查找符合条件的信息,位于两个日期之间的信息
    Dim sSql
    sSql = "select * from UA#test3 where act_time between '"& dt1 & "'" & "and '" & dt2 & "'"
    
    '建立连接
    Dim oRs,oCom,conn,m
    Set conn = CreateObject("ADODB.Connection")
        conn.ConnectionString = sCon
        conn.CursorLocation = 3
        conn.Open
    
    ' 创建查询的命令文本
    Set oRs = CreateObject("ADODB.Recordset")
    Set oCom = CreateObject("ADODB.Command")
        oCom.CommandType = 1
    Set oCom.ActiveConnection = conn
        oCom.CommandText = sSql
    Set oRs = oCom.Execute
    m = oRs.RecordCount    'm变量用于返回有效记录的数目
    'MsgBox "查询结果: 共有"& m &"条记录"

    2、调用Excel模板
      先编辑好Excel模板,可根据自己的报表需求来设计模板,这里模板保存在”D:\export_cardinfo\excel模板(勿删)”文件夹中,命名为“mode.xls”.

    Excel模板

    '调用Excel的接口打开模板
    Dim objExcelApp,sheetname
    sheetname="Sheet1"
    Set objExcelApp=CreateObject("Excel.Application") 
    objExcelApp.Visible=FALSE
    objExcelApp.Workbooks.Open"D:\export_cardinfo\excel模板(勿删)\mode.xls"
    objExcelApp.Worksheets(sheetname).Activate 

    3、向Excel中填入数据
      通过Excel的接口打开模板后,填入数据到Excel中。

    '填充数据到Excel中,
    If (m > 0) Then
        objExcelApp.Worksheets(sheetname).cells(2,1).value="刷卡记录编号"
        objExcelApp.Worksheets(sheetname).cells(2,2).value="刷卡时间"
        objExcelApp.Worksheets(sheetname).cells(2,3).value="车号"
        oRs.MoveFirst
        Dim i
        i=3
        Do While Not oRs.EOF '是否到记录末尾,循环填写表格
            objExcelApp.Worksheets(sheetname).cells(i,1).value= CStr(oRs.Fields(0).Value)
            objExcelApp.Worksheets(sheetname).cells(i,2).value= CStr(oRs.Fields(3).Value)
            objExcelApp.Worksheets(sheetname).cells(i,3).value= CStr(oRs.Fields(4).Value)
            oRs.MoveNext
            i=i+1
        Loop
        oRs.Close
    Else
        MsgBox "没有所需数据……"
        item.Enabled = True
        Set oRs = Nothing
        conn.Close
        Set conn = Nothing
        objExcelApp.Workbooks.Close
        objExcelApp.Quit
        Set objExcelApp= Nothing
        Exit Sub
    End If

    4、断开数据库连接,保存数据到新的Excel文件
      完成写入数据到Excel后,需要先断开数据库,然后保存到新的Excel文件中。

    '断开数据库
    Set oRs = Nothing
    conn.Close
    Set conn = Nothing

      生成新的Excel文件,自定义文件名“filename”和存储路径“path”,这里文件名以保存时间、查询时间范围来命名。

    '生成新的Excel文件,并关闭Excel
    Dim patch,filename,da1,da2,da3,da4
    da1=Split(date1(0),"/",-1,1)
    da2=Split(date2(0),"/",-1,1)
    da3=CStr(da1(0))&CStr(da1(1))&CStr(da1(2))
    da4=CStr(da2(0))&CStr(da2(1))&CStr(da2(2))
    filename="1#机记录"&CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))&CStr(Hour(Now))&CStr(Minute(Now))&CStr(Second(Now))&"_("& da3 &"-"& da4&")"
    patch= "D:\export_cardinfo\"&filename&".xls"
    objExcelApp.ActiveWorkbook.SaveAs patch
    objExcelApp.Workbooks.Close   
    objExcelApp.Quit 
    MsgBox "刷卡记录已导出到 D:\export_cardinfo 文件夹"

      这样就完成了导出到Excel功能的脚本,同样运行WinCC画面看看实际效果。
    导出

    展开全文
  • WinCC FlexGrid控件

    2018-09-28 21:58:30
    WinCC FlexGrid控件, 控件使用方法, 操作手册,入门手册
  •   前一篇中我们已经按照需求建立了所需变量的用户归档,这样WINCC会自动将这些变量按照设定的存储规则存放到SQL数据库中。而对历史数据进行查询,就是对SQL数据库正确操作以导出我们需要的数据。通过VBS语言对按钮...
    查询

      前一篇中我们已经按照需求建立了所需变量的用户归档,这样WINCC会自动将这些变量按照设定的存储规则存放到SQL数据库中。而对历史数据进行查询,就是对SQL数据库正确操作以导出我们需要的数据。通过VBS语言对按钮对象编辑一个脚本程序就可以方便地实现此功能,这里我们给“查询”按钮的事件属性——“鼠标动作”中添加VBS脚本。

    1、定义连接字符串
      我们是可以通过ODBC方便地访问数据库的。使用VBS连接数据库,我们要知道以下信息:数据库名,数据源名。我们打开SQL数据库,这时候看到Databases下有很多的数据库,WINCC建立的数据库名是有规则的,一般是“CC_工程名_年_月_日_时_分_秒R”。那么我们就可以这样定义连接字符串:

    '定义连接字符串
    Dim sPro,sDsn,sSer,sCon
    sPro = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=false;"
    sDsn = "Initial Catalog=CC_test_17_12_18_11_29_28R;"
    sSer = "Data Source=ADMIN-PC\WINCC"
    sCon = sPro + sDsn + sSer

    2、定义查询命令
      可以通过SQL语句来实现查询命令首先要获取两个DTPicker控件中的时间,分别表示起、止时间,经过比较控件日期来判断日期查询日期是否符合条件(起始日期 不能大于 终止日期),最后再用select语句来查询dt1和dt2两个日期之间的记录。
      需要注意的是,系统短日期需要修改成“yyyy/MM/dd”格式,Win7默认的是“yyyy/M/d”格式,不然在查询操作比较日期时,会出现意想不到的问题 O(∩_∩)O~,可根据实际需要来更改时间和日期格式。

    系统短日期格式

      具体代码如下:

    Dim date1,date2,D1,D2
    Set D1=ScreenItems("DTP1")   'DTP1控件获取的为系统短日期/时间格式 "2017/12/28 9:00:00"
    Set D2=ScreenItems("DTP2")
    date1 = Split(D1.value," ",-1,1)
    date2 = Split(D2.value," ",-1,1)
    Dim dt1,dt2
    dt1 = CStr(date1(0))&" "&"00:00:00"
    dt2 = CStr(date2(0))&" "&"23:59:59"
    
    '比较两个日期得大小   
    If DateDiff("d", CDate(D1.value), CDate(D2.value)) < 0 Then
       MsgBox "起始日期: "& date1(0) &"   大于  终止日期: "& date2(0), vbOKOnly + vbExclamation, "警告" 
       Exit Sub
    End If
    
    '定义查询命令,查找符合条件的信息,位于两个日期之间的信息
    Dim sSql
    sSql = "select * from UA#test3 where act_time between '"& dt1 & "'" & "and '" & dt2 & "'"

    3、连接数据库
      定义好了连接字符串与查询字符串,我们就可以访问SQL数据库了。

    '建立连接
    Dim oRs,oCom,conn,m
    
    Set conn = CreateObject("ADODB.Connection")
        conn.ConnectionString = sCon
        conn.CursorLocation = 3
        conn.Open
    Set oRs = CreateObject("ADODB.Recordset")
    Set oCom = CreateObject("ADODB.Command")
        oCom.CommandType = 1
    Set oCom.ActiveConnection = conn
        oCom.CommandText = sSql  '创建查询的命令文本
    Set oRs = oCom.Execute
    m = oRs.RecordCount    'm变量用于返回有效记录的数目

    4、用ListView控件显示数据
      这里我用ListView控件来显示数据,也可以用其他控件来显示。首先设置控件的显示方式,设置好表头。

    '定义ListView控件
    Dim olist
    Set oList = ScreenItems("LT1")
        oList.View =3 '设置外观为报表形式
        oList.GridLines =True '显示网格线
        oList.ColumnHeaders.Clear '清除原有表头
    With oList.ColumnHeaders '设置表头,中间对齐
        .add ,,"刷卡记录编号",80
        .add ,,"刷卡时间",150
        .add ,,"车号",100
    End With 
        oList.ListItems.Clear  '清除原有数据    
    
    '向istView控件中循环写入查询数据
    MsgBox "查询结果: 共有"& m &"条记录"   '提示框

      向ListView控件中循环写入查询数据

    If (m > 0) Then
        oRs.MoveFirst
    
        Dim i
        For i=1 To m
    'subitems(1)指第1列,oRs.fields(3)指数据库表中的第3列,计数均从0开始,第0列固定为数据库表中的ID
            With oList.listitems.add
                .text=CStr(oRs.fields(0).value)
                .subitems(1)=CStr(oRs.fields(3).value)
                .subitems(2)=CStr(oRs.fields(4).value)
            End With
            oRs.movenext
        Next
        oRs.Close
    Else
    End If

    5、断开数据库
      向ListView控件写完数据后,要记得断开数据库连接,释放资源。

    '断开数据库
    Set oRs = Nothing
    conn.Close
    Set conn = Nothing

      
      完成查询的VBS脚本后,保存项目,通过step7的仿真写入部分数据,然后运行WinCC画面,可以看到实际的效果。

    查询

    展开全文
  • WINCC注册MSCOMM控件

    2012-01-14 23:32:41
    WINCC注册MSCOMM控件,WINCC串口通讯使用。
  • 西门子之控件中显示的WinCC的变量记录zip,西门子通过VBS脚本在的ListView控件中显示的WinCC的变量记录:本文详细描述了在WinCC中如何通过VBS 脚本调用WinCC OLE DB 读取过程值归档,并显示在ListView控件中,以满足...
  • ListView 显示空白页

    2016-05-13 11:04:46
    listview是开发中很常用的控件,当加载数据失败或没有数据的时候,就得显示点提示, listView.setEmptyView(view); view 是需要显示的提示控件。 通过次方法可以直接显示,不再需要判断是否有值等。
  • WINCC 技术总结

    2010-08-20 19:52:18
    WINCC 技术资料,个人总结的常见问题的...27.关于listview控件 14 28.OPC连接问题 14 29.I/O域显示 *** 星花的原因 14 30.线段旋转问题 14 31.用户归档的使用与查询 14 32.报表系统问题 15 33.快速归档与慢速归档 15
  • 修改ListView表项的字体大小

    千次阅读 2018-11-23 17:45:34
    ListView没有直接修改item项字体大小的接口和设置,新建一个layout,里边放一个TextView并设置字体大小 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;TextView xmlns:...
  • listview控件属性详解

    2015-04-01 17:17:29
    由于这两天在做listView的东西,所以整理出来一些我个人认为比较特别的属性,通过设置这样的属性可以做出更加美观的列表 首先是stackFromBottom属性,这只该属性之后你做好的列表就会显示你列表的最下面,...
  •   前面介绍了用户归档+ListView控件制作报表的步骤,这篇是前面文章的后续,主要是在后面的实际应用中,需要存储的信息不止一组,可能分别存储在多个数据表中,根据查询条件的不同来定义不同的查询字符串。...
  • win10 64位系统上注册wincc的ocx插件问题 今天下载一个anigif动态图控件,注册时死活注册不了 在win10操作系统下注册OCX控件,主要有以下几个步骤: 1、以管理员的身份打开命令提示符, 2、输入注册命令,回车即可...
  • 实现动态显示,隐藏ListView的Item部分View.效果如下图所示: 点击右侧的隐藏,显示按钮,实现Item的部分布局的动态显示.涉及到的知识点1.inflate方法的不同参数的含义,以及作用 2.View的绘制过程,主要...
  • ListView控件数据操作 一、添加表头和数据 在窗口显示数据时,经常会用到ListView这个控件,虽然也可以使用ListBox,但其功能还是比较弱一些,ListView相对用起来更顺手一些。下面的两个函数是给控件添加表头和数据...
  • 如何限制供热gridview 和listview显示的个数; 思路问题:加载两个,我只拿两条出来 Log.i("查询结果", result);JSONObject jsonObject = new JSONObject(result);map.put("code", jsonObject.getString("code")...
  • 由于使用了universal-image...之前修改listview中某一项的数据后,再刷新listview时,出现了屏幕闪烁的问题,但是没有想到是是imageLoader造成的,只以为是重新加载图片时都会出现屏幕闪烁的问题,于是采用了局部刷新的
  • ListView 处理Item的选中状态(checked)

    万次阅读 2016-03-18 14:33:43
    在开发筛选条件相关的界面时,会用到如下界面,左栏选择一项,右边跳出子栏继续选择。...2.建立一个fragment,布局直接使用ListView 3.将fragment放入Activity的FrameLayout中。 4.实现Activity对fragment的赋值,
  • ListView 隐藏 某个 Item

    千次阅读 2016-10-18 14:36:57
    最近在做个项目,有个需求涉及到一个功能,大概就是过滤掉listview的某个item,百度了一下,发现没啥好的解决方法,于是还是google一下,果然搞出了答案,记录一下,方便他人~   [java] view ...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
热门标签
关键字:

listviewwincc