Vector - CAPL - 数据库和CAPL_02

 DBLookup 动态读取数据库中的信息

//Transmitter 属性以及数据库属性只能通过 DBLookup 动态读取。
//返回数据库中存储的 DLC
on message *
{int myAttributeValue;myAttributeValue = DBLookup(this).MyAttribute;write(this.Transmitter); // compiler errorwrite(DBLookup(this).Transmitter); // OK
}//返回特定消息的当前值
on message EngineData
{int myDLC;myDLC = DBLookup(this).DLC;
}myDLC = EngineData.DLC;

        它们可能会有所不同,因为 DLC 可以更改,例如 在 CAPL 程序中。

        在数据库中动态搜索消息可能需要一些时间,尤其是对于大型数据库。 因此,如果消息类型已知,最好静态访问属性。

// 检查特定节点的所有消息,表明 DLC 正确。
// 在测量结束变量的表中总结不正确 DLC 的 DLC 信息
{// system under testchar gNodeUnderTest[30] = "Gateway";// max DLC, min DLC, counter, channel; key is always the idint gFrameMaxDLC[long];int gFrameMinDLC[long];int gFrameCounter[long];byte gFrameChannel[long];
}
on message *
{// 检查来自一个节点的所有帧是否有正确的 dlc 并对其进行计数// 框架是在数据库中定义的吗?if (DBLookup(this)){// 被测节点的帧是否定义为 Tx-Frame?// 注意:比较区分大小写if (strncmp(DBLookup(this).Transmitter, gNodeUnderTest, 30) == 0){// 检查DLC是否正确; 如果没有,请记住最小值// 或接收帧的最大 DLCif (this.dlc < DBLookup(this).DLC){gFrameCounter[this.id]++;gFrameChannel[this.id] = this.can;if (!gFrameMinDLC.containsKey(this.id) || this.dlc < gFrameMinDLC[this.id])gFrameMinDLC[this.id] = this.dlc;}else if (this.dlc > DBLookup(this).DLC){gFrameCounter[this.id]++;gFrameChannel[this.id] = this.can;// 注意:第一次访问映射元素返回 0,它总是较小的if (this.dlc > gFrameMaxDLC[this.id]) gFrameMaxDLC[this.id] = this.dlc;}}   // else: another node, not interesting}     // else: event is not defined in the databaseoutput(this);   // 仅当节点位于测量设置中时使用
}
on stopMeasurement
{message * m;for (long currentId : gFrameCounter){m.id = currentId;m.can = gFrameChannel[currentId];write ("Frame %s[%d]:", DBLookup(m).Name, currentId);write ("    Incorrect count: %d", gFrameCounter[currentId]);write ("    DLC as in DB: %d", DBLookup(m).DLC);if (gFrameMinDLC.containsKey(currentId))write ("Actual min DLC: %d", gFrameMinDLC[currentId]);if (gFrameMaxDLC.containsKey(currentId))write ("Actual max DLC: %d", gFrameMaxDLC[currentId]);}
}

Access to Node

        对于某些应用程序,了解特定节点发送或接收哪些消息非常有用。 可以通过专门的预定义字段访问特定节点的所有消息的 ID,并特别迭代这些字段的内容。

以下字段可用:

        Nodename.Tx:包含节点发送的所有消息
        Nodename.Rx:包含节点接收到的所有消息
        Nodename.ALL:包含节点发送和接收的所有消息
        如果多个数据库中包含同名节点,则可以使用数据库名称对其进行限定:        DBName::Nodename.Tx。

