博途hmi历史趋势值怎么改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博途hmi历史趋势值怎么改相关的知识,希望对你有一定的参考价值。

参考技术A 博途上载hmi程序_关于博途精智屏的变量记录的设置和趋势图的使用 原创
2021-01-15 18:16:09

布洛分制造局
码龄4年
关注
第三讲 精智屏的变量记录相关内容

在运行系统中,将变量值存储在日志中。 可在以后分析记录的数据。 可为记录变量定义下列条件:

(1)用于记录所连接变量的值的日志变量。

(2)存储变量的数据日志。

(3)存储变量的周期或事件。

(4)存储变量的值范围。

一、数据记录包括下列几个步骤:

1、创建和组态数据日志

创建数据日志时,定义下列设置:

(1)常规设置,如名称、大小和存储位置

(2)运行系统启动特性

(3)日志已满时的行为

2、组态变量记录

对于每个日志变量,指定用于记录所连接变量的值和其它信息(如记录时间)的数据日志。

还将定义记录日志变量值的时间和频率。 有下列选项:

(1)“要求时”:

通过调用“LogTag”系统函数记录变量值。

(2)“改变时”:

HMI 设备检测到变量值变化时,即对变量值进行记录。

(3)“周期性”:

定期记录变量值。 在默认周期的基础上,可以 在 WinCC 中 使用自己的周期对其补充。最小值可设为 1 秒。所有其它值是此值的整数倍。

还可以将记录值限制在公差范围内或公差范围外。 这样,便限制了记录相应值范围内的值。

如果要根据请求记录变量,请注意以下几点:

(1)不要将此类型变量记录在分段的循环日志中,此日志会在连续循环或响应变化时记录变量。

(2)背景:

例如,如果根据请求进行的记录很少,循环日志值则会填充日志段,并创建下一个日志段。 如果那时尝试访问根据请求记录的变量,则不可能显示该变量,因为它是运行系统中可进行访问的当前日志段。 为消除此问题,应为极少记录的变量创建单独的数据日志。

进一步处理记录的变量值

可以直接在项目中(如在趋势视图中)或在其它用户程序中(如 Excel)分析记录的变量值。

二、通过演示操作来看看如何进行变量记录

前面文章中跟大家讲了如何组态一个项目,如何连接外部变量,如何仿真,这里不再过多啰嗦了,有兴趣的可以参看链接中的文章。

链接:手把手跟你分享博途HMI精智屏组态,适合初学者

链接:博途精智屏如何通过设备向导完成画面基本设置

1、周期性记录

在画面中插入输入输出域,并设置变量(这里我也是用上一个例子中的变量)

7faaeec8da6e478ce6ec66e06249d533.png
2、打开历史数据并创建变量记录

c2aed849ddd58b409ef58f283cec2794.png
3、打开仿真,查看执行情况

这里在PLC侧为了方便演示,我做了一个小程序,将变量HMI_word的每隔1s加1。

程序如下:

64fabedbea88a3ed7cd2787d5e3d8aca.png
打开画面仿真器的结果如下:

af2e860e5e020242f3ee9664a8ddb6bf.png
然后可以在EXCEL中查看记录,在上面的变量记录中的存储位置

Storage Card SDLogs

所以到C盘的Storage Card SDLogs中查看。

b42ee573d312edb55ecf332831daa233.png
记录如下:

1f53ce546ed2cd22946ee326673fb854.png
2、变化时记录

需要在历史数据中变量记录中将采集模式由循环修改为变化时。

707afac832dc7cf19b0f5892ad079e87.png
仿真结果:

7bba1f2da7497edf61c92464434945bb.png
3、必要时记录

在我们编辑的画面上通过变量HMI_bit改变是来记录变量HMI_word的值

首先也是在记录变量中将变化时修改为必要时。

344a853b09c84c98e18e74b106677084.png
在变量表中选择HMI_bit变量选择属性

4b6fc379046b27d27a6ec8ac09c0fc29.png
在事件页签中添加函数中选择历史数据中的日志变量。

363f1e211ee23f58debf81e9a6948dea.png
这样就设置完成,开始仿真

6d5667916831a6b57f4c32c51dd885db.png
5444ffd90a39eec056cf8c289e0ef385.png
4、趋势视图显示变量记录

在画面中将趋势 视图拖拽到画面中

4f96744642e553155f9fd423b2c282da.png
在属性中选择趋势,新建一个趋势,将趋势类型选择为数据记录

757735331e9908fe6cd4d19c8fefe962.png
在源设置中将数据记录选择为我们命名的“演示word记录”,过程值选择HMI_word变量。

