麦芯(MachCore)应用开发教程2 --- 时序

黄国强 2024/01/22

        正如计算机的本质是状态机一样,设备也是一个状态机。笔者之前文章“什么是时序”用 switch/case 实现了状态机。在麦芯中,我们用Lambda实现了状态机。相对于switch/case,Lambda更优雅,更符合面向对象。先上代码,这是检测站时序代码。

void InspectDvc::CreateSeqRun()
{
    // 创建一个站位时序,名称是检测
    auto pSeq = _pStation->AddSeq("Inspect");
    // 状态1:等待站位上有待测的物料
    pSeq->AddInstruct(
        [=]() {
            // 站位上无待测物料,直接返回
            if (!_pStation->IsHavWaitingProcItem()) return;
            // 有待测物料,启动拍照时序
            _pSeqGrab->Start(); 
            // 跳到下一个状态
            pSeq->Next();       
        });
    // 状态2:等待拍照时序完成
    pSeq->AddInstruct(
        [=]() {
            // 拍照时序未就绪,直接返回
            if (!_pSeqGrab->IsIdle()) return;
            // 启动计算时序
            _pSeqCalc->Start();
            // 跳到下一个状态
            pSeq->Next();
        });
    // 状态3:等待计算时序完成
    pSeq->AddInstruct(
        [=]() {
            // 计算时序未就绪,直接返回
            if (!_pSeqCalc->IsIdle()) return;
            // 处理完成,将完成状态赋值到物料上
            _pStation->ProcessFini(true);
            // 跳到下一个状态,这是最后一句,所以状态将切换到最上面
            pSeq->Next();
        });
}

        上面这段代码至少看上去挺简单的。具体每行都有注释。麦芯系统内部有大量概念,如果先介绍这些概念再来编程,这可是要考验读者的耐心。所以这里先介绍一段代码,看看麦芯是如何开发一款真实的设备,以显示其功能强大和便利性。让读者有兴趣进一步了解麦芯。

        上图“st_inspect.Inspect”时序就是我们示例代码创建的时序。这里的“st_inspect”是站位名,“Inspect ”是时序名。

[参考]
什么是时序 
一文深入了解C++ lambda(C++17)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单元化(Set)架构设计详解:异地多活、突破扩展上限的优选方案

