thingML的学习——什么是thingML

今天开始建模的学习,thingML是建模的一种工具 ,也可以理解为一种建模语言,有自己的语法和语义。

ThingML 支持的多种平台和通信协议,如UART、I2C、MQTT、WebSocket、REST、ROS、Bluetooth、BLE和Zwave,通过插件机制, ThingML能够灵活地适应不同的通信需求,同时隐藏了部分通信协议的复杂性,提高了代码的可维护性和可重用性。

为什么要学习thingML?

ThingML最初用于嵌入式系统开发,但现在已经广泛应用于物联网、智能家居、医疗设备等领域。ThingML适用于分布式反应性系统,并且特别适合包含异构平台和通信通道的应用程序。与UML相比,ThingML可以被视为一种特定领域的建模语言,但它不是针对任何业务领域的,因此可用于各种应用程序。ThingML的目标是将MDE应用于软件生命周期的后期设计和实现阶段,以及支持维护和演化任务。该语言的用户群体包括广泛的软件开发者和架构师。

ThingML:一种面向目标平台的代码生成器设计与实现

 新版本的代码生成器是基于Java对象导向框架设计的,可以轻松地定制化以适应不同组织和项目的需求。该语言的关键结构包括事物和配置,其中事物代表软件组件,而配置描述它们之间的连接。事物可以定义属性、函数、消息、端口和状态机,并且可以通过端口发送和接收消息。最终,ThingML编译器将配置转换为目标语言的完全可操作的代码。

ThingML代码生成框架及其扩展点介绍

9041966651b240ab815ea5138950a201.png

该框架可以将ThingML模型转换成各种语言的完全可操作的代码。目前支持的语言包括C、C++、Java和JavaScript等。该框架由一组代码生成器组成,每个生成器负责编译特定子集的ThingML。这个模块化结构允许对一些扩展点进行自定义,而其他的则可以直接使用。在该框架中有10个不同的扩展点,分为两个组:用于生成“事物”的代码和用于生成配置(或应用程序)的代码。这些扩展点通过接口或抽象类的形式存在于代码生成框架中,并包含了一组方法来生成与给定元素相关的代码。在生成过程中,模型元素是只读的,但不同的扩展点可以通过共享上下文信息来进行协作。

ThingML编译器框架及其特点分析

ThingML框架中的几个重要组成部分,包括编译器、检查器和代码生成测试框架等。其中,

编译器是将ThingML模型转换成目标语言代码的核心模块;

检查器则提供了对输入模型进行语法检查和应用逻辑规则验证的功能;

而代码生成测试框架则是用于验证不同代码生成器的输出是否符合预期的一种工具。

这些组件都是基于Java实现的,并且具有可扩展性,可以方便地添加新的功能或支持新的平台和语言。此外,本章还提到了一些具体的例子,如Linux C和Arduino代码生成器之间的相似性和差异性,以及不同语言之间代码行数的分布情况。

通信协议与插件机制在物联网应用中的实现与优化

f31428723f9243f1a4802377fee4befa.png

ThingML代码生成框架的插件机制。通过插件机制,程序员可以解耦传输和消息格式,并提供更好的可重用性。

网络插件负责生成支持原始消息传输并管理网络范例逻辑的代码。此外,该章节还列出了不同协议的实验情况以及它们提出的要求。最后,该章节提到了一些与通信相关的复杂性可以通过隐藏在模型之外来解决,但需要将一部分复杂性暴露给ThingML代码以实现灵活的通信管理。

 

初学建模,如有不同见解请指正,望与君共勉!

 

 

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

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

相关文章

Spring Cloud Alibaba-07-RocketMQ消息驱动

Lison <dreamlison163.com>, v1.0.0, 2024.4.20 Spring Cloud Alibaba-07-RocketMQ消息驱动 文章目录 Spring Cloud Alibaba-07-RocketMQ消息驱动MQ简介MQ的应用场景常见的MQ产品RocketeMQ的架构及概念 RocketMQ入门RocketMQ环境搭建 SpringBoot 集成 RocketMQ MQ简介 …

来盘点我的校园生活(3)

来公布上期数学题答案:12 你算对了吗&#xff1f; 今天我们班真是炸开了锅。事情是这样的&#xff0c;我今天早晨上学&#xff0c;学校不让早到&#xff0c;但我一个不小心早到了&#xff0c;主任的规定是尽量不早到&#xff0c;早到不扣分&#xff0c;倒要站在那儿背书&…

Linux--软硬链接

目录 0.文件系统 1.软硬链接 1.1见一下软硬链接 1.2软硬链接的特征 1.3软硬链接是什么&#xff0c;有什么作用&#xff08;场景&#xff09; 0.文件系统 Linux--文件系统-CSDN博客 1.软硬链接 1.1见一下软硬链接 1.这是软链接 这个命令在Unix和Linux系统中用于创建一个符号…

基于 Prometheus 的超算弹性计算场景下主机监控最佳实践

作者&#xff1a;左知 超算场景的业务特点 主机监控&#xff0c;或许是监控/可观测领域最传统和普遍的需求。在超算训练&#xff0c;AI 大规模训练的业务场景下&#xff0c;主机监控又有哪些痛点和难点呢&#xff1f;根据我们针对多个大规模超算客户的需求整理&#xff0c;超…

Python案例题目,入门小白题

1.抓取链家前十页的数据 链家网址&#xff1a;长沙房产网_长沙房地产_长沙房产门户(长沙链家网) 1.1.计算均价和总价 import time ​ from selenium import webdriver from selenium.webdriver.common.by import By ​ driver webdriver.Chrome() driver.get("https://c…

linux系统内存持续飙高的排查方法

