RCS(Real-time control systems) 库_后向rcs是什么csdn-程序员宅基地

技术标签: Ubuntu  c++  

目录


一、前言

现代控制系统软件变得越来越复杂,这不仅体现在其控制算法上,也体现在其结构和规模上,另外随着应用需求的不断变化,要求数控系统软件也要随着更新,这都对系统的组织结构提出了新的要求。另一方面数控系统的实时性要求也越来越高,要求响应速度越来也快,如何实现系统各个模块间的通信成为关键因素。


二、RCS库简介

RCS (Real-time control systems) 库是由美国国家标准与技术研究院(NIST)研究开发的软件库, 可以用来辅助构建多模块的控制系统软件。它以 C++面向对象的方法, 将程序抽象化, 以类封装代码, 易于理解和使用。更重要的是, 它代码开放, 可以自由使用、裁减和拓展, 从而可以跟应用程序很好的融合起来。顶层的模块负责接收人员操作指令, 经过分析、分解, 把它转化为具有内部形式的控制任务信息, 传递给中间层中的相关的模块。中间层模块会将任务细分成更小的任务, 分配给下层模块执行, 并且协调它们的动作。下层模块通过与硬件交互, 执行任务。下层的模块还要不断更新自身的状态,并且往上反馈, 最终由上层模块以某种方式反映出来。
RCS 库自动实现、维护多个模块间的命令和状态信息的传递。RCS 库把代码封装到通道类中,程序员无需关心其内部实现细节就能简便的实现模块间的通信与同步。通常,程序员需要为相关联的两个控制模块建立两个通道,分别用于传输指令消息和状态消息。RCS 库称之为命令通道和状态
通道


三、两种通信方式

1.NML通信

对于两个对通讯速率要求不高的模块,可以利用 RCS 库提供的 NML (Neutral Message
Language,中性消息语言)通信机制来实现。

内核状态下不能使用NML通信

  1.  控制命令信息 cmd(命令通道)
  2. 所有状态信息 status(状态通道)
  3. 错误信息 error(错误通道)
  4. 三个 NML通道:命令通道、状态通道和错误通道。

2.共享内存通信

RCS 库是借助内存映射文件和信号量机制来实现控制模块间的通信与同步的。

1)内存映射文件

它为相关联的模块开辟一个或者多个内存映射文件,通过让一个模块往内存映射文件写数据,另一
个模块从内存映射文件读数据,从而实现了模块间通讯。

2)信号量机制

对于多个模块访问内存映射文件而引起的同步问题,RCS 库利用信号量给予解决。

  1. 一个模块在访问内存映射文件之前,需要获取信号量;
  2. 只有成功获取了信号量才能访问内存映射文件,否则就要等待;
  3. 访问结束后就释放信号量,让其它模块可以访问内存映射文件。

3)通信原理

内存映射文件提供一种完全不同的读写文件的方法。它是将文件内容映射到内存中的某个区域,读写文件直接操作内存即可。

对于标准的文件系统,文件是以数据流形式被读取和写入的,读写文件时,先将文件指针指向要读写的开始位置,然后调用 ReadFile 或 WriteFile 进行读写文件

当我们将文件映射到内存后,向此块内存写入数据时,系统负责处理数据的缓存、缓冲、写入和调入以及内存的分配和释放。

数据共享方法是通过让两个或多个进程映射同一文件映射对象的视图来实现的, 这意味着它们将共享磁盘上同一文件或者物理存储器的同一页面。因此, 当一个进程将数据写入一个共享文件映射对象的视图时, 其它进程可以立即看到它们视图中的数据变更情况。

4)使用情况

用于对速度要求比较高的场合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_56451176/article/details/126097455

智能推荐

苹果快捷键怎么调出来_原来还有这么好用的CAD快捷键,文末附赠快捷键鼠标垫!留言走起...-程序员宅基地

文章浏览阅读141次。▼相信大家都看过一些大神做CAD,那个图纸真是做的又快又好看!当然大神们其实也就基础好一点,把快捷键记得过目不忘,所以接下来小编就教大家一个非常Skr的方法,保证你对这些快捷键过目不忘,文末更有免费鼠标垫领取,千万别错过哦!这个方法就是建立我们的思维导图了,文字看了可能会忘记,但是通过导图的方式,就会变成思维图形,更加符合我们大脑的思考习惯,就可以牢牢记住这些快捷键啦:▼例如我们看到下面的就是绘图..._苹果cad快捷键

MATLAB的GUI 程序设计_制作一个曲面光照效果的演示界面,如图所示,三个弹出式菜单分别用于选择曲面形式、-程序员宅基地

文章浏览阅读7.2k次,点赞7次,收藏60次。第七章 MATLAB的GUI 程序设计Chapter 8: Design of MATLAB of GUI programGUI(Graphical User Interfaces):由各种图形对象组成的用户界面,在这种用户界面下,用户的命令和对程序的控制是通过“选择”各种图形对象来实现的。目前90%以上的应用程序和软件都是在GUI下运行的。MATLAB有两种GUI用户界面控件的创建方式,基于命令行的方式用程序来制作和基于GUI的方式制作。这里主要介绍基于GUI的方式。MATLAB 的._制作一个曲面光照效果的演示界面,如图所示,三个弹出式菜单分别用于选择曲面形式、