文章目录 一、单元化架构基础1、扩展性(Scalability)概述2、扩展性 - 横向扩展(Horizontal Scale)3、扩展性 - 纵向扩展(Vertical Scale)4、扩展性 - 扩展魔方5、一致性 - 数据库事务一致性(ACI…

【中文版ChatGPT4.0!国内可直接用】

中文版ChatGPT4.0!国内可直接用 文心一言微软Copilot迅捷AI写作 在国内使用ChatGPT 4.0可能需要支付每月20美元的费用,约合人民币145元。如果不愿意付费,也可以考虑使用其他免费的AI工具。 目前有许多公司在研发出色的AI大模型,这…

Python进阶-Anaconda使用总结

本文是 Anaconda 的使用总结,旨在帮助用户快速搭建 Python 环境、进行数据科学和机器学习工作。首先,介绍了在 Windows 系统上安装 Anaconda 的步骤,包括下载安装程序、配置环境变量以及验证安装。随后,详细列举了 Anaconda 的常用…

新版AndroidStudio dependencyResolutionManagement出错

在新版AndroidStudio中想像使用4.2版本或者4.3版本的AndroidStudio来构造项目?那下面这些坑我们就需要来避免了,否则会出各种各样的问题。 一.我们先来看看新旧两个版本的不同。 1.jdk版本的不同 新版默认是jdk17 旧版默认是jdk8 所以在新版AndroidSt…

processing集训day03

编程英语 load 加载 image 图像 hawthorn 山楂 true 真 false 假 if 如果 distance 距离 collision 碰 图片显示 显示图片步骤: 1、准备好图片 2、定义图片变量 3、载入图片至变量 4、进行图片显示 Processing 所支持的图片格式有很多,常见的有…

全栈没有那么难!15 分钟搞明白 Express.js

Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。 Express 框架使用标准 Node.js 语法,主要由以下 3 个核心部分…

Elasticsearch8使用统一的CA为HTTP层更新证书

官方文档参考: Update certificates with the same CA | Elasticsearch Guide [8.10] | Elastic 使用统一的CA为HTTP层更新证书,包括3部分:在ES集群内某个节点上生成证书;将生成的证书拷贝给集群内其他节点;更新kiban…

大模型相关学习资料整理

1. 核心2框架 1. semantic-kernel【微软】 https://learn.microsoft.com/en-us/semantic-kernel/overview/ 2. LangChain https://www.langchain.asia/ https://python.langchain.com/docs/get_started/introduction 2. 技术点 1. Function Call https://platform.opena…

Dell戴尔XPS 8930笔记本电脑原装Win10系统 恢复出厂预装OEM系统

链接:https://pan.baidu.com/s/1eaTQeX-LnPJwWt3fBJD8lg?pwdajy2 提取码:ajy2 原厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、MyDell等预装程序 文件格式:esd/wim/swm 安装方式&am…

11- OpenCV:自定义线性滤波(卷积,卷积边缘)

目录 一、卷积 1、卷积概念 2、卷积如何工作 3、常见算子(卷积核 Kenel) 4、自定义卷积模糊 5、代码演示 二、卷积边缘 1、卷积边缘问题 2、处理边缘 3、相关的API说明 4、代码演示 一、卷积 1、卷积概念 (1)在OpenC…

Recommender Systems with Generative Retrieval

TLDR: 本文提出一种新的生成式检索推荐系统范式TIGER。当前基于大规模检索模型的现代推荐系统,一般由两个阶段的流程实现:训练双编码器模型得到在同一空间中query和候选item的embedding,然后通过近似最近邻搜索来检索出给定query的embedding的…

DBA技术栈MongoDB: 数据增改删除

该博文主要介绍mongoDB对文档数据的增加、更新、删除操作。 1.插入数据 以下案例演示了插入单个文档、多个文档、指定_id、指定多个索引以及插入大量文档的情况。在实际使用中,根据需求选择适合的插入方式。 案例1:插入单个文档 db.visitor.insert({…

zxz-uni-data-select插件,表单回显时,无法显示数据,原因是后端返回的数据是字符串,要把这个字符串转成number类型,就能显示了

zxz-uni-data-select插件,uniapp项目,vue3 表单回显时,这个下拉框不能显示数据 解决方法 用Number()方法把字符串转成number string转成number 回显就能显示了

CAM软件行业调研:广泛应用取得越来越大的市场份额

经过多年的推广,CAM技术已经广泛地应用在机械、电子、航天、化工、建筑等行业。近年来,我国CAM技术的开发和应用取得了长足的发展,除对许多国外软件进行了汉化和二次开发以外,还诞生了不少具有自主版权的CAM系统,由于这…

.NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接

Flurl.Http-3.2.4 升级到 4.0.0 版本后,https请求异常:Call failed. The SSL connection could not be established. 如下图: Flurl.Http-3.2.4版本绕过https的代码,对于 Flurl.Http-4.0.0 版本来说方法不再适用,3.2.…

js实现页面全屏展示

最近做一个网页项目,用户要求可以全屏展示,进入系统后隐藏地址栏,于是乎,经过调研就选择了全屏API,即便如此还是遇到了一些问题,总结一下,写下此篇文章。 全屏模式 获取Element节点&#xff0c…

红日靶场2打点记录

因为之前成功用冰蝎免杀360,把权限反弹到了MSF上,然后MSF把权限反弹到CS上 所以这次咱们走捷径直接通过反序列化漏洞连接(就是关掉360)因为权限弹来弹去感觉好麻烦 提示 大家如果想要免杀360千万别学我,我是之前免杀3…

【大数据分析与挖掘技术】Mahout推荐算法

目录 一、推荐的定义与评估 (一)推荐的定义 (二)推荐的评估 二、Mahout中的常见推荐算法 (一)基于用户的推荐算法 (二)基于物品的推荐算法 (三)基于S…

Linux配置主机名-使用主机名访问服务器

主要需要对Hosts文件进行操作, Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”, 先将自己的主机名设置成有意义,别人好记的样子&a…

CTF-PWN-堆-【chunk extend/overlapping-1】

文章目录 chunk extend/overlappingfastbin与topchunk相邻free时候不会合并unsortedbinchunk中与topchunk相邻的被free时会合并extend向后overlapping先修改header,再free,再malloc先free,再修改header,再malloc extend向前overla…