目录 前言&#xff1a; 1、查看系统内存的占用情况 2、找出占用内存高的进程 3、解决方法 4、补充&#xff1a;如果物理内存使用完了&#xff0c;会发生的情况 前言&#xff1a; 如果一台服务器内存使用率持续处于一个高峰值&#xff0c;服务器可能会出现响应慢问题。例如s…

使用@Autowired + Map 实现策略模式

使用Autowired Map 实现策略模式 创建接口 public interface UserService {String getName(); }创建多个类实现上面的接口 实现一 import com.boot.service.UserService; import org.springframework.stereotype.Service;Service("zhangsan") public class Zhangsan…

代码随想录算法训练营第十六天|LeetCode104 二叉树的最大深度、LeetCode111 二叉树的最小深度、LeetCode222完全二叉树的节点个数

题1&#xff1a; 指路&#xff1a;LeetCode104 二叉树的最大深度 思路与代码&#xff1a; 1.递归 求左右子树的最大深度后加1(根到子树也有1个深度单位)。代码如下&#xff1a; class Solution { public:int maxDepth(TreeNode* root) {int ans 0;if (root NULL) return…

当他们在说业务的时候,到底在说什么

业务就是通过提供产品和服务给客户&#xff0c;以获取某种价值&#xff0c;形成业务闭环&#xff0c;并能自负盈亏。 文章会以生动形象的比喻来介绍业务到底是什么。 什么是业务&#xff1f; 业务&#xff0c;就像一场精彩的舞台剧&#xff0c;每个角色都有自己的任务和目标…

electron学习记录

1.下载electron electron/electron-quick-start: Clone to try a simple Electron app (github.com) 下载实例模板 2.安装依赖 npm源改成中国镜像 npm config set registry https://registry.npmmirror.com 然后用cnpm i 来安装 npm换官方源 npm config set registry https:…

QT--TCP网络通讯工具编写记录

QT–TCP网络通讯工具编写记录 文章目录 QT--TCP网络通讯工具编写记录前言演示如下&#xff1a;一、服务端项目文件&#xff1a;【1.1】server_tcp.h 服务端声明文件【1.2】thread_1.h 线程处理声明文件【1.3】main.cpp 执行源文件【1.4】server_tcp.cpp 服务端逻辑实现源文件【…

cuda 内核启动

C 使用 __global__ 声明说明符定义内核&#xff0c;并使用新的 <<<...>>> 执行配置语法指定内核调用的 CUDA 线程数&#xff08;请参阅 C 语言扩展&#xff09;。 每个执行内核的线程都有一个唯一的线程 ID&#xff0c;可以通过内置变量在内核中访问。 示例…

【最全的excel转json!!!】使用Python脚本提取excel文本中的数据到json中

比如说&#xff1a;我有一个1.xlsx的文件需要转成对应的json格式。 1&#xff09; excel 文件的大概内容&#xff1a; 2&#xff09;保存的方式类似于以下这种情况&#xff1a; 用Python脚本来实现 import pandas as pd import json# 读取Excel文件 excel_path r"D:…

基础知识篇:大语言模型核心原理解析

1️⃣人工智能基础概念全景图 &#x1f4a1; &#x1f9e0;人工智能与机器学习 人工智能&#xff08;AI&#xff09;是计算机科学的一个分支&#xff0c;旨在模拟人类的智能来解决问题。而机器学习&#xff08;ML&#xff09;是AI的一个子集&#xff0c;它的魅力在于不需要显…

【MySQL精通之路】MySQL8.0升级过程升级了什么

目录 1.升级内容 1.1 mysql系统库 1.2.其他库 2.步骤 2.1 步骤1&#xff1a;数据字典库升级。 2.2 步骤2&#xff1a;服务器升级。 3.mysql_upgrade 3.1 执行正常升级&#xff08;根据需要执行步骤1和2&#xff09;&#xff1a; 3.2 必要时仅执行步骤1&#xff1a; 3…

【MySQL精通之路】InnoDB(6)-磁盘结构(6)-Undolog

1.介绍 Undolog是与单个读写事务相关联的Undolog记录的集合。 Undolog包含有关如何撤消事务对聚集索引记录最新更改的信息。如果另一个事务需要将查看一致性读的一部分原始数据&#xff0c;则会从Undolog记录中检索未修改的数据。 2.结构 Undolog记录存在于Undolog段中 而Un…

LLMPerf-为LLM提供可重现的性能指标

LLMPerf-为LLM推理提供可复现的性能指标 翻译自文章&#xff1a;Reproducible Performance Metrics for LLM inference 结合之前的LLMPerf测试大模型API性能的文章进行查看&#xff0c;效果更佳。 1. 摘要 我们见过许多关于LLM性能的声明&#xff1b;然而&#xff0c;这些声明往…

Android面试题之Kotlin泛型和reified关键字

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 //泛型 class MagicBox<T>(item:T){var available falseprivate var subject:T itemfun fetch() : T? {return subject.takeIf { avai…

Ubuntu彻底卸载Nginx

停止Nginx服务 sudo systemctl stop nginx卸载Nginx软件包 sudo apt purge nginx nginx-common nginx-core清除配置文件和依赖项 清除Nginx的配置文件 sudo rm -rf /etc/nginx清除Nginx安装的依赖项 sudo apt autoremove清除相关文件和目录 删除Nginx的日志文件 sudo rm…

配置旁挂二层组网直接转发示例(命令行)

业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff0c;不影响用户的业务使用。 组网需求 AC组网方式&#xff1a;旁挂二层组网。DHCP部署方式&#xff1a; AC作为DHCP服务器为AP分配IP地址。汇聚交换机SwitchB作…