MT7628开发环境搭建_undefined reference to `llseek-程序员宅基地

文章浏览阅读2.1k次。参考openwrt 快速入门1.环境搭建1.1Ubuntu dockerhttps://www.runoob.com/docker/ubuntu-docker-install.html​1.1.1使用官方安装脚本自动安装安装命令如下:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun​ps: 我已经放弃用deepin编译旧版openwrt ,修复了十几个bug还是有bug,无敌下载14.04版本docke_undefined reference to `llseek

13 Kubectl命令概览_kube_ps1关闭-程序员宅基地

文章浏览阅读81次。kubectx:用于切换kubernetes context kube-ps1:为命令行终端增加$PROMPT字段 kube-shell:交互式带命令提示的kubectl终端kube-shell开源项目kube-shell可以为kubectl提供自动的命令提示和补全,使用起来特别方便,推荐给大家。Kube-shell有以下特性:命令提示,给出命令的使用说明 自动补全,列出可选命令并可以通过tab键自动补全,支持模糊搜索 高亮 使用tab键可以列出可选的对象 vim模式M..._kube_ps1关闭

ensp各种报错积累(以及解决方法)_ensp配置路由地址时错误-程序员宅基地

文章浏览阅读1k次,点赞11次,收藏9次。此报错的意思是请续订默认配置,就是让你去一级一级的删除,首先删除你设置的允许vlan通过的命令,然后去取消掉更改的端口类型命令(就是在配置命令前面加一个undo),再去更改端口类型就成功了。此报错的意思是已经加入了接口,不能在修改模式,所以需要先去把端口全部删除,在修改模式即可成功。他的意思就是说这个IP地址已经配置了,不需要在配置了。2.修改链路聚合模式的时候。3.更改IP地址的时候。_ensp配置路由地址时错误

经典JS-序列号_ucfp:74a28a8b-b3fb-4602-ca5f-0ebdf880c1ff-16927960-程序员宅基地

文章浏览阅读10w+次。3D0E1D4E75686FA0FF1C6F6F626F6F6F6F6F6F6F8F381B2FFF2D6FEF396F6F6A1B6E6F6D762B39E3021B282C725C726F4F6F6F6F5F5F5C330E1F06251C335B5E0D580E5E095D575B0E56560B5F0B41051C6F9F4FCC60636EBE7FBE7A3E637EB613394327_ucfp:74a28a8b-b3fb-4602-ca5f-0ebdf880c1ff-1692796091560

随便推点

Android 通过蓝牙采集音频_android 蓝牙麦克风采集mic音频 无声-程序员宅基地

文章浏览阅读8.8k次。通过蓝牙的麦克风进行录音MainActivity.javapackage com.example.bluetothrecord;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.In_android 蓝牙麦克风采集mic音频 无声

Accessing static Data and Functions in Legacy C_setyearanddayofyear-程序员宅基地

文章浏览阅读1.1k次。http://www.renaissancesoftware.net/blog/archives/430http://www.renaissancesoftware.net/blog/archives/450It’s a new year; last year was a leap year; so the quadrennial reports of leap y_setyearanddayofyear

vue把字符串分割成等长的若干字符串,根据特定字符分割字符串_vue 分割字符串-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏20次。把字符串分割成等长的若干字符串,根据特定字符分割字符串_vue 分割字符串

朴素贝叶斯分类器的例子_朴素贝叶斯分类器 例子-程序员宅基地

文章浏览阅读1.1k次。一、病人分类的例子让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难。某个医院早上收了六个门诊病人,如下表。  症状  职业   疾病  打喷嚏 护士   感冒   打喷嚏 农夫   过敏   头痛  建筑工人 脑震荡   头痛  建筑工人 感冒   打喷嚏 教师   感冒   头痛  教师   脑震荡现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?根据贝叶斯..._朴素贝叶斯分类器 例子

当mysql数据库转换为sqlserver数据库时常见报错_mysql 数据导出在sqlserver不能用-程序员宅基地

文章浏览阅读527次。↵下面是我在把mysql数据库转换为sqlserver数据库时候遇到过的一些错,踩过的坑,把它总结下来防止以后再出错。报错 1:com.microsoft.sqlserver.jdbc.SQLServerException: 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'user_student'中的标识列指定显式值。出错原因:当mysql数据库转换为sqlserver数据库时,如果第一个id设置为自动递增,那么String sql = "..._mysql 数据导出在sqlserver不能用

LeetCode 刷题常用数据结构(Java 中的实现)_javalist集合map组合刷题 leetcode-程序员宅基地

文章浏览阅读1.9k次,点赞4次,收藏27次。记录常用数据结构(栈、队列、数组、列表、字符串、集合等),在 Java 中如何使用它的实现类。_javalist集合map组合刷题 leetcode