4bb635144f9e86aac70c8d1b2fcefe8c.png
保存项目,编译并开始仿真

bzoj4241 历史研究

http://www.lydsy.com/JudgeOnline/problem.php?id=4241 (题目链接)

看到题目就联想到了【bzoj2809】 Apio2012—dispatching。想了想权值分块+莫队,发现不好维护块内最值,又看了看80s的时间,于是怒水一发线段树+莫队,结果先WA后TLE,不断TLE,无论怎么改常数都不行,难道nlogn*sqrt(n)就是过不了吗!!不爽,蒯个题解,再见!

题意:求区间加权众数。

solution 
  貌似是分块,离散化之后,用mx[i][j]表示第i块到第j块的答案,cnt[i][j]表示前i块数字j的个数。

代码:

// bzoj4241
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;
inline LL getint() {
    int f,x=0;char ch=getchar();
    while (ch<=‘0‘ || ch>‘9‘) {if (ch==‘-‘) f=-1;else f=1;ch=getchar();}
    while (ch>=‘0‘ && ch<=‘9‘) {x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}

const int maxn=100010;
struct data {int w,id;}a[maxn];
int b[maxn],pos[maxn],L[400],R[400],cnt[400][maxn],num[maxn],st[maxn];
LL mx[400][400],ans;
int n,m,block,tot,top;

bool cmp(data a,data b) {
    return a.w<b.w;
}
LL cal(int l,int r) {
    LL ans=0;
    top=0;
    for (int i=l;i<=r;i++) {
        if (!num[b[i]]) st[++top]=b[i];
        num[b[i]]++;
        ans=max(ans,(LL)num[b[i]]*a[b[i]].w);
    }
    while (top) num[st[top--]]=0;
    return ans;
}    
void build() {
    block=sqrt(n);tot=(n-1)/block+1;
    for (int i=1;i<=n;i++) {
        pos[i]=(i-1)/block+1;
        if (!L[pos[i]]) L[pos[i]]=i;
        R[pos[i]]=i;
    }
    for (int i=1;i<=n;i++) cnt[pos[i]][b[i]]++;
    for (int i=2;i<=tot;i++)
        for (int j=1;j<=n;j++) cnt[i][j]+=cnt[i-1][j];
}
int main() {
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++) scanf("%d",&a[i].w),a[i].id=i;
    sort(a+1,a+1+n,cmp);
    b[a[1].id]=1;
    for (int i=2;i<=n;i++) {
        if (a[i].w==a[i-1].w) b[a[i].id]=b[a[i-1].id];
        else b[a[i].id]=i;
    }
    build();
    for (int i=1;i<=tot;i++) {
        LL ans=0;
        memset(num,0,sizeof(num));
        for (int j=L[i];j<=n;j++) {
            num[b[j]]++;
            ans=max(ans,(LL)num[b[j]]*a[b[j]].w);
            if (j==R[pos[j]]) mx[i][pos[j]]=ans;
        }
    }
    memset(num,0,sizeof(num));
    for (int i=1;i<=m;i++) {
        int l,r;
        scanf("%d%d",&l,&r);
        ans=0;
        if (pos[l]==pos[r]) printf("%lld\n",cal(l,r));
        else {
            ans=mx[pos[l]+1][pos[r]-1];
            top=0;
            for (int i=l;i<=R[pos[l]];i++)
                if (!num[b[i]]) st[++top]=b[i],num[b[i]]=cnt[pos[r]-1][b[i]]-cnt[pos[l]][b[i]];
            for (int i=L[pos[r]];i<=r;i++)
                if (!num[b[i]]) st[++top]=b[i],num[b[i]]=cnt[pos[r]-1][b[i]]-cnt[pos[l]][b[i]];
            for (int i=l;i<=R[pos[l]];i++) num[b[i]]++;
            for (int i=L[pos[r]];i<=r;i++) num[b[i]]++;
            while (top) {
                ans=max(ans,(LL)a[st[top]].w*num[st[top]]);
                num[st[top--]]=0;
            }
            printf("%lld\n",ans);
        }
    }
    return 0;
}

  

以上是关于博途hmi历史趋势值怎么改的主要内容,如果未能解决你的问题,请参考以下文章

产业区块链成为一种趋势,SandBox能为链改企业带来啥

登上 Github 趋势榜,iMove 原理技术大揭秘!

Wincc flexable的局势视图的组态

Zabbix历史数据与趋势数据问题详解

浏览器历史和发展趋势浅析

zabbix history trends历史与趋势数据详解