0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍NoTime模式下的高精度线程

伺服与运动控制 来源:伺服与运动控制 2023-04-06 10:38 次阅读

NoTime是基于实时系统构建的.NET控制台开发框架,用户可以使用VisualStudio方便快捷地开发基于.NET语言的实时程序模块,实现最小125微秒的线程调度周期。这样一来,工程师的工作重心就能转移到设备运控及逻辑程序本身,无需关心实时性的实现了。

我们先打开软件自带的案例,案例的功能主要是实现NoTime和Windows之间线程sleep的精度对比,流程是启动线程后,函数中是一个while循环,循环里流程是NoTime中先sleep 125μs,因为Windows最小的单位是1ms,所以Windows这边是sleep 1ms,然后获取微秒级的时钟值,再减去上次获取到的时钟值,并且将差值做最大值计算,将最大值记录下来,后面这一段是手动清除最大值。

下面我们启动案例,看一下结果:可以看到NoTime这边,sleep 125μs的值基本在125~141之间。但是Windows这边的sleep 1ms的精度基本上会随着Windows的调度而随之变大变小,特别是我们打开一些占用CPU比较高的程序的时候。

介绍了NoTime的高精度线程能够实现最小125微秒的线程调度周期。那么如何在Windows与NoTime中部署机器控制程序,才能够在最小改动的情况下,轻松实现性能的提升呢?

以下是我们建议放在NoTime中执行的程序:

1.从业务层来看,NoTime主要适合实现有实时性要求的业务逻辑。对于具有周期重复性、需要快速启停的动作程序,建议放到NoTime里,保障快速稳定运行,例如短距离高速往返运动。

2.安全控制业务以及异常处理逻辑建议放到NoTime里,这样就能保证即便Windows蓝屏后,程序仍然可以正常运行,避免出现设备失控等情况。

3.全局报警信号监控是适合放在NoTime里的,因为NoTime中刷新频率更高,一能更快地捕捉IO触发,二是比较稳定不会受到电脑环境干扰。

4.如果在一段运动中需要IO触发后马上就切换运动指令,而且从IO触发到执行运动指令的时间要求较短,可以将其单独放在NoTime中,避免因Windows波动而导致运动指令切换延后,引起轴实际已经过冲。

5.若有与外设实时通信的需求,可以基于我们的实时通信库实现,支持在NoTime下基于串口及网口与外设通信。

6.对通讯及对运动速度 需求不高的程序可以仍然放在Windows端不用改动,这样就可以在保留现有完整功能的同时,完成迁移工作,减少单次工作量。

因NoTime提供的是一个开发平台,具体业务划分是不受限制的,可以将很小的一个功能函数在NoTime实现,也可以将一个较大的业务模块在NoTime实现。所以对于现有软件要将部分功能迁移到NoTime下来说,软件本身改动不大,Windows下的原有功能也可以保留。

那么如何快速的部署NoTime,让原有程序以最小的改动实现性能提升,以及如何使用NoTime的基本程序结构呢?

大家好,我是ProU软件工程师傅超,我们提供了一个NoTime中的基本程序结构,大致分为运动流程,流程管理,通讯及数据四个部分:

b65db378-d3d4-11ed-bfe3-dac502259ad0.jpg

1. 运动流程

首先看到的是我们NoTime程序的入口,在这我们先打开了和ProR的通讯通道,这个是必须要有的,而后是建立共享内存,这个内容我们后面会仔细讲解,Maintask也就是我们主流程,我们转到定义来仔细看一下。

在这我们初始化了三个数据结构体,调用了子流程1,子流程2的功能函数,目前这两个函数里的内容是一样的,可以看到只是简单的将一些数据置为0,下面的子流程3我们用了流程管理的结构,这个“add”就是添加了子流程3里的函数,子流程的函数我们就写具体的运动流程代码或者某功能的实现代码。

2.流程管理

我们转到定义来看下流程管理的结构,这个管理结构在NoTime和Windows下都是通用的,我们把需要执行的子流程的函数做了一个统一管理,可以先看一下注册的动作,我们做了一个简单的封装,可以更加便捷的去添加子流程里的动作。原理就是我们把要执行的函数都先添加到一张列表里,流程启动和停止通过变量去控制整张列表里函数的运行,值得一提的是,列表里函数在运行完后都会有一个反馈状态,有反馈状态我们就可以更好的控制流程的运转,目前是有错误,完成,执行中三种,这个可以后面再自定义补充。

3.通讯

接下来我们看下通讯,在这我们展示的是NoTime和Windows的交互方式,相关功能函数都是放在一个独立的文件里,便于更加快捷的定位和操作。本次案例里采用的是共享内存,回顾一下NoTime程序的入口函数,在这是创建了共享内存,然后在windows下打开共享内存,从而实现NoTime与Windows的交互,若有与外设基于串口或网口通讯需求的也可以放在这一块。

4.数据