// 检查节点的所有消息,表明 DLC 正确。
// 在测量结束时在表中汇总消息的 DLC 信息。
// 仅在测量之前或之后使用数据库查找
variables
{// max DLC, min DLC, counter, channel; key is always the idint gFrameMaxDLC[long];int gFrameMinDLC[long];int gFrameDefaultDLC[long];dword gFrameCounter[long];dword gFrameIncorrectCounter[long];
}
on preStart
{dword i;message * m;m.can = 2;// 使用 DB 中定义的默认 DLC 初始化 DLC 映射for (i = 0; i < elcount(PowerTrain::Gateway.TX); ++i){m.id = PowerTrain::Gateway.TX[i];gFrameMaxDLC[m.id] = gFrameMinDLC[m.id] = gFrameDefaultDLC[m.id]= DBLookup(m).DLC;}
}
on message *
{// is the frame one of those transmitted by the node?if (gFrameDefaultDLC.containsKey(this.id)){gFrameCounter[this.id]++;// check if the DLC is correct; if not, remember the minimum// or maximum DLC of the received framesif (this.dlc != gFrameDefaultDLC[this.id])gFrameIncorrectCounter[this.id]++;if (this.dlc < gFrameMinDLC[this.id])gFrameMinDLC[this.id] = this.dlc;else if (this.dlc > gFrameMaxDLC[this.id])gFrameMaxDLC[this.id] = this.dlc;} // else: another node, not interestingoutput(this);   // 仅当节点位于测量设置中时使用
}
on stopMeasurement
{message * m;m.can = 2;for (long currentId : gFrameDefaultDLC){m.id = currentId;write ("Frame %s[%d]:", DBLookup(m).Name, currentId);write ("    Received count: %d", gFrameCounter[currentId]);write ("    Incorrect count: %d", gFrameIncorrectCounter[currentId]);write ("    DLC as in DB: %d", DBLookup(m).DLC);write ("    Actual min DLC: %d", gFrameMinDLC[currentId]);write ("    Actual max DLC: %d", gFrameMaxDLC[currentId]);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14032.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

押注数字人,百度、科大讯飞“短兵相接”

配图来自Canva可画 近两年&#xff0c;小雀斑、柳夜熙、AYAYI等大量网红数字人的相继出现&#xff0c;以及虚拟数字技术在《指环王》和《阿凡达》以及《刺杀小说家》等电影中的广泛应用&#xff0c;还有北京冬奥会期间数字人在手语解说、节目直播等众多场合亮相&#xff0c;使…

基于Spring Boot的高校实验室信息管理系统设计与实现(Java+spring boot+MySQL+VUE)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的高校实验室信息管理系统设计与实现&#xff08;Javaspring bootMySQLVUE&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 后端&#xff1a;Java springboot…

GEE:基于MODIS土地覆盖类型“混交林”的净初级生产力(NPP)的区域统计

作者:CSDN @ _养乐多_ 本文将介绍如何使用Google Earth Engine(GEE)平台提取特定地区的净初级生产力(NPP)的统计信息,并在地图上可视化。通过加载MODIS数据集,并使用GEE提供的函数和方法,能够高效地计算特定地区的净初级生产力的平均值。 文章目录 一、代码详解二、代…

备忘录方法--Fibonacci数列 IV

描述 众所周知&#xff0c;Fibonacci数列是一个著名数列。它的定义是&#xff1a; 本题要求采用第四种方法&#xff1a;备忘录方法&#xff0c;即记忆化搜索。 具体做法是&#xff1a;用数组把曾经求出来的 Fibonacci 数列保存下来&#xff0c;以后要的时候直接取出来。 输入…

【RPC】—Protobuf编码原理

Protobuf编码原理 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ Spring专栏&#x1f449;https://blog.csdn.net/weixin_53580595/category_12279588.html SpringMVC专…

ASL-QPSO|改进量子粒子群自适应算法及其实现(Matlab)

作者在前面的文章中介绍了量子粒子群算法&#xff0c;量子粒子群算法不但继承粒子群算法的优点&#xff0c;还有它自身计算模型更加简洁&#xff0c;控制参数更少等更加突出的优势&#xff0c;但依然存在着一定的局限性。 例如也会存在着早熟收敛的问题&#xff0c;随着迭代次数…

JAVA每日一练(1)

【程序1】 题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子对数为多少&#xff1f; import java.util.Scanner;/*…

封装一个带el-form的,带el-table的,带分页的,带搜索查询的dialog组件,很使用的二次封装组件。

#封装dialog小案例 提示&#xff1a;这是我工作中封装的代码&#xff0c;很使用&#xff0c;需要的可以拿去&#xff0c; 在我们的代码中往往会出现点击按钮出现弹窗进行操作&#xff0c;那么我们就需要对dialog进行一个二次封装。 下边是大概的一个样式。 ##对组件进行二次…

【雕爷学编程】Arduino动手做(156)---OTTO两足舵机机器人

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

虹科教程 | Linux网络命名空间与虹科PROFINET协议栈的GOAL中间件结合使用

前言 PROFINET是由PI推出的开放式工业以太网标准&#xff0c;它使用TCP/IP等IT标准&#xff0c;并由IEC 61158和IEC 61784 标准化&#xff0c;具有实时功能&#xff0c;并能够无缝集成到现场总线系统中。凭借其技术的开放性、灵活性和性能优势&#xff0c;PROFINET可应用于过程…

网络数据包的监听与分析——IP数据报文分析

1. 抓包工具下载 x下面是一个IP数据报的抓包软件——IPtool的蓝奏云下载链接 https://wwix.lanzoue.com/iaGpy11klpnc 2. iptool使用 下载解压之后&#xff0c;右击以管理员身份运行&#xff0c;打开该exe文件即可 然后点击绿色运行就开始捕包了 随便点一个包进去进行分析就可…

指针和数组笔试题解析

目录 数组笔试题 一维数组 字符数组 题 一 题 二 题 三 题 四 题 五 题 六 二维数组 指针笔试题 笔试题一 笔试题二 笔试题三 笔试题四 笔试题五 笔试题六 笔试题七 本篇博文&#xff0c;将从指针和数组来为大家分析一些笔试题&#xff0c;设计内…