zoukankan      html  css  js  c++  java
  • WinCC OA-综合案例-数据库拉取信息并创建datapoint

    案例背景

    今天来一篇实战的内容,内容为我们为某水司制作OA系统时实际遇到的情况,

    某个水司的管辖范围内会有多个泵站(少则几百多则几千),这种泵站大体的数据模型都是相同的,

    水司很有可能之前已经搭建了部分信息系统比如站点ID及名称的录入,我们可以充分利用这些信息来搭建我们的OA系统,

    避免手工录入,手工录入的出错率还是蛮高的

    准备工作

    数据源

    我们在MySQL 数据库中新建了一张表 pump_station,并录入了一些信息

    image

    DataType创建

    在para中创建PumpStation 数据类型(这里简单的挂载了几个变量)

    image

    使用脚本添加datapoint

    连接数据库

    请参考[WinCC OA-CTRL-操作MySQL数据库] 这篇文章来处理数据库连接

    编码

    我们这里直接新建一个pnl ,添加一个按钮 加入代码

    image

    代码详情

    main(mapping event)
    {
      //数据库连接
      int rc;
      dbConnection conn;
      string conStr = "DSN=WINCCOA;UID=eric;PWD=123456;";
      rc = dbOpenConnection(conStr,conn);
      string  queryStr = "SELECT * FROM pump_station";
      dbRecordset rs;
      //读取内容
      rc = dbOpenRecordset (conn, queryStr, rs);
      if (!rc)
      {
        //遍历结果集 打印取出结果
        while (!rc && !dbEOF (rs))
        {
          string id,name;
          rc = dbGetField (rs, 1, id);
          rc = dbGetField (rs, 2, name);
          //重点****
          if (!dpExists(id))
          {
            //使用ID创建站点
            dpCreate(id,"PumpStation");
            //设置datapoint 中的tag
            dpSet(id+".tag",name);
          }
          rc = dbMoveNext (rs);
         }
        dbCloseRecordset (rs);
      }
      //关闭数据库
      dbCloseConnection(conn);
    }

    请注意代码中的重点内容,OK

    测试

    运行 pnl 点击按钮进行测试

    image

    可以看到 datapoint 如我们所愿 添加成功  同时也将每个datapoint的tag变量赋值成功

    高级控件应用

    有了这些数据 我们稍微扩展下 使用一个高级控件做点文章

    添加list控件

    image

    编写控件的initialize event

    image

    main()
    {
      dyn_string stations;
      string tag;
      //定义全局变量gStationMap
      addGlobal("gStationMap",MAPPING_VAR);
      stations=dpNames("System1:*.tag");
      for(int i=1;i<=stations.count();i++){
          // 获取站点名称      
          dpGet(stations[i],tag);
          // 添加站点名称至 list
          this.appendItem(tag);
          // tag 信息 添加至 gStationMap
          gStationMap[tag]=stations[i];
      }
      DebugN(gStationMap);
    }

    保存 测试一下

    image

    站点信息取出成功

    编写Item 双击事件

    有的时候我们需要对List中的每个item 选中的时候进行一些操作,比如读取数值,

    我们接着实现一下

    image

    main(mapping event)
    {
      //获取选中的items  
      dyn_string items = this.selectedItems();
      //取第一个
      string stationName=items[1];
      //取datapoint tag
      string  tag = gStationMap[stationName];
      strreplace(tag,".tag","");
    

    DebugN(tag);
    //下面就是你的实际业务 ,这里只是简单获取 输入流量inFlux
    double value;
    dpGet(tag
    +".inFlux",value);
    DebugN(value);

    }

    测试

    image

    一切尽在掌握 o(∩_∩)o

    码上关注 获取更多精彩

    @@

  • 相关阅读:
    每日日报24
    每日日报23
    每日日报22
    链路层:MAC 地址
    应用层:电子邮件
    应用层:HTTP 协议
    应用层:DNS 域名系统
    运输层:TCP 拥塞控制
    运输层:拥塞控制原理
    JAVA学习日记26-0731
  • 原文地址:https://www.cnblogs.com/indus-eric/p/12950593.html
Copyright © 2011-2022 走看看