我们分成了PublicData和GlobalData两种数据结构体,PublicData里面建立的数据是针对于主流程的以及基本需要的,比如退出指令和循环次数,而GlobalData里面则是针对于子流程的,现在这里面放的就是子流程的一些状态。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10824

    浏览量

    211087
  • .NET技术
    +关注

    关注

    0

    文章

    3

    浏览量

    5795
  • 机器控制
    +关注

    关注

    0

    文章

    11

    浏览量

    4290

原文标题:NoTime高精度线程和快速部署

文章出处:【微信号:伺服与运动控制,微信公众号:伺服与运动控制】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    高精度相位差计的设计

    高精度相位差计的设计本文介绍高精度相位差计由单片机控制模块、放大整形模块部分、数码显示模块、分频模块、简单的数字逻辑控制门等组成。采用了锁相倍频技术,实现了相位差测量高精度性达0.1
    发表于 12-14 17:04

    关于NI采集卡的高速率与高精度模式

    ,但为什么可以提高抗干扰能力呢?在我的实际工程中也确实如此,在高噪声环境,“高精度模式的数据毛刺要明显小很多,这是为什么呢?
    发表于 01-19 14:38

    高精度GPS模块介绍资料

    高精度GPS模块介绍资料HT-AD56适用于工业无人机、自动驾驶、测量测绘等高精度需求行业产品。HT-AD56高精度GNSS模组.pdf (623.48 KB )
    发表于 07-01 04:35

    介绍一种可以高精度的测量电阻的方法

    本文介绍了一种可以高精度的测量电阻的方法。
    发表于 05-10 06:38

    高精度AD采集芯片ADS7809的中文介绍

    高精度AD采集芯片ADS7809的中文介绍 ADS7809是Burr-Brown公司推出的高精度AD采集芯片。它采用5V
    发表于 11-23 10:32 9508次阅读
    <b class='flag-5'>高精度</b>AD采集芯片ADS7809的中文<b class='flag-5'>介绍</b>

    TI 高精度实验室的课程系列介绍

    1.1 TI 高精度实验室 - 介绍
    的头像 发表于 04-29 07:59 3604次阅读
    TI <b class='flag-5'>高精度</b>实验室的课程系列<b class='flag-5'>介绍</b>

    复杂环境的自动驾驶高精度定位技术

    今天为大家分享,自动驾驶在复杂环境高精度定位技术。
    的头像 发表于 06-28 13:55 5187次阅读

    YKCAT2如何搭建NoTime基本程序框架

    大家好,通过前面的几次实验,相信大家已经看到了YKCAT2在NoTime模式,相较于运动控制卡方案带来的设备效率和稳定提升。
    的头像 发表于 11-01 14:29 451次阅读

    泰克高精度电流探头的按键介绍

    泰克高精度电流探头是一款常用的测试仪器,可以广泛应用于各种电路的电流测试中。有些用户可能对其按键使用不太熟悉,下面就来介绍泰克高精度电流探头的按键使用方法。 1. 开/关机按键 泰
    的头像 发表于 03-30 14:45 948次阅读
    泰克<b class='flag-5'>高精度</b>电流探头的按键<b class='flag-5'>介绍</b>

    高精度电压源如何设计出来的

    高精度电压源是一种用于提供高精度电压的电子设备,通常用于测量和控制系统。高精度电压源的设计是一个复杂的过程,需要考虑多个因素,包括电路设计、元件选型、测量误差、稳定性等。下面将从电路设计和元件选型两个方面,详细
    的头像 发表于 05-29 17:30 736次阅读
    <b class='flag-5'>高精度</b>电压源如何设计出来的

    高精度恒流源电路

    高精度恒流源电路 高精度恒流源电路是一种常见的电路设计,它通常用于控制电流的大小和稳定性,例如在电化学、物理学、电子工程和其他领域的实验中。在本文中,我们将详细介绍高精度恒流源电路的构
    的头像 发表于 08-27 16:26 2638次阅读

    高精度定时器中single-shot计数模式不工作

    高精度定时器中single-shot计数模式不工作
    的头像 发表于 10-25 18:08 511次阅读
    <b class='flag-5'>高精度</b>定时器中single-shot计数<b class='flag-5'>模式</b>不工作

    磁通门高精度电流传感器介绍及应用

    磁通门高精度电流传感器介绍及应用
    发表于 08-11 10:18 57次下载

    高精度电压源是什么意思

    高精度电压源是一种能够产生稳定、准确和可调节的电压输出的设备。在各种电子应用中,高精度电压源被广泛应用于模拟信号处理、测试和测量领域。本文将介绍高精度电压源的基本原理、特点和应用场景。
    的头像 发表于 11-17 17:02 667次阅读
    <b class='flag-5'>高精度</b>电压源是什么意思

    高精度电压源的作用、特点及应用介绍

    高精度电压源是提供稳定、准确、可控电压输出的关键电子设备。它在科研实验室、工业生产、通信系统和医疗设备等各个领域都发挥着重要作用。 1、高精度电压源的作用 提供稳定的电压输出:提供稳定的电压输出
    的头像 发表于 09-03 18:11 586